rename, remove: Don't rely on a form parameter to tell whether the page should be...
authorJoey Hess <joey@kodama.kitenet.net>
Tue, 23 Sep 2008 21:41:05 +0000 (17:41 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Tue, 23 Sep 2008 21:41:05 +0000 (17:41 -0400)
IkiWiki/Plugin/remove.pm
IkiWiki/Plugin/rename.pm
debian/changelog

index 9666408bc77ab332866b936f03e3d6dfd5f36fb6..869d32f9303e41a2e96198615a2171305f6732e6 100644 (file)
@@ -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
index d6079e198266cf06af8e01a9a9fe351b3c7d1b8d..f441ac025f12e5b1c06282295c821366674cdfc0 100644 (file)
@@ -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});
index df5bc5942c4a6e2b49eaf739d321ea2b3bea3ded..372b585e600feee8e979bc0cee60ba170179830d 100644 (file)
@@ -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 <joeyh@debian.org>  Wed, 17 Sep 2008 14:26:56 -0400