]> sipb.mit.edu Git - ikiwiki.git/commitdiff
Receive: avoid hiding check_canedit error messages
authorJoey Hess <joey@kitenet.net>
Mon, 30 Aug 2010 21:58:00 +0000 (17:58 -0400)
committerJoey Hess <joey@kitenet.net>
Mon, 30 Aug 2010 21:58:00 +0000 (17:58 -0400)
Avoid the generic "you are not allowed to change" message,
and instead allow check_canedit to propigate out useful error messages.

Went back to calling check_canedit in fatal mode, but added a parameter to
avoid calling the troublesome subs that might cause a login attempt.

IkiWiki.pm
IkiWiki/Receive.pm

index 6da281999f0b4c035805626f11d6e244c105d69f..d114c9a69d760194e05c788e36a74d4c8ab3c144 100644 (file)
@@ -1455,11 +1455,12 @@ sub filter ($$$) {
        return $content;
 }
 
        return $content;
 }
 
-sub check_canedit ($$$;$) {
+sub check_canedit ($$$;$$) {
        my $page=shift;
        my $q=shift;
        my $session=shift;
        my $nonfatal=shift;
        my $page=shift;
        my $q=shift;
        my $session=shift;
        my $nonfatal=shift;
+       my $nosubs=shift;
        
        my $canedit;
        run_hooks(canedit => sub {
        
        my $canedit;
        run_hooks(canedit => sub {
@@ -1470,6 +1471,7 @@ sub check_canedit ($$$;$) {
                                $canedit=1;
                        }
                        elsif (ref $ret eq 'CODE') {
                                $canedit=1;
                        }
                        elsif (ref $ret eq 'CODE') {
+                               error(sprintf(gettext("you are not allowed to change %s"), $page)) if $nosubs && ! $nonfatal;
                                $ret->() unless $nonfatal;
                                $canedit=0;
                        }
                                $ret->() unless $nonfatal;
                                $canedit=0;
                        }
index cd746c95fdf97cf9c648f3a0554fb355fca6a85f..3a5f91758363bd6cd4521af3a7a6e966c2c91488 100644 (file)
@@ -95,12 +95,12 @@ sub test () {
                if ($change->{action} eq 'change' ||
                    $change->{action} eq 'add') {
                        if (defined $page) {
                if ($change->{action} eq 'change' ||
                    $change->{action} eq 'add') {
                        if (defined $page) {
-                               next if IkiWiki::check_canedit($page, $cgi, $session, 1);
+                               IkiWiki::check_canedit($page, $cgi, $session, 0, 1);
                        }
                        else {
                                if (IkiWiki::Plugin::attachment->can("check_canattach")) {
                                        IkiWiki::Plugin::attachment::check_canattach($session, $file, $change->{path});
                        }
                        else {
                                if (IkiWiki::Plugin::attachment->can("check_canattach")) {
                                        IkiWiki::Plugin::attachment::check_canattach($session, $file, $change->{path});
-                                       next if IkiWiki::check_canedit($file, $cgi, $session, 1);
+                                       IkiWiki::check_canedit($file, $cgi, $session, 0, 1);
                                }
                        }
                }
                                }
                        }
                }
@@ -116,14 +116,12 @@ sub test () {
 
                        if (IkiWiki::Plugin::remove->can("check_canremove")) {
                                IkiWiki::Plugin::remove::check_canremove(defined $page ? $page : $file, $cgi, $session);
 
                        if (IkiWiki::Plugin::remove->can("check_canremove")) {
                                IkiWiki::Plugin::remove::check_canremove(defined $page ? $page : $file, $cgi, $session);
-                               next if IkiWiki::check_canedit(defined $page ? $page : $file, $cgi, $session, 1);
+                               IkiWiki::check_canedit(defined $page ? $page : $file, $cgi, $session, 0, 1);
                        }
                }
                else {
                        error "unknown action ".$change->{action};
                }
                        }
                }
                else {
                        error "unknown action ".$change->{action};
                }
-               
-               error sprintf(gettext("you are not allowed to change %s"), $file);
        }
 
        exit 0;
        }
 
        exit 0;