From 8e0180d8ca6c9b08ed752b92d4c50a5298d8f55a Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 23 Sep 2008 17:41:05 -0400 Subject: [PATCH] rename, remove: Don't rely on a form parameter to tell whether the page should be treated as an attachment. --- IkiWiki/Plugin/remove.pm | 21 ++++++++++++--------- IkiWiki/Plugin/rename.pm | 16 +++++++++++----- debian/changelog | 2 ++ 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/IkiWiki/Plugin/remove.pm b/IkiWiki/Plugin/remove.pm index 9666408bc..869d32f93 100644 --- a/IkiWiki/Plugin/remove.pm +++ b/IkiWiki/Plugin/remove.pm @@ -21,11 +21,10 @@ sub getsetup () { #{{{ }, } #}}} -sub check_canremove ($$$$) { #{{{ +sub check_canremove ($$$) { #{{{ my $page=shift; my $q=shift; my $session=shift; - my $attachment=shift; # Must be a known source file. if (! exists $pagesources{$page}) { @@ -45,11 +44,15 @@ sub check_canremove ($$$$) { #{{{ # Must be editiable. IkiWiki::check_canedit($page, $q, $session); - # This is sorta overkill, but better safe - # than sorry. If a user can't upload an - # attachment, don't let them delete it. - if ($attachment) { - IkiWiki::Plugin::attachment::check_canattach($session, $page, $file); + # If a user can't upload an attachment, don't let them delete it. + # This is sorta overkill, but better safe than sorry. + if (! defined IkiWiki::pagetype($pagesources{$page})) { + if (IkiWiki::Plugin::attachment->can("check_canattach")) { + IkiWiki::Plugin::attachment::check_canattach($session, $page, $file); + } + else { + error("renaming of attachments is not allowed"); + } } } #}}} @@ -94,7 +97,7 @@ sub removal_confirm ($$@) { #{{{ my $attachment=shift; my @pages=@_; - check_canremove($_, $q, $session, $attachment) foreach @pages; + check_canremove($_, $q, $session) foreach @pages; # Save current form state to allow returning to it later # without losing any edits. @@ -167,7 +170,7 @@ sub sessioncgi ($$) { #{{{ # and that the user is allowed to edit(/remove) it. my @files; foreach my $page (@pages) { - check_canremove($page, $q, $session, $q->param("attachment")); + check_canremove($page, $q, $session); # This untaint is safe because of the # checks performed above, which verify the diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm index d6079e198..f441ac025 100644 --- a/IkiWiki/Plugin/rename.pm +++ b/IkiWiki/Plugin/rename.pm @@ -21,14 +21,15 @@ sub getsetup () { #{{{ }, } #}}} -sub check_canrename ($$$$$$$) { #{{{ +sub check_canrename ($$$$$$) { #{{{ my $src=shift; my $srcfile=shift; my $dest=shift; my $destfile=shift; my $q=shift; my $session=shift; - my $attachment=shift; + + my $attachment=! defined IkiWiki::pagetype($pagesources{$src}); # Must be a known source file. if (! exists $pagesources{$src}) { @@ -47,7 +48,12 @@ sub check_canrename ($$$$$$$) { #{{{ # Must be editable. IkiWiki::check_canedit($src, $q, $session); if ($attachment) { - IkiWiki::Plugin::attachment::check_canattach($session, $src, $srcfile); + if (IkiWiki::Plugin::attachment->can("check_canattach")) { + IkiWiki::Plugin::attachment::check_canattach($session, $src, $srcfile); + } + else { + error("renaming of attachments is not allowed"); + } } # Dest checks can be omitted by passing undef. @@ -136,7 +142,7 @@ sub rename_start ($$$$) { #{{{ my $page=shift; check_canrename($page, $pagesources{$page}, undef, undef, - $q, $session, $attachment); + $q, $session); # Save current form state to allow returning to it later # without losing any edits. @@ -264,7 +270,7 @@ sub sessioncgi ($$) { #{{{ } check_canrename($src, $srcfile, $dest, $destfile, - $q, $session, $q->param("attachment")); + $q, $session); # Ensures that the dest directory exists and is ok. IkiWiki::prep_writefile($destfile, $config{srcdir}); diff --git a/debian/changelog b/debian/changelog index df5bc5942..372b585e6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,6 +18,8 @@ ikiwiki (2.65) UNRELEASED; urgency=low characters, in addition to the existing check for pruned filenames. * Print a debug message if a page has multiple source files. * Add keepextension parameter to htmlize hook. (Willu) + * rename, remove: Don't rely on a form parameter to tell whether the page + should be treated as an attachment. -- Joey Hess Wed, 17 Sep 2008 14:26:56 -0400 -- 2.26.2