geomyidae

A small C-based gopherd. (gopher://bitreich.org/1/scm/geomyidae)
git clone git://r-36.net/geomyidae
Log | Files | Refs | README | LICENSE

commit b0020aba7262324964672cdce0c6924e45b85a88
parent 5efc3bd3f2f7949c70d1d3fe49c00e8f2c3961f4
Author: Christoph Lohmann <20h@r-36.net>
Date:   Mon,  6 Jan 2025 13:41:23 +0100

Fixing geomyidae.8 to a modern troff style.

Thanks Lucas de Sena <lucas@seninha.org>

Sorry, your e-mail was no complete patch with all metadata.

Diffstat:
Mgeomyidae.8 | 749+++++++++++++++++++++++++++++++++++++++++++++++++------------------------------
1 file changed, 463 insertions(+), 286 deletions(-)

diff --git a/geomyidae.8 b/geomyidae.8 @@ -1,6 +1,6 @@ .\" geomyidae.8 handcrafted in GNU groff -mdoc using nvi .\" -.Dd March 17, 2021 +.Dd January 4, 2025 .Dt GEOMYIDAE 8 .Os . @@ -32,60 +32,71 @@ .Ek . .Sh DESCRIPTION -.Bd -filled .Nm is a daemon for serving the protocol specified in .Em RFC 1436 (Gopher). Under 1000 lines of C by design, it is lightweight yet supports dynamic content, automatic file/directory indexing, logging and privilege separation. -.Ed . .Sh IMPLEMENTATION -.Bd -filled Installation is straightforward: grab the zipped tar file, expand it in an appropriate temp directory, change to the -.Qq "../geomyidae-x.xx" +.Qq Pa "../geomyidae-x.xx" directory, tweak the Makefile if desired (installs in -.Qq "/usr/bin" +.Qq Pa "/usr/bin" by default), then run the -.Sq "make ; make install" -commands. The resulting executable should be run by root. -.Ed +.Qq Ql "make ; make install" +commands. +The resulting executable should be run by root. . .Ss Basic Installation and Startup -.Bd -literal - $ wget ftp://bitreich.org/releases/geomyidae/geomyidae-$VERSION.tar.lz - $ lzip -d geomyidae-$VERSION.tar.lz - $ tar -xvf geomyidae-*.tar - $ cd geomyidae-* - $ make; sudo make install - $ sudo mkdir -p /var/gopher - $ sudo cp index.gph /var/gopher - $ sudo geomyidae -l /var/log/geomyidae.log -b /var/gopher -p 70 - $ tail -f /var/log/geomyidae.log - - Use whatever gopher client you like (ie. sacc) to browse: - $ sacc gopher://localhost +.Bd -literal -offset indent +$ wget ftp://bitreich.org/releases/geomyidae/geomyidae-$VERSION.tar.lz +$ lzip -d geomyidae-$VERSION.tar.lz +$ tar -xvf geomyidae-*.tar +$ cd geomyidae-* +$ make; sudo make install +$ sudo mkdir -p /var/gopher +$ sudo cp index.gph /var/gopher +$ sudo geomyidae -l /var/log/geomyidae.log -b /var/gopher -p 70 +$ tail -f /var/log/geomyidae.log +.Ed +. +.Pp +Use whatever gopher client you like (ie. sacc) to browse: +.Bd -literal -offset indent +$ sacc gopher://localhost .Ed . .Ss Running -geomyidae should normally be started by root, although it can be started +.Nm +should normally be started by root, although it can be started by a regular user provided that the base directory and its contents are owned -by the same user. geomyidae will only serve content within the base directory +by the same user. +.Nm +will only serve content within the base directory tree and will drop privileges to the .Fl u Ar user and .Fl g Ar group -values if set. See -.Ic OPTIONS -below for specifics. Launching geomyidae automatically is best done via a UNIX +values if set. +See +.Sx OPTIONS +below for specifics. +Launching +.Nm +automatically is best done via a UNIX run-time (rc.d) script; several sample rc.d scripts are included in the -geomyidae source archive. Logging in geomyidae can be done through either -logfiles or syslog. +.Nm +source archive. +Logging in +.Nm +can be done through either logfiles or syslog. . .Sh OPTIONS -geomyidae options and default settings: +.Nm +options and default settings: .Bl -tag -width Ds . .It Fl 4 @@ -102,8 +113,10 @@ for the directory (by default off). . .It Fl d -Don't fork into background. If no log file is given, this implies logging to -the standard output. +Don't fork into background. +If no +.Ar logfile +is given, this implies logging to the standard output. . .It Fl e Disable execution of any CGI or DCGI script. @@ -122,42 +135,67 @@ Specify file where log output is written (no default). . .It Fl v Ar loglevel Set the logging level (default: 47). -. -.Bd -literal Loglevels: - 0 - no logging - 1 - served plain files - 2 - directory listings - 4 - HTTP redirects - 8 - errors (e.g., not found) - 16 - client connections - 32 - gopher+ redirects - e.g.: - 1 + 2 + 4 + 8 + 32 = 47 - (files + directories + HTTP + errors + gopher+) +.Bl -tag -width "XX" -compact +.It Cm 0 +no logging +.It Cm 1 +served plain files +.It Cm 2 +directory listings +.It Cm 4 +HTTP redirects +.It Cm 8 +errors (e.g., not found) +.It Cm 16 +client connections +.It Cm 32 +gopher+ redirects +.El +.Pp +E.g.: +.Bd -literal -offset indent +1 + 2 + 4 + 8 + 32 = 47 +(files + directories + HTTP + errors + gopher+) .Ed . .It Fl b Ar base -Root directory to serve (default: /var/gopher). +Root directory to serve +.Po +default: +.Pa /var/gopher +.Pc . . .It Fl p Ar port -Port geomyidae should listen on (default: 70). +Port +.Nm +should listen on (default: 70). . .It Fl o Ar sport -Port geomyidae displays within base directory (default: 70). +Port +.Nm +displays within base directory (default: 70). Use in conjunction with .Ic -p -for obfuscating actual port geomyidae is running on. +for obfuscating actual port +.Nm +is running on. . .It Fl u Ar user -Sets the user to which privileges drop when geomyidae is ready -to accept network connections (default: user geomyidae runs as). +Sets the user to which privileges drop when +.Nm +is ready to accept network connections (default: user +.Nm +runs as). Helps improve security by reducing privileges during request processing. . .It Fl g Ar group -Sets the group to which privileges drop when geomyidae is ready -to accept network connections (default: group geomyidae runs as). +Sets the group to which privileges drop when +.Nm +is ready to accept network connections (default: group +.Nm +runs as). Helps improve security by reducing privileges during request processing. . @@ -165,7 +203,13 @@ processing. Host to use in directory listings (default: localhost). . .It Fl i Ar interface -Defines the interface to which geomyidae binds to (default: 0.0.0.0). +Defines the interface to which +.Nm +binds to +.Po +default: +.Cm 0.0.0.0 +.Pc . Multiple interfaces can be given. . .It Fl t Ar keyfile certfile @@ -173,112 +217,161 @@ Activate gopher TLS and use the private key .Ar keyfile and the public key .Ar certfile -for TLS connections (if the feature is compiled in.) See ENCRYPTION ONLY +for TLS connections (if the feature is compiled in.) See +.Sx ENCRYPTION ONLY support below. .El . .Sh FORMATTING -.Bd -filled -Structured Gopher space(s) can be created with geomyidae through the -use of special indexing files of the form -.Ic <name>.gph -which, if present, geomyidae uses to format and/or filter the contents of -the base directory (/var/gopher by default) and create gopher menus. +Structured Gopher space(s) can be created with +.Nm +through the use of special indexing files of the form +.Pa <name>.gph +which, if present, +.Nm +uses to format and/or filter the contents of the base directory +.Po +.Pa /var/gopher +by default +.Pc +and create gopher menus. However, index files are .Em not -required: if no index.gph, index.cgi or index.dcgi -file is found, geomyidae simply lists the directory -contents in alphanumeric order. In addition, a directory can utilize +required: if no +.Pa index.gph , +.Pa index.cgi +or +.Pa index.dcgi +file is found, +.Nm +simply lists the directory contents in alphanumeric order. +In addition, a directory can utilize multiple index files to create a layered gopher environment without the -use of sub-directories: ie. pictures.gph, music.gph, documents.gph could -be "directories" within main.gph, yet all reside in /var/gopher along with -their respective files (*.jpg, *.mp3, *.pdf for example). -.Ed +use of sub-directories: ie. +.Pa pictures.gph , +.Pa music.gph +and +.Pa documents.gph +could be "directories" within +.Pa main.gph , +yet all reside in +.Pa /var/gopher +along with their respective files (*.jpg, *.mp3, *.pdf for example). . .Ss Anatomy of an index.gph file -A gph file consists of informational text and links. A link has the form: -.Bl -inset -offset indent -.It Ic [<type>|<desc>|<path>|<host>|<port>] -.El +A gph file consists of informational text and links. +A link has the form: +.Pp +.Dl [ Ar <type> Ns | Ns Ar <desc> Ns | Ns Ar <path> Ns | Ns Ar <host> Ns | Ns Ar <port> ] .Pp where, -.Bl -inset -offset indent -.It Ic <type> -= A valid gopher Item Type. +.Bl -tag -width "<XXXX>" +.It Ar <type> +A valid gopher Item Type. .Pp Some common Gopher Types as defined in -.Em RFC 1436 -: -. -.Bd -literal - 0 Item is a file. - 1 Gopher directory. - 3 Error. - 7 Item is an Index-Search server. - 8 Item points to a text-based telnet session. - 9 Binary file. Client reads until TCP connection closes! - g GIF format graphics file. - I Indeterminate image file. Client decides how to display. -.Ed +.Em RFC 1436 : +. +.Bl -tag -width "XX" -compact +.It Cm 0 +Item is a file. +.It Cm 1 +Gopher directory. +.It Cm 3 +Error. +.It Cm 7 +Item is an Index-Search server. +.It Cm 8 +Item points to a text-based telnet session. +.It Cm 9 +Binary file. +Client reads until TCP connection closes! +.It Cm g +GIF format graphics file. +.It Cm I +Indeterminate image file. +Client decides how to display. +.El .Pp -In addition, geomyidae provides these: -.Bd -literal - h Item is a hypertext (HTTP) link. - i Informational Item (used for descriptive purposes). -.Ed -. -.Bd -filled -Unknown file types default to Type "9" (binary). -.Ed +In addition, +.Nm +provides these: +.Bl -tag -width "XX" -compact +.It Cm h +Item is a hypertext (HTTP) link. +.It Cm i +Informational Item (used for descriptive purposes). +.El +.Pp +Unknown file types default to Type +.Qq Cm "9" +(binary). . -.It Ic <desc> -= description of gopher item. Most printable characters should work. +.It Ar <desc> +Description of gopher item. +Most printable characters should work. . -.It Ic <path> -= full or relative path to gopher item (base value is -.Qq "/" -). Use the -.Qq "Err" +.It Ar <path> +Full or relative path to gopher item (base value is +.Qq Pa "/" ) . +Use the +.Qq Pa "Err" path for items not intended to be served. . -.It Ic <host> -= hostname or IP hosting the gopher item. Must be resolvable for the -intended clients. If this is set to -.Qq "server" -, the server's hostname is used. -. -.It Ic <port> -= TCP port number (usually 70). +.It Ar <host> +Hostname or IP hosting the gopher item. +Must be resolvable for the intended clients. +If this is set to +.Qq Cm "server" , +the server's hostname is used. . +.It Ar <port> +TCP port number (usually 70). If this is set to -.Qq "port" -, the default port of the server is used. +.Qq Cm "port" , +the default port of the server is used. .El . -.Bd -filled -Note: geomyidae doesn't require "informational" text to be formally -Typed as "[i|...]"; any line +.Pp +Note: +.Nm +doesn't require "informational" text to be formally typed as +.Ql "[i|...]" ; +any line .Em not -beginning with "[" is treated as informational, greatly simplifying the -formatting of index.gph files. If you want to display some informational -text beginning with "[" you can use the special case of an empty item -type. "[|[some link" will be shortened to "[some link". For dynamically -generated content it may be desirable to either formally type -informational text or run it through a filter to prepend "[|" - .ie sed 's,^[,[|&,' . -.Ed -.Bd -filled -Note 2: You can escape a pipe ("|") character in for example a -.Em <desc> +beginning with +.Ql "\(lB" +is treated as informational, greatly simplifying the formatting of +.Pa index.gph +files. +If you want to display some informational text beginning with +.Ql "\(lB" +you can use the special case of an empty item type. +.Ql "[|[some link" +will be shortened to +.Ql "[some link" . +For dynamically generated content it may be desirable to either formally type +informational text or run it through a filter to prepend +.Ql "[|" +- \.ie +.Ql "sed 's,^[,[|&,'" . +.Pp +Note 2: You can escape a pipe +.Pq Ql "\(ba" +character in for example a +.Cm <desc> field by prepending a slash ("\\"). -.Ed -.Bd -filled -Note 3: The gph parser is very forgiving. If the link structure is not parsed -correctly, then the original line is printed. -.Ed +.Pp +Note 3: The gph parser is very forgiving. +If the link structure is not parsed correctly, then the original line is printed. . .Ss index.gph Example -A root.gph file for a server running on host=frog.bog, port=70. Note use -of optional [i]nformational Item (line 2) for vertical space insertion: +A +.Pa root.gph +file for a server running on +.Ql host=frog.bog , +.Ql port=70 . +Note use of optional [i]nformational Item (line 2) for vertical space insertion: .Bd -literal -offset indent Welcome to Frog.bog [i||Err||] @@ -299,118 +392,165 @@ Links and Searches . .Pp The above looks something like this in a text-based gopher client: +.Bd -filled -offset indent +.Bl -tag -width "(XXXXX)" -compact +.It Sy Welcome to Frog.bog .Pp -.Bl -tag -width ".It Ic WIDTHS" -compact -offset indent -.It Ic Welcome to Frog.bog -.Pp -.It Ic (FILE) +.It Sy (FILE) About this server -.It Ic (FILE) +.It Sy (FILE) Daily Log -.It Ic (DIR) +.It Sy (DIR) Phlog: like a blog, but not -.It Ic (BIN) +.It Sy (BIN) Some binary file -.It Ic (IMG) +.It Sy (IMG) Snowflake picture +.El .Pp try our snowflakes! -.El .Pp -.Bl -tag -width ".It Ic WIDTHS" -compact -offset indent -.It Ic Links and Searches -.It Ic (DIR) +.Bl -tag -width "(XXXXX)" -compact +.It Sy Links and Searches +.It Sy (DIR) Go to R-36.net -.It Ic (HTML) +.It Sy (HTML) Go to NetBSD.org -.It Ic (?) +.It Sy (?) Query US Weather by Zipcode -.It Ic (?) +.It Sy (?) Search Veronica II -.It Ic (TEL) +.It Sy (TEL) Telnet to SDF Public Access Unix System .El +.Ed .Sh DYNAMIC CONTENT (gopher CGI) There are two options provided for dynamic content creation and a special -case: standard CGI ( -.Ic .cgi -), dynamic CGI -( -.Ic .dcgi -) and HTTP compatibility mode. +case: standard CGI +.Pq Pa ".cgi" , +dynamic CGI +.Pq Pa ".dcgi" , +and HTTP compatibility mode. Despite the names, all three can accept input and generate dynamic content; the only difference is that dcgi re-formats it's output so it appears to -the server as a standard geomyidae index (.gph) file. This makes the -creation of on-the-fly gopher directories much easier (see examples). -All scripts must be under the gopher root directory and be executable by -the same user:group running geomyidae. Consequently, it is best to use -the -u and -g server options to avoid running as root. +the server as a standard +.Nm +index +.Pq Pa ".gph" +file. +This makes the creation of on-the-fly gopher directories much easier (see examples). +All scripts must be under the gopher root directory and be executable by the same +.Ar "user:group" +running +.Nm . +Consequently, it is best to use the +.Fl u +and +.Fl g +server options to avoid running as root. .Pp -Executed scripts get the full I/O of the socket bound to stdin and stdout. You -are thus able to write long-lasting streaming services. Radio or TV stations over -gopher are possible that way. +Executed scripts get the full I/O of the socket bound to stdin and stdout. +You are thus able to write long-lasting streaming services. +Radio or TV stations over gopher are possible that way. .Pp -Both .cgi and .dcgi scripts have the same argument call structure (as seen by geomyidae): -.Bd -literal -offset indent -executable.[d]cgi $search $arguments $host $port $traversal $selector -.Ed -.Pp -where -.Bd -literal -offset indent -search = query string (type 7) or "" (type 0) -arguments = string behind "?" in selector or "" -host = server's hostname ("localhost" by default) -port = server's port ("70" by default) -traversal = remaining path from path traversal in REST case -selector = raw selector or full req (See HTTP compatibility mode.) -.Ed +Both +.Pa ".cgi" +and +.Pa ".dcgi" +scripts have the same argument call structure (as seen by +.Nm ) : +.Pp +.Dl Ic executable.[d]cgi Ar search Ar arguments Ar host Ar port Ar traversal Ar selector +.Pp +where: +.Bl -tag -width "XXXXXXXXX" -compact +.It Ar search +Query string (type 7) or "" (type 0). +.It Ar arguments +String behind "?" in selector or "". +.It Ar host +Server's hostname ("localhost" by default). +.It Ar port +Server's port ("70" by default). +.It Ar traversal +Remaining path from path traversal in REST case. +.It Ar selector +Raw selector or full req (See HTTP compatibility mode.) +.El .Pp All terms are tab-separated (per gopher protocol) which can cause some -surprises depending on how a script is written. See the CGI file (included -in the geomyidae source archive) for further elaboration. +surprises depending on how a script is written. +See the CGI file (included in the +.Nm +source archive) for further elaboration. .Pp For a special REST path case for the arguments, see the CGI file for the description. .Pp -QUIRK: The original gopher client tried to be too intelligent. It is using -gopher+ when you request some resource. When "search" is just the value "+", -"!", "$" or empty, geomyidae will display a gopher+ redirect instead of -invoking the script. Be careful to design your search script so the user is -unlikely to enter those values. The designers of gopher+ did not think of -classic gopher to survive. It survived gopher+. +QUIRK: The original gopher client tried to be too intelligent. +It is using gopher+ when you request some resource. +When "search" is just the value "+", "!", "$" or empty, +.Nm +will display a gopher+ redirect instead of invoking the script. +Be careful to design your search script so the user is unlikely to enter those values. +The designers of gopher+ did not think of classic gopher to survive. +It survived gopher+. .Pp Additionally to the above arguments several environment variables are set. -.Bd -literal -offset indent -GATEWAY_INTERFACE = `CGI/1.1' -PATH_INFO = script which is executed -PATH_TRANSLATED = absolute path with script which is executed -QUERY_STRING = arguments (See above.) -SELECTOR = raw selector -REQUEST = raw selector -TRAVERSAL = traversal (See above.) -REMOTE_ADDR = IP of the client -REMOTE_HOST = REMOTE_ADDR -REQUEST_METHOD = `GET' -SCRIPT_NAME = script which is executed -SERVER_NAME = server's hostname -SERVER_PORT = server's port -SERVER_LISTEN_NAME = ip the server received the connection on -SERVER_PROTOCOL = `gopher/1.0' -SERVER_SOFTWARE = `geomyidae' -X_GOPHER_SEARCH = search (See above.) -SEARCHREQUEST = search (For backwards compatibility.) -HTTPS and GOPHERS = set, if TLS is used -.Ed +.Bl -tag -width "SERVER_LISTEN_NAME" -compact +.It Ev GATEWAY_INTERFACE +.Qq Cm GI/1.1 +.It Ev PATH_INFO +Script which is executed +.It Ev PATH_TRANSLATED +Absolute path with script which is executed +.It Ev QUERY_STRING +Arguments (See above.) +.It Ev SELECTOR +Raw selector +.It Ev REQUEST +Raw selector +.It Ev TRAVERSAL +Traversal (See above.) +.It Ev REMOTE_ADDR , REMOTE_HOST +IP of the client +.It Ev REQUEST_METHOD +.Qq Cm GET +.It Ev SCRIPT_NAME +Script which is executed. +.It Ev SERVER_NAME +Server's hostname. +.It Ev SERVER_PORT +Server's port. +.It Ev SERVER_LISTEN_NAME +Ip the server received the connection on. +.It Ev SERVER_PROTOCOL +.Qq Cm gopher/1.0 +.It Ev SERVER_SOFTWARE +.Qq Cm geomyidae +.It Ev X_GOPHER_SEARCH +Search (See above.) +.It Ev SEARCHREQUEST +Search (For backwards compatibility.) +.It Ev HTTPS , GOPHERS +Set, if TLS is used. +.El . .Ss The REST path handling If a client requests a path in a selector, which has no corresponding -file or path found, geomyidae will try to traverse from the +file or path found, +.Nm +will try to traverse from the .Fl b Ar base -path until a path component / directory is not found. Then geomyidae -tries to find some index.dcgi or index.cgi file in the last existing -directory. If this is found and the index files are executable, geomyidae -will execute them using the traversal and TRAVERSAL parameter and -environment variable being set to the rest path. +path until a path component / directory is not found. +Then +.Nm +tries to find some index.dcgi or index.cgi file in the last existing directory. +If this is found and the index files are executable, +.Nm +will execute them using the traversal and +.Ev TRAVERSAL +parameter and environment variable being set to the rest path. .Bd -literal -offset indent Selector: /some/v1/service/add/something?args=value -> /some/v1/service exists @@ -421,13 +561,15 @@ Selector: /some/v1/service/add/something?args=value . .Ss HTTP compatibility For maximum flexibility in case someone sends a HTTP request to gopher, -geomyidae supports a special case of CGI. See this example: +.Nm +supports a special case of CGI. +See this example: .Bd -literal -offset indent Client request: GET /some/path HTTP/1.1 -> /GET exists and is executable -> /GET "" "" $host $port "" "GET /some/path HTTP/1.1" is called .Ed - +.Pp This allows for example simple scripts for icecast upload compatibility or handling transparent HTTP right next to gopher, getting TLS for free. . @@ -435,7 +577,8 @@ or handling transparent HTTP right next to gopher, getting TLS for free. Note: these are a very simple examples with no fitness checks with respect to safety/security. .Pp -ex. uptime.cgi - standard CGI, no queries +ex. +.Pa uptime.cgi - standard CGI, no queries . .Bd -literal -offset indent #!/bin/sh @@ -447,13 +590,21 @@ exit 0 .Pp Call the above with the following index.gph entry: .Pp -.D1 [0|System Uptime|/uptime.cgi|frog.bog|70] -.Pp -A search query request must have an item Type of "7" to be called -from an index.gph file. It also needs a "?" suffix in the <path> +.Dl [0|System Uptime|/uptime.cgi|frog.bog|70] +.Pp +A search query request must have an item Type of +.Qq Cm "7" +to be called from an +.Pq index.gph +file. +It also needs a +.Qq Cm "?\&" +suffix in the +.Ar <path> field: .Pp -ex. hello.cgi - standard CGI with query +ex. +.Pa hello.cgi - standard CGI with query . .Bd -literal -offset indent #!/bin/sh @@ -467,24 +618,27 @@ exit 0 . .Pp Call the above with the following index.gph entry: -.Pp -.D1 [7|Hello You - Please enter your name|/hello.cgi?FROG.bog|frog.bog|70] +.Bd -literal -offset indent +[7|Hello You - Please enter your name|/hello.cgi?FROG.bog|frog.bog|70] +.Ed . .Pp And do a simple .Xr snarf 1 query (note the inserted TAB): -.Pp -.D1 % snarf Qo gopher://frog.bog/7/hello.cgi?FROG.bog[TAB]Christoph Qc - -.D1 Hello Christoph - welcome to FROG.bog +.Bd -literal -offset indent +% snarf "gopher://frog.bog/7/hello.cgi?FROG.bog[TAB]Christoph" - +Hello Christoph - welcome to FROG.bog +.Ed . .Pp Dynamic CGI entries are similar to above except that the script needs to create output as described in the -.Ic FORMATTING +.Sx FORMATTING section: .Pp -ex. jughead.dcgi - dynamic CGI script with query +ex. +.Pa jughead.dcgi - dynamic CGI script with query . .Bd -literal -offset indent #!/bin/sh @@ -506,112 +660,135 @@ exit 0 .Pp Call the above with the following index.gph entry: .Pp -.D1 [7|Search this Gopher|/jughead.dcgi?|frog.bog|70] +.Dl [7|Search this Gopher|/jughead.dcgi?|frog.bog|70] .Pp A successful query might look like this: +.Bd -filled -offset indent +Search results for +.Qq fubar : .Pp -.Bl -tag -width Ds -compact -offset indent -.It Search results for Qo fubar Qc : -.Pp -.It Ic (FILE) +.Bl -tag -width "(XXXX)" -compact +.It Sy (FILE) How_Things_Break.txt -.It Ic (FILE) +.It Sy (FILE) Origins_of_Words.txt -.It Ic (FILE) +.It Sy (FILE) Phrases_of_the_Ages.txt .El +.Ed . .Pp -Care should to be exercised to avoid creating miss-Typed entries, unwanted +Care should to be exercised to avoid creating mistyped entries, unwanted recursions, and/or unintended writes in the working directory. .Sh HAPROXY SUPPORT -geomyidae has +.Nm +has .Em HAProxy -support. It can be enabled using the +support. +It can be enabled using the .Fl y parameter. . .Sh LOG FILES The log file (ie. /var/log/gopherd.log) has the following structure: -. -.Pp -.Ic [<date>|<IP/Host>|<port>|<status>] <item path> +.Dl [ Ns Ar <date> Ns | Ns Ar <IP/Host> Ns | Ns Ar <port> Ns | Ns Ar <status> Ns ] Ar <item path> . .Pp where, -. -.Bl -inset -.It Ic <date> -= access date and time (std 'date' format) -.Pp - ex. -.Qq "2018-01-31 14:18:34 +0000" -.It Ic <IP/Host> -= client IP/Host served -.Pp +.Bl -tag -width "<XXXX XXXX>" +.It Ar <date> +Access date and time (std 'date' format). +.br ex. -.Qq "104.23.33.1" -.It Ic <port> -= client port served -.Pp +.Qq Cm "2018-01-31 14:18:34 +0000" +.It Ar <IP/Host> +Client IP/Host served +.br ex. -.Qq "16857" -.It Ic <status> -= status of client request -.Pp +.Qq Cm "104.23.33.1" +.It Ar <port> +Client port served +.br +ex. +.Qq Cm "16857" +.It Ar <status> +Status of client request +.br ex. - some common status entries: -.It Qo serving Qc -=> a successful request -.It Qo not found Qc -=> an unsuccessful request -.It Qo HTTP redirect Qc -=> web link redirect (Type h) -.It Qo dir listing Qc -=> unindexed directory listing -.It Ic <item path> -= full path to item served -.Pp +.Bl -tag -width "XXXX XXXXXXXX" -compact +.It Qq Cm serving +A successful request. +.It Qq Cm not found +An unsuccessful request. +.It Qq Cm HTTP redirect +Web link redirect (Type h). +.It Qq Cm dir listing +Unindexed directory listing. +.El +.It Ar <item path> +Full path to item served +.br ex. -.D1 Qo "/PICS/simple2.jpg" Qc for an image file -.D1 Qo "/PICS" Qc for a directory access +.Qq Pa "/PICS/simple2.jpg" +for an image file; +.Qq Pa "/PICS" +for a directory access. .El . .Sh ENCRYPTION ONLY -If you set the sticky bit (chmod +t) on some file or directory, geomyidae -will only serve it over an encrypted connection. There is the special -case, that when the sticky bit is set on the +If you set the sticky bit +.Pq Ql "chmod +t" +on some file or directory, +.Nm +will only serve it over an encrypted connection. +There is the special case, that when the sticky bit is set on the .Ar base -directory, all content will only be served over tls. +directory, all content will only be served over TLS. . .Sh FILES -README, LICENSE, CGI, index.gph, rc.d/, LINKS, gph/ +.Pa README , LICENSE , CGI , index.gph , rc.d/ , LINKS , gph/ . .Sh SEE ALSO Links for further information on gopher: .Pp -.D1 Pa gopher://gopher.floodgap.com -.D1 Pa gopher://gopherproject.org +.Lk gopher://gopher.floodgap.com "Floodgap Systems" +.Pp +.Lk gopher://gopherproject.org "The Gopher Project" .Sh STANDARDS -.Em Internet RFC 1436 +.Rs +.%A F. Anklesaria +.%A M. McCahill +.%A P. Lindner +.%A D. Johnson +.%A D. Torrey +.%A B. Alberti +.%D March 1993 +.%R RFC 1436 +.%T The Internet Gopher Protocol (a distributed document search and retrieval protocol) +.Re . .Sh HISTORY .Bd -filled -geomyidae started as a Linux/BSD port of the Plan 9 gopherd_P9 server. -Originally called gopherd_BSD, the name was later changed to Geomyidae -(latin), the taxonomic family of burrowing rodents known as "pocket -gophers" which are in fact the true gophers. Due to inconsistencies -and the UNIX culture, the name was changed to lowercase in 2010. +.Nm +started as a Linux/BSD port of the Plan 9 gopherd_P9 server. +Originally called gopherd_BSD, the name was later changed to +.Qq Em Geomyidae +(latin), the taxonomic family of burrowing rodents known as +.Qq Em "pocket gophers" +which are in fact the true gophers. +Due to inconsistencies and the UNIX culture, the name was changed to lowercase in 2010. .Ed . .Sh AUTHORS See LICENSE file for authors in the distribution. . .Sh LICENSE -geomyidae is released under the MIT/X Consortium License. +.Nm +is released under the MIT/X Consortium License. . .Sh BUGS Dynamic content functionality may vary across gopher clients. . .Ss "Reporting Bugs" Report bugs to: -.An "Christoph Lohmann" Aq 20h@R-36.net +.An "Christoph Lohmann" Aq Mt 20h@R-36.net