Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
PERDITIONDB(5)		       File Formats Manual		  PERDITIONDB(5)

NAME
     perditiondb - perdition modular popmap support

DESCRIPTION
     Perdition	supports  a  dynamic library mechanism to access arbitrary data-
     bases 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 informa-
     tion 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 in-
     stalled.

     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  in-
     stalled.

     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 specify-
     ing 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  in-
     stalled.	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 in-
     stalled.

     The regular expression is kept in	a  flat  file,	by  default  /etc/perdi-
     tion/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/perdi-
     tion/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 per-
     formance 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 us-
     ing 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  in-
     stalled.

     The  library will connect to a MySQL database and do a query on a table ex-
     pected 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 num-
     bers 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  data-
     base.   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  conse-
     quence  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 de-
     fault.  In the author's opinion it is always best to specify all of the ar-
     guments 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  com-
     mand 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 in-
     stalled.  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 data-
     bases  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 in-
     stalled.  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 com-
     mand 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  in-
     stalled.

     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 de-
     faults to 2. This may vary between different ldap implementations.  If  you
     inspect  the  local  ldap.h file, the values of LDAP_VERSION_MIN, LDAP_VER-
     SION_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  en-
     coded, 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"  ex-
     tension.  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  connec-
     tion 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  perdi-
     tion. To use this you should install it on the LDAP server in the LDAP dae-
     mon'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 de-
	    pendent.

	    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  sym-
     bols are defined then these are run when the library is opened  and  closed
     respectively.   If  defined  these symbols should have the following seman-
     tics.

     int *(*dbserver_init)(char *)

     Initialise db as necessary

     pre:   options_str: Options string. The usage of this is implementation de-
	    pendent.

     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 de-
     fined. 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 con-
	    nection.

     struct sockaddr_in *sockname
	    The sockaddr_in for the local address and port that the client  con-
	    nected  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),	  perdi-
     tiondb_mysql_makedb(8),	   perditiondb_postgresql_makedb(8)	  perdi-
     tiondb_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)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=perditiondb&sektion=5&manpath=FreeBSD+Ports+15.1.quarterly>

home | help