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 28c6362fb2bcbe837e46883e60eb2e89efc59692
parent 81f3ec7d02246ab56d7fcc57ce18d546a3fe4b6f
Author: Christoph Lohmann <20h@r-36.net>
Date:   Sat, 22 Jul 2023 17:51:54 +0200

Add REST handling example to manpage.

Diffstat:
Mgeomyidae.8 | 45+++++++++++++++++++++++++++++++++++----------
Mhandlr.c | 2--
2 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/geomyidae.8 b/geomyidae.8 @@ -331,22 +331,28 @@ Search Veronica II Telnet to SDF Public Access Unix System .El .Sh DYNAMIC CONTENT (gopher CGI) -There are two options provided for dynamic content creation: standard CGI ( +There are two options provided for dynamic content creation and a special +case: standard CGI ( .Ic .cgi -) and dynamic CGI +), dynamic CGI ( .Ic .dcgi -). Despite the names, both can accept input and generate dynamic content; -the only difference is the latter re-formats it's output so it appears to +) 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. .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. +.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 +executable.[d]cgi $search $arguments $host $port $traversal $selector .Ed .Pp where @@ -355,8 +361,8 @@ 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 -selector = raw selector +traversal = remaining path from path traversal in REST case +selector = raw selector or full req (See http compatibility mode.) .Ed .Pp All terms are tab-separated (per gopher protocol) which can cause some @@ -381,7 +387,7 @@ PATH_TRANSLATED = absolute path with script which is executed QUERY_STRING = arguments (See above.) SELECTOR = raw selector REQUEST = raw selector -TRAVERSAL = traversel (See above.) +TRAVERSAL = traversal (See above.) REMOTE_ADDR = IP of the client REMOTE_HOST = REMOTE_ADDR REQUEST_METHOD = `GET' @@ -396,6 +402,23 @@ SEARCHREQUEST = search (For backwards compatibility.) HTTPS and GOPHERS = set, if TLS is used .Ed . +.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 +.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. +.Bd -literal -offset indent +Selector: /some/v1/service/add/something?args=value +-> /some/v1/service exists +-> /some/v1/service/index.dcgi exists +-> /some/v1/service/index.dcgi "" "args=value" $host $port +"/add/something" "/some/v1/service/add/something?args=value" is called +.Ed +. .Ss Some CGI Examples Note: these are a very simple examples with no fitness checks with respect to safety/security. @@ -490,9 +513,11 @@ Phrases_of_the_Ages.txt Care should to be exercised to avoid creating miss-Typed entries, unwanted recursions, and/or unintended writes in the working directory. .Sh HAPROXY SUPPORT -Geomyidae has +geomyidae has .Em HAProxy -support. It can be enabled using the -y parameter. +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: diff --git a/handlr.c b/handlr.c @@ -159,8 +159,6 @@ handlecgi(int sock, char *file, char *port, char *base, char *args, filec = xstrdup(file); path = dirname(filec); script = path + strlen(path) + 1; - printf("path = %s\n", path); - printf("script = %s\n", script); if (sear == NULL) sear = "";