Annotation of researchv10no/lbin/mailx/man/mailsurr.4, revision 1.1

1.1     ! root        1: '\"macro stdmacro
        !             2: .if n .pH g4.mailsurr %W% of %G%
        !             3: .\"  Emphasis
        !             4: .de Em
        !             5: \f2\\$1\fP\\$2
        !             6: ..
        !             7: .nr X
        !             8: .if \nX=0 .ds x} mailsurr 4 "Essential Utilities" "\&"
        !             9: .if \nX=1 .ds x} mailsurr 4 "Essential Utilities"
        !            10: .if \nX=2 .ds x} mailsurr 4 "" "\&"
        !            11: .if \nX=3 .ds x} mailsurr "" "" "\&"
        !            12: .TH \*(x}
        !            13: .SH NAME
        !            14: \f4mailsurr\f1 \- surrogate commands for routing and transport of mail
        !            15: .SH DESCRIPTION
        !            16: The \f4mailsurr\f1 file contains routing and transport surrogate
        !            17: commands used by the \f4mail\fP command.
        !            18: Each entry in \f4mailsurr\f1 has three whitespace-separated,
        !            19: single quote delimited fields:
        !            20: .P
        !            21: .RS
        !            22: .ft 4
        !            23: \&'\f2sender\fP'   '\f2recipient\fP'   '\f2command\fP'
        !            24: .ft 1
        !            25: .RE
        !            26: .P
        !            27: or a line that begins
        !            28: .P
        !            29: .RS
        !            30: .ft 4
        !            31: Defaults:
        !            32: .ft 1
        !            33: .RE
        !            34: .P
        !            35: Entries and fields may span multiple lines,
        !            36: but leading whitespace on field continuation lines is ignored.
        !            37: Fields must be less than 1024 characters long after expansion (see
        !            38: below).
        !            39: .PP
        !            40: The sender and recipient fields are regular expressions.
        !            41: If the sender and recipient fields match those of the message currently
        !            42: being processed, the associated command is invoked.
        !            43: .PP
        !            44: The \f2command\fP field may have one of the following five forms:
        !            45: .P
        !            46: .RS
        !            47: .ft 4
        !            48: .nf
        !            49: \f4A\f1[\f4ccept\f1]
        !            50: \f4D\f1[\f4eny\f1]
        !            51: \f4T\f1[\f4ranslate\f1] \f4R=\f1[\f4\(bv\f1]\f2string\f1
        !            52: \f4< S=...;C=...;F=...;\f2 command\f1
        !            53: \f4>\fP \f2command\f1
        !            54: .fi
        !            55: .ft 1
        !            56: .RE
        !            57: .SS "Regular Expressions"
        !            58: The sender and recipient fields are composed of regular
        !            59: expressions (REs) which are digested by the \f4regexp\fP(5)
        !            60: \f4compile\fP and \f4advance\fP procedures
        !            61: in the C library.
        !            62: The regular expressions matched are those from \f4ed\fP(1), with simple
        !            63: parentheses \f4()\fP playing the role of \f4\e(\e)\fP and the addition of
        !            64: the \f4+\fP and \f4?\fP operators from \f4egrep\fP(1).
        !            65: Any single quotes embedded within the REs
        !            66: .Em must
        !            67: be escaped by prepending them with a backslash or
        !            68: the RE is not interpreted properly.
        !            69: .PP
        !            70: The \f4mail\fP command prepends a circumflex (\f4^\f1)
        !            71: to the start and appends a dollar sign (\f4$\f1) to the
        !            72: end of each RE so that it matches the entire string.
        !            73: Therefore it would be an error
        !            74: to use \f4^\f2RE\f4$\f1 in the sender and recipient fields.
        !            75: To provide case insensitivity, all REs are
        !            76: converted to lower case before compilation,
        !            77: and all sender and recipient information is converted to
        !            78: lower case before comparison.
        !            79: This conversion is done only for the purposes of RE pattern matching;
        !            80: the information contained within the
        !            81: message's header is
        !            82: .Em not
        !            83: modified.
        !            84: .PP
        !            85: The sub-expression pattern matching capabilities of \f4regexp\fP may be used
        !            86: in the command field,
        !            87: that is, \f4(\f1...\f4)\f1, where 1 \(<= \f2n\fP \(<= 9.
        !            88: Any occurrences of \f4\e\e\f2n\f1 in the
        !            89: replacement string are themselves replaced by the corresponding \f4(\f1...\f4)\f1
        !            90: substring in the matched pattern.
        !            91: The sub-expression fields from both the sender and recipient fields are
        !            92: accessible, with the fields numbered 1 to 9 from left to right.
        !            93: .SS "Accept and Deny Commands"
        !            94: \f4Accept\fP instructs \f4rmail\fP to continue its processing with the \f4mailsurr\f1
        !            95: file,
        !            96: but to ignore any subsequent matching \f4Deny\fP.
        !            97: That is, unconditionally accept this message for delivery processing.
        !            98: \f4Deny\fP instructs \f4rmail\fP to stop processing the \f4mailsurr\f1 file
        !            99: and to send a negative delivery notification to the originator of the message.
        !           100: Whichever is encountered first takes precedence.
        !           101: .SS "Translate Command"
        !           102: \f4Translate\fP allows optional on-the-fly translation of recipient address
        !           103: information.
        !           104: The \f2recipient\fP replacement string is specified as \f4R=\f2string\f1.
        !           105: .PP
        !           106: For example, given a command line of the form
        !           107: .P
        !           108: .RS 2
        !           109: .nf
        !           110: \f4\&'.+' '([^!]+)@(.+)\e.EUO\e.ATT\e.com' 'Translate R=attmail!\e\e2!\e\e1'\f1
        !           111: .fi
        !           112: .RE
        !           113: .P
        !           114: and a recipient address of \[email protected]\fP
        !           115: the resulting recipient address would be \f4attmail!sysa!rob\fP.
        !           116: .PP
        !           117: Should the first character after the equal sign be a `\(bv',
        !           118: the remainder of the string is taken as a command line
        !           119: to be directly executed by \f4rmail\fP.
        !           120: If any \f4sh\fP(1) syntax is required
        !           121: (metacharacters, redirection, etc.),
        !           122: then the surrogate command must be of the form:
        !           123: .P
        !           124: .RS
        !           125: \f4sh \-c "\f2shell command line...\f4"\f1
        !           126: .RE
        !           127: .P
        !           128: Special care must be taken to escape properly any embedded back-slashes
        !           129: and single or double quotes,
        !           130: since \f4rmail\fP uses double quoting to group
        !           131: whitespace delimited fields that are meant to be considered as a single
        !           132: argument to \f4execl\fP(2).
        !           133: It is assumed that the executed command will write one or more replacement
        !           134: strings on \f4stdout\fP, one per line.
        !           135: If more than one line is returned,
        !           136: each is assumed to be a different recipient for the message.
        !           137: This mechanism is useful for mailing list expansions.
        !           138: As stated above, any occurrences of \f4\e\e\f2n\f1 are replaced by the
        !           139: appropriate substring
        !           140: .Em before
        !           141: the command is executed.
        !           142: If the invoked command does not return at least one replacement string
        !           143: (no output or just a newline),
        !           144: the original string is
        !           145: .Em not
        !           146: modified.
        !           147: For example, the command line
        !           148: .P
        !           149: .RS
        !           150: \f4\&'.+'      '(.+)' 'Translate R=\(bv/usr/bin/findpath \e\e1'\fP
        !           151: .RE
        !           152: .P
        !           153: allows local routing decisions to be made.
        !           154: .PP
        !           155: If the recipient address string is modified, \f4mailsurr\fP
        !           156: is rescanned from the beginning with the new address(es),
        !           157: and any prior determination of \f4Accept\fP (see above) is discarded.
        !           158: .SS "\f4<\fP \f2command\fP"
        !           159: The intent of a \f4<\fP command is that it is invoked as part of the transport
        !           160: and delivery mechanism,
        !           161: with the ready-for-delivery message available to the command
        !           162: at its standard input.
        !           163: As such, there are three conditions possible when the command exits:
        !           164: .RS
        !           165: .TP 10
        !           166: Success
        !           167: The command successfully delivered the message.
        !           168: What actually constitutes successful delivery may be different
        !           169: within the context of different surrogates.
        !           170: The \f4rmail\fP process assumes that no more processing
        !           171: is required for the message for the current recipient.
        !           172: .TP 10
        !           173: Continue
        !           174: The command performed some function
        !           175: (logging remote message traffic, for example)
        !           176: but did not do what would be considered message delivery.
        !           177: The \f4rmail\fP process continues to scan the
        !           178: \f4mailsurr\f1 file looking for some
        !           179: other delivery mechanism.
        !           180: .TP 10
        !           181: Failure
        !           182: The command encountered some catastrophic failure.
        !           183: The \f4rmail\fP process
        !           184: stops processing the message and sends to the originator of the message
        !           185: a non-delivery notification that includes any \f4stdout\fP and \f4stderr\fP
        !           186: output generated by the command.
        !           187: .RE
        !           188: .PP
        !           189: The semantics of the \f4<\fP command field in the \f4mailsurr\fP file allow
        !           190: the specification of exit codes that constitute success, continue, and
        !           191: failure for each surrogate command individually.
        !           192: The syntax of the exit state specification is:
        !           193: .P
        !           194: .RS
        !           195: .nf
        !           196: \f4<\f1 WS [\f2exit_state_id\f4=\f2ec\f1[\f4,\f2ec\f1[,...]]\f4;\f1][\f2exit_state_id\f4=\f2ec\f1[,\f2ec\f1[,...]]\f4;\f1
        !           197:         [...]]] WS\0\f2surrogate_cmd_line\f1
        !           198: .fi
        !           199: .RE
        !           200: .P
        !           201: .SM 
        !           202: .I WS
        !           203: is whitespace.
        !           204: \f2exit_state_id\fP can have the value \f4S\fP, \f4C\fP, or \f4F\fP.
        !           205: \f2exit_state_id\fPs can be specified in any order.
        !           206: \f2ec\fP can
        !           207: be:
        !           208: .IP
        !           209: any integer 0 \(<= \f2n\fP \(<= 255
        !           210: [Negative exit values are not possible.
        !           211: See \f4exit\fP(2) and \f4wait\fP(2).]
        !           212: .IP
        !           213: a range of integers of the form \f2lower_limit\f1\-\f2upper_limit\f1
        !           214: where the limits are \(>= 0 and \(<= 255, and
        !           215: .IP
        !           216: \f4\(**\fP, which implies \f2anything\fP
        !           217: .PP
        !           218: For example, a command field of the form:
        !           219: .P
        !           220: .RS
        !           221: \&'\f4< S=1-5,99;C=0,12;F=\(**;   \f2command\fP %R'\f1
        !           222: .RE
        !           223: .P
        !           224: indicates that exit values of 1 through 5, and 99,
        !           225: are to be considered success,
        !           226: values of 0 (zero) and 12 indicate continue,
        !           227: and that anything else implies failure.
        !           228: If not explicitly supplied, default settings are \f4S=0;C=\(**;\fP.
        !           229: .PP
        !           230: It may be possible for ambiguous entries to exist
        !           231: if two exit states have the same
        !           232: value, for example,  \f4S=12,23;C=\(**;F=23,52\fP; or \f4S=\(**;C=9;F=\(**;\fP.
        !           233: To account for this, \f4rmail\fP looks for
        !           234: .Em explicit
        !           235: exit
        !           236: values (that is,
        !           237: .Em not
        !           238: \&``\(**'') in
        !           239: order of success, continue, failure.
        !           240: Not finding an explicit match,
        !           241: \f4rmail\fP then scans for ``\(**'' in the same order.
        !           242: .PP
        !           243: It is possible to eliminate an exit state completely by setting that
        !           244: state's value to an impossible number.
        !           245: Since exit values must be between 0 and 255 (inclusive),
        !           246: a value of 256 is a good one to use.
        !           247: For example, if you had a surrogate command that was to log all message
        !           248: traffic, a \f4mailsurr\f1 entry of
        !           249: .P
        !           250: .RS 2
        !           251: .nf
        !           252: \f4\&'(.+)'\0'(.+)'\0'\f4<\fPS=256;C=*;\0/usr/lib/mail/surrcmd/logger \e\e1 \e\e2'\f1
        !           253: .fi
        !           254: .RE
        !           255: .P
        !           256: would always indicate continue.
        !           257: .PP
        !           258: Surrogate commands are executed by \f4rmail\fP directly.
        !           259: If any shell syntax is required
        !           260: (metacharacters, redirection, etc.),
        !           261: then the surrogate command must be of the form:
        !           262: .P
        !           263: .RS
        !           264: \f4sh \-c "\f2shell command line...\f4"\f1
        !           265: .RE
        !           266: .P
        !           267: Special care must be taken to properly escape any embedded
        !           268: back-slashes and other characters special to the shell
        !           269: as stated in the ``Translate'' section above.
        !           270: .PP
        !           271: If there are no matching \f4<\fP commands,
        !           272: or all matching \f4<\fP commands exit with a continue indication,
        !           273: \f4rmail\fP attempts to deliver the message itself by assuming
        !           274: that the recipient is local and delivering
        !           275: the message to \f4/var/mail/\fP\f2recipient\fP.
        !           276: .SS "\f4>\f1 command"
        !           277: The intent of a \f4>\fP command is that it is invoked
        !           278: .Em after
        !           279: a successful delivery to do any post-delivery processing that may be required.
        !           280: Matching \f4>\fP commands are executed only if some \f4<\fP command indicates a
        !           281: successful delivery (see the previous section)
        !           282: or local delivery processing is successful.
        !           283: The \f4mailsurr\f1 file is rescanned and
        !           284: all matching \f4>\fP commands,
        !           285: not just those following the successful \f4<\fP command,
        !           286: are executed in order.
        !           287: The exit status of an \f4>\fP command is ignored.
        !           288: .SS "Defaults: Line"
        !           289: The default settings may be redefined by creating a separate
        !           290: line in the \f4mailsurr\f1 file of the form
        !           291: .P
        !           292: .RS
        !           293: .nf
        !           294: \f4Defaults: \f1[\f4S=\f1...\f4;\f1][\f4C=\f1...\f4;\f1][\f4F\f1=...\f4;\f1]
        !           295: .fi
        !           296: .ft 1
        !           297: .RE
        !           298: .P
        !           299: \f4Defaults:\fP lines are honored and the indicated default values
        !           300: redefined when the line is encountered during the normal processing
        !           301: of the \f4mailsurr\f1 file.
        !           302: Therefore, to redefine the defaults globally, the \f4Defaults:\fP
        !           303: line should be the first line in the file.
        !           304: It is possible to have multiple \f4Defaults:\fP lines in the \f4mailsurr\f1 file,
        !           305: where each subsequent line overrides the previous one.
        !           306: .SS "Surrogate Command Keyword Replacement."
        !           307: Certain special sequences are textually-substituted
        !           308: in surrogate commands before they are invoked:
        !           309: .P
        !           310: .RS
        !           311: .PD 0
        !           312: .TP 11
        !           313: \f4%n\f1
        !           314: the recipient's full name.
        !           315: .TP
        !           316: \f4%R\f1
        !           317: the full return path to the originator (useful for sending replies,
        !           318: delivery failure notifications, etc.)
        !           319: .TP
        !           320: \f4%c\f1
        !           321: value of the \f5Content-Type:\fP header line if present.
        !           322: .TP
        !           323: \f4%C\f1
        !           324: \&``\f5text\fP'' or ``\f5binary\fP'', depending on an actual scan of the content.
        !           325: This is independent of the value of any \f5Content-Type\fP header line encountered
        !           326: (useful when calling \f4ckbinarsys\fP.)
        !           327: .TP
        !           328: \f4%S\f1
        !           329: the value of the \f5Subject:\fP header line, if present.
        !           330: .TP
        !           331: \f4%l\f1
        !           332: value of the \f5Content-Length:\fP header line.
        !           333: .TP
        !           334: \f4%L\f1
        !           335: the local system name.
        !           336: This will be either \f4CLUSTER\fP from \f4mailcnfg\fP or the value returned
        !           337: by \f4uname\fP.
        !           338: .TP
        !           339: \f4%U\f1
        !           340: the local system name, as returned by \f4uname\fP.
        !           341: .TP
        !           342: \f4%X\f1
        !           343: the value of \f4SMARTERHOST\fP in \f4mailcnfg\fP.
        !           344: .TP
        !           345: \f4%D\f1
        !           346: the local domain name.
        !           347: This will be either \f4DOMAIN\fP from \f4mailcnfg\fP, or the value returned by
        !           348: \f4getdomainame\fP.
        !           349: .TP
        !           350: \f4\e\e\f2n\f1
        !           351: as described above, the corresponding (...)
        !           352: substring in the matched patterns.
        !           353: This implies that the \f4regexp\fP limitation of 9 substrings is applied
        !           354: to the sender and recipient REs collectively.
        !           355: .TP
        !           356: \f4%\f2keywords\f1
        !           357: Other keywords as specified in \f4/etc/mail/mailcnfg\fP.
        !           358: See \f4mailcnfg\fP(4).
        !           359: .RE
        !           360: The sequences \f4%L\fP, \f4%U\fP, \f4%D\fP, and \f4%\f2keywords\f1 are
        !           361: permitted within the sender and recipient fields as well as in the command
        !           362: fields.
        !           363: .PD
        !           364: .PP
        !           365: An example of the \f4mailsurr\f1 entry that replaces the
        !           366: \f4uux\fP ``built-in'' of previous versions of \f4rmail\fP is:
        !           367: .P
        !           368: .RS
        !           369: .nf
        !           370: \f4\&'.+'      '([^@!]+)!(.+)' '< /usr/bin/uux \- \e\e1!rmail (\e\e2)'\fP
        !           371: .fi
        !           372: .RE
        !           373: .SS "Mail Surrogate Examples"
        !           374: Some examples of mail surrogates include the distribution of message-waiting
        !           375: notifications to LAN-based recipients and lighting Message-Waiting Lamps,
        !           376: the ability to mail output to printers,
        !           377: and the logging of all \f4rmail\fP requests between remote systems
        !           378: (messages passing through the local system).
        !           379: The following is a sample \f4mailsurr\f1 file:
        !           380: .P
        !           381: .nf
        !           382: .ft 4
        !           383: \s-1#
        !           384: # Some common remote mail surrogates follow. To activate any
        !           385: # or all of them, remove the `#' (comment indicators) from
        !           386: # the beginning of the appropriate lines. Remember that they
        !           387: # will be tried in the order they are encountered in the file,
        !           388: # so put preferred surrogates first.
        !           389:   
        !           390: #      Prevent all shell meta-characters
        !           391: \&'.+' '.*[`;&|^<>()].*'       'Deny'
        !           392:   
        !           393: #      Map all names of the form local-machine!user -> user
        !           394: \&'.+' '%L!(.+)'               'Translate R=\\1'
        !           395:   
        !           396: #      Map all names of the form uname!user -> user
        !           397: #      Must be turned on when using mail in a cluster environment.
        !           398: #'.+'  '%U!(.+)'               'Translate R=\\1'
        !           399:   
        !           400: #      Map all names of the form user@host -> host!user
        !           401: \&'.+' '([^!@]+)@(.+)'         'Translate R=\\2!\\1'
        !           402:   
        !           403: #      Map all names of the form host.uucp!user -> host!user
        !           404: \&'.+' '([^!@]+)\\.uucp!(.+)'  'Translate R=\\1!\\2'
        !           405:   
        !           406: #      Map all names of the form host.local-domain!user -> host!user
        !           407: #      DOMAIN= within /etc/mail/mailcnfg will override getdomainame(3).
        !           408: \&'.+' '([^!@]+)%D!(.+)'       'Translate R=\\1!\\2'
        !           409:   
        !           410: #      Allow access to `attmail' from remote system `sysa'
        !           411: \&'sysa!.*'    'attmail!.+'    'Accept'
        !           412:   
        !           413: #      Deny access to `attmail' from all other remotes 
        !           414: \&'.+!.+'      'attmail!.+'    'Deny'
        !           415:   
        !           416: #      Send mail for `laser' to attached laser printer
        !           417: #      Make certain that failures are reported via return mail.
        !           418: \&'.+' 'laser' '\f4<\fP S=0;F=*; lp \-dlaser'
        !           419:   
        !           420: #      Run all local names through the mail alias processor
        !           421: #
        !           422: \&'.+' '[^!@]+'         'Translate R=|/usr/bin/mailalias %n'
        !           423:   
        !           424: #      For remote mail via nusend
        !           425: #'.+'  '([^!]+)!(.+)'   '\f4<\fP /usr/bin/nusend \-d \e\e1 \-s \-e \-!"rmail \e\e2" \-'
        !           426:   
        !           427: #      For remote mail via usend
        !           428: \&'.+' '([^!]+)!(.+)'
        !           429:          '\f4<\fP /usr/bin/usend \-s \-d\e\e1 \-uNoLogin \-!"rmail \e\e2" \- '
        !           430:   
        !           431: #      For remote mail via uucp
        !           432: \&'.+' '([^!@]+)!.+'   '\f4<\fPS=256;C=0;
        !           433:                /usr/lib/mail/surrcmd/ckbinarsys \-t %C \-s \e\e1'
        !           434: \&'.+' '([^!@]+)!(.+)'   '\f4<\fP /usr/bin/uux \- \e\e1!rmail (\e\e2)'
        !           435:   
        !           436: #      For remote mail via smtp
        !           437: #'.+'  '([^!@]+)!(.+)'         '< /usr/lib/mail/surrcmd/smtpqer %R %n'
        !           438:   
        !           439: #      If none of the above work, then let a router change the address.
        !           440: #'.+'  '.*[!@].*'      'Translate R=| /usr/lib/mail/surrcmd/smail -A %n'
        !           441:   
        !           442: #      If none of the above work, then ship remote mail off to a smarter host.
        !           443: #      Make certain that SMARTERHOST= is defined within /etc/mail/mailcnfg.
        !           444: #'.+'  '.*[!@].*'              'Translate R=%X!%n'
        !           445:   
        !           446: #      Log successful message deliveries
        !           447: \&'(.+)' '(.+)' '\f4>\fP/usr/lib/mail/surrcmd/logger \\1 \\2'\s0
        !           448: .ft 1
        !           449: .fi
        !           450: .PP
        !           451: Note that invoking \f4mail\fP to read mail does not
        !           452: involve the \f4mailsurr\f1 file or any surrogate processing.
        !           453: .SS "Security"
        !           454: Surrogate commands execute
        !           455: with the permissions of \f4rmail\fP (user \s-1ID\s+1 of the invoker,
        !           456: group \s-1ID\s+1 of mail).
        !           457: This allows surrogate commands to validate themselves,
        !           458: checking that their effective group \s-1ID\s+1 was \f4mail\fP at invocation time.
        !           459: This requires that all additions to \f4mailsurr\f1 be scrutinized before
        !           460: insertion to prevent any unauthorized access to users' mail files.
        !           461: All surrogate commands are executed with the path
        !           462: \f4/usr/lib/mail/surrcmd:/usr/bin\fP.
        !           463: .SS "Debugging New \f4mailsurr\f1 Entries"
        !           464: To debug \f4mailsurr\fP files,
        !           465: use the \f4\-T\fP option of the \f4mail\fP command.
        !           466: The \f4\-T\fP option requires an argument that is taken as the
        !           467: pathname of a test \f4mailsurr\fP file.
        !           468: If null (as in \f4\-T ""\fP),
        !           469: the system \f4mailsurr\f1 file is used.
        !           470: Enter
        !           471: .P
        !           472: .RS
        !           473: .nf
        !           474: \f4mail\ \-T \f2test_file\0recipient\f1
        !           475: .fi
        !           476: .RE
        !           477: .P
        !           478: and some trivial message (like ``\f4testing\fP''),
        !           479: followed by a line with either just a dot (``\f4.\fP'') or a cntl-D.
        !           480: The result of using the \f4\-T\fP option is displayed on standard output and
        !           481: shows the inputs and resulting transformations as \f4mailsurr\f1 is
        !           482: processed by the \f4mail\fP command for the indicated \f2recipient\fP.
        !           483: .PP
        !           484: Mail messages will never be sent or delivered when using the \f4\-T\fP option.
        !           485: .SH "FILES"
        !           486: .PD 0
        !           487: .TP 27
        !           488: \f4/etc/mail/mailsurr\fP
        !           489: .TP 27
        !           490: \f4/usr/lib/mail/surrcmd/\(**\fP
        !           491: surrogate commands
        !           492: .TP 27
        !           493: \f4/etc/mail/mailcnfg\fP
        !           494: initialization information for \f4mail\fP
        !           495: .PD
        !           496: .SH SEE ALSO
        !           497: \f4ckbinarsys\fP(1M),
        !           498: \f4mailcnfg\fP(4)
        !           499: .br
        !           500: \f4mail\fP(1),
        !           501: \f4sh\fP(1),
        !           502: \f4uux\fP(1),
        !           503: \f4ed\fP(1),
        !           504: \f4egrep\fP(1),
        !           505: in the \f2User's Reference Manual\f1
        !           506: .br
        !           507: \f4exec\fP(2),
        !           508: \f4exit\fP(2),
        !           509: \f4wait\fP(2),
        !           510: \f4popen\fP(3),
        !           511: \f4regexp\fP(5),
        !           512: \f4getdomainname\f1(3)
        !           513: in the \f2Programmer's Reference Manual\f1
        !           514: .SH "NOTES"
        !           515: It would be unwise to install new entries into the system
        !           516: \f4mailsurr\f1 file without verifying at least their syntactical
        !           517: correctness via `\f4mail\fP \f4\-\T\fP \f2...\fP' as described above.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.