URI: 
       geomyidae.8 - geomyidae - A small C-based gopherd.
  HTML git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
   DIR LICENSE
       ---
       geomyidae.8 (17816B)
       ---
            1 .\" geomyidae.8 handcrafted in GNU groff -mdoc using nvi
            2 .\"
            3 .Dd January 4, 2025
            4 .Dt GEOMYIDAE 8
            5 .Os
            6 .
            7 .Sh NAME
            8 .Nm geomyidae
            9 .Nd a gopher daemon for Linux/BSD
           10 .
           11 .Sh SYNOPSIS
           12 .Nm
           13 .Bk -words
           14 .Op Fl 4
           15 .Op Fl 6
           16 .Op Fl c
           17 .Op Fl d
           18 .Op Fl e
           19 .Op Fl n
           20 .Op Fl s
           21 .Op Fl y
           22 .Op Fl l Ar logfile
           23 .Op Fl v Ar loglevel
           24 .Op Fl b Ar base
           25 .Op Fl p Ar port
           26 .Op Fl o Ar sport
           27 .Op Fl u Ar user
           28 .Op Fl g Ar group
           29 .Op Fl h Ar host
           30 .Op Fl i Ar interface ...
           31 .Op Fl t Ar keyfile certfile
           32 .Ek
           33 .
           34 .Sh DESCRIPTION
           35 .Nm
           36 is a daemon for serving the protocol specified in
           37 .Em RFC 1436
           38 (Gopher).
           39 Under 1000 lines of C by design, it is lightweight yet supports
           40 dynamic content, automatic file/directory indexing, logging and privilege
           41 separation.
           42 .
           43 .Sh IMPLEMENTATION
           44 Installation is straightforward: grab the zipped tar file, expand it in
           45 an appropriate temp directory, change to the
           46 .Qq Pa "../geomyidae-x.xx"
           47 directory, tweak the Makefile if desired (installs in
           48 .Qq Pa "/usr/bin"
           49 by default), then run the
           50 .Qq Ql "make ; make install"
           51 commands.
           52 The resulting executable should be run by root.
           53 .
           54 .Ss Basic Installation and Startup
           55 .Bd -literal -offset indent
           56 $ wget ftp://bitreich.org/releases/geomyidae/geomyidae-$VERSION.tar.lz
           57 $ lzip -d geomyidae-$VERSION.tar.lz
           58 $ tar -xvf geomyidae-*.tar
           59 $ cd geomyidae-*
           60 $ make; sudo make install
           61 $ sudo mkdir -p /var/gopher
           62 $ sudo cp index.gph /var/gopher
           63 $ sudo geomyidae -l /var/log/geomyidae.log -b /var/gopher -p 70
           64 $ tail -f /var/log/geomyidae.log
           65 .Ed
           66 .
           67 .Pp
           68 Use whatever gopher client you like (ie. sacc) to browse:
           69 .Bd -literal -offset indent
           70 $ sacc gopher://localhost
           71 .Ed
           72 .
           73 .Ss Running
           74 .Nm
           75 should normally be started by root, although it can be started
           76 by a regular user provided that the base directory and its contents are owned
           77 by the same user.
           78 .Nm
           79 will only serve content within the base directory
           80 tree and will drop privileges to the
           81 .Fl u Ar user
           82 and
           83 .Fl g Ar group
           84 values if set.
           85 See
           86 .Sx OPTIONS
           87 below for specifics.
           88 Launching
           89 .Nm
           90 automatically is best done via a UNIX
           91 run-time (rc.d) script; several sample rc.d scripts are included in the
           92 .Nm
           93 source archive.
           94 Logging in
           95 .Nm
           96 can be done through either logfiles or syslog.
           97 .
           98 .Sh OPTIONS
           99 .Nm
          100 options and default settings:
          101 .Bl -tag -width Ds
          102 .
          103 .It Fl 4
          104 Only use IPv4.
          105 .
          106 .It Fl 6
          107 Only use IPv6.
          108 .
          109 .It Fl c
          110 Use
          111 .Xr chroot 2
          112 for the
          113 .Ar base
          114 directory (by default off).
          115 .
          116 .It Fl d
          117 Don't fork into background.
          118 If no
          119 .Ar logfile
          120 is given, this implies logging to the standard output.
          121 .
          122 .It Fl e
          123 Disable execution of any CGI or DCGI script.
          124 .
          125 .It Fl n
          126 Perform reverse lookups.
          127 .
          128 .It Fl s
          129 Log using syslog for logging.
          130 .
          131 .It Fl y
          132 Enable HAProxy support.
          133 .
          134 .It Fl l Ar logfile
          135 Specify file where log output is written (no default).
          136 .
          137 .It Fl v Ar loglevel
          138 Set the logging level (default: 47).
          139 Loglevels:
          140 .Bl -tag -width "XX" -compact
          141 .It Cm 0
          142 no logging
          143 .It Cm 1
          144 served plain files
          145 .It Cm 2
          146 directory listings
          147 .It Cm 4
          148 HTTP redirects
          149 .It Cm 8
          150 errors (e.g., not found)
          151 .It Cm 16
          152 client connections
          153 .It Cm 32
          154 gopher+ redirects
          155 .El
          156 .Pp
          157 E.g.:
          158 .Bd -literal -offset indent
          159 1 + 2 + 4 + 8 + 32 = 47
          160 (files + directories + HTTP + errors + gopher+)
          161 .Ed
          162 .
          163 .It Fl b Ar base
          164 Root directory to serve
          165 .Po
          166 default:
          167 .Pa /var/gopher
          168 .Pc .
          169 .
          170 .It Fl p Ar port
          171 Port
          172 .Nm
          173 should listen on (default: 70).
          174 .
          175 .It Fl o Ar sport
          176 Port
          177 .Nm
          178 displays within base directory (default: 70).
          179 Use in conjunction with
          180 .Ic -p
          181 for obfuscating actual port
          182 .Nm
          183 is running on.
          184 .
          185 .It Fl u Ar user
          186 Sets the user to which privileges drop when
          187 .Nm
          188 is ready to accept network connections (default: user
          189 .Nm
          190 runs as).
          191 Helps improve security by reducing privileges during request
          192 processing.
          193 .
          194 .It Fl g Ar group
          195 Sets the group to which privileges drop when
          196 .Nm
          197 is ready to accept network connections (default: group
          198 .Nm
          199 runs as).
          200 Helps improve security by reducing privileges during request
          201 processing.
          202 .
          203 .It Fl h Ar host
          204 Host to use in directory listings (default: localhost).
          205 .
          206 .It Fl i Ar interface
          207 Defines the interface to which
          208 .Nm
          209 binds to
          210 .Po
          211 default:
          212 .Cm 0.0.0.0
          213 .Pc .
          214 Multiple interfaces can be given.
          215 .
          216 .It Fl t Ar keyfile certfile
          217 Activate gopher TLS and use the private key
          218 .Ar keyfile
          219 and the public key
          220 .Ar certfile
          221 for TLS connections (if the feature is compiled in.) See
          222 .Sx ENCRYPTION ONLY
          223 support below.
          224 .El
          225 .
          226 .Sh FORMATTING
          227 Structured Gopher space(s) can be created with
          228 .Nm
          229 through the use of special indexing files of the form
          230 .Pa <name>.gph
          231 which, if present,
          232 .Nm
          233 uses to format and/or filter the contents of the base directory
          234 .Po
          235 .Pa /var/gopher
          236 by default
          237 .Pc
          238 and create gopher menus.
          239 However, index files are
          240 .Em not
          241 required: if no
          242 .Pa index.gph ,
          243 .Pa index.cgi
          244 or
          245 .Pa index.dcgi
          246 file is found,
          247 .Nm
          248 simply lists the directory contents in alphanumeric order.
          249 In addition, a directory can utilize
          250 multiple index files to create a layered gopher environment without the
          251 use of sub-directories: ie.\&
          252 .Pa pictures.gph ,
          253 .Pa music.gph
          254 and
          255 .Pa documents.gph
          256 could be "directories" within
          257 .Pa main.gph ,
          258 yet all reside in
          259 .Pa /var/gopher
          260 along with their respective files (*.jpg, *.mp3, *.pdf for example).
          261 .
          262 .Ss Anatomy of an index.gph file
          263 A gph file consists of informational text and links.
          264 A link has the form:
          265 .Pp
          266 .Dl [ Ar <type> Ns | Ns Ar <desc> Ns | Ns Ar <path> Ns | Ns Ar <host> Ns | Ns Ar <port> ]
          267 .Pp
          268 where,
          269 .Bl -tag -width "<XXXX>"
          270 .It Ar <type>
          271 A valid gopher Item Type.
          272 .Pp
          273 Some common Gopher Types as defined in
          274 .Em RFC 1436 :
          275 .
          276 .Bl -tag -width "XX" -compact
          277 .It Cm 0
          278 Item is a file.
          279 .It Cm 1
          280 Gopher directory.
          281 .It Cm 3
          282 Error.
          283 .It Cm 7
          284 Item is an Index-Search server.
          285 .It Cm 8
          286 Item points to a text-based telnet session.
          287 .It Cm 9
          288 Binary file.
          289 Client reads until TCP connection closes!
          290 .It Cm g
          291 GIF format graphics file.
          292 .It Cm I
          293 Indeterminate image file.
          294 Client decides how to display.
          295 .El
          296 .Pp
          297 In addition,
          298 .Nm
          299 provides these:
          300 .Bl -tag -width "XX" -compact
          301 .It Cm h
          302 Item is a hypertext (HTTP) link.
          303 .It Cm i
          304 Informational Item (used for descriptive purposes).
          305 .El
          306 .Pp
          307 Unknown file types default to Type
          308 .Qq Cm "9"
          309 (binary).
          310 .
          311 .It Ar <desc>
          312 Description of gopher item.
          313 Most printable characters should work.
          314 .
          315 .It Ar <path>
          316 Full or relative path to gopher item (base value is
          317 .Qq Pa "/" ) .
          318 Use the
          319 .Qq Pa "Err"
          320 path for items not intended to be served.
          321 .
          322 .It Ar <host>
          323 Hostname or IP hosting the gopher item.
          324 Must be resolvable for the intended clients.
          325 If this is set to
          326 .Qq Cm "server" ,
          327 the server's hostname is used.
          328 .
          329 .It Ar <port>
          330 TCP port number (usually 70).
          331 If this is set to
          332 .Qq Cm "port" ,
          333 the default port of the server is used.
          334 .El
          335 .
          336 .Pp
          337 Note:
          338 .Nm
          339 doesn't require "informational" text to be formally typed as
          340 .Ql "[i|...]" ;
          341 any line
          342 .Em not
          343 beginning with
          344 .Ql "\(lB"
          345 is treated as informational, greatly simplifying the formatting of
          346 .Pa index.gph
          347 files.
          348 If you want to display some informational text beginning with
          349 .Ql "\(lB"
          350 you can use the special case of an empty item type.
          351 .Ql "[|[some link"
          352 will be shortened to
          353 .Ql "[some link" .
          354 For dynamically generated content it may be desirable to either formally type
          355 informational text or run it through a filter to prepend
          356 .Ql "[|"
          357 - \.ie
          358 .Ql "sed 's,^[,[|&,'" .
          359 .Pp
          360 Note 2: You can escape a pipe
          361 .Pq Ql "\(ba"
          362 character in for example a
          363 .Cm <desc>
          364 field by prepending a slash ("\\").
          365 .Pp
          366 Note 3: The gph parser is very forgiving.
          367 If the link structure is not parsed correctly, then the original line is printed.
          368 .
          369 .Ss index.gph Example
          370 A
          371 .Pa root.gph
          372 file for a server running on
          373 .Ql host=frog.bog ,
          374 .Ql port=70 .
          375 Note use of optional [i]nformational Item (line 2) for vertical space insertion:
          376 .Bd -literal -offset indent
          377 Welcome to Frog.bog
          378 [i||Err||]
          379 [0|About this server|about.txt|frog.bog|70]
          380 [0|Daily Log|/dtail.cgi|frog.bog|70]
          381 [1|Phlog: like a blog, but not|/PHLOG|frog.bog|70]
          382 [9|Some binary file|widget.exe|frog.bog|70]
          383 [I|Snowflake picture|snowflake.jpg|frog.bog|70]
          384 try our snowflakes!
          385 
          386 Links and Searches
          387 [1|Go to R-36.net|/|gopher.r-36.net|70]
          388 [h|Go to NetBSD.org|URL:http://netbsd.org|frog.bog|70]
          389 [7|Query US Weather by Zipcode|/weather.cgi?|frog.bog|70]
          390 [7|Search Veronica II|/v2/vs|gopher.floodgap.com|70]
          391 [8|Telnet to SDF Public Access Unix System|null|freeshell.org|23]
          392 .Ed
          393 .
          394 .Pp
          395 The above looks something like this in a text-based gopher client:
          396 .Bd -filled -offset indent
          397 .Bl -tag -width "(XXXXX)" -compact
          398 .It Sy Welcome to Frog.bog
          399 .Pp
          400 .It Sy (FILE)
          401 About this server
          402 .It Sy (FILE)
          403 Daily Log
          404 .It Sy (DIR)
          405 Phlog: like a blog, but not
          406 .It Sy (BIN)
          407 Some binary file
          408 .It Sy (IMG)
          409 Snowflake picture
          410 .El
          411 .Pp
          412 try our snowflakes!
          413 .Pp
          414 .Bl -tag -width "(XXXXX)" -compact
          415 .It Sy Links and Searches
          416 .It Sy (DIR)
          417 Go to R-36.net
          418 .It Sy (HTML)
          419 Go to NetBSD.org
          420 .It Sy (?)
          421 Query US Weather by Zipcode
          422 .It Sy (?)
          423 Search Veronica II
          424 .It Sy (TEL)
          425 Telnet to SDF Public Access Unix System
          426 .El
          427 .Ed
          428 .Sh DYNAMIC CONTENT (gopher CGI)
          429 There are two options provided for dynamic content creation and a special
          430 case: standard CGI
          431 .Pq Pa ".cgi" ,
          432 dynamic CGI
          433 .Pq Pa ".dcgi" ,
          434 and HTTP compatibility mode.
          435 Despite the names, all three can accept input and generate dynamic content;
          436 the only difference is that dcgi re-formats it's output so it appears to
          437 the server as a standard
          438 .Nm
          439 index
          440 .Pq Pa ".gph"
          441 file.
          442 This makes the creation of on-the-fly gopher directories much easier (see examples).
          443 All scripts must be under the gopher root directory and be executable by the same
          444 .Ar "user:group"
          445 running
          446 .Nm .
          447 Consequently, it is best to use the
          448 .Fl u
          449 and
          450 .Fl g
          451 server options to avoid running as root.
          452 .Pp
          453 Executed scripts get the full I/O of the socket bound to stdin and stdout.
          454 You are thus able to write long-lasting streaming services.
          455 Radio or TV stations over gopher are possible that way.
          456 .Pp
          457 Both
          458 .Pa ".cgi"
          459 and
          460 .Pa ".dcgi"
          461 scripts have the same argument call structure (as seen by
          462 .Nm ) :
          463 .Pp
          464 .Dl Ic executable.[d]cgi Ar search Ar arguments Ar host Ar port Ar traversal Ar selector
          465 .Pp
          466 where:
          467 .Bl -tag -width "XXXXXXXXX" -compact
          468 .It Ar search
          469 Query string (type 7) or "" (type 0).
          470 .It Ar arguments
          471 String behind "?" in selector or "".
          472 .It Ar host
          473 Server's hostname ("localhost" by default).
          474 .It Ar port
          475 Server's port ("70" by default).
          476 .It Ar traversal
          477 Remaining path from path traversal in REST case.
          478 .It Ar selector
          479 Raw selector or full req (See HTTP compatibility mode.)
          480 .El
          481 .Pp
          482 All terms are tab-separated (per gopher protocol) which can cause some
          483 surprises depending on how a script is written.
          484 See the CGI file (included in the
          485 .Nm
          486 source archive) for further elaboration.
          487 .Pp
          488 For a special REST path case for the arguments, see the CGI file for the
          489 description.
          490 .Pp
          491 QUIRK: The original gopher client tried to be too intelligent.
          492 It is using gopher+ when you request some resource.
          493 When "search" is just the value "+", "!", "$" or empty,
          494 .Nm
          495 will display a gopher+ redirect instead of invoking the script.
          496 Be careful to design your search script so the user is unlikely to enter those values.
          497 The designers of gopher+ did not think of classic gopher to survive.
          498 It survived gopher+.
          499 .Pp
          500 Additionally to the above arguments several environment variables are set.
          501 Only the programmatically relevant variables are listed here.
          502 For further information, see ind.c:setcgienviron() in the geomyidae
          503 source code.
          504 .Bl -tag -width "REMOTE_ADDR , REMOTE_HOST" -compact
          505 .It Ev PATH_INFO
          506 Traversal (See above.)
          507 .It Ev PATH_TRANSLATED
          508 Absolute path to script.
          509 .It Ev QUERY_STRING
          510 Arguments (See above.)
          511 .It Ev REMOTE_ADDR , REMOTE_HOST
          512 IP of the client
          513 .It Ev SCRIPT_NAME
          514 Script which is executed.
          515 .It Ev SERVER_NAME
          516 Server's hostname.
          517 .It Ev SERVER_PORT
          518 Server's port.
          519 .It Ev GOPHER_SELECTOR
          520 Raw gopher selector
          521 .It Ev GOPHER_REQUEST
          522 Raw gopher selector
          523 .It Ev GOPHER_SEARCH
          524 Search (See above.)
          525 .It Ev GOPHER_SCRIPT_FILENAME
          526 Absolute path with script which is executed.
          527 .It Ev GOPHER_DOCUMENT_ROOT
          528 Base root for serving files.
          529 .It Ev SERVER_LISTEN_NAME
          530 Ip the server received the connection on.
          531 .It Ev HTTPS , GOPHERS
          532 Set, if TLS is used.
          533 .El
          534 .
          535 .Ss The REST path handling
          536 If a client requests a path in a selector, which has no corresponding
          537 file or path found,
          538 .Nm
          539 will try to traverse from the
          540 .Fl b Ar base
          541 path until a path component / directory is not found.
          542 Then
          543 .Nm
          544 tries to find some index.dcgi or index.cgi file in the last existing directory.
          545 If this is found and the index files are executable,
          546 .Nm
          547 will execute them using the traversal and
          548 .Ev PATH_INFO
          549 parameter and environment variable being set to the rest path.
          550 .Bd -literal -offset indent
          551 Selector: /some/v1/service/add/something?args=value
          552 -> /some/v1/service exists
          553 -> /some/v1/service/index.dcgi exists
          554 -> /some/v1/service/index.dcgi "" "args=value" $host $port
          555 "/add/something" "/some/v1/service/add/something?args=value" is called
          556 .Ed
          557 .
          558 .Ss HTTP compatibility
          559 For maximum flexibility in case someone sends a HTTP request to gopher,
          560 .Nm
          561 supports a special case of CGI.
          562 See this example:
          563 .Bd -literal -offset indent
          564 Client request: GET /some/path HTTP/1.1
          565 -> /GET exists and is executable
          566 -> /GET "" "" $host $port "" "GET /some/path HTTP/1.1" is called
          567 .Ed
          568 .Pp
          569 This allows for example simple scripts for icecast upload compatibility
          570 or handling transparent HTTP right next to gopher, getting TLS for free.
          571 .
          572 .Ss Some CGI Examples
          573 Note: these are a very simple examples with no fitness checks with respect
          574 to safety/security.
          575 .Pp
          576 ex.
          577 .Pa uptime.cgi - standard CGI, no queries
          578 .
          579 .Bd -literal -offset indent
          580 #!/bin/sh
          581 #  uptime.cgi - prints system uptime(1)
          582 /usr/bin/uptime
          583 exit 0
          584 .Ed
          585 .
          586 .Pp
          587 Call the above with the following index.gph entry:
          588 .Pp
          589 .Dl [0|System Uptime|/uptime.cgi|frog.bog|70]
          590 .Pp
          591 A search query request must have an item Type of
          592 .Qq Cm "7"
          593 to be called from an
          594 .Pq index.gph
          595 file.
          596 It also needs a
          597 .Qq Cm "?\&"
          598 suffix in the
          599 .Ar <path>
          600 field:
          601 .Pp
          602 ex.
          603 .Pa hello.cgi - standard CGI with query
          604 .
          605 .Bd -literal -offset indent
          606 #!/bin/sh
          607 #  hello.cgi - welcome user
          608 NAME=$1
          609 HOSTNAME=$2
          610 echo ""
          611 echo Hello $NAME - welcome to $HOSTNAME
          612 exit 0
          613 .Ed
          614 .
          615 .Pp
          616 Call the above with the following index.gph entry:
          617 .Bd -literal -offset indent
          618 [7|Hello You - Please enter your name|/hello.cgi?FROG.bog|frog.bog|70]
          619 .Ed
          620 .
          621 .Pp
          622 And do a simple
          623 .Xr snarf 1
          624 query (note the inserted TAB):
          625 .Bd -literal -offset indent
          626 % snarf "gopher://frog.bog/7/hello.cgi?FROG.bog[TAB]Christoph" -
          627 Hello Christoph - welcome to FROG.bog
          628 .Ed
          629 .
          630 .Pp
          631 Dynamic CGI entries are similar to above except that the script
          632 needs to create output as described in the
          633 .Sx FORMATTING
          634 section:
          635 .Pp
          636 ex.
          637 .Pa jughead.dcgi - dynamic CGI script with query
          638 .
          639 .Bd -literal -offset indent
          640 #!/bin/sh
          641 # jughead.dcgi - jughead-like local gopher search
          642 KWRD="$1"
          643 ARCHIVE="/var/gopher/textfiles/"
          644 echo "[i|Search results for \\"${KWRD}\\":|Err||]"
          645 echo "[i||Err||]"
          646 # grep(1) recursive, case-insensitive KWRD search of ARCHIVE:
          647 for RESULT in $(/usr/bin/grep -i -l -m1 ${KWRD} -r $ARCHIVE)
          648 do
          649         DESC=$(/usr/bin/basename ${RESULT})
          650         PATH=$(echo "$RESULT" | /usr/bin/sed 's/^\\/var\\/gopher//')
          651         echo "[0|${DESC}|${PATH}|frog.bog|70]"
          652 done
          653 exit 0
          654 .Ed
          655 .
          656 .Pp
          657 Call the above with the following index.gph entry:
          658 .Pp
          659 .Dl [7|Search this Gopher|/jughead.dcgi?|frog.bog|70]
          660 .Pp
          661 A successful query might look like this:
          662 .Bd -filled -offset indent
          663 Search results for
          664 .Qq fubar :
          665 .Pp
          666 .Bl -tag -width "(XXXX)" -compact
          667 .It Sy (FILE)
          668 How_Things_Break.txt
          669 .It Sy (FILE)
          670 Origins_of_Words.txt
          671 .It Sy (FILE)
          672 Phrases_of_the_Ages.txt
          673 .El
          674 .Ed
          675 .
          676 .Pp
          677 Care should to be exercised to avoid creating mistyped entries, unwanted
          678 recursions, and/or unintended writes in the working directory.
          679 .Sh HAPROXY SUPPORT
          680 .Nm
          681 has
          682 .Em HAProxy
          683 support.
          684 It can be enabled using the
          685 .Fl y
          686 parameter.
          687 .
          688 .Sh LOG FILES
          689 The log file (ie. /var/log/gopherd.log) has the following structure:
          690 .Dl [ Ns Ar <date> Ns | Ns Ar <IP/Host> Ns | Ns Ar <port> Ns | Ns Ar <status> Ns ] Ar  <item path>
          691 .
          692 .Pp
          693 where,
          694 .Bl -tag -width "<XXXX XXXX>"
          695 .It Ar <date>
          696 Access date and time (std 'date' format).
          697 .br
          698 ex.
          699 .Qq Cm "2018-01-31 14:18:34 +0000"
          700 .It Ar <IP/Host>
          701 Client IP/Host served
          702 .br
          703 ex.
          704 .Qq Cm "104.23.33.1"
          705 .It Ar <port>
          706 Client port served
          707 .br
          708 ex.
          709 .Qq Cm "16857"
          710 .It Ar <status>
          711 Status of client request
          712 .br
          713 ex. - some common status entries:
          714 .Bl -tag -width "XXXX XXXXXXXX" -compact
          715 .It Qq Cm serving
          716 A successful request.
          717 .It Qq Cm not found
          718 An unsuccessful request.
          719 .It Qq Cm HTTP redirect
          720 Web link redirect (Type h).
          721 .It Qq Cm dir listing
          722 Unindexed directory listing.
          723 .El
          724 .It Ar <item path>
          725 Full path to item served
          726 .br
          727 ex.
          728 .Qq Pa "/PICS/simple2.jpg"
          729 for an image file;
          730 .Qq Pa "/PICS"
          731 for a directory access.
          732 .El
          733 .
          734 .Sh ENCRYPTION ONLY
          735 If you set the sticky bit
          736 .Pq Ql "chmod +t"
          737 on some file or directory,
          738 .Nm
          739 will only serve it over an encrypted connection.
          740 There is the special case, that when the sticky bit is set on the
          741 .Ar base
          742 directory, all content will only be served over TLS.
          743 .
          744 .Sh FILES
          745 .Pa README , LICENSE , CGI , index.gph , rc.d/ , LINKS , gph/
          746 .
          747 .Sh SEE ALSO
          748 Links for further information on gopher:
          749 .Pp
          750 .Lk gopher://gopher.floodgap.com "Floodgap Systems"
          751 .Pp
          752 .Lk gopher://gopherproject.org "The Gopher Project"
          753 .Sh STANDARDS
          754 .Rs
          755 .%A F. Anklesaria
          756 .%A M. McCahill
          757 .%A P. Lindner
          758 .%A D. Johnson
          759 .%A D. Torrey
          760 .%A B. Alberti
          761 .%D March 1993
          762 .%R RFC 1436
          763 .%T The Internet Gopher Protocol (a distributed document search and retrieval protocol)
          764 .Re
          765 .
          766 .Sh HISTORY
          767 .Bd -filled
          768 .Nm
          769 started as a Linux/BSD port of the Plan 9 gopherd_P9 server.
          770 Originally called gopherd_BSD, the name was later changed to
          771 .Qq Em Geomyidae
          772 (latin), the taxonomic family of burrowing rodents known as
          773 .Qq Em "pocket gophers"
          774 which are in fact the true gophers.
          775 Due to inconsistencies and the UNIX culture, the name was changed to lowercase in 2010.
          776 .Ed
          777 .
          778 .Sh AUTHORS
          779 See LICENSE file for authors in the distribution.
          780 .
          781 .Sh LICENSE
          782 .Nm
          783 is released under the MIT/X Consortium License.
          784 .
          785 .Sh BUGS
          786 Dynamic content functionality may vary across gopher clients.
          787 .
          788 .Ss "Reporting Bugs"
          789 Report bugs to:
          790 .An "Christoph Lohmann" Aq Mt 20h@R-36.net