X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/9c5f4761d8bf785ca98d5fda66fbbe9dbe11897c..58f1ef0784117a6b522c8ac64ec24056e1bbad8f:/IkiWiki/Render.pm diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 35d663a7a..047ab8212 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -64,10 +64,9 @@ sub parentlinks ($) { #{{{ return @ret; } #}}} -sub genpage ($$$) { #{{{ +sub genpage ($$) { #{{{ my $page=shift; my $content=shift; - my $mtime=shift; my $templatefile; run_hooks(templatefile => sub { @@ -129,7 +128,7 @@ sub genpage ($$$) { #{{{ content => $content, backlinks => $backlinks, more_backlinks => $more_backlinks, - mtime => displaytime($mtime), + mtime => displaytime($pagemtime{$page}), baseurl => baseurl($page), ); @@ -204,8 +203,9 @@ sub render ($) { #{{{ filter($page, $page, readfile($srcfile))))); - writefile(htmlpage($page), $config{destdir}, - genpage($page, $content, mtime($srcfile))); + my $output=htmlpage($page); + writefile($output, $config{destdir}, genpage($page, $content)); + utime($pagemtime{$page}, $pagemtime{$page}, $config{destdir}."/".$output); } else { my $srcfd=readfile($srcfile, 1, 1); @@ -231,6 +231,7 @@ sub render ($) { #{{{ } } }); + utime($pagemtime{$file}, $pagemtime{$file}, $config{destdir}."/".$file); } } #}}} @@ -245,6 +246,17 @@ sub prune ($) { #{{{ } #}}} sub refresh () { #{{{ + # security check, avoid following symlinks in the srcdir path + my $test=$config{srcdir}; + while (length $test) { + if (-l $test) { + error("symlink found in srcdir path ($test)"); + } + unless ($test=~s/\/+$//) { + $test=dirname($test); + } + } + # find existing pages my %exists; my @files; @@ -474,8 +486,9 @@ sub commandline_render () { #{{{ $content=preprocess($page, $page, $content); $content=linkify($page, $page, $content); $content=htmlize($page, $type, $content); + $pagemtime{$page}=mtime($srcfile); - print genpage($page, $content, mtime($srcfile)); + print genpage($page, $content); exit 0; } #}}}