bionic (8) pygopherd.8.gz

Provided by: pygopherd_2.0.18.5_all bug

NAME

       PyGopherd - Multiprotocol Information Server

SYNOPSIS

       pygopherd [ configfile ]

DESCRIPTION

       Welcome  to  PyGopherd.   In  a  nutshell,  PyGopherd  is  a  modern  dynamic multi-protocol hierarchical
       information server with a pluggable modularized extension system, full flexible  caching,  virtual  files
       and  folders,  and  autodetection  of file types -- all with support for standardized yet extensible per-
       document metadata. Whew! Read on for information on this what all these buzzwords mean.

   FEATURES
       Here are some of PyGopherd's features:

       • Provides built-in support for multiple protocols:  HTTP  (Web),  Gopher+,  Gopher  (RFC1436),  Enhanced
         Gopher0, and WAP (mobile phones).  Protocols can be enabled or disabled as desired.

       • Provides protocol autodetection.  That is, PyGopherd can listen for all the above protocols on a single
         port and will automatically respond using the protocol it  detects  the  client  is  using.   Practical
         effects  of this are that you can, for instance, give out a single URL and have it viewable normally on
         desktop Web browsers and in WAP mode on mobile phones -- and appropriately in various Gopher browsers.

       • Metadata and site links can be entered in a variety of formats, including  full  UMN  dotfile  metadata
         formats  as  well  as  Bucktooth  gophermap files.  Moreover, gophermap files are not limited to Gopher
         protocols, and can be used for all protocols.

       • Support for inter-protocol linking (linking from Gopher sites to web sites)

       • Virtual folder system lets you serve  up  anything  as  if  it  were  regular  files  and  directories.
         PyGopherd comes with the following virtual folder systems built in:

         • Can  present  any Unix MBOX, MMDF box, MH directory, Maildir directory, or Babyl mailbox as a virtual
           folder, the contents of which are the messages in the mailbox.

         • Can use a configurable separator to split a file into multiple parts, the first line of each becoming
           the name for the virtual folder.

         • Can  peek  inside  a  ZIP  file  and serve it up as first-class site citizens -- metadata can even be
           stored in the ZIP files.

         • Can serve up the contents of a dictd server as a filesystem.

       • Modular, extensible design: you can use PyGopherd's own PYG extension format,  or  UMN-  or  Bucktooth-
         style executables.

       • Runs  on  any  platform supported by Python 2.2 or 2.3.  This includes virtually every past and current
         flavor of Unix (Linux, *BSD, Solaris, SunOS), Windows, MacOS 9.x and X, and more.   Some  features  may
         not be available on non-Unix platforms.

       • Runs on any platform supported by Java 1.1 via the Jython Python implementation.

       • Tunable server types via configuration directive -- forking or threading.

       • Secure design with support for chrooted execution.

       • Feature-complete, full implementations of: Gopher0 (RFC1435), Gopher+, HTTP, and WAP.

       • Support for automatically finding the titles of HTML documents for presentation in a directory.

       • Versatile configuration file format is both extensible and nicely complementary of the module system.

       • Protocol-independant,  handler-dependant caching.  This increases performance by letting handlers cache
         dynamically-generated information -- currently used  by  the  directory  handlers.   This  can  improve
         performance  of  directories by several orders of magnitude.  Because this is a handler cache only, all
         protococls share the single cache.  Since the processing time for the  protocols  is  negligable,  this
         works out very well.

       • Autosensing  of  MIME  types  and  gopher0  item  types.   Both are completely configurable.  MIME type
         detection is done using a standard mime.types file,  and  gopher0  types  are  calculated  by  using  a
         configurable regexp-based MIME-to-gophertype map.

       • Heavy support of regular expressions in configuration.

       • ProtocolMultiplexer  and  HandlerMultiplexer  let you choose only those protocols and handlers that you
         wish your server to support and the order in which they are tried when a request comes in.

       • Full logging via syslog.

   ABOUT GOPHER
       PyGopherd started life as a server for the Gopher  Internet  protocol.  With  Gopher,  you  can  mount  a
       filesystem  (viewing  files  and  folders  as if they were local), browse Gopherspace with a web browser,
       download files, and be interactive with searching.

       But this is only part of the story. The world of Gopher is more expansive than this. There are two  major
       gopher  protocols:  Gopher0  (also known as RFC1436) and Gopher+. Gopher0 is a small, simple, lightweight
       protocol that is very functional yet also extremely easy to implement.  Gopher0  clients  can  be  easily
       places in small embedded devices or in massive environments like a modern web browser.

       Gopher+  is  based  on  Gopher0  but extends it by providing document metadata such as file size and MIME
       type. Gopher+ allows all sorts of neat features, such as configurable metadata (serving  up  a  bunch  of
       photos?  Add  a Subject field to your metadata to let a customized photo browser display who is pictured)
       and multiple views of a file (let the user select to view your photos as PNG or JPEG).

QUICK START

       If you have already installed PyGopherd system-wide, or your administrator has done that  for  you,  your
       task  for  setting  up  PyGopherd  for  the  first  time  is  quite simple.  You just need to set up your
       configuration file, make your folder directory, and run it!

       You can quickly set up your configuration  file.   The  distribution  includes  two  files  of  interest:
       conf/pygopherd.conf  and conf/mime.types.  Debian users will find the configuration file pre-installed in
       /etc/pygopherd/pygopherd.conf and the mime.types file provided by the system already.

       Open up pygopherd.conf in your editor and adjust to suit.  The file is  heavily  commented  and  you  can
       refer  to  it  for detailed information.  Some settings to take a look at include: detach, pidfile, port,
       usechroot, setuid, setgid, and root.  These may or may not work at their defaults for you.  The remaining
       ones should be fine for a basic setup.

       Invoke  PyGopherd  with  pygopherd  path/to/configfile (or /etc/init.d/pygopherd start on Debian).  Place
       some files in the location specified by the root directive in the config file and you're ready to run!

INSTALLATION

       If  you  are  reading this document via the "man" command, it is likely that  you  have  no  installation
       tasks  to  perform; your system administra- tor  has already installed PyGopherd.  If you need to install
       it yourself, you have three options: a system-wide installation  with  Debian,  system-wide  installation
       with   other  systems,  and  a single-user installation.  You can    download    the    latest    version
       of    PyGopherd from
        <URL:http://quux.org/devel/gopher/pygopherd/>

   DEBIAN SYSTEM-WIDE INSTALLATION
       If you are tracking Debian unstable, you may install PyGopherd by simply running this command as root:

       apt-get install pygopherd

       If you are not tracking Debian unstable, download the .deb package from the PyGopherd  website  and  then
       run  dpkg -i to install the downloaded package.  Then, skip to the configuration section below.  You will
       use /etc/init.d/pygopherd start to start the program.

   OTHER SYSTEM-WIDE INSTALLATION
       Download the tar.gz version of the package from the website.  Make sure you  have  Python  2.2  or  above
       installed; if now, download and install it from  <URL:http://www.python.org/>.  Then run these commands:

              tar -zxvf pygopherd-x.y.z.tar.gz
              cd pygopherd-x.y.z
              python2.2 setup.py

       Some systems will use python or python2.3 in place of python2.2.

       Next,  proceed to configuration.  Make sure that the /etc/pygopherd/pygopherd.conf file names valid users
       (setuid and setgid options) and a valid document root (root option).

       You will type pygopherd to invoke the program.

   SINGLE-ACCOUNT INSTALLATION
       Download the tar.gz version of the package from the website.  Make sure you  have  Python  2.2  or  above
       installed; if now, download and install it from  <URL:http://www.python.org/>.  Then run these commands:

              tar -zxvf pygopherd-z.y.z.tar.gz
              cd pygopherd-x.y.z

       Modify conf/pygopherd.conf as follows:

       • Set usechroot = no

       • Comment out (add a # sign to the start of the line) the pidfile, setuid, and setgid lines.

       • Set root to osomething appropriate.

       • Set port to a number greater than 1024.

       When  you  want  to  run  PyGopherd,  you  will  issue the cd command as above and then type PYTHONPATH=.
       bin/pygopherd.  There is no installation step necessary.

CONFIGURATION

       PyGopherd is regulated by a configuratoin file normally stored in /etc/pygopherd/pygopherd.conf.  You can
       specify  an  alternate  configuration  file on the command line.  The PyGopherd distribution ships with a
       sample pygopherd.conf file that thoroughly documents the configuration file options and settings.

OPTIONS

       All PyGopherd configuratoin is done via the configuration file.  Therefore,  the  program  has  only  one
       command-line option:

       configfile
              This option argument specifies the location of the configuration file that PyGopherd is to use.

HANDLERS

       PyGopherd  defines  several handlers which are responsible for finding data on your server and presenting
       it to the user.  The handlers are used to generate things like links to  other  documents  and  directory
       listings.  They are also responsible for serving up regular files and even virtual folders.

       Handlers  are specified with the handlers option in pygopherd.conf.  This option is a list of handlers to
       use.  For each request that arrives, PyGopherd will ask each handler in turn whether or not it can handle
       the  request, and will handle the request according to the first handler that is capable of doing so.  If
       no handlers can handle the request, a file not found error is generated.  See the  example  configuration
       file for an example.

       The  remaining  parts  of  this section describe the different handlers that ship with PyGopherd.  Please
       note that some versions of this manual may show the handlers in all caps; however, their  names  are  not
       all caps and are case-sensitive.

   DIR.DIRHANDLER
       This  handler  is  a basic one that generates menus based on the contents of a directory.  It is used for
       directories that contain neither a gophermap file nor UMN-style links files, or situations where you have
       no need for either of those.

       This  handler  simply  reads  the contents of your on-disk directory, determines the appropriate types of
       each file, and sends the result to the client.  The descriptions of each item  are  usually  set  to  the
       filename, but the html.HTMLFileTitleHandler may override that.

   GOPHERMAP.BUCKGOPHERMAPHANDLER
       This  handler  is  used  to  generate  directory listings based on gophermap files.  It will not read the
       directory on-disk, instead serving content from the gophermap file only.  Gophermaps are  useful  if  you
       want  to present a directory in which the files do not frequently change and there is general information
       to present.  Overall, if you only wish to present information particular to  certain  files,  you  should
       consider using the abstract feature of UMN.UMNDirHandler.

       The  gophermap  files  contain  two  types  of  lines, which are described here using the same convention
       normally used for command line arguments.  In this section, the symbol \t will be used to indicate a  tab
       character, Control-I.

        full line of informational text

        gophertypeDESCRIPTION [ \tselector [ \thost [ \tport ] ] ]

       Note: spaces shown above are for clarity only and should not actually be present in your file.

       The  informational  text must not contain any tab characters, but may contain spaces.  Informational text
       will be rendered with gopher type i, which will cause it to be displayed on  a  client's  screen  at  its
       particular position in the file.

       The  second  type  of  line  represents a link to a file or directory.  It begins with a single-character
       Gopher type (see Gopher Item Types below) followed immediately by a  description  and  a  tab  character.
       There  is  no  space or other separator between the gopher type and the description.  The description may
       contain spaces but not tabs.

       The remaining arguments are optional, but only to the extent that arguments may be omitted  only  if  all
       arguments after them are also omitted.  These arguments are:

       selector
              The  selector is the name of the file on the server.  If it begins with a slash, it is an absolute
              path; otherwise, it is interpreted relative to the directory that the gophermap file is in.  If no
              selector is specified, the description is also used as the selector.

       host   The  host specifies the host on which this resource is located.  If not specified, defaults to the
              current server.

       port   The port specifies the port on which the resource is located.  If not specified, defaults  to  the
              port the current server is listening on.

       An  example  of a gophermap to help illustrate the concept is included with the PyGopherd distribution in
       the file examples/gophermap.

   FILE.COMPRESSEDFILEHANDLER
       In order to save space, you might want to store documents on-disk  in  a  compressed  format.   But  then
       clients  would  ordinarily  have to decompress the files themselves.  It would be nice to have the server
       automatically decompress the files on  the  fly,  sending  that  result  to  the  client.   That's  where
       file.CompressedFileHandler comes in.

       This  handler  will  take compressed files, pipe them through your chosen decompression program, and send
       the result directly to clients -- completely transparently.

       To use this handler, set the decompressors option in the  configuration  file.   This  option  defines  a
       mapping  from MIME encodings (as defined with the encoding option) to decompression programs.  Files that
       are not encoded, or which have an encoding that does not occur in the  decompressors  map,  will  not  be
       decompressed by this handler.

       Please  see  the  sample configuration file for more examples and details about the configuration of this
       handler.

   FILE.FILEHANDLER
       The file.FileHandler is just that -- its duty is to serve up regular files to clients.

   HTML.HTMLFILETITLEHANDLER
       This handler is used when generating directories and will set the description of HTML files to  the  HTML
       title  defined  in  them  rather than let it be the default filename.  Other than that, it has no effect.
       UMN gopherd implements a similar policy.

   MBOX HANDLERS
       There are four mailbox handlers:

       • mbox.MaildirFolderHandler

       • mbox.MaildirMessageHandler

       • mbox.MBoxMessageHandler

       • mbox.MBoxFolderHandler

       These four handlers provide a unique "virtual folder" service.  They allow you to present mailboxes as if
       they  were  folders,  the  items  of the folders being the messages in the mailbox, organized by subject.
       This is useful for presenting mail archives or just making e-mail accessible in a nice and easy fashion.

       To use these handlers, all you  have  to  do  is  enable  them  in  your  handlers  section.   They  will
       automatically detect requests for mailboxes and handle them appropriately.

       The  different  handlers  are for traditional Unix mbox mailboxes (all messages in a single file) and new
       qmail-stype Maildir mailboxes.  You can enable only the two handlers for the specific mailbox  type  that
       you use, if desired.

   PYG.PYGHANDLER
       PYG  (short  for PYGopherd) is a mechanism that provides a tremendous amount of flexibility.  Rather than
       just letting you execute a script like other Gopher or HTTP servers, PYGs are  actually  loaded  up  into
       PyGopherd  and  become  fully-capable  first-class virtual handlers.  Yet they need not be known ahead of
       time, and are loaded dynamically.

       With a PYG handler, you can generate gopher directories, handle searches, generate files, and more on the
       fly.  You can create entire virtual directory trees (for instance, to interface with NNTP servers or with
       DICT servers), and access them all using the standard Gopher protocol.  All of  this  without  having  to
       modify even one line of PyGopherd code.

       If  enabled,  the  pyg.PYGHandler will look for files with the extension .pyg that are marked executable.
       If found, they will be loaded and run as PYGs.

       Please note: this module provides the capability to execute arbitrary code.  Please consider the security
       ramifications of that before enabling it.

       See the virtual.Virtual handler for more information about passing data to your scripts at runtime.

       At  present,  documentation  on  writing  PYGs  is not provides, but you may find examples in the pygfarm
       directory included with the PyGopherd distribution.

   SCRIPTEXEC.EXECHANDLER
       This handler implements "old-style" script execution; that is, executing arbitrary  programs  and  piping
       the result to the client.  It is, for the most part, compatible with both scripts written for UMN gopherd
       and the Bucktooth gopher server.  If enabled, it will execute any file that is marked executable  in  the
       filesystem.   It  will normally list scripts as returning plain text, but you may create a custom link to
       the script that defines it as returning whatever kind of file you desire.  Unlike PYGs, this type must be
       known in advance.

       The scriptexec.ExecHandler will set environment variables for your scripts to use.  They are as follows:

       SERVER_NAME
              The  name  of  this  server  as  defined  in the configuration file or detected from the operating
              system.

       SERVER_PORT
              The port this server is listening on.

       REMOTE_ADDR
              The IP address of the client.

       REMOTE_PORT
              The port number of the client.

       REMOTE_HOST
              The same value as REMOTE_ADDR

       SELECTOR
              The file that was requested; that is, the relative path to this script.  If the selector  included
              additional parameters after a |, they will be included in this string as well.

       REQUEST
              The "base" part of the selector; that is, the part leading up to the |.

       SEARCHREQUEST
              Included  only  if  the  client specified search data, this is used if the client is searching for
              something.

       See the virtual.Virtual handler for more information about passing data to your scripts at runtime.

       Please note: this module provides the capability to execute arbitrary code.  Please consider the security
       ramifications of that before enabling it.

   UMN.UMNDIRHANDLER
       This  is one of the most powerful workhorse handlers in PyGopherd.  It is designed to emulate most of the
       ways in which the UMN gopherd distribution generates directories,  even  going  so  far  as  to  be  bug-
       compatible in some cases.  Generating directories with this handler is often the best general-purpose way
       to make nice directories in gopherspace.

       The remainder of the description of the UMN.UMNDirHandler, except for the Abstracts and Info section,  is
       lifted  directly  from  the  original UMN gopherd documentation, with light editing, because this handler
       implements it so exactly that there was no point in rewriting all that documentation :-)

   LINKS
       You can override the default view of a directory as generated by  dir.DirHandler  by  creating  what  are
       known as Links in the data tree.

       The  ability  to  make links to other hosts is how gopher distributes itself among multiple hosts.  There
       are two different ways to make a link.  The first and simplest is to create a link file that contains the
       data  needed by the server.  By default all files in the gopher data directory starting with a period are
       taken to be link files.  A link file can contain multiple links.  To define a link you need to  put  five
       lines  in  a  link file that define the needed characteristics for the document.  Here is an example of a
       link.

       Name=Cheese Ball Recipes
       Numb=1
       Type=1
       Port=150
       Path=1/Moo/Cheesy
       Host=zippy.micro.umn.edu

       The Name= line is what the user will see when cruising through the database.  In this case  the  name  is
       "Cheese  Ball  Recipes".   The  "Type="  defines what kind of document this object is.  For a list of all
       defined types, see Gopher Item Types below.  For Gopher+ and HTTP, a MIME type is  also  used,  which  is
       determined automatically based on the type you specify.

       The  "Path="  line contains the selector string that the client will use to retrieve the actual document.
       The Numb= specifies that this entry should be presented first in the directory  list  (instead  of  being
       alphabetized).   The  "Numb=" line is optional.  If it is present it cannot be the last line of the link.
       The "Port=" and "Host=" lines specify a fully qualified domain name (FQDN) and a port respectively.   You
       may  substitute  a  plus  '+'  for  these two parameters if you wish.  The server will insert the current
       hostname and the current port when it sees a plus in either of these two fields.

       An easy way to retrieve links is to  use  the  Curses  Gopher  Client.   By  pressing  '='  You  can  get
       information suitable for inclusion in a link file.

   OVERRIDING DEFAULTS
       The  server looks for a directory called .cap when parsing a directory.  The server then checks to see if
       the .cap directory contains a file with the same name as the file it's parsing.  If this file exists then
       the  server  will  open  it  for  reading.   The server parses this file just like a link file.  However,
       instead of making a new object, the parameters inside the .cap/ file are used  to  override  any  of  the
       server supplied default values.

       For  instance, say you wanted to change the Title of a text file for gopher, but don't want to change the
       filename.  You also don't want it alphabetized, instead you want it second in the directory listing.  You
       could  make  a  set-aside  file in the .cap directory with the same filename that contained the following
       lines:

       Name=New Long Cool Name
       Numb=2

       An alternative to .cap files are extended link files.  They work just the same as the files described  in
       Links above, but have a somewhat abbreviated format.  As an example, if the name of the file was file-to-
       change, then you could create a file called .names with the following contents:

       Path=./file-to-change
       Name=New Long Cool Name
       Numb=2

   ADDING COOL LINKS
       One cool thing you can do with .Links is to add neato services to your gopher server.  Adding a link like
       this:

       Name=Cool ftp directory
       Type=h
       Path=/URL:ftp://hostname/path/
       Host=+
       Port=+

       Name=Cool web site
       Type=h
       Path=/URL:http://hostname/
       Host=+
       Port=+

       Will allow you to link in any FTP or Web site to your gopher.  (See url.URLHandler for more details.)

       You can easily add a finger site to your gopher server thusly:

       Name=Finger information
       Type=0
       Path=lindner
       Host=mudhoney.micro.umn.edu
       Port=79

   HIDING AN ENTRY
       This kind of trick may be necessary in some cases, and thus for object "fred", the overriding .names file
       entry would be:

        Type=X
        Path=./fred

       by overriding default type to be "X".  This kind of hideouts may be usefull, when for some  reason  there
       are  symlinks  (or  whatever)  in  the  directory  at which PyGopherd looks at, and those entries are not
       desired to be shown at all.

   ABSTRACTS AND INFO
       Many modern  gopher  server  maintainers  like  to  intersperse  gopher  directory  listings  with  other
       information -- often, additional information about the contents of files in the directory.  The gophermap
       system provides one way to do that, and abstracts used with UMN gopher directories provides another.

       Subject to the abstract_headers and abstract_entries configuration file options, this feature allows  you
       to  define  that  extra  information.   You can do that by simply creating a file named filename.abstract
       right alongside the regular file in your directory.  The file will be interpreted as the abstract.  For a
       directory, create a file named .abstract in the directory.  Simple as that!

   URL.HTMLURLHANDLER
       PyGopherd  provides  ways  for you to link to pages outside Gopherspace -- that is, web pages, FTP sites,
       and    the    like.     This    is     accomplished     according     to     the     Links     to     URL
       <URL:http://lists.complete.org/gopher@complete.org/2002/02/msg00033.html.gz>      specification      (see
       Conforming To below for details).  In order to link to a URL (EXCEPT gopher URLs) from a menu, you create
       a  link  of  type  h  (regardless  of  the  actual  type of the resource that you are linking to) in your
       gophermap or .Links file that looks like this:

       /URL:http://www.complete.org/

       Modern Gopher clients that follow the Links to URL specification will automatically follow that link when
       you select it.  The rest need some help, and that's where this handler comes in.

       For  Gopher  clients  that  do  not  follow  the  Links to URL specification, the url.HTMLURLHandler will
       automatically generate an HTML document for them on the fly.  This document includes a refresh code  that
       will send them to the proper page.  You should not disable this handler.

   URL.URLTYPEREWRITER
       Some  people  wish to serve HTML documents from their Gopher server.  One problem with that is that links
       in Gopherspace include an extra type character at the beginning, whereas links  in  HTTP  do  not.   This
       handler will remove the extra type character from HTTP requests that come in, allowing a single relative-
       to-root link to work for both.

   VIRTUAL.VIRTUAL
       This handler is not intended to ever be used directly, but is used by many other  handlers  such  as  the
       mbox  support,  PYG  handlers,  and  others.   It  is  used  to generate virtual entries in the directory
       hierarchy -- that is, entries that look normal to a client, but do not actually correspond to a  file  on
       disk.

       One special feature of the virtual.Virtual handler is that you can send information to it at runtime in a
       manner similar to a CGI script on the web.  You do this by adding  a  question  mark  after  the  regular
       selector, followed by any arbitrary data that you wish to have sent to the virtual request handler.

   ZIP.ZIPHANDLER
       Using zip.ZIPHandler, you can save space on your server by converting part or all of your site into a ZIP
       file.  PyGopherd can use the contents of that ZIP file  as  the  contents  of  your  site  --  completely
       transparently.

       The ZIP file handler must be enabled in the configuration file for this to work.

GOPHER ITEM TYPES

       When  you  construct  links  to  files  via  .Links  or  gophermap  files,  or  modify the mapping in the
       configuration file, you will need to know these.  Items bearing the "not implemented" text are not served
       up  by  PyGopherd  as it ships, generally due to requirements of customized per-site software, but may be
       served up via PYG extension modules or other gopher servers.

       This list was prepared based on RFC1436, the UMN gopherd(1) manpage, and best current practices.

       0      Plain text file

       1      Directory

       2      CSO phone book server (not implemented by PyGopherd)

       3      Error condition; text that follows is plain text

       4      Macintosh file, BinHex format

       5      DOS binary archive (not implemented by PyGopherd; use type 9 instead)

       6      uuencoded file; not directly generated by PyGopherd automatically, but can be linked to  manually.
              Most gopher clients will handle this better as type 1.

       7      Search

       8      Telnet link

       9      Binary file

       +      Redundant server (not implemented by PyGopherd)

       c      Calendar (not implemented by PyGopherd)

       e      Event (not implemented by PyGopherd)

       g      GIF-format graphic

       h      HTML file

       I      Any kind of graphic file other than GIF

       i      Informational text included in a directory that is displayed but does not link to any actual file.

       M      MIME multipart/mixed file

       s      Any kind of sound file

       T      tn3270 link

       X

       -      UMN-specific -- signifies that this entry should not be displayed in a directory entry, but may be
              accessed via a direct link.  This value is never transmitted in any Gopher protocol.

CONFORMING TO

       • The Internet Gopher Protocol as specified in RFC1436

       • The Gopher+ upward-compatible enhancements to the Internet  Gopher  Protocol  from  the  University  of
         Minnesota as laid out at
          <URL:gopher://gopher.quux.org/0/Archives/mirrors/boombox.micro.umn.edu/pub/gopher/gopher_protocol/Gopher+/Gopher+.txt>.

       • The gophermap file format as originally implemented in the Bucktooth gopher server and described at
          <URL:gopher://gopher.floodgap.com/0/buck/dbrowse%3Ffaquse%201>.

       • The Links to URL specification as laid out by John Goerzen at
          <URL:gopher://gopher.quux.org/0/Archives/Mailing%20Lists/gopher/gopher.2002-02%3f/MBOX-MESSAGE/34>.

       • The UMN format for specifying object attributes and links with .cap,  .Links,  .abstract,  and  similar
         files as specified elsewhere in this document and implemented by UMN gopherd.

       • The PYG format for extensible Python gopher objects as created for PyGopherd.

       • Hypertext Transfer Protocol HTTP/1.0 as specified in RFC1945

       • Hypertext Markup Language (HTML) 3.2 and 4.0 Transitional as specified in RFC1866 and RFC2854.

       • Maildir as specified in
          <URL:http://www.qmail.org/qmail-manual-html/man5/maildir.html> and
          <URL:http://cr.yp.to/proto/maildir.html>.

       • The mbox mail storage format as specified in
          <URL:http://www.qmail.org/qmail-manual-html/man5/mbox.html>.

       • Registered MIME media types as specified in RFC2048.

       • Script execution conforming to both UMN standards as laid out in UMN gopherd(1) and Bucktooth standards
         as specified at
          <URL:gopher://gopher.floodgap.com:70/0/buck/dbrowse%3ffaquse%202>, so far as each can  be  implemented
         consistent with secure design principles.

       • Standard Python 2.2.1 or above as implemented on POSIX-compliant systems.

       • WAP/WML as defined by the WAP Forum.

BUGS

       Reports   of   bugs   should   be  sent  via  e-mail  to  the  PyGopherd  bug-tracking  system  (BTS)  at
       <pygopherd@bugs.complete.org>    or    submitted    online     using     the     Web     interface     at
       <URL:http://bugs.complete.org/>.

       The Web site also lists all current bugs, where you can check their status or contribute to fixing them.

       PyGopherd is Copyright (C) 2002, 2003 John Goerzen.

       This  program  is  free  software;  you  can  redistribute it and/or modify it under the terms of the GNU
       General Public License as published by the Free Software Foundation; version 2 of the License.

       This program is distributed in the hope that it will be useful, but WITHOUT ANY  WARRANTY;  without  even
       the  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
       License for more details.

       You should have received a copy of the GNU General Public License along with this program; if not,  write
       to:

       Free Software Foundation, Inc.
       59 Temple Place
       Suite 330
       Boston, MA  02111-1307
       USA

AUTHOR

       PyGopherd,  its libraries, documentation, and all included files (except where noted) was written by John
       Goerzen <jgoerzen@complete.org> and copyright is held as stated in the Copyright section.

       Portions of this manual (specifically relating to certian UMN gopherd features and  characteristics  that
       PyGopherd  emulates) are modified versions of the original gopherd(1) manpage accompanying the UMN gopher
       distribution.  That document is distributed under the  same  terms  as  this,  and  bears  the  following
       copyright notices:

       Copyright (C) 1991-2000  University of Minnesota
       Copyright (C) 2000-2002  John Goerzen and other developers

       PyGopherd may be downloaded, and information found, from its homepage via either Gopher or HTTP:

        <URL:gopher://quux.org/1/devel/gopher/pygopherd>

        <URL:http://quux.org/devel/gopher/pygopherd>

       PyGopherd  may  also be downloaded using Subversion.  Additionally, the distributed tar.gz may be updated
       with a simple "svn update" command; it is ready  to  go.   For  information  on  getting  PyGopherd  with
       Subversion, please visit  <URL:http://svn.complete.org/>.

SEE ALSO

       python (1).