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