Merge branch 'master' of ssh://git.ikiwiki.info/srv/git/ikiwiki.info
authorJoey Hess <joey@kitenet.net>
Mon, 30 Aug 2010 19:53:49 +0000 (15:53 -0400)
committerJoey Hess <joey@kitenet.net>
Mon, 30 Aug 2010 19:53:49 +0000 (15:53 -0400)
IkiWiki/Receive.pm
doc/bugs/httpauth_conflicts_with_git_anon_push.mdwn [new file with mode: 0644]

index fdd463025457f918458168a2671f7c97dd2a37ab..d116049c49c2bbd33b33d7a7dca6bfdc6b48aa57 100644 (file)
@@ -95,10 +95,8 @@ sub test () {
                if ($change->{action} eq 'change' ||
                    $change->{action} eq 'add') {
                        if (defined $page) {
-                               if (IkiWiki->can("check_canedit")) {
-                                       IkiWiki::check_canedit($page, $cgi, $session);
-                                       next;
-                               }
+                               IkiWiki::check_canedit($page, $cgi, $session);
+                               next;
                        }
                        else {
                                if (IkiWiki::Plugin::attachment->can("check_canattach")) {
diff --git a/doc/bugs/httpauth_conflicts_with_git_anon_push.mdwn b/doc/bugs/httpauth_conflicts_with_git_anon_push.mdwn
new file mode 100644 (file)
index 0000000..3e496fe
--- /dev/null
@@ -0,0 +1,25 @@
+Someone tried to report a bug using IRC while I was on vacation.
+--[[Joey]] 
+
+<pre>
+julm: [11:58:35] han, it's me the problem; I was generating a post-update hook instead of a pre-receive hook
+julm: [12:03:59] why does the pre-receive hook return: "Status: 302 Found" and a "Location: <url>"? Is it normal?
+julm: [00:08:44] it's Plugin/httpauth.pm which is outputing those Status and Location
+julm: [00:09:12] problem is that it's an anonymous push via git://
+julm: [03:28:53] hacked my way to fix it somehow: http://git.internet.alpes.fr.eu.org/?p=web/ikiwiki.git;a=commitdiff;h=7211df4f7457c3afab53822a97cbd21825c473f4
+</pre>
+
+Analysis: 
+
+* IkiWiki::Receive calls `check_canedit`.
+* httpauth's canedit hook returns an error handler function
+  which redirects the browser through the cgiauthurl.
+  (Similarly, signinedit's hook may call needsignin, which
+  can display a signin form.
+* That doesn't work well when doing a git anon push. :)
+* Also, IkiWiki::Receive calls `check_canattach` and
+  `check_canremove`, which both also call `check_canedit`.
+
+So, all these calls need to avoid running the error handler
+functions returned by canedit hooks, and just return error
+messages.