summaryrefslogtreecommitdiff
path: root/doc/bugs/CGI_problem_with_some_webservers.mdwn
blob: e727c9ae2d3692dbf8f7ef4b04092526262db245 (plain)

The "ikwiki.cgi?page=index&do=edit" function has a problem when running with [[debpkg thttpd]] or [[debpkg mini-httpd]]: for some reason the headers ikiwiki outputs are transmitted as the page content. Surprisingly, the "do=prefs" function works as expected.

Here is what it looks like in iceweasel:

Set-Cookie: ikiwiki_session_apnkit=99dad8d796bc6c819523649ef25ea447; path=/
Date: Tue, 14 Aug 2007 17:16:32 GMT
Content-Type: text/html; charset=utf-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
(...)

Ikiwiki runs fine with [[debpkg boa]].

--[[JeremieKoenig]]

It doesn't work for signin either. What is the reason for these "header => 1" in FormBuilder initialisations? Why do they appear two times with conflicting values in the very same hashes?

--[[JeremieKoenig]]

Clearly those duplicate header settings are a mistake. But in all cases, the header => 0 came second, so it should override the other value and can't be causing this problem. (cgi_signin only sets it to 0, too).

What version of formbuilder are you using? If you run ikiwiki.cgi at the command line, do you actually see duplicate headers? I don't:

joey@kodama:~/html>REQUEST_METHOD=GET QUERY_STRING="page=index&do=edit" ./ikiwiki.cgi
Set-Cookie: ikiwiki_session_joey=41a847ac9c31574c1e8f5c6081c74d12; path=/
Date: Tue, 14 Aug 2007 18:04:06 GMT
Content-Type: text/html; charset=utf-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

Do thttpd and mini-httpd perhaps not realize that Set-Cookis is the start of the headers? --[[Joey]]

Thanks for your help: I think I found the problem! Ikiwiki outputs (in my case) the following error message on stderr, followed by an empty line:

/srv/ikiwiki/wc/index.mdwn:  (Not a versioned resource)

Probably thttpd and mini-httpd read stderr as well as stdout, while apache and boa don't. When using a shell-script wrapper as the CGI, which redirects ikiwiki's error output to /dev/null, it works better.

The edit still fails to commit, because in my wiki, index.mdwn is pulled from the base wiki and somehow ikiwiki wants to change it rather that create it.

--[[JeremieKoenig]]

If thttpd and mini-httpd interpret CGI's stderr as stdout, then they're not properly following the CGI spec, and will break with tons of cgi scripts besides ikiwiki. And of course there are many many cases where ikiwiki might output to stderr, and that's the right thing to do. So I don't see any way to address this in ikiwiki. --[[Joey]]

(reported as [[debbug 437927]] and [[debbug 437932]]) --[[JeremieKoenig]]