/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://localhost:8080/ext/env.cgi
:
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.