esgd is a simple gopher daemon. it supports a simpler subset of the CGI/1.1 specification for CGI, and it automatically brings gophermaps missing certain features up to compliance. the modules used in esgd are part of the standard python distribution. options: -u, --user: user to change to on startup -g, --group: group to change to on startup -s, --host: host name -gs, --gopherhost: host name to use for links when parsing gophermaps -p, --port: port -d, --dir: directory to host from -ndx, --direxc PATH: selectors containing PATH will not execute -nx, --nocgi: disable cgi execution hints: if you're running esgd with the python executable on the command line, e.g. `python esgd.py --host 0.0.0.0 --gopherhost test`, ENSURE THAT THE EXECUTABLE IS INTERPRETING PYTHON3 CODE. On my system, you have to use the executable `python3`; `python` is python2 on my system. by default python's socketserver when hosting on "localhost" will bind to the loopback interface. this is fine for testing, but in production you'll want to use --host '0.0.0.0' to force socketserver to bind to your public-facing interface. also, due to some dumb code in socketserver, IPv6 is not supported at this time. once this server gets in a stable condition a rewrite using system level sockets will be in order. note that when using the --host parameter you might want to use --gopherhost to set a publicly facing domain name. this name is substituted in in gophermaps that are incomplete. (somewhat) applicable standards: - RFC3875: The Common Gateway Interface (CGI) Version 1.1 NOTE: support for CGI/1.1 is limited and not up to spec. this will change in the future. - RFC1436: The Internet Gopher Protocol (a distributed document search and retrieval protocol) NOTE: almost to full compliance files: esgd.py - main executable README - this file sandbox - test gophermaps for setting up the server init - init scripts/configuration files Copyright 2021 randomuser