/ext is missing SERVER_NAME when run locally?
(1) By Stephan Beal (stephan) on 2020-12-12 04:49:00 [link] [source]
i'm experimenting with
/ext as an alternative host for a CGI which i'd normally run via Apache and discovered that it's missing
SERVER_NAME. Looking at the code, that var is certainly in the whitelist, and i'm wondering if someone else can confirm that they see this, too:
fossil ui --extroot /path/to/ext
In the extroot, place the file
env.cgi with this content:
#!/bin/bash echo -en "Status: 200 OK\r\n" echo -en "Content-type: text/plain\r\n" echo -en "\r\n" env
Then visit it using
HTTP_ACCEPT_ENCODING= SCRIPT_NAME=/ext/env.cgi GATEWAY_INTERFACE=CGI/1.0 FOSSIL_NONCE=a577d31310669e59e3a7f0d89eac269459b8e962ee5a2b14 PATH_INFO= DOCUMENT_ROOT=/home/pi/www/dv/fossil-ext PWD=/home/pi/www/dv REQUEST_URI=/ext/env.cgi QUERY_STRING= FOSSIL_URI= HTTP_HOST=localhost:8080 HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0 SHLVL=1 FOSSIL_CAPABILITIES=bcdefghijklmnopqrstwz234567AD SCRIPT_FILENAME=/home/pi/www/dv/fossil-ext/env.cgi SCRIPT_DIRECTORY=/home/pi/www/dv/fossil-ext FOSSIL_REPOSITORY=/home/pi/fossil/darkventure.fossil REMOTE_ADDR=127.0.0.1 FOSSIL_USER=stephan REMOTE_USER=stephan REQUEST_METHOD=GET _=/usr/bin/env
It's not a big deal that
SERVER_NAME is missing - it just stuck out at me because it caused a derived property (which is currently unused and will likely remain so) to be malformed.
(2) By Richard Hipp (drh) on 2020-12-12 13:55:59 in reply to 1 [source]
I'm attempting to add SERVER_NAME support to althttpd and Fossil, and I have a question:
Is SERVER_NAME exactly the same as HTTP_HOST? Or in the case of a TCP port specification in the URL (example: http://somedomain:8080/) does the ":8080" get appended to the SERVER_NAME as it does to HTTP_HOST or is the TCP port number stripped off?
So if you have Apache running on port 8080, and you use it to invoke a CGI, what does it show for the HTTP_HOST and SERVER_NAME environment variables?
The current behavior in althttpd.c seems to be that SERVER_NAME and HTTP_HOST are identical - they both include the TCP port number. I'm wondering if that is a bug that needs to be fixed.
(3) By Stephan Beal (stephan) on 2020-12-12 14:14:24 in reply to 2 [link] [source]
Is SERVER_NAME exactly the same as HTTP_HOST?
Good question. The same
env script, from 8080, as above says:
SERVER_NAME=wh.local ... HTTP_HOST=wh.local:8080 ... SERVER_SIGNATURE=<address>Apache/2.4.38 (Raspbian) Server at wh.local Port 8080</address>
(4) By Richard Hipp (drh) on 2020-12-12 15:12:59 in reply to 2 [link] [source]
I was misreading the althttpd.c source code. Turns out it does the same as Apache and strips the TCP port number off the end before setting the SERVER_NAME environment variable, but leaves the TCP port number intact for the HTTP_HOST environment variable.
(5) By Stephan Beal (stephan) on 2020-12-12 16:22:43 in reply to 4 [link] [source]
Reminder, in case this slipped by in/after f101e94da1f80571:
SERVER_NAME still includes the port number:
This is fossil version 2.14 [1cff8d3182] 2020-12-12 15:25:17 UTC SERVER_NAME=wh.local:8080 ... HTTP_HOST=wh.local:8080
That's hosted via
fossil server from
/ext, not from Apache.