aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOmar Polo <op@omarpolo.com>2020-11-06 18:12:57 +0100
committerOmar Polo <op@omarpolo.com>2020-11-06 18:12:57 +0100
commit92e66347ed2971e811170559eb8865e0db0a5d3e (patch)
treed0a265c71145a5941daf6df12487dbe6f200832f
parent0ed56567950c521041674b3e255147b6d6bea03e (diff)
regen readme
-rw-r--r--README.md71
1 files changed, 53 insertions, 18 deletions
diff --git a/README.md b/README.md
index 6e0de5d..b8b11de 100644
--- a/README.md
+++ b/README.md
@@ -6,18 +6,18 @@
# SYNOPSIS
**gmid**
-\[**-hx**]
+\[**-h**]
\[**-c**&nbsp;*cert.pem*]
\[**-d**&nbsp;*docs*]
\[**-k**&nbsp;*key.pem*]
-\[**-l**&nbsp;*access.log*]
+\[**-l**&nbsp;*logfile*]
+\[**-x**&nbsp;*cgi-bin*]
# DESCRIPTION
**gmid**
-is a very simple and minimal gemini server.
-It only supports serving static content, and strive to be as simple as
-possible.
+is a very simple and minimal gemini server that can serve static files
+and execute CGI scripts.
**gmid**
will strip any sequence of
@@ -27,7 +27,7 @@ or trailing
in the requests made by clients, so it's impossible to serve content
outside the
*docs*
-directory by mistake, and will also refuse to follow symlink.
+directory by mistake, and will also refuse to follow symlinks.
Furthermore, on
OpenBSD,
pledge(2)
@@ -35,15 +35,15 @@ and
unveil(2)
are used to ensure that
**gmid**
-dosen't do anything else than read files from the given directory and
-accept network connections.
+dosen't do anything else than read files from the given directory,
+accept network connections and, optionally, execute CGI scripts.
It should be noted that
**gmid**
is very simple in its implementation, and so it may not be appropriate
-for serving site with lots of users.
-After all, the code is single threaded and use a single process
-(multiple requests are handled concurrently thanks to async I/O.)
+for serving sites with lots of users.
+After all, the code is single threaded and use a single process,
+although it can handle multiple requests concurrently.
If a user request path is a directory,
**gmid**
@@ -63,7 +63,8 @@ The options are as follows:
> The root directory to serve.
> **gmid**
-> won't serve any file that is outside that directory.
+> won't serve any file that is outside that directory, by default
+> *docs*.
**-h**
@@ -74,7 +75,7 @@ The options are as follows:
> The key for the certificate, by default is
> *key.pem*.
-**-l** *access.log*
+**-l** *logfile*
> log to the given file instead of the standard error.
@@ -88,6 +89,40 @@ The options are as follows:
When CGI scripts are enabled for a directory, a request for an
executable file will execute it and fed its output to the client.
+The CGI scripts will inherit the environment from
+**gmid**
+with these additional variables set:
+
+`SERVER_SOFTWARE`
+
+> "gmid"
+
+`SERVER_PROTOCOL`
+
+> "gemini"
+
+`SERVER_PORT`
+
+> "1965"
+
+`PATH_INFO`
+
+> the request path
+
+`PATH_TRANSLATED`
+
+> the full path: the concatenation of the document root and the request
+> path
+
+`QUERY_STRING`
+
+> the query string if present in the request URL, otherwise it
+> won't be set.
+
+`REMOTE_ADDR`
+
+> the IP address of the client in dot notation
+
# EXAMPLES
To quickly getting started
@@ -102,21 +137,21 @@ To quickly getting started
EOF
$ gmid -c cert.pem -k key.pem -d docs
-now you can visit gemini://localhost/ with your preferred gemini
+Now you can visit gemini://localhost/ with your preferred gemini
client.
To add some CGI scripts, assuming a setup similar to the previous
-example, one can
+example, you can
$ mkdir docs/cgi-bin
$ cat <<EOF > docs/cgi-bin/hello-world
#!/bin/sh
- printf "20 text/plain0
+ printf "20 text/plain\r\n"
echo "hello world!"
EOF
- $ gmid -d docs -x cgi-bin
+ $ gmid -x cgi-bin
-note that the argument to the
+Note that the argument to the
**-x**
option is
*cgi-bin*