|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T p
Length: 47182 (0xb84e) Types: TextFile Names: »part.9«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit └─⟦2fafebccf⟧ »EurOpenD3/mail/smail3.1.19.tar.Z« └─⟦bcd2bc73f⟧ └─⟦this⟧ »design/part.9«
Part 9: Miscellaneous topics. There are a many other subsystems in smail that require some attention. These are discussed in following sections, in case you didn't already guess. :-) Section 9.1: Message spooling. Input messages are spooled in smail to lower the probability of losing mail due to software or system failure. Messages can also be spooled simply to delay mail delivery and make processing more efficient through batching. For example, if the system is heavily loaded smail may decide to spool a message instead of using CPU resources to attempt delivery. Section 9.1.1: Format of spooled messages. Spooled messages follow a simple format that is easy to produce and easy to parse. It contains the following strings in order: 1. The login name that the message was submitted on the local host, or the name from the password entry corresponding to the real uid for non-login sessions. This name may be padded with spaces before the ending newline if it is shorter than 8 characters. 2. The real user ID at the time smail was invoked to queue the message. The number is stored as an ASCII string in decimal. 3. Argument strings which can reproduce the state to use for processing the message. This includes error processing flags, -f and -F flags, and addresses which were supplied as arguments to the smail program. 4. The message, as initially received by smail. For example, a message from glotz!walldrug!root to tron and prep.ai.mit.edu!root, submitted under real uid 10, might look like: uucp 10 -em tron prep.ai.mit.edu!root From walldrug!root Sun Aug 23 00:56:03 1987 remote from glotz Received: by glotz.uucp Received: by walldrug Date: Fri, 21 Aug 1987 18:58:04 PDT Message-ID: <id29374@walldrug.wall.com> From: root@walldrug.wall.com (The Church Police) To: tron@glotz.uucp Subject: what's all this then? Cc: prep.ai.mit.edu!root@glotz.uucp What's all this then, amen! It is possible that newlines could occur in argument strings, To guard against this causing problems, any occurrence of `\' in the argument and sender strings is replaced by ``\\'' and any occurrence of newline in one of those strings is replaced by ``\n''. Section 9.1.2: Format of spool file basenames. The spool file name is a 14 character file name that contains: length meaning ------ ------- 6 seconds since 1969 GMT, in base 62 1 the charactere `-' 6 an inode number, in base 62 1 grade character (see section 9.5) The base-62 numbers above use characters from the set of decimal digits, uppercase letters and lowercase letters. These numbers always begin with a decimal digit. Example: A spool file created on Sat, Jan 16 1988 at 15:57:56 on inode 37477 with a message grade, or priority, character of `C' would be: 0cX2fs-000AjqC Section 9.1.3: Spool directories and locking directories. Files can be spooled in several directories: a primary spool directory and any number of alternate spool directory. The alternate spool directories are used if creation of a spool file in the primary area failed. For example, the primary directory may not be writable for some reason, or the file system where it resides may be out of i-nodes or out of free blocks. The alternate spool directories, if any exist, should always be on different filesystems than the primary one. Each of the spool directories has a locking directory under it named ``lock''. When a spool file is being created or is being processed, a file will exist in the locking directory with the same basename in the spool file. This is to prevent two processes from trying to process the same spool file, and to prevent a spool processing daemon from trying to read a spool file that is in the process of being created. The sequence involved in creating a spool file is defined below: 1. Set the variable <tempfile> to <spooldir>/lock/msg.<pid> where <pid> is the current process ID, in ASCII decimal. 2. Create the file <tempfile>. If this fails go to step 6. 3. Set the variable <spoolfile> to <spooldir>/<basename>, where the inode is from that for <tempfile>. 4. Write out the sender, real uid, arguments, header and the message. If this fails go to step 6. 5. When finished writing, rename the file <tempfile> to <spoolfile>. 6. If we failed to write to a spool file, then remove <tempfile> and then set <spoolfile> to <altspooldir>/<basename> and set <tempfile> to <altspooldir>/lock/msg.<pid>, where <altspooldir> is then next alternate directory in the list. Then go to step 2. If no more alternate spool directories exist then we failed to spool the message. Section 9.1.4: Locking spool files. For systems that have advisory (or mandatory) file locking, the operating system's locking should be used. For systems that lack such a feature, the following method can be used. Consider the existing spoolfile: <dir>/<basename> where <dir> is a spooling directories and <basename> is the basename of the file to be locked. To lock this spool file we exclusively create the following lock file: <dir>/lock/<basename> and write our process id in ascii (base 10) followed by a newline. At this point the file <dir>/<basename> has been locked. If our exclusive create of the file <dir>/lock/<basename> failed, then it is likely that another process has locked <dir>/<basename>. We can verify that the process really does have the lock file by the following algorithm: 1. stat the lock file and set: <file_len> = file length <cr_date> = creation date 2. if <file_len> != 0, the proceed to step 8 3. The lock file is empty because the locking process has not yet written out its process id, or because the process or system crashed before the write. If `now' < Oct 28, 1986, then proceed to step 5. If <cr_date> > `now' then proceed to step 6. If <cr_date> < `now - 2 hours' proceed to step 7. 4. The empty lock file is too new to touch (the system could be extremely loaded) and so we simply conclude that some process has it locked and go on to do something else. 5. Since this version of smail did not exist on Oct 28, 1986, the current time must be set wrong. At this point we give up all hope of stale lock file detection, consider the file locked and go on to do something else. 6. The empty lock file was created in the future so we don't know if the empty lock file is stale or not. We first bring the <cr_date> of the file back into reality by doing a chmod (to the same permission). This forces the <cr_date> to be set to `now'. Next we send the following error message to the system log: time warp on zero length lock file: 0571338010a72y We consider the lock file active for now and go on to do something else. 7. The empty lock file is likely to be stale. We will remove the lock file but we will still consider it locked, allowing some future process to operate on <dir>/<filename>. We now go on to do something else. 8. The lock file contains the process id of the locking process. We open the lock file and read it and set: <lock_pid> = process id read from the lock file If <lock_pid> == 0, then proceed to step 11. If <lock_pid> is not a process, then proceed to step 10. 9. The process <lock_pid> is a valid and currently running process, and thus the lock file is really valid. At this point we go on to do something else. 10. The lock file is probably stale. We will remove the lock file but we will still consider it locked, allowing some future process to operate on <dir>/<filename>. We now go on to do something else. 11. If <lock_pid> == 0, then the lock file is a permanent lock file. (perhaps set by the system administrator to freeze a mail message) At this point we go on to do something else. The above procedure allows for locking of spool files to work even under many extreme conditions and yet will not freeze a mail message for a long time. There are some conditions where this locking system will fail: * the system is so loaded, or the locking process is suspended such that more than 2 hours pass between the lock file creation and the write of the process id. * the system clock is changed by an administrator by a large amount (say > 2 hours) at the wrong moment. Note that Daylight Savings Time changes will not cause this since the time stamps involved are based on GMT. Section 9.2: Logging. Three types of log files are maintained: a panic log, a transaction/debugging log and a per-message transaction/error/ debugging log. There are a many cases where smail will decide that something cannot be dealt with now. This could be an internal error, a configuration file error, an i/o error, or an out of memory error (the latter is almost certainly an internal error, except on systems with small amounts of memory or small addressing spaces). In such cases, an entry is made in the panic log explaining what went wrong, the lock file is removed, and smail quits. Perhaps at a later time, this case will be remedied and processing the spool file will succeed. The transaction/debugging log contains messages that may be of interest to maintainers of the mail system. Some of the items logged are: notification of reception of mail, including sender and the host from whence mail was received, if applicable; notification of successful or failed transmission of mail to remote and local sources; and reasons for mail being sent back to the sender or to the postmaster (syntax errors in addresses, unknown hosts or users, etc). The per-message transaction/error/debugging log is named <dir>/msglog/<basename> where <dir> is the spooling directory used. It is not removed until a the spool file is also removed. It contains the same messages as the transaction/debugging log, but may also contain more detailed accounts of syntax errors and other problems relating solely to the message itself. When the message is returned to the sender or sent to the postmaster, the per-message log is sent as well as explanation. Section 9.3: The config file. In addition to information in the director, transport and router files, and the various method files, there are a many miscellaneous configuration parameters for smail that are stored in an smail config file. This information includes file and directory names, hostname information plus boolean and string valued variables defining other miscellaneous information. The config file is able to overrite a number of compiled in values. Attributes listed below are also found as UPPER CASE #defile symbols in various source files. See Section 10.1 for details. The format of this file is defined as: <config_file> = (<comment> or <attribute>)* <comment> = #[^\n]* or [\n] <attribute> = <boolean_attribute> or <string_attribute> <boolean_attribute> = {[+-]}<name> {<comment>} <string_attribute> = <name> `=' <string-or-number> {<comment>} <name> = [A-Za-z0-9_-]+ <string-or-number> = [!$%./0-9@A-Za-z_][!$%&+./0-9@A-Za-z_-]* or `<' [^>]* `>' or "[^"]*" The following paragraphs define the current set of configuration attributes that can be set in the smail config file: console type: string default value: /dev/console The file name for the console device. This filename is used as a last resort in attempting to write panic mes- sages. copying_file type: string default value: ``COPYING'' The pathname to the COPING file, which describes your distribution rights and details the warranty informa- tion from the authors of smail. If this does not begin with `/', it will be referenced relative to the smail_lib_dir directory. date_field type: string default value: ``Date: $date'' This string will be expanded to form the Date: header field. This will be used if such a field does not already exist in the header. delivery_mode type: string default value: ``foreground'' The default mode of delivery for new mail. This can be one of the values ``foreground'' (immediate delivery in the process that received the message), ``background'' (immediate delivery in a child process, where the pro- cess that received the message exits immediately), or ``queued'' (do not attempt delivery until a later queue run). director_file type: string default value: ``directors'' Names the file containing the director configuration information. If this does not begin with `/', it will be referenced relative to the smail_lib_dir directory. fnlock_interval type: number default value: 3 The sleep interval between retries while attempting to lock mailbox files with a lockfile-based locking proto- col. fnlock_retries type: number default value: 0 if you have an atomic rename, 5 other- wise The number of times to attempt to lock mailbox files using a file-based locking protocol. grades type: string default value: special-delivery:9:air-mail:A:first- class:C:bulk:a:junk:n The priority, or grade, characters corresponding to particular values for the Precedence: field in the message header. The parts of the string are separated by `:' with alternating precedence string and grade character. Numbers are higher in priority than upper case letters which are in turn higher than lower case letters. Also lower numbers are higher in priority than higher numbers, and the same goes for letters lower in the alphabet Grades in the range [a-m] will only have an error message and header returned to the sender on errors, rather than including the message body as well. Grades in the range [n-z] will not have anything returned to the sender on errors. The precedence names recognized by many BSD sendmail configurations are: special-delivery, first-class and junk. Others are useful mainly for getting mail out of the local machine or for communication with other machines running smail in a similar configuration. The grade value for a message is available in string expan- sions as the $grade variable. hit_table_len type: number default value: 241 with a large address space, 13 oth- erwise The length of an internal address hit table. Addresses are hashed into this table to prevent multiple deliveries to the same address. Longer tables speed address hashing at a small memory expense. NOTE: this value may be ignored in the future. hostnames type: string default value: computed at run time A colon-separated list of names for the local host. This list, together with visible_name , uucp_host and more_hostnames should represent all possible names for the local host. For a host that is in more than one domain or that can gateway to more than one level of domains, this should represent those names. For a host in a registered domain in the UUCP zone, which is also in the maps distributed over USENET, localhost.uucp should also be in the list. The first value in host- names is used internally as a special ``primary name'' for the local host. If hostnames is set turned off (which is generally the default) then the hostnames value will be computed by pairing the localhosts's name, computed in a system- dependent manner, with all values in the visible_domains attribute list. lock_by_name type: boolean default value: system-dependent If this is on, then input spool file locking is always based on lock files. Otherwise, an inode-based locking mechanism may be used, such as flock(2) under BSD, or lockf(3) under System V. Inode-based locking is more efficient, if available. However, lock files can be easily created by shell scripts which may be advanta- geous under some circumstances. lock_mode type: number default value: 0444 The creation mode for lock files. log_mode type: number default value: 0664 The creation mode for the various mail system log files. logfile type: string default value: ``/usr/spool/smail/log/logfile'' The name of a file to which transaction and error mes- sages are appended. If this file does not exist, it is created with a mode from the log_mode attribute. max_hop_count type: number default value: 20 If the hop count for a message equals or exceeds this number, then attempts at remote delivery will result in an error message being returned to the sender. This is used to prevent infinite loops. The hop count for a message can be set using the -h option when invoking smail. Otherwise it is computed from the number of Received: fields in the message header. max_load_ave type: number default value: 0 For systems on which a load average can be computed, this specifies the maximum load average at which mail delivery will be performed, otherwise this value is ignored. If the load average exceeds this number, incoming mail will be saved in the input spool direc- tory, though no delivery will be performed. If this value is 0 the load average will not be computed and delivery will always be performed. Normally the load average refers to a 5 minute load average. (This is not currently implemented) max_message_size type: number default value: 100k Messages longer than this will be truncated by smail when when written to its input queue. (This is not currently implemented and there is no limit on the size of messages). message_buf_size type: number default value: 100k with a large address space, BUFSIZ otherwise The size of an internal buffer for reading and writing messages. For systems with a reasonable VM space, this can be equal to the maximum size for messages. Speci- fying the value of in which case reading messages and then delivering them to one or more destinations requires very few read calls, as the entire message is always kept in memory. BUFSIZ, here, refers to the defined symbol in /usr/include/stdio.h. message_id_field type: string default value: ``Message-Id: <$message_id@$primary_name>'' This string will be expanded to form the Message-Id: header field. This will be used if such a field does not already exist in the header. message_log_mode type: number default value: 0664 Each message has associated with it a unique file con- taining a transaction log for that message. This number specifies the creation mode for this log file. method_dir type: string default value: ``methods'' If a method attribute for a router does not specify a pathname beginning with `/', then this directory is prepended to the path to form the complete path for the method file. See the description of the router file for more information on method files. If this does not begin with `/', it will be referenced relative to the smail_lib_dir directory. more_hostnames type: string default value: off A colon-separated list of hostnames. This list is in addition to any names which may have been computed from the visible_domains attribute in forming the value of hostnames. Thus, it is useful for specifying names which are not formed from the computed name for the host. nobody type: string default value: site-dependent: often ``nobody'' This names a default user that defines permissions when no other user is specified. Also, this user is used in some conditions when it is not certain whether a set of actions can be trusted, if performed under other, potentially more powerful users. This should reference a login id which has few or no capabilities for doing harm or accessing protected files. paniclog type: string default value: ``/usr/spool/smail/log/paniclog'' The name of a file to which panic and very important error messages are appended. If this file does not exist, it is created with a mode from the log_mode attribute. Entries written to this log file represent problems that require human intervention, such as con- figuration errors or directory permission errors preventing mail spooling or delivery. Configuration errors generally cause mail to be moved into a special defer/ directory under the input spool directory, thus preventing attempts at redelivery until the configuration error has been corrected. Thus, both the panic log and the defer/ directory should be checked periodically under normal use, and frequently after configuration changes. When any prob- lems have been resolved, deferred messages can be requeued for delivery by using mv(1) to move the spool files back to the spool directory. queue_only type: boolean default value: off If this is set then smail will not immediately attempt delivery for incoming mail. The smail program will then only attempt delivery when explicitly processing the input queue, such as when invoked with the -q flag. received_field type: string This string will be expanded to form the Received: header field. This field will be inserted into the header if the received attribute is not explicitly turned off for a transport. The default value for received_field is: Received: by $primary_name ($version_string) id <$message_id@$primary_name>; $date require_configs type: boolean default value: off If this is not set, then configuration files are not required to exist. This applies to the primary and secondary config files and the director, router and transport files. If one of these files does not exist then it is ignored and internally compiled configuration is used instead. If this attribute is set, then any configuration file, which does not have a NULL filename (for example, using -router_file to set the name of the router file to NULL) and which does not exist, will generate a panic message from the mailer. return_path_field type: string default value: ``Return-Path: <$sender>'' This string will be expanded to form the Return-Path: header field. This field will be inserted into the header if the return_path attribute is turned on for a transport. router_file type: string default value: ``routers'' Names the file containing the router configuration information. If this does not begin with `/', it will be referenced relative to the smail_lib_dir directory. second_config_file type: string default value: none This names a secondary configuration file which can define attribute values which override internal defaults and values in the primary configuration file. This is primarily useful in networks containing machines that share filesystems. By having a shared primary configuration file most systems on a network need not be concerned with maintaining the smail pro- gram, while other systems may want or need to use a different configuration, while sharing the same binary. In particular, the smart_user, smart_path and smart_transport attributes are common attributes to be set in the secondary configuration file. smail type: string default value: ``/usr/lib/sendmail'' Name a valid path to a smail binary that can be used to re-exec smail when a major configuration change has been detected, or to exec smail when delivering error messages. If this does not begin with `/', it will be referenced relative to the smail_lib_dir directory. smail_lib_dir type: string default value: ``/usr/lib/smail'' This defines the path to the smail configuration file directory. The router, director and transport files, as well as alias and path files and method files may be referenced relative to this directory. smart_path type: string default value: none This defines the default value for the path attribute used by the smarthost router driver. This gives the path to a machine which supposedly contains a more com- plete routing database than is available on the local host. See a later section describing the smarthost driver for more information on the use of this attri- bute. smart_transport type: string default value: none This defines the default value for the transport gen- eric attribute used by the smarthost router driver. See a later section describing the smarthost driver for more information on the use of this attribute. smart_user type: string default value: none This defines the default value for the smart_user attribute used by the smartuser director driver. spool_dirs type: string default value: ``/usr/spool/smail'' This defines one or more directories into which incom- ing mail can be spooled. Directories are separated by single colon characters. When writing a message to the first spool directory fails, (say due to permission problems, filesystem full errors, etc.) successive spool directories are tried until the incoming message can be successfully written or until no more alterna- tive directories exist. Each spool directory is expected to have writable subdirectories of: lock (for temporary lock files), msglog (for temporary per- message transaction logs and audit trails) and defer (to hold messages which failed due to configuration errors or other problems which require human interven- tion). spool_grade type: character default value: ``C'' This character names the default grade for messages. This can be overridden by a Precedence: field in the message header. The grade is used in sorting messages in the input spool directory and is also available in string expansions as the $grade variable. See the grades attribute for more information. spool_mode type: number default value: 0440 This defines the file creation mode for spool files. transport_file type: string default value: ``transports'' names the file containing the transport configuration information. If this does not begin with `/', it will be referenced relative to the smail_lib_dir directory. trusted type: string default value: ``root:uucp:daemon'' This names a list of users (separated by colons) who are trusted to specify a sender for a message. Users who are not in this list cannot specify a Sender: header field without it being removed. If such users specify a From: header field, then a Sender: field will be created that specifies the real user that submitted this mail. Generally, this should be set to that names of all users under which remote mail is received and sent to smail. If this list is turned off, using the form -trusted, then all users are trusted. NOTE: The real user ID is used in verifying trusted users. However, under many operating systems, the /usr/lib/uucp/uucico program runs under the real uid of the user that ran /usr/lib/uucp/uucico. Often any user can run the uucico program. The smail program cannot differentiate this case from any other case and will thus do the ``wrong thing'' here. If this problem exists on your machine, then the trusted attribute may need to be turned off. This problem is particularly difficult to resolve on System V machines where non- superuser programs are unable to change their real uid. uucp_name type: string default value: computed at run time This specifies a name for the local host. This name is available in string expansions as the $uucp_name vari- able. It is also used in the ``remote from hostname'' suffix to ``From<space>'' lines for mail being delivered to remote machines, when the from attribute is turned on for a transport. visible_domains type: string default value: uucp visible_name type: string default value: computed at run time The full domain name used in outgoing mail addresses within header fields. If visible_name is turned off, then it will be set to the first name from the host- names attribute. If the hostnames attribute is not specified then that attribute will be filled in with hostnames of the form hostname.visible_domain, where hostname is derived in a system-dependent manner and where visible_domain, here, is one name from the visible_domains list attribute. Each entry in the visible_domains list is used, in order, to created the hostnames value. For sites in the UUCP zone visible_domains will often merely be the string ``uucp''. Finally, the variable $visible_name is available in string expansions. Section 9.4: The startup file. NOTE: Startup files are not currently supported, and may never be needed. Section 9.5: Mail precedence. Mail can be given a precedence by including a header field of: Precedence: name Where name is some <local_part> string that can be associated with a queue priority. These precedence names are converted internal to a single character from the set of digits, upper case and lower case letters, with low to high precedence being in that order, with low digits and letters having higher precedence, that is compatible with 4.3BSD and HoneyDanBer UUCP grading. These grade characters are used in the generation of the spool file names, see Section 9.1.2 for more details on this. The mapping from precedence name to grade character is configurable, though examples might be: special-delivery 9 air-mail A first-class C bulk a junk n These grade values are taken into account when sorting the spool directory messages to decide what to process next, and they may also be used by transports in sending priorities to the transport mechanism. In addition, a message with a grade character that is a lower-case letter from the set [a-m] and that fails in some way will cause only the message header and a message describing the failure to be sent back to the sender, rather than returning the entire message. If the character is from the set [n-z], then mail is never returned back to the sender on errors. Note: I have not seen any standards documents that make use of this Precedence field. The idea for it comes from, and is syntactically compatible with, Eric Allman's Sendmail program. Section 9.6: Arguments to smail. The arguments which are expected by the smail program depend upon how the program is invoked. As well, different invocation names can cause a differing set of defaults to be used for some things. Section 9.6.1: Invocation as sendmail. In the normal mode of operation is to understand a set of arguments similar to those accepted by the BSD sendmail program from Eric Allman. However, all names other than ``smail'' ``sendmail'' and ``send-mail'' are reserved for other uses. The current set of recognized arguments is: -bc Display the file COPYING, distributed with the source, which details your rights and restrictions for distri- buting this software. -bd Listen for connection requests on a socket bound in the internet domain. When a connection occurs, conduct an SMTP (Simple Mail Transfer Protocol) conversation with the peer process. Listening will only occur if BSD style internet networking functionality is available. -bm Deliver mail to the recipient addresses. This is the default mode of operation if invoked as sendmail, smail, rmail or send-mail. -bp List information about the messages currently in smail's input spool directories. This is the default mode of operation if invoked as mailq. With the -v or -d flag, a per-message transaction log is displayed for each message which shows what has happened to the message so far. -bP Take the addresses given on the command line as config file variables and write the values for each variable on the standard output. References to variables such as hostnames or uucp_name which may be computed at run time, will yield the values that smail would compute normally. For example, on my workstation, the command: smail -bP hostnames max_message_size produces the output: futatsu.uts.amdahl.com 102400 With the -v or -d flag the variable names are displayed as well, so that the command: smail -bP max_message_size produces the output: max_message_size=1024000 In addition to other config file variables, the name primary_name will output the primary (or canonical) name for the local host which will be used by smail, and config_file will output the name of the primary configuration file. Also the name help will produce a verbose listing of all variables associated with their type, one variable per line, and the name all will produce a verbose listing of all variables along with their values. It is equivalent to smail -bP -v followed by a list of the names of all configuration variables. -bR Enter the hostile mail domain of giant mail messages, and RFC standard scrolls. Attempt to make it down to protocol level 26 and back. -bS Read SMTP commands on standard input, but do not pro- duce SMTP replies on standard output. All failures are reported by return mail, rather than through reply codes. This is suitable for setting up a batched form of SMTP between machines over a remote execution ser- vice like UUCP. This is the default mode of operation if invoked as rsmtp. -bs Read SMTP commands on standard input and produce SMTP replies on standard output. The currently implemented SMTP commands are HELO, MAIL FROM, RCPT TO, DATA, RSET, NOOP, VRFY, EXPN and QUIT. This is the default mode of operation if invoked as smtpd. For compatibility with some implementations of inetd(8N), if smtpd is started with no standard output, standard input will be dup(2)'d to standard output. -bt Enter address test mode. Read addresses on standard input and produce the parse results and host routing/resolving information on standard output. This is primarily useful for debugging smail or debugging new smail routers. -bv Verify a list of addresses by producing the list of addresses produced by aliasing and forwarding expan- sions and by host routing or resolving. Addresses which cannot be resolved are also displayed, along with the reasons why. -C filename Sets the name of the config file to use in reading glo- bal attribute values. If specified, then smail sets the effective uid and gid back to the real uid and gid, to avoid problems when installations allow smail to be set uid to the superuser. If the filename is - then no primary config file is read. This should only be used for debugging purposes. -d[number] or -v[number] turn on debugging. If a number is given, set the debugging level to that value, otherwise the debugging level is set to 1. No white space is allowed before the optional number. -em or -oem Mail errors back to the sender (default). -ee or -oee These forms refer to a berkenet error processing style which is not supported. If used, errors will be mailed back to the sender. -ep or -oep Write errors to the standard error output. -eq or -oeq Do not send notification of errors to the sender. -ew or -oew Write errors to the senders terminal using the write(1) command, if he is logged in. Otherwise, mail errors back to the sender. (This is currently not supported and is treated in the same manner as -oem) -F fullname Explicitly set the full name of the sender for incoming mail, used only if the operation mode is reception of a single mail message on standard input. -f sender or -r sender Explicitly set the sender address for incoming mail, used only if the operation mode is reception of a sin- gle mail message on standard input. -h number Sets the hopcount for a single message. If this is not specified, the hop count is computed from the number of Received: fields in the message header. The hopcount is used for a primative form of infinite loop detec- tion: a sufficiently large hop count will cause mail to be rejected. -I or -oI Use the hidden dot algorithm in reading the message. Lines with one or more dots at the beginning have the leading dot removed, while a line containing only a single dot ends the input message. This is always set for messages received using SMTP. -i or -oi Do not allow a single `.' to end an incoming message. Otherwise, a dot on a line by itself will end a mes- sage. This is the default if smail is invoked as rmail. -m or -om Allow retention of the sender as a recipient for alias and mailing list expansions that include the sender. If this is Not set, the sender will not receive a copy of the message only as a result of being in an alias or mailing list. -N Disable deliver of this message. All other processing is performed, and transports are expected to go through most of the steps involved in delivery. This is useful for debugging smail when you do not actually wish to have messages delivered. -n Do not perform alias processing. This only prevents expansion of entries in alias files. Mailing list files and forward files may still be expanded. -odb Deliver mail in background, if mail delivery is to be performed. Background delivery is not currently sup- ported in the SMTP modes; foreground delivery is used instead. -odf Deliver mail in foreground, if mail delivery is to be performed. -oD director-file Sets the pathname of the director file. This overrides the default name of the director file as well as any name set in a config file. If specified, then smail sets the effective uid and gid back to the real uid and gid, to avoid problems when installations allow smail to be set uid to the superuser. If the filename is - then no director file is read. This should only be used for debugging purposes. -oL directory-name Sets the pathname of the smail library directory. This overrides the default value of smail_lib_dir compiled into the smail binary, as well as any name set in a config file. This string may be used to locate configuration files, such as the director, router and transport files, alias and path files, and mailing list directories. -oR router-file Sets the pathname of the router file. This overrides the default name of the router file as well as any name set in a config file. If specified, then smail sets the effective uid and gid back to the real uid and gid, to avoid problems when installations allow smail to be set uid to the superuser. If the filename is - then no router file is read. This should only be used for debugging purposes. -oT transport-file Sets the pathname of the transport file. This overrides the default name of the transport file as well as any name set in a config file. If specified, then smail sets the effective uid and gid back to the real uid and gid, to avoid problems when installations allow smail to be set uid to the superuser. If the filename is - then no router file is read. This should only be used for debugging purposes. -Q or -odq Spool incoming messages but do not actually perform delivery until a later queue. This mode of operation is somewhat more efficient in terms of CPU usage, though it does slow down the flow of mail. -q[interval] Cause smail to process its input spool directory. If an interval is given, smail will repeatedly check its input spool directory, sleeping for the given interval between checks. The interval is in seconds, though it can be defined as a sequence of numbers with suffixes of `s' for seconds, `m' for minutes, `h' for hours, `d' for days, `w' for weeks and `y' for years. For exam- ple, -q2h30m specifies an interval of two hours and 30 minutes. This flag is useful in conjunction with the -bd mode of operation and will cause the daemon process to wake up on these intervals and perform queue pro- cessing. Performing a single queue run is the default mode of operation if smail is invoked as runq. -t Extract addresses from the To:, Cc: and Bcc: fields of the message header, if the operation mode is reception of a single mail message on standard input. This is useful for user agents that do not wish to compute the recipient addresses themselves. In this mode, any addresses given on the command line are addresses that explicitly will NOT receive mail, even as a result of aliasing or forwarding expansions. -V or -bV Print the smail version on the standard output. In the normal mode of operation (sending mail without the -t option set), recipient addresses are taken from the remainder of the arguments. Section 9.6.2: Miscellaneous invocation names. Some invocation names affect the default operation mode for smail. Additionally one invocation name (rmail) limits the set of allowed argument. If invoked as `mailq', the default mode of operation is to print the input queue (is if invoked as smail -bp). If invoked as `runq', the default mode of operation is to process the input queue once and do nothing else. If invoked as `rmail', the arguments -d, -v, -V, -N, -C, and -q are ignored. The invocation name `rsmtp' is similar to `rmail', except that the mode of operation will be batched SMTP. If invoked as `smtpd', then the default mode of operation is to process interactive SMTP commands. This invocation name is useful when using smail to process incoming requests received by the 4.3BSD or sun /etc/inetd programs. For compatibility with the sun inetd program, stdin is dup(2)'d to stdout if no valid file descriptor exists on stdout. If the program is invoked as ``uupath'' then display on the standard output the route to hosts given as arguments, from the pathalias database. See the part titled ``Utilities'' for information on the accepted arguments. If invoked as ``pathto'', addresses given as arguments are converted to routed !-routes to their destinations and displayed on standard output. See the part titled ``Utilities'' for information on the accepted arguments. If invoked as ``optto'', operate as in pathto but optimize paths given by the user, instead of doing simple routing on the first target host. See the part titled ``Utilities'' for information on the accepted arguments. If invoked as ``rogue'' or ``hack'' print a tombstone. Other invocation names are reserved for future abuse. \f