mail500 - X.500 capable mailer

       fax500 - X.500 capable fax delivery agent


SYNOPSIS

       /usr/sbin/mail500  [-d  level] [-f mailfrom] [-h hostname]
       [-l ldaphost] [-m address] [-v vacationhost]

       /usr/sbin/fax500 [-d level] [-f  mailfrom]  [-h  hostname]
       [-l ldaphost] [-m address]


DESCRIPTION

       mail500  is  an  LDAP/X.500-capable mailer, suitable to be
       invoked from a mail delivery agent  such  as  sendmail(8).
       It  supports  mail to both individuals and groups.  fax500
       is an LDAP/X.500-capable  facsimile  delivery  agent.   It
       utilizes    the    Internet   remote-printing   experiment
       (tpc.int).  For  more  information  on  tpc.int,  look  in
       /mrose/tpc  on  ftp.ics.uci.edu,  or  send  mail  to  tpc-
       faq@town.hall.org.


OPTIONS

       -dlevel Turn on  debugging  as  defined  by  level.   This
       option directs mail500/fax500 to produce various debugging
       output via the syslog(8) facility at the LOG_ALERT  level.

       -f mailfrom
              This  option  tells  mail500/fax500 what to set the
              envelop from address to when (re)invoking  sendmail
              to  deliver mail.  mailfrom should be a valid email
              address.   Normally,  this  option  is  passed   to
              mail500/fax500  via the sendmail.cf(5) mailer defi­
              nition, and is set to something like the $f  macro.

       -l ldaphost
              Specify  an alternate host on which the LDAP server
              is running.

       -m address
              If mail500/fax500  produces  a  rejection  message,
              this  is  the address from which it will com.  Nor­
              mally, this option is passed to mail500/fax500  via
              the sendmail.cf(5) mailer definition, and is set to
              something  like   $n@$w   (typically,   mailer-dae­
              mon@hostname).

       -v vacationhost
              If  the vacation facility is operative, this option
              specifies the host to which the mail of  users  who
              are on vacation should be sent.


HOW MAIL500 AND FAX500 WORK

       When mail500/fax500 gets invoked with one or more names to

       Where  it searches, and what kind(s) of search(es) it does
       are compile-time configurable by changing the  base  array
       in  main.c.   For example, the configuration we use at U-M
       is like this:

       Base    base[] =
            { "ou=People, o=University of Michigan, c=US", 0
                 "uid=%s", "cn=%s", NULL,
              "ou=System Groups, ou=Groups, o=University of Michigan, c=US", 1
                 "(&(cn=%s)(associatedDomain=%h))", NULL, NULL,
              "ou=User Groups, ou=Groups, o=University of Michigan, c=US", 1
                 "(&(cn=%s)(associatedDomain=%h))", NULL, NULL,
              NULL
            };

       which means that in delivering  mail  to  "name@umich.edu"
       mail500/fax500would  do  the the following searches, stop­
       ping if it finds a match at any step:

       subtree search of "ou=People, o=University of Michigan, c=US"
            for (uid=name)
       subtree search of "ou=People, o=University of Michigan, c=US"
            for (cn=name)
       subtree search of "ou=System Groups, ou=Groups, o=University of Michigan, c=US"
            for (&(cn=name)(associatedDomain=umich.edu))
       subtree search of "ou=User Groups, ou=Groups, o=University of Michigan, c=US"
            for (&(cn=name)(associatedDomain=umich.edu))

       Notice that when specifying a filter %s is replaced by the
       name,  or user portion of the address while %h is replaced
       by whatever is passed in  to  mail500/fax500  via  the  -h
       option (typically the host portion of the address).

       You  can also specify whether you want search results that
       matched because the entry's RDN matched the search  to  be
       given  preference or not.  At U-M, we only give such pref­
       erence in the mail group portion of the searches.   Beware
       with this option:  the algorithm used to decide whether an
       entry's RDN matched the search is very simple-minded,  and
       may not always be correct.

       There  is  currently  no  limit  on  the  number  of areas
       searched (the base array can be as large as you want), and
       an  arbitrary  limit  of  2 filters for each base.  If you
       want more than that, simply changing the 3 in the  typedef
       for Base should do the trick.


X.500 SUPPORT

       In  X.500,  there  are several new attribute types and one
       new object class defined that mail500/fax500 uses.  At its
       most basic, for normal entries mail500 will deliver to the
       value(s) listed in the mail attribute of  the  entry,  and
       fax500  will  attempt  to  deliver  a fax to the telephone

       For example, at U-M my entry has the attribute

            mail= tim@terminator.rs.itd.umich.edu

       So  mail  sent  to  tim@umich.edu  will  be  delivered via
       mail500 to that address (assuming the sendmail.cf(5)  file
       is set up to call mail500 for mail to somebody@umich.edu -
       see below).  If there were multiple values  for  the  mail
       attribute, multiple copies of the mail would be sent.

       In the case of fax500,ifmyentryhastheattribute

            facsimileTelephoneNumber= +1 313 764 5140

       A  message  sent  to tim@fax.umich.edu (assuming the send­
       mail.cf file is set up  to  pass  mail  @fax.umich.edu  to
       fax500-  see  below)  will  generate  a message to remote-
       printer.Timothy_A_Howes@0.4.1.5.4.6.7.3.1.3.1.tpc.int.

       A new  object  class,  rfc822MailGroup,  and  several  new
       attributes  have been defined to handle email groups/mail­
       ing lists.  To use this, you will need to add this to your
       local oidtable.oc:

            # object class for representing rfc 822 mailgroups
            rfc822MailGroup:        umichObjectClass.2 : \
                 top : \
                 cn : \
                 rfc822Mailbox, member, memberOfGroup, owner, \
                 errorsTo, rfc822ErrorsTo, requestsTo, rfc822RequestsTo, \
                 joinable, associatedDomain, \
                 description, multiLineDescription, \
                 userPassword, krbName, \
                 telecommunicationAttributeSet, postalAttributeSet

       And you will need to add these to your local oidtable.at:

            # attrs for rfc822mailgroups
            multiLineDescription:   umichAttributeType.2    : CaseIgnoreList
            rfc822ErrorsTo:         umichAttributeType.26   : CaseIgnoreIA5String
            rfc822RequestsTo:       umichAttributeType.27   : CaseIgnoreIA5String
            joinable:               umichAttributeType.28   : Boolean
            memberOfGroup:          umichAttributeType.29   : DN
            errorsTo:               umichAttributeType.30   : DN
            requestsTo:             umichAttributeType.31   : DN

       The  idea  was  to define a kind of hybrid mail group that
       could handle people who were in X.500  or  not.   So,  for
       example,  members of a group can be specified via the mem­
       ber attribute (for X.500  members)  or  the  rfc822MailBox
       attribute  (for  non-X.500  members).   Similarly  for the
       errorsTo  and  rfc822ErrorsTo,  and  the  requestsTo   and
       rfc822RequestsTo attributes.

       you have to do is create an rfc822MailGroup  and  fill  in
       the errorsTo or rfc822ErrorsTo attributes (or both).  That
       will cause any errors encountered when delivering mail  to
       the  group  to  go to the addresses listed (or X.500 entry
       via it's mail attribute).

       If you fill in  the  requestsTo  or  rfc822RequestsTo  (or
       both)  attributes,  mail sent to groupname-request will be
       sent to the addresses listed there.  If you  fill  in  the
       owner attribute, mail sent to groupname-owner will be sent
       to the addresses listed there.  mail500 does this automat­
       ically, so you don't have to explicitly add the groupname-
       request or groupname-owner aliases to your group.

       To allow users to join a  group,  there  is  the  joinable
       flag.   If TRUE, mail500 will search for entries that have
       a memberOfGroup attribute equal to the DN  of  the  group,
       using  the same algorithm it used to find the group in the
       first place (i.e. the DNs and filters listed in  the  base
       array).   This  allows  people to join (or subscribe to) a
       group without having to modify the group  entry  directly.
       If joinable is FALSE, the search is not done.


SENDMAIL CONFIGURATION

       The  idea  is that you might have a rule like this in your
       sendmail.cf file somewhere in rule set 0:

               R$*<@umich.edu>$*       $#mail500$@umich.edu$:<$1>
               R$*<@fax.umich.edu>$* $#fax500$@fax.umich.edu$:<$1>

       These rules say that any address that ends  in  @umich.edu
       will  cause the mail500 mailer to be called to deliver the
       mail, and any address that  ends  in  @fax.umich.edu  will
       cause  the  fax500 mailer to be called.  You probably also
       want to do something to prevent  addresses  like  termina­
       tor!tim@umich.edu              or             tim%termina­
       tor.rs.itd.umich.edu@umich.edu  from   being   passed   to
       mail500.   At U-M, we do this by adding rules like this to
       rule set 9 where we strip off our local names:

            R<@umich.edu>$*:$*                 $>10<@>$1:$2
            R$+%$+<@umich.edu>                 $>10$1%$2<@>
            R$+!$+<@umich.edu>                 $>10$1!$2<@>

       Of course, you  would  substitute  your  domain  name  for
       umich.edu  in  the  above  examples.  See the sample send­
       mail.cf file in the ldap source directory clients/mail500/
       for more details.

       The  mail500  and fax500 mailers should be defined similar
       to this in the sendmail.cf file:

       Mmail500, P=/usr/sbin/mail500, F=DFMSmnXuh, A=mail500 -f $f -h $h -m $n@$w $u


       This defines how mail500/fax500 will be treated  by  send­
       mail  and  what  arguments  it will have when it's called.
       The various flags specified by  the  F=...  parameter  are
       explained  in  your  local  sendmail book (with any luck).
       The arguments  to  mail500/fax500  are  as  defined  under
       OPTIONS above.  The final argument $u is used to stand for
       the addresses to which to deliver the mail.


NOTES

       The default values for several #defines that  control  how
       mail500 and fax500 works are configured at compile time in
       the include/ldapconfig.h.edit include  file.   You  should
       edit this file to suit your site.


BUGS

       mail500/fax500  should use the ldap_getfilter(3) facility,
       instead of compiling in the search filters to  use.   This
       is shameful.

       The support for joinable groups (searching to find members
       who have set something in their own  entry)  is  really  a
       hack because we did not have good enough access control to
       allow people to add and delete themselves from  the  group
       itself.

       At  one  point,  mail500  and fax500 were exactly the same
       binary, and would behave appropriately based on  how  they
       were  invoked.   Unfortunately, several new features (e.g.
       vacation support) were added to mail500 but not to fax500.


SEE ALSO

       ldap(3), sendmail.cf(5), sendmail(8),


ACKNOWLEDGEMENTS

       OpenLDAP  is developed and maintained by The OpenLDAP Pro­
       ject (http://www.openldap.org/).  OpenLDAP is derived from
       University of Michigan LDAP 3.3 Release.


Man(1) output converted with man2html