Provided by: perdition_1.19~rc4-4build1_amd64 bug

NAME

       perditiondb - perdition modular popmap support

DESCRIPTION

       Perdition  supports a dynamic library mechanism to access arbitrary databases that resolve
       a user to a host and port.

DATABASE ACCESS LIBRARIES

       If you are using the -s|--default server option then creating an empty database will cause
       all  users to use the default server. Alternatively, setting no popmap by passing an empty
       string to the -m|--map_name option will cause no map lookups to take place  and  only  the
       default server to be used.

       E.g.: perdition -m ""

       In this case, if no default server is set then perdition will still run but users will not
       be able to connect to a real server.

       GDBM

       This is the default library used by perdition.  The gdbm library  reads  server  and  port
       information  from  a  GDBM database. The database is opened each time perdition looks up a
       server and port pair.  The information for each lookup key  is  stored  in  a  flat  file,
       popmap with the format:

       <key>:[<username><domain_delimiter>]<host>[:<port>]

       Where: host: hostname or ip address
              port: port name or number

       E.g.

       horms:foo.bar:110
       jain:jane@foo.bar

       A  domain_delimiter of "@" is used in the example above.  For more information on keys and
       the domain delimiter, see perdition(8).

       If the -n|--no_lookup option is in effect, then ip addresses and port names should be used
       as host and port names will not be resolved.

       To  build  the  flat  file into a binary format the makegdbm utility, which is provided as
       part of perdition should be used.

       makegdbm popmap.gdbm.db < popmap

       A makefile is provided and you can  simply  run  make  to  rebuild  the  popmap.  This  is
       installed into /etc/perdition/ in the RPM and Debian distributions.

       An   alternate   location   for   the   popmap.gdbm.db   can   be   specified   using  the
       -m|--map_library_opt command line option or configuration file option.

       E.g.

       perdition -m /etc/my_popmap.gdbm.db

       This map library is the default. It may also be used explicitly, used  by  specifying  the
       full  path  to the library using the -M|--map_library command line option or configuration
       file option.

       E.g.

       perdition -M /usr/lib/libperditiondb_gdbm.so.0

       Where /usr/lib is the directory in which the perdition libraries were installed.

       Berkeley DB

       This is analogous to the GDBM library, except that a popmap.bdb.db should be created using
       makebdb.

       This  library  may  be  used  by  specifying  the  full  path  to  the  library  using the
       -M|--map_library command line option or configuration file option.

       E.g.

       perdition -M /usr/lib/libperditiondb_bdb.so.0

       Where /usr/lib is the directory in which the perdition libraries were installed.

       YP/NIS

       The NIS library reads a YP/NIS map, the key is the userid, the value is the servername.

       The default map name is 'user_mail_server', and can be changed by specifying the map  name
       with the -m flag.

       To use this library, you need to specify:

       perdition -M /usr/lib/libperditiondb_nis.so.0

       Where /usr/lib is the directory in which the perdition libraries were installed.  You will
       need to customise your yp server's Makefile to actually get a new map on the server.  This
       map  library  is  intended  for sites that already have a significant infrastructure based
       around YP/NIS.

       POSIX REGULAR EXPRESSIONS

       This library allows users to be looked matched against a list of regular expressions.

       This library  can  be  used  by  specifying  the  full  path  to  the  library  using  the
       -M|--map_library command line option or configuration file option.

       E.g.

       perdition -M /usr/lib/libperditiondb_posix_regex.so.0

       Where /usr/lib is the directory in which the perdition libraries were installed.

       The  regular  expression  is kept in a flat file, by default /etc/perdition/popmap.re .  A
       sample map file is shipped with the source and can be  found  in  etc/perdition/popmap.re,
       this  is installed into /etc/perdition/popmap.re in the RPM and Debian distributions.  The
       format for the flat file is:

       <regular expression>: [<username><domain_delimiter>]<server>[:<port>]

       A single colon may follow a regular_expression Some amount of white space must follow this
       colon  or  the regular_expression if the colon is omitted.  Blank lines are ignored, as is
       anything including and after a # (hash) on a line. If a  precedes  a  new  line  then  the
       lines  will  be concatenated.  If a  precedes any other character, including a # (hash) it
       will be treated as a literal. Anything inside single quotes  (')  will  be  treated  as  a
       literal.  Anything other than a (') inside double quotes (") will be treated as a literal.
       Whitespace in a regular_expression must be escaped or quoted. Whitespace in a substitution
       need not be escaped or quoted.

       Information  on setting the domain_delimiter is found in perdition(8), "@" is used in this
       example.

       E.g.

       ^[a-k]: localhost
       ^[^a-k]: localhost:110
       ^user: user2@localhost
       (.*)@(.*): $1_$2@localhost

       The first matching regular expression will be used. The regular expressions  are  extended
       posix   regular   expressions.   The  last  example  illustrates  the  ability  to  expand
       backreferances.  Backreferences may be used by inserting $n in the substitution where n is
       in the range 1..9.  The backreference substitution code in this library is courtesy of Wim
       Bonis and in turn the PHP3 project.

       E.g.

       For the regex (.*)@(.*): $1_$2@localhost
       user@x.y.z.de
       would return
       user_x.y.z.de@localhost

       Note that there is no implicit ^ or $ around the regular  expressions.  The  popmap  entry
       "flim:  localhost" will match "flim", "flimstix", "itsflim" and "totallyflimless". To only
       match "flim" you need the popmap entry "^flim$: localhost".

       The map file is read once on startup and cached. This is to increase  performance  as  the
       regular  expressions must be compiled internally before they can be used. The map file can
       be re read by sending perdition a SIGHUP. An alternate location for the popmap.re  can  be
       specified using the -m|--map_library_opt command line option or configuration file option.

       E.g.

       perdition -m /etc/perdition/my_popmap.re

       MYSQL

       This  map  library  can  be  used  by  specifying  the  full path to the library using the
       -M|--map_library command line option or configuration file option.

       E.g.

       perdition -M /usr/lib/libperditiondb_mysql.so.0

       Where /usr/lib is the directory in which the perdition libraries were installed.

       The library will connect to a MySQL database and do a query on a table  expected  to  have
       the columns:

       +------------+--------------+------+-----+---------+-------+
       | Field      | Type         | Null | Key | Default | Extra |
       +------------+--------------+------+-----+---------+-------+
       | user       | varchar(128) |      | PRI |         |       |
       | servername | varchar(255) |      |     |         |       |
       | port       | varchar(8)   | YES  |     | NULL    |       |
       +------------+--------------+------+-----+---------+-------+

       The fields may be in a different order and other, non-perdition fields may also be present
       in this table. The names of the columns can be other than their above  defaults  by  using
       the  library option string described below.  All fields must be literal character strings.
       The allowed length of the strings is not important, however, it is  recommended  that  the
       length  of  the user field be kept under 128 to avoid exceeding perdition's internal query
       length limit, PERDITIONDB_MYSQL_QUERY_LENGTH which is 256 by default. This may be  altered
       by  recompiling  perdition.   The user field must also be a unique index as an exact match
       will be made of this field from the username supplied by the user.

       The servername is of the form.

       [<username><domain_delimiter>]<host>[:<port>]

       Where: host: hostname or ip address
              port: port name or number

       If the -n|--no_lookup option is in effect then ip addresses and  port  numbers  should  be
       used as host and port names will not be resolved.

       The port is the TCP port to use when connecting to the server. This field can be specified
       if the back-end server answers on a non-standard port (standard ports being 110  for  POP3
       and  143  for  IMAP). Only specify this field in the database if you intend to use POP3 or
       IMAP exclusively as it will try to use this port no matter what protocol is being used. If
       POP3  and  IMAP are both being used on non-standard back-end server ports, those ports can
       be specified with the -p argument when you invoke the perdition executable.

       The database is accessed each time perdition needs to find the host and port for  a  user.
       The default database values are as follows:

       database host:     localhost
       database port:     (MySQL Client Default: usually 3306)
       database name:     dbPerdition
       database table:    tblPerdition
       database user:     perdition
       database password: perdition
       user column:       user
       server column:     servername
       port column:       port

       A  script, perditiondb_mysql_makedb, is provided to initialise such a database.  Alternate
       values can be set using the -m|--map_library_opt command line option or configuration file
       option  with  an  argument  of the following form. (N.B.: this example has been split over
       multiple lines for ease of reading)

       <dbhost>[:<dbport>[:<dbname>[:<dbtable>[:<dbuser>
       [:<dbpwd>[:<dbservercol>[:<dbusercol>[:<dbportcol>]]]]]]]]

       E.g.

       perdition -m "some.host.com:3306:aDb:bTable:cUser:"\
       "dPassword:eSrvCol:fUserCol:gPortCol"

       Arguments may be omitted from the end of the option string with no consequence other  than
       that the default value for any omitted argument will be used. Arguments may not be omitted
       if any argument to its right is defined. Someone  seeking  to  set  only  the  server  and
       password to something other than the default might attempt the following:

       perdition -m some.host.com:::::OddPassword

       This  will  not  work.  It  will  set the server and password to the values shown, but all
       arguments in between will be set as NULL rather than the default. In the author's  opinion
       it is always best to specify all of the arguments to avoid confusion.

       Database  servers  may  be grouped together for higher performance or high availability by
       using ODBC and accessing them using the ODBC module.

       Multiple MySQL Servers

       It is possible to specify multiple MySQL  servers  by  specifying  them,  comma  separated
       (without any space), in the dbhost column.  In this case all MySQL servers need to have an
       identical configuration, because all other options are shared.  If the first server is not
       reachable, perdition will fall back to the second etc.

       POSTGRESQL

       This  is  a port of the MySQL library to PostgreSQL, The library can be used by specifying
       the  full  path  to  the  library  using  the  -M|--map_library  command  line  option  or
       configuration file option.

       E.g.

       perdition -M /usr/lib/libperditiondb_postgresql.so.0

       Where  /usr/lib  is  the  directory  in  which  the perdition libraries were installed.  A
       script, perditiondb_postgresql_makedb is provided to initialise the  database.   For  more
       information please see the MySQL documentation above.

       ODBC

       This  is  a  port of the MySQL library to ODBC. It may be used to access databases that do
       not have a perditiondb module.  It may  also  be  used  to  group  database  servers  into
       clusters.

       The  library  can  be  used  by  specifying  the  full  path  to  the  library  using  the
       -M|--map_library command line option or configuration file option.

       E.g.

       perdition -M /usr/lib/libperditiondb_odbc.so.0

       Where /usr/lib is the directory in  which  the  perdition  libraries  were  installed.   A
       script,  perditiondb_odbc_makedb is provided to seed the.  For more information please see
       the MySQL documentation above.  The database options passed using -m are the same  as  for
       MySQL except that the database name (dbname) is the Data Source Name (DSN).

       <dbhost>[:<dbport>[:<DSN>[:<dbtable>[:<dbuser>
       [:<dbpwd>[:<dbsrvcol>[:<dbusercol>[:<dbportcol>]]]]]]]]

       E.g.

       perdition -m "some.host.com:3306:aDb:bTable:cUser:"\
       "dPassword:eSrvCol:fUserCol:gPortCol"

       As per the notes in the MySQL documentation above, please avoid omitting values.

       LDAP

       This  library  allows access to LDAP based popmaps. This library can be used by specifying
       the  full  path  to  the  library  using  the  -M|--map_library  command  line  option  or
       configuration file option.

       E.g.

       perdition -M /usr/lib/libperditiondb_ldap.so.0

       Where /usr/lib is the directory in which the perdition libraries were installed.

       Options  are  parsed  to this module using the -m|--map_library_opt command line option or
       configuration file option.  It has the form:

       [ldap_version:][ldap_url]

       The ldap_version is the version of the ldap procotol used.  It should be a numeric  value.
       At the time of writing, OpenLdap supports 2 or 3, and defaults to 2. This may vary between
       different ldap implementations. If you inspect  the  local  ldap.h  file,  the  values  of
       LDAP_VERSION_MIN,  LDAP_VERSION_MAX  and  LDAP_VERSION should reflect the minimum, maximum
       and default ldap protocol versions respectively.

       The ldap_url is the query made to the ldap server.  The default URL is  as  follows.  Note
       that this has been split onto multiple lines for ease of reading.

       ldap://localhost/ou=mailbox,dc=nodomain?
       username,mailhost,port?one?(uid=%s)

       Perdition  will  replace  any  instance  of  %s  with  the  key being used for the lookup.
       Optionally, there may be an integer between the % and the s, in which case the key will be
       white-space padded to this width, with the key right justified.

       The attribute names (username, mailhost and port) may be changed.  But the first attribute
       will be used as the username, the second attribute as the host and the third  atribute  as
       the  port.  Any  subsequent  attributes  will be ignored.  Trailing attributes may also be
       omitted. So if there are only two attributes the port will not be read from the database.

       A script, perditiondb_ldap_makedb is provided to initialise LDAP.

       x-bindpw bindname

       Perdition can be configured to use use  an  alternate  bind  name,  and  the  non-standard
       "x-bindpw".  In  fact  perdition  can  use  any extensions that are supported by openldap.
       (N.B.: these examples have been split over multiple lines for ease or reading)

       ldap://ldap.mydomain.com/o=domain.com?
       uid,mailhost,port?sub?(uid=%s)?!bindname=uid=perdition%2co=domain.com

       ldap://ldap.mydomain.com/o=domain.com?uid,mailhost,port?
       sub?(uid=%s)?!BINDNAME=uid=perdition%2co=domain.com,X-BINDPW=secret

       The first example does the usual LDAP lookup,  but  tries  to  bind  to  the  server  with
       "uid=perdition,o=domain.com"  rather  than  the usual anonymous binding.  Note: The commas
       inside the bind string itself must be URL encoded, thus the %2c.

       The second example is the same as the first, but in addition to specifying a  bind  string
       it  also  uses  the  non-standard "x-bindpw" extension to specify a password, in this case
       "secret".

       The "!" character is used to ensure Perdition supports the "bindname"  extension.   If  it
       didn't,  the  LDAP  connection would be aborted.  Right now it isn't really needed, but it
       may become useful as other extensions appear.  For full details of this, take  a  look  at
       RFC2255.

       Multiple LDAP Servers

       It  is  possible  to specify multiple LDAP servers by specifying them, space delimited, in
       the LDAP UDL. If this is the case an attempt will be made to open  a  connection  to  each
       host in order, the first host to which a connection is successfully made will be used.

       For example: (N.B.: this example has been split over multiple lines for ease or reading)

       ldap://host1 host2 host3/ou=mailbox,dc=nodomain?
       username,mailhost,port?one?(uid=%s)

       perdition.schema

       A  schema has been defined for perdition and is supplied as part of perdition. To use this
       you should install it on the LDAP server in the LDAP daemon's schema directory and include
       it in slapd.conf, after other includes and before any database definitions.

LIBRARY FUNCTIONS

       The  database  is accessed using the dlopen(3) mechanism on a library.  The library should
       define the symbol dbserver_get with the following semantics.

       int (*dbserver_get)(char *, char *, char **, size_t *)

       Find the server (value) given the user (key)

       pre:   key_str: Key as a null terminated string

              options_str: Options string. The usage of this is implementation dependent.

              str_return: Value is returned here

              len_return: Length of value is returned here

       post:  The str_key is looked up and the corresponding value is returned in str_return  and
              len_return.

       return:
              0 on success

              -1  on db access error This includes file, connection and other data access errors.
              It does not cover memory allocation problems.

              -2 if key cannot be found in map

              -3 on other error

       Note:  The string returned in str_return should be in the  following  form.   Setting  the
              domain_delimiter is discussed in the perdition(8), "@" is used in this example.

              [<username><domain_delimiter>]<servername>[:<port>]

              E.g.:

              localhost:110
              user@localhost:110
              user@localhost
              localhost

       As  the  library  is  opened  using  the  dlopen(3)  mechanism the library may also export
       functions _init and _fini that will be executed when the  library  is  opened  and  closed
       respectively.   In  addition  if the symbols following  symbols are defined then these are
       run when the library is opened and closed respectively.  If defined these  symbols  should
       have the following semantics.

       int *(*dbserver_init)(char *)

       Initialise db as necessary

       pre:   options_str: Options string. The usage of this is implementation dependent.

       post:  db is initialised

       return:
              0 on success

              -1  on db access error This includes file, connection and other data access errors.
              It does not cover memory allocation problems.

              -2 if key cannot be found in map

              -3 on other error

       int *(*dbserver_fini)(void)

       Shut down db as necessary

       pre:   none

       post:  db is shut down

       return:
              0 on success

              -1 on db access error This includes file, connection and other data access  errors.
              It does not cover memory allocation problems.

              -2 if key cannot be found in map

              -3 on other error

       In  addition,  if  a  SIGHUP  is  sent  to  a  process  then  a  signal  handler will call
       dbserver_fini  if  it  is  defined  and  then  dbserver_init  if  it  is  defined.   Note:
       dbserver_init will be called if defined, even if dbserver_fini is not defined.

       In  the  case of the posix regular expressions library this will cause popmap.re to be re-
       parsed, hence effecting any changes that have been made to that file. For the GDBM library
       it  will  reopen  the  database  and  for  the  other  libraries  it will reinitialise its
       connection to the database, LDAP or NIS server.

       The shared library has access to the following global symbols exported by perdition.

       struct utsname *system_uname
              The uname information for the system as per uname(2)

       struct sockaddr_in *peername
              The sockaddr_in for address and port of the client end of the connection.

       struct sockaddr_in *sockname
              The sockaddr_in for the local address and port that the client connected to.  Note:
              Under  Solaris  7  and  above,  this  is actually the sockaddr_in bound to, not the
              address and port the connection was accepted on.

SEE ALSO

       perdition(8),    makegdbm(1),    makebdb(1),     make(1),     perditiondb_mysql_makedb(8),
       perditiondb_postgresql_makedb(8) perditiondb_ldap_makedb(8), perditiondb_odbc_makedb(8)

AUTHORS

       Lead
       Horms <horms@vergenet.net>

       Perditiondb Library Authors
       Frederic Delchambre <dedel@freegates.be>      (MySQL)
       Chris Stratford: <chriss@uk.uu.net>           (LDAP and BDB)
       Nathan Neulinger <nneul@umr.edu>              (NIS)

       Contributing Authors
       Daniel Roesen <droesen@entire-systems.com>
       Clinton Work <work@scripty.com>
       Youri <ya@linkline.be>
       Jeremy Nelson <jnelson@optusnet.com.au>
       Wim Bonis <bonis@solution-service.de>
       Arvid Requate <arvid@Team.OWL-Online.DE>
       Mikolaj J. Habryn <dichro@rcpt.to>
       Ronny Cook <ronny@asiaonline.net>
       Geoff Mitchell <g.mitchell@videonetworks.com>
       Willi Langenberger <wlang@wu-wien.ac.at>
       Matt Prigge <mprigge@pobox.com>
       Wolfgang Breyha <wolfgang.breyha@uta.at>

                                         6th August 2003                           PERDITIONDB(5)