Provided by: ipsvd_1.0.0-3.1_amd64 bug

NAME

       ipsvd-instruct - format of the ipsvd(8) instructions directory

DESCRIPTION

       The  internet  protocol  service  daemons,  ipsvd(7),  can  be  told  to  read  and follow
       instructions from a directory on incoming connections to the socket they listen on.

       For mostly static instructions or for performance reasons, it is possible to  compile  the
       instructions  from a directory into a constant database (cdb) with ipsvd-cdb(8) for faster
       lookup, and to tell ipsvd(7) to read the instructions from there.

MATCHING

       On each incoming connection, the ipsvd(7) matches the client's IP address against files in
       the instructions directory.  For example, the IP address a.b.c.d which reverse resolves to
       moa.bit.smarden.org is matched against the following files in the instructions  directory,
       in this order, first match wins:

       1.     a.b.c.d

       2.     a.b.c

       3.     a.b

       4.     a

       If the client's hostname has been successfully looked up in DNS:

       5.     moa.bit.smarden.org

       6.     bit.smarden.org

       7.     smarden.org

       8.     org

       And finally the catchall file ``0'' (zero):

       9.     0

       After  successfully  matching  a  client's IP address or hostname against the instructions
       directory, ipsvd(7) examines the file that matched the IP address or  hostname,  and  acts
       accordingly:

       1.     If neither the user's read permission, nor the user's execute permission is set for
              the file, the connection is closed immediately.

       2.     If the file has the user's execute permission set, ipsvd(7) reads the  contents  of
              the file and runs /bin/sh -c '<contents>' instead of the default program prog given
              at the command line for this connection.

       3.     If the file has the user's read permission set, ipsvd(7) reads the contents of  the
              file and interprets each line as an instruction for this connection (see below).

       If  the  client's  IP  address  or  hostname  doesn't  match  any file in the instructions
       directory, the default action is taken (the program prog is run to handle the connection).

INSTRUCTIONS

       If ipsvd(7) is given instructions for an incoming connection, it reads  the  corresponding
       file and interprets each line as follows.  The file may be empty, meaning that there is no
       special instruction.

       Empty lines and lines starting with ``#'' are ignored.

       +VAR=VALUE
              environment.  If the line starts with a plus (``+''), and the string following  the
              plus  contains  a  ``='',  ipsvd(7)  puts  the  string  following the plus into the
              environment before starting prog to handle the connection.  If the string following
              the plus doesn't contain a ``='', ipsvd(7) makes sure that the environment variable
              with the name string is not set.

       Cnum[:msg]
              concurrency.  If the line starts with a ``C'', and is followed by a number, the per
              host  concurrency  limit for the IP address that initiated the connection is set to
              this number.  If num is zero, per host concurrency limit is disabled.   If  num  is
              followed by ``:msg'', the message msg is written to this client if possible, if the
              per host concurrency limit is reached.

              msg may contain backslash-escaped characters as follows: ``\\'' is converted  to  a
              single  backslash,  ``\n''  is  converted  to  a  new line character, and ``\r'' is
              converted to a carriage return.

              On multiple concurrency instructions the last processed concurrency instruction  is
              considered.  Not all ipsvd(7)'s support per host concurrency.

       =hostname[:forward]
              check  hostname.   If  the line starts with a ``='', and is followed by a hostname,
              ipsvd(7) looks up the IP addresses for hostname in DNS and checks if  the  client's
              IP address matches one of these IP addresses.  If so, ipsvd(7) stops processing the
              instructions here and runs prog.  If hostname is  followed  a  colon  and  forward,
              ipsvd(7)  now  examines  the  file forward and acts accordingly, instead of running
              prog.  All check hostname instructions in forward are ignored.  If forward does not
              exist, the connection is closed.

              hostname may be ``0'' (zero), matching any IP address.

              Note:   Using  check  hostname  instructions  can  cause  significant  delay  while
              responding to connection attempts, caused by DNS lookups.

       If ipsvd(7) cannot interpret a line, it prints a warning, discards the line, and continues
       with the next instruction if any.

       After  processing all instructions, ipsvd(7) runs prog.  If the file contains at least one
       check hostname instruction, and none was successful, it closes the connection  instead  of
       running prog.

EXAMPLE INSTRUCTIONS

       +MEMORY=20000
              This  instruction  causes  the  environment  variable  ``MEMORY''  with  the  value
              ``20000'' to be available to the program prog that handles the connection.

       +DEBUG=
              This  instruction  adds  the  variable  ``DEBUG''  with  an  empty  value  to   the
              environment.

       +LOGNAME
              This  instructions  makes  sure  that the environment variable ``LOGNAME'' is unset
              when running prog.

       C16    Set the per host concurrency to 16.  A connection will be closed silently if  there
              are already 16 active connections from this client's IP address.

       =floyd.dyn.smarden.org:127.0.0.1
              Check  IP  address of the dynamic hostname floyd.dyn.smarden.org.  If one of the IP
              addresses floyd.dyn.smarden.org currently  resolves  to  matches  the  client's  IP
              address,  handle  the  connection  through  the  file 127.0.0.1 in the instructions
              directory.

SEE ALSO

       ipsvd(7), ipsvd-cdb(8), tcpsvd(8), sslsvd(8), udpsvd(8), sslio(8)

       http://smarden.org/ipsvd/

AUTHOR

       Gerrit Pape <pape@smarden.org>

                                                                                ipsvd-instruct(5)