- $meta{$page}.='<link href="'.encode_entities($value).
- "\" rel=\"openid.delegate\" />\n";
- }
- elsif ($key eq 'license') {
- $meta{$page}.="<link rel=\"license\" href=\"#page_license\" />\n";
- $license{$page}=$value;
- }
- elsif ($key eq 'copyright') {
- $meta{$page}.="<link rel=\"copyright\" href=\"#page_copyright\" />\n";
- $copyright{$page}=$value;
- }
- elsif ($key eq 'forward') {
- my $delay=0;
- my $dest_url;
- my $text;
- if (exists $params{delay}) {
- $delay=$params{delay};
+ push @{$meta{$page}}, '<link href="'.encode_entities($value).
+ '" rel="openid.delegate" />';
+ }
+ elsif ($key eq 'redir') {
+ return "" if $page ne $destpage;
+ my $safe=0;
+ if ($value !~ /^\w+:\/\//) {
+ my ($redir_page, $redir_anchor) = split /\#/, $value;
+
+ add_depends($page, $redir_page);
+ my $link=bestlink($page, $redir_page);
+ if (! length $link) {
+ return "[[meta ".gettext("redir page not found")."]]";
+ }
+
+ $value=urlto($link, $page);
+ $value.='#'.$redir_anchor if defined $redir_anchor;
+ $safe=1;
+
+ # redir cycle detection
+ $pagestate{$page}{meta}{redir}=$link;
+ my $at=$page;
+ my %seen;
+ while (exists $pagestate{$at}{meta}{redir}) {
+ if ($seen{$at}) {
+ return "[[meta ".gettext("redir cycle is not allowed")."]]";
+ }
+ $seen{$at}=1;
+ $at=$pagestate{$at}{meta}{redir};
+ }