-This could also be used to adjust the full name by
-defining the
-.b x
-macro; e.g.,
-.(b
-DxEric Allman in Outer Space
-.)b
-.sh 2 "Configuration File Description"
-.pp
-The configuration file is formatted
-as a series of text lines,
-each beginning with a character describing its semantics.
-Blank lines and lines beginning with a sharp sign
-(#)
-are ignored.
-Other lines are:
-.(b
-.ta 3n
-D define macro
-H define header
-M define mailer
-S use rewriting set
-C define word class
-F define word class from file
-R specify rewriting rule
-.)b
-.pp
-See figure 2 for an example configuration file.
-Please note that this is intended as an example only.
-.(z
-.hl
-.sz -2
-.re
-##### sendmail configuration file
-.sp \n(psu
-### local hosts on various nets
-DABerkeley
-DBIngVAX
-DUucbvax
-.sp \n(psu
-### special macros
-# my name
-D\&n\&MAILER-DAEMON
-# UNIX header format
-D\&l\&From $g $d
-# delimiter (operator) characters
-D\&o\&.:@!^
-# address writing style
-D\&q\&$g$?x ($x)$.
-.sp \n(psu
-### format of headers:
-H\&Date: $a
-H\&From: $g$?x ($x)$.
-H\&Full-Name: $x
-H\&Message-Id: <$t.$p.$B@$A>
-H\&Posted-Date: $a
-.sp \n(psu
-### name classifications
-# arpanet hostnames
-C\&A\&ucb berkeley
-# list of local host names
-C\&B\&j IngVax
-# berknet hosts on the arpanet
-C\&C\&i ingres ing70
-# uucp hostnames
-C\&U\&ucbvax ernie
-.sp \n(psu
-.ta \w'M\&local 'u +\w'/usr/net/bin/sendberkmail 'u +\w'rlsAmn 'u +\w'$f@$A 'u
-### mailers
-M\&local /bin/mail rlsAmn $f ...local\&mail -d $u
-M\&prog /bin/csh lA $f ...prog\&mail -fc $u
-M\&berk /usr/net/bin/sendberkmail fxs $B:$f ...berk\&mail -m $h -h $c -t $u
-M\&arpa /usr/lib/mailers/arpa sAu $f@$A ...arpa\&mail $f $h $u
-M\&uucp /usr/bin/uux rsDxmU $U!$f ...uucp\&mail - $h!rmail ($u)
-.sp \n(psu
-### rewriting rules
-.ta \w'R\&CSVAX:$-h!$+u 'u +\w'$#berk$@ing70$:$+u@$+h 'u
-R\&$-.$+ $1:$2 change "." to ":"
-R\&$=C:$+@$- $2@$3 delete ing70: on arpanet addresses
-R\&$+@$=A ing70:$1 delete local arpa hosts
-R\&$+@$- $#berk$@ing70$:$1@$2 send arpa mail to ing70
-R\&$+^$+ $1!$2 change "^" to "!"
-R\&$-!$=U!$+ csvax:$3 delete uucp loops through csvax
-R\&$-!$+ csvax:$1!$2 send uucp mail to csvax
-R\&$-:$-:$+ $2:$3 delete multiple berk hosts
-R\&$=B:$+ $2 delete local berk hosts
-R\&$-:$+ $#berk$@$1$:$2 resolve berk mail
-R\&$+ $#local$:$1 resolve local mail
-.sp \n(psu
-### rewriting rules for from host
-S\&1
-R\&ing70:$+@$- $1@$2 arpanet mail is automatic
-R\&CSVAX:$-!$+ $1!$2 uucp mail is automatic
-.sp \n(psu
-### rewriting rules for translated sender
-S\&2
-R\&$-x:$-:$+ $2:$3 delete multiple berknet hosts
-.sz
-.sp
-.ce
-Figure 2. Sample configuration file.
-.hl
-.)z
-.sh 3 "D \*- define macro"
-.(b
-.b D \c
-.i x\|val
-.)b
-.pp
-This line defines a macro
-with the single character name
-.i x
-and value
-.i val .
-Macros can be interpolated using the escape
-.b $ \c
-.i x ,
-where
-.i x
-is the macro name.
-By convention,
-all upper-case letters are unused by
-.i sendmail
-and may be used freely by the user;
-all other names are reserved for use by sendmail.
-Certain macros
-.i must
-be defined,
-and are used internally.
-These are:
-.(b
-.ta 4n
-$l UNIX-style \*(lqFrom\*(rq line.
-$n My address in error messages.
-$o \*(lqOperators\*(rq in addresses.
-$q How to write addresses in headers.
-.)b
-The
-.b $l
-macro is expanded when
-.i sendmail
-wants to insert a UNIX-style
-.q From
-line on messages.
-This typically expands to something like:
-.(b
-From sally Wed Aug 12 09:15:13 1981
-.)b
-The
-.b $n
-macro is used as the name of this process
-when error messages are being mailed back.
-Typically,
-it is wise to include an alias
-so that mail to this address will be sent to root.
-The
-.b $o
-macro defines the characters
-that will separate words when addresses are being broken up.
-Each of these becomes a word by itself when scanned.
-Blanks and tabs are built-in separators
-but are ignored,
-i.e., are not turned into words.
-For example, the input:
-.(b
-Ing70: ZRM @ MIT-MC SRI-KL
-.)b
-Is broken up into the six words:
-.(b
-Ing70, :, ZRM, @, MIT-MC, SRI-KL
-.)b
-assuming that colon and at-sign are operators
-(but hyphen is not).
-The
-.b $q
-macro gives the format for addresses
-as they should appear in headers.
-This will normally be something like:
-.(b
-$g$?x ($x)$.
-.)b
-Which will give the translated from address
-followed by the full name if known.
-.pp
-A number of macros are defined by
-.i sendmail
-for use as primitives.
-These are:
-.(l
-.ta 5n
-$a The \*(lqDate:\*(rq line date in ARPANET format.
-$b The current date in ARPANET format.
-$c The hop count.
-$d The date in UNIX (ctime) format.
-$f The sender's (from) address.
-$g The sender's address translated by the mailer.
-$h The host of the recipient.
-$p The process id of sendmail in decimal.
-$t The time in seconds in decimal.
-$u The user part of the recipient.
-$v The version number of sendmail.
-$x The full name of the sender.
-$y The id of the sender's terminal.
-$z The home directory of the recipient.
-.)l
-.pp
-There are three types of dates that can be used.
-The
-.b $a
-and
-.b $b
-macros are in ARPANET format;
-.b $a
-is a copy of the time extracted from the
-.q Date:
-field of the incoming message
-(if there was one),
-and
-.b $b
-is the current date and time \*- used for postmarks.
-If no
-.q Date:
-is found in the message,
-they are the same.
-The
-.b $d
-macro has the date in UNIX
-.i ctime
-format;
-this is extracted from the message if possible
-and is otherwise the current date.
-.pp
-The
-.b $f
-macro is the id of the sender
-as originally determined;
-when mailing to a specific person,
-the
-.b $g
-macro is the address of the sender
-with respect to the receiver.
-For example,
-if I send to
-.q csvax:samwise
-the
-.b $f
-and
-.b $g
-macros are:
-.(b
-.ta 4n
-$f eric
-$g IngVAX:eric
-.)b
-This only applies to the first step in the link.
-For example,
-sending to Ing70:drb@bbn-unix,
-we have
-.b $f
-and
-.b $g
-as above for the transfer to Ing70, but:
-.(b
-$f IngVAX:eric
-$g IngVAX:eric@Berkeley
-.)b
-for transfer to the ARPANET\**.
-.(f
-\**When this is actually sent to the ARPANET,
-this will appear as
-IngVAX.eric@Berkeley.
-The translation of the colon to a period is performed
-by the mailer that queues ARPANET mail.
-.)f
-.pp
-The
-.b $x
-macro is set to the full name of the sender.
-This can be determined in several ways.
-It can be passed as a flag to
-.i sendmail .
-The
-.q Full-Name:
-line in the header is the second option,
-and the comment portion of the
-.q From:
-line is the third.
-If all of these fail,
-and if the message is being originated locally,
-the full name is looked up in the
-.i passwd
-file.
-.pp
-When sending, the
-.b $u ,
-.b $h ,
-and
-.b $z
-macros get set to the user, host, and home directory
-(respectively)
-of the receiver.
-The host is only set if the user is not local,
-and the home directory is only set if the user is local.
-.pp
-The
-.b $p
-and
-.b $t
-macros are used to create unique strings.
-The
-.b $y
-macro is set to the id of the terminal of the sender
-(if known);
-some systems like to put this in the
-.q From
-line.
-The
-.b $v
-macro is set to the version number of
-.i sendmail ,
-and can be used in postmarks
-to help debugging.
-.pp
-A primitive conditional is available during macro expansion.
-The construct:
-.(b
-$?x text1 $: text2 $.
-.)b
-tests if macro
-.b $ \c
-.i x
-is defined.
-If it is,
-text1 is interpolated;
-otherwise,
-text2 is interpolated.
-.sh 3 "H \*- define header"
-.(b
-.b H \c
-.i "Field-Name" \c
-.b ":" " \c
-.i "field value"
-.)b
-.pp
-The
-.b H
-line looks like a regular header line,
-except that the field value is macro expanded
-before use.
-All headers mentioned in this way
-are automatically inserted
-into every message
-except for headers mentioned in the compile-time
-configuration file
-.i conf.c .
-These headers are
-Date,
-From,
-Full-Name,
-Message-Id,
-and
-Received-Date.
-To get these fields the appropriate flag
-must be specified
-for the receiving mailer.
-.pp
-Since the file
-.q ".mailcf"
-in the sender's home directory is read and processed,
-it is possible to add customized header lines.
-For example,
-the .mailcf consisting of:
-.(b
-H\&Phone: (415) 888-7770
-.)b
-will add that line to every outgoing message.
-.sh 3 "M \*- define mailer"
-.(b F
-.b M \c
-.i mailer-name
-.i pathname
-.i flags
-.i from-macro
-.i "argument list"
-.)b
-.pp
-This line is structured into fields
-separated by white space (spaces or tabs).
-The fields are:
-.np
-The internal name of the mailer,
-referred to in the rewriting rules.
-.np
-The pathname of the program to execute for this mailer.
-.np
-The flags for this mailer,
-described below.
-.np
-The macro string to become the
-.b $g
-macro (translated sender)
-for this mailer.
-.np
-The argument vector passed to the mailer
-(macro expanded).
-.pp
-The flags are a series of characters:
-.ls 1
-.ip f
-The mailer wants a
-.b \-f
-.i from
-flag,
-but only if this is a network forward operation
-(i.e.,
-the mailer will give an error
-if the executing user does not have special permissions).
-.ip r
-Same as
-.b f ,
-but sends a
-.b \-r
-flag.
-.ip q
-Don't print errors \*- the mailer will do it for us.
-.ip S
-Don't reset your userid before calling the mailer.
-This would be used in a secure environment where
-.i sendmail
-ran as a special user.
-This could be used to prevent
-(or at least complicate)
-forged addresses.
-This option is suppressed in
-.q unsafe
-configuration files
-(i.e., user-supplied, either on a
-command line
-option, or in the
-.i \&.mailcf
-file in the home directory).
-.ip n
-This mailer does not want a UNIX-style
-.q From
-line on the message.
-.ip l
-This mailer is local,
-so no host will be specified.
-Also,
-the mailer wants special local processing
-(such as a
-.q Received-Date:
-field).
-.ip s
-Strip quote characters off of addresses
-before calling the mailer.
-.ip m
-This mailer can send to multiple users
-(on the same host)
-in one call.
-.ip F
-This mailer wants a
-.q From:
-header line.
-.ip D
-This mailer wants a
-.q Date:
-header line.
-.ip M
-This mailer wants a
-.q Message-Id:
-header line.
-.ip x
-This mailer wants a
-.q Full-Name:
-header line.
-.ip u
-Upper case should be preserved in user names.
-.ip h
-Upper case should be preserved in host names.
-.ip e
-This mailer is expensive,
-and it may be desirable to limit usage.
-.ip R
-The recipient addresses should be rewritten to be relative to the
-receiver, rather than relative to the sender.
-This is always done with sender addresses,
-but should only be done on recipients
-if the host you are sending to knows that it is being done.
-Setting this flag makes it easy to do a
-.q reply
-command in a user mail program
-(since all that must be done is send to all addresses in the message header),
-but user mail programs that try to rewrite the addresses
-will be completely confused.
-.ip A
-This mailer wants an ARPANET standard header
-(equivalent to the
-.b F
-and
-.b D
-flags).
-.ip U
-This mailer is a UUCP mailer that wants leading from lines
-of the form:
-.(b
-From sender <date> remote from sysname
-.)b
-instead of the more reasonable:
-.(b
-From sysname!sender <date>
-.)b
-A compilation flag must be on to include this code.
-.ls
-.lp
-There should always be at least one flag,
-since every message should include either a
-.b x
-or a
-.b F
-flag.
-.sh 3 "S \*- use rewriting set"
-.(b
-.b S \c
-.i N
-.)b
-.pp
-There are three sets of rewriting rules.
-Set zero is used to rewrite recipient addresses.
-Set one is used to rewrite sender addresses.
-Set two is applied after evaluating the
-.q $g
-macro,
-i.e., after determining the from address for a particular mailer.
-.pp
-Set one can be used to eliminate implicit links.
-For example,
-if there exists a site on on the BerkNet called
-.q Ing70
-which is an ARPANET gateway,
-and we are on a site called
-.q IngVAX ,
-ARPANET mail coming into
-.q Ing70
-for someone on
-.q IngVAX
-will read:
-.(b
-From: Ing70:auser@ahost
-.)b
-Rewriting set one can rewrite this as:
-.(b
-From: auser@ahost
-.)b
-since
-.q Ing70
-will be implied.
-.pp
-Set two is used to eliminate anomalies resulting from
-forwarding.
-For example,
-a message received at Ing70 from mckusick on the CSVAX will
-appear as:
-.(b
-From CSVAX:mckusick
-.)b
-If this is then forwarded to IngVAX,
-sendmail on Ing70 will rewrite the from address as:
-.(b
-From Ing70:CSVAX:mckusick
-.)b
-The extra host reference can be eliminated by ruleset two on Ing70.
-.pp
-When you change to a new set,
-the previous content of that set is cleared.
-.sh 3 "R \*- rewriting rule"
-.(b F
-.b R \c
-.i pattern
-.i replacement
-.i comments
-.)b
-.pp
-The rewriting rules drive the address parser.
-The rewriting process is essentially textual.
-First,
-the address to be rewritten is broken up into words.
-Words are defined as strings of non-special characters
-separated by white space or single special characters
-as defined by the
-.b $o
-macro.
-Then,
-the words are rewritten using simple pattern matching.
-Words in the pattern match themselves
-unless they begin with dollar sign.
-The dollar escapes have the following meanings\**:
-.(f
-\**These dollar escapes have nothing to do with macro expansion.
-.)f
-.(b
-.ta 6n
-$- Match a single word.
-$+ Match one or more words.
-$=c Match any word in class c (see below).
-.)b
-The case of letters is ignored in pattern matching
-(including class comparisons).
-.pp
-When a pattern (also called a left hand side or LHS)
-matches,
-the input is rewritten as defined by the right hand side (RHS).
-Acceptable escapes in the RHS are:
-.(b
-.ta \w'$#mailer 'u
-$n Replace from corresponding match in LHS.
-$#mailer Canonical mailer name.
-$@host Canonical host name.
-$:user Canonical user name.
-.)b
-The substitution from LHS to RHS is done by the index
-of indefinite matches on the LHS.
-Each pattern reexecutes until it fails.
-As soon as the input resolves to a canonical name
-(i.e.,
-.q "$#mailer$@host$:user" ),
-rewriting ends;
-otherwise,
-the next pattern is tried.
-The
-.q "$@host"
-part is not needed
-if the mailer does not require a host.
-The special mailer
-.q error
-causes the user part to be printed as an error.
-.sh 3 "C \*- define word class"
-.(b F
-.b C \c
-.i c\|word\&1
-.i word\&2 ...
-.)b
-.pp
-There are twenty six word classes,
-represented as
-.q A
-through
-.q Z .
-For example:
-.(b
-CVcsvax ingvax esvax
-.)b
-defines the words
-.q csvax ,
-.q ingvax ,
-and
-.q esvax
-to all be in class
-.q V ,
-so that
-.q $=V
-on the LHS of a rewriting rule
-will match any of these words.
-.sh 3 "F \*- define word class from file"
-.(b
-.b F \c
-.i c\&filename
-.i format
-.)b
-.pp
-This works analogously
-to the
-.b C
-line except that it reads the contents of the class
-from the given
-.i filename .
-If given,
-the specified
-.i format
-is used as a
-scanf(3)
-string which should produce a single string.
-.sh 2 "A Detailed Example"
-.pp
-We will now follow the configuration file
-in figure 2
-through in detail.
-This example is from a version of the configuration file
-for the IngVAX machine at Berkeley.
-IngVAX had no interesting network connections.
-Ing70 had an ARPANET connection,
-and CSVAX had a UUCP connection.
-All of these machines were tied together via BerkNet.
-.sh 3 "Macro definitions"
-.(b
-DABerkeley
-DBIngVAX
-DUucbvax
-DnMAILER-DAEMON
-DlFrom $g $d
-Do.:@!^
-Dq$g$?x ($x)$.
-.)b
-The first three macros are for convenience only,
-and are used to define the local host names
-on the ARPANET, BerkNet, and the UUCP net
-respectively.
-.pp
-Macro
-.b n
-defines the name of
-.i sendmail
-when error messages are sent.
-Macro
-.b l
-defines what the first line
-of a message in UNIX format looks like,
-in this case the version 7 standard of:
-.(b
-From sender-name time-of-submission
-.)b
-The
-.b o
-macro
-tells what characters will be distinct from names
-when scanning addresses.
-In this case,
-dot and colon will be used
-to distinguish BerkNet addresses,
-at sign for ARPANET addresses,
-and exclamation point and caret for UUCP addresses.
-.sh 3 "Header definitions"
-.(b
-H\&Date: $a
-H\&From: $g$?x ($x)$.
-H\&Full-Name: $x
-H\&Message-Id: <$t.$p.$B@$A>
-H\&Posted-Date: $a
-.)b
-These define the headers
-that may be added to a message.
-The
-.q Date:
-is just the ARPANET idea of the date.
-The
-.q From:
-line is the translated version of the sender,
-followed by the sender's full name if known.
-The
-.q Full-Name:
-field is used to transmit the sender's full name
-when a
-.q From:
-line is not being sent;
-these will normally be mutually exclusive.
-The
-.q Message-Id:
-field has the time and process id's concatenated
-with the BerkNet and ARPANET addresses
-to make a unique string.
-Finally, the
-.q Posted-Date:
-is the date in ARPANET format;
-it differs from
-.q Date:
-in that it is always output as soon as the message enters
-.i sendmail 's
-domain,
-and hence indicates the time that the message first enters
-the mail delivery system
-[Postel79b, NBS80].
-.sh 3 "Name classifications"
-.(b
-C\&A\&ucb berkeley
-C\&B\&j IngVax
-C\&C\&i ingres ing70
-C\&U\&ucbvax ernie
-.)b
-These commands put the words
-.q ucb
-and
-.q berkeley
-into class
-.q A ,
-the valid names of this site on the ARPANET.
-Words
-.q j
-and
-.q ingvax
-are in class
-.q B ,
-the local names on BerkNet.
-Class
-.q C ,
-the names of the site which has the ARPANET link,
-has the words
-.q i ,
-.q ingres ,
-and
-.q ing70 .
-Finally,
-.q ucbvax
-and
-.q ernie
-are the UUCP names of our UUCP gateway,
-and are in class
-.q U .
-.pp
-The classes will be used in the patterns of the rewriting rules
-as described below.
-.sh 3 "Mailer definitions"
-.(b
-.if n .in 0
-.if t .sz -2
-.ta \w'M\&local 'u +\w'/usr/net/bin/sendberkmail 'u +\w'rlsAmn 'u +\w'$f@$A 'u
-M\&local /bin/mail rlsAmn $f ...localmail -d $u
-M\&prog /bin/csh lA $f ...progmail -fc $u
-M\&berk /usr/net/bin/sendberkmail fxs $B:$f ...berkmail -m $h -h $c -t $u
-M\&arpa /usr/lib/mailers/arpa sAu $f@$A ...arpamail $f $h $u
-M\&uucp /usr/bin/uux rsDxmU $U!$f ...uucpmail - $h!rmail ($u)
-.if n .in
-.if t .sz
-.)b
-Six mailers are known in the configuration file.
-There
-.i must
-be entries for local and program mail.
-.pp
-Local mail is sent using
-/bin/mail.
-It takes a
-.b \-r
-flag,
-is local,
-quote characters are stripped before sending,
-takes ARPANET standard headers,
-can deliver to multiple recipients at once,
-and does not want a UNIX-style
-.q From
-line since it will add one itself.
-The translated
-.q from
-address is the same as the raw
-.q from
-address,
-since no network hops are made.
-The argument vector has a program name,
-a
-.b \-d
-flag (\c
-.q "really deliver" ,
-which must be added to /bin/mail),
-and the list of recipients \*- one recipient per argument.
-.pp
-Mail piped through programs
-is interpreted by /bin/csh.
-Unlike local mail,
-it does not take a
-.b \-r
-flag,
-quotes should be left,
-it can only deal with one user,
-and it does want a UNIX-style
-.q From
-line,
-but is still local and still wants an ARPANET style header.
-.pp
-BerkNet mail is processed by
-/usr/net/bin/sendberkmail.
-It takes a
-.b \-f
-flag,
-wants a
-.q Full-Name:
-header line,
-and wants quotes stripped.
-The
-.q Full-Name:
-is used here because if it were given as a comment
-in a
-.q From:
-line the machine address of the sender
-would not be modified by later instantiations of
-.i delivermail \**.
-.(f
-\**\c
-.i Delivermail
-did no header editing,
-so
-.q From:
-lines were always passed untouched.
-When the gateways are converted to
-.i sendmail
-this can be changed.
-.)f
-The from address as seen by the receiver is
-.q IngVAX:sender ,
-and it takes a flag-oriented
-rather than a positional
-command list.
-.pp
-The ARPANET wants quotes stripped,
-ARPANET standard headers,
-and wants the user name left with case intact.
-It takes a positional command list.
-.pp
-UUCP mail calls
-.i uux
-with a
-.b \-r
-flag,
-quotes stripped,
-a
-.q Date:
-line,
-a
-.q Full-Name:
-line,
-and with multiple users listed.
-Since UUCP is a relic of the (not so) distant past,
-it requires ugly header lines.
-.pp
-If
-.q $u
-were to be missing from the argument vector for a mailer,
-that mailer would be accessed using the SMTP [Postel81]
-protocol.
-.sh 3 "Rewriting rules for recipient addresses"
-.(b
-.sz -2
-.ta \w'[88] 'u +\w'R\&CSVAX:$-h!$+u 'u +\w'$#berk$@ing70$:$+u@$+h 'u
-[1] R\&$-.$+ $1:$2 change "." to ":"
-[2] R\&$=C:$+@$- $2@$3 delete ing70: on arpanet addresses
-[3] R\&$+@$=A ing70:$1 delete local arpa hosts
-[4] R\&$+@$- $#berk$@ing70$:$1@$2 send arpa mail to ing70
-[5] R\&$+^$+ $1!$2 change "^" to "!"
-[6] R\&$-!$=U!$+ csvax:$3 delete uucp loops through csvax
-[7] R\&$-!$+ csvax:$1!$2 send uucp mail to csvax
-[8] R\&$-:$-:$+ $2:$3 delete multiple berk hosts
-[9] R\&$=B:$+ $2 delete local berk hosts
-[10] R\&$-:$+ $#berk$@$1$:$2 resolve berk mail
-[11] R\&$+ $#local$:$1 resolve local mail
-.sz
-.)b
-The first rule translates dots to colons.
-Redundant explicit routing to the ARPANET is deleted
-in the second rule.
-Hops out over the ARPANET
-back to us are deleted in the third rule \*-
-note that the BerkNet host that we would have come in on
-is inserted.
-Real ARPANET mail is resolved immediately with no further ado \*-
-it is sent out over the BerkNet to the ing70,
-and further rewriting stops immediately.
-.pp
-Carets are changed to exclamation points
-for UUCP addresses in the fifth rule.
-The sixth rule deletes loops out into UUCP land
-and back to us \*- noting that we will be left on CSVAX.
-The seventh rule does forwarding of UUCP mail to the CSVAX.
-Multiple BerkNet hosts are deleted in rule eight \*-
-this can occur internally quite easily
-as a side effect of a rewriting rule.
-Rule nine deletes local BerkNet hosts.
-The last two rules resolve BerkNet and local mail
-by turning them into the canonical form:
-.(b
-$#\fInet\fP$@\fIhost\fP$:\fIuser\fP
-.)b
-.pp
-Consider the following examples.
-The numbers to the left are the rule that is being applied
-to make the transformation.
-.(b
-.re
- esvax.asa
-[1] esvax:asa
-[10] $#berk$@esvax$:asa
-.)b
-.(b
- research^vax135^dmr
-[5] research!vax135^dmr
-[5] research!vax135!dmr
-[7] $#berk$@csvax$:research!vax135!dmr
-.)b
-.(b
- research!ucbvax!j:eric
-[6] csvax:j:eric
-[8] j:eric
-[9] eric
-[11] $#local$:eric
-.)b
-.(b
- ing70:wnj@Berkeley
-[2] wnj@Berkeley
-[3] ing70:wnj
-[10] $#berk$@ing70$:wnj
-.)b
-.sh 3 "Rewriting rules for sender addresses"
-.(b
-.sz -2
-.ta \w'R\&CSVAX:$-h!$+u 'u +\w'$+u@$+h 'u
-S\&1
-R\&ing70:$+@$- $1@$2 arpanet mail is automatic
-R\&CSVAX:$-!$+ $1!$2 uucp mail is automatic
-.sz
-.)b
-The
-.b S
-line starts putting the rules into set one.
-These rules strip off the
-.q ing70:
-from incoming ARPANET mail
-and the
-.q CSVAX:
-off of incoming UUCP mail.
-.pp
-The name classes could be used here,
-but using literal strings is safe
-because they will always be program-generated.