aboutsummaryrefslogtreecommitdiff
path: root/doc/bugs/httpauth_conflicts_with_git_anon_push.mdwn
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2010-08-30 15:53:37 -0400
committerJoey Hess <joey@kitenet.net>2010-08-30 15:53:37 -0400
commit47cfd14e8436e201facfa906a615fd272dfc156b (patch)
tree9879a924a4b46a4be2bd5837ae991ddf6f53e8dd /doc/bugs/httpauth_conflicts_with_git_anon_push.mdwn
parent69fc0f427e82c24613a33b005e5fe2422516c001 (diff)
downloadikiwiki-47cfd14e8436e201facfa906a615fd272dfc156b.tar
ikiwiki-47cfd14e8436e201facfa906a615fd272dfc156b.tar.gz
add bug lifted from irc
Diffstat (limited to 'doc/bugs/httpauth_conflicts_with_git_anon_push.mdwn')
-rw-r--r--doc/bugs/httpauth_conflicts_with_git_anon_push.mdwn25
1 files changed, 25 insertions, 0 deletions
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
index 000000000..3e496fef4
--- /dev/null
+++ b/doc/bugs/httpauth_conflicts_with_git_anon_push.mdwn
@@ -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.