rename, remove: Don't rely on a form parameter to tell whether the page should be treated as an attachment.

master
Joey Hess 2008-09-23 17:41:05 -04:00
parent dfa9556480
commit 8e0180d8ca
3 changed files with 25 additions and 14 deletions

View File

@ -21,11 +21,10 @@ sub getsetup () { #{{{
}, },
} #}}} } #}}}
sub check_canremove ($$$$) { #{{{ sub check_canremove ($$$) { #{{{
my $page=shift; my $page=shift;
my $q=shift; my $q=shift;
my $session=shift; my $session=shift;
my $attachment=shift;
# Must be a known source file. # Must be a known source file.
if (! exists $pagesources{$page}) { if (! exists $pagesources{$page}) {
@ -45,11 +44,15 @@ sub check_canremove ($$$$) { #{{{
# Must be editiable. # Must be editiable.
IkiWiki::check_canedit($page, $q, $session); IkiWiki::check_canedit($page, $q, $session);
# This is sorta overkill, but better safe # If a user can't upload an attachment, don't let them delete it.
# than sorry. If a user can't upload an # This is sorta overkill, but better safe than sorry.
# attachment, don't let them delete it. if (! defined IkiWiki::pagetype($pagesources{$page})) {
if ($attachment) { if (IkiWiki::Plugin::attachment->can("check_canattach")) {
IkiWiki::Plugin::attachment::check_canattach($session, $page, $file); 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 $attachment=shift;
my @pages=@_; 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 # Save current form state to allow returning to it later
# without losing any edits. # without losing any edits.
@ -167,7 +170,7 @@ sub sessioncgi ($$) { #{{{
# and that the user is allowed to edit(/remove) it. # and that the user is allowed to edit(/remove) it.
my @files; my @files;
foreach my $page (@pages) { foreach my $page (@pages) {
check_canremove($page, $q, $session, $q->param("attachment")); check_canremove($page, $q, $session);
# This untaint is safe because of the # This untaint is safe because of the
# checks performed above, which verify the # checks performed above, which verify the

View File

@ -21,14 +21,15 @@ sub getsetup () { #{{{
}, },
} #}}} } #}}}
sub check_canrename ($$$$$$$) { #{{{ sub check_canrename ($$$$$$) { #{{{
my $src=shift; my $src=shift;
my $srcfile=shift; my $srcfile=shift;
my $dest=shift; my $dest=shift;
my $destfile=shift; my $destfile=shift;
my $q=shift; my $q=shift;
my $session=shift; my $session=shift;
my $attachment=shift;
my $attachment=! defined IkiWiki::pagetype($pagesources{$src});
# Must be a known source file. # Must be a known source file.
if (! exists $pagesources{$src}) { if (! exists $pagesources{$src}) {
@ -47,7 +48,12 @@ sub check_canrename ($$$$$$$) { #{{{
# Must be editable. # Must be editable.
IkiWiki::check_canedit($src, $q, $session); IkiWiki::check_canedit($src, $q, $session);
if ($attachment) { 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. # Dest checks can be omitted by passing undef.
@ -136,7 +142,7 @@ sub rename_start ($$$$) { #{{{
my $page=shift; my $page=shift;
check_canrename($page, $pagesources{$page}, undef, undef, check_canrename($page, $pagesources{$page}, undef, undef,
$q, $session, $attachment); $q, $session);
# Save current form state to allow returning to it later # Save current form state to allow returning to it later
# without losing any edits. # without losing any edits.
@ -264,7 +270,7 @@ sub sessioncgi ($$) { #{{{
} }
check_canrename($src, $srcfile, $dest, $destfile, check_canrename($src, $srcfile, $dest, $destfile,
$q, $session, $q->param("attachment")); $q, $session);
# Ensures that the dest directory exists and is ok. # Ensures that the dest directory exists and is ok.
IkiWiki::prep_writefile($destfile, $config{srcdir}); IkiWiki::prep_writefile($destfile, $config{srcdir});

2
debian/changelog vendored
View File

@ -18,6 +18,8 @@ ikiwiki (2.65) UNRELEASED; urgency=low
characters, in addition to the existing check for pruned filenames. characters, in addition to the existing check for pruned filenames.
* Print a debug message if a page has multiple source files. * Print a debug message if a page has multiple source files.
* Add keepextension parameter to htmlize hook. (Willu) * 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 <joeyh@debian.org> Wed, 17 Sep 2008 14:26:56 -0400 -- Joey Hess <joeyh@debian.org> Wed, 17 Sep 2008 14:26:56 -0400