X-Git-Url: https://scripts.mit.edu/gitweb/www/ikiwiki.git/blobdiff_plain/0afcec734622811b8910d3df5d102df58d429a51..22edaf77c2a4318ebd8ed0881dd6a62cfc2ca2b2:/IkiWiki/Plugin/getsource.pm diff --git a/IkiWiki/Plugin/getsource.pm b/IkiWiki/Plugin/getsource.pm index 6a208f1e7..91c4cc1c9 100644 --- a/IkiWiki/Plugin/getsource.pm +++ b/IkiWiki/Plugin/getsource.pm @@ -42,10 +42,6 @@ sub pagetemplate (@) { sub cgi_getsource ($) { my $cgi=shift; - # Note: we use sessioncgi rather than just cgi - # because we need $IkiWiki::pagesources{} to be - # populated. - return unless (defined $cgi->param('do') && $cgi->param("do") eq "getsource"); @@ -53,9 +49,10 @@ sub cgi_getsource ($) { my $page=$cgi->param('page'); + # For %pagesources. IkiWiki::loadindex(); - if (! exists $IkiWiki::pagesources{$page}) { + if (! exists $pagesources{$page}) { IkiWiki::cgi_custom_failure( $cgi->header(-status => "404 Not Found"), IkiWiki::misctemplate(gettext("missing page"), @@ -66,18 +63,25 @@ sub cgi_getsource ($) { exit; } - my $data = IkiWiki::readfile(IkiWiki::srcfile($IkiWiki::pagesources{$page})); + if (! defined pagetype($pagesources{$page})) { + IkiWiki::cgi_custom_failure( + $cgi->header(-status => "403 Forbidden"), + IkiWiki::misctemplate(gettext("not a page"), + "

". + sprintf(gettext("%s is an attachment, not a page."), + htmllink("", "", $page)). + "

")); + exit; + } if (! $config{getsource_mimetype}) { $config{getsource_mimetype} = "text/plain; charset=utf-8"; } print "Content-Type: $config{getsource_mimetype}\r\n"; - print ("\r\n"); + print readfile(srcfile($pagesources{$page})); - print $data; - exit 0; }