|
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: 25701 (0x6465) Types: TextFile Names: »part.0«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit └─⟦2fafebccf⟧ »EurOpenD3/mail/smail3.1.19.tar.Z« └─⟦bcd2bc73f⟧ └─⟦this⟧ »design/part.0«
Part 0: Introduction. There is a need in the UUCP community for a mailer that will fully understand RFC822/RFC976 syntax while also being able to handle addresses in the more traditional UUCP styles. It is also desirable to have the mailer do transformations on these more free-form addresses to make them somewhat more palatable to user agents. We believe that a mailer should: o scan for recipient addresses in the header fields of a message (as an option) o leave conforming header fields alone o use heuristics to decipher the addresses within non-conforming header fields and to transform header fields for better conformance o handle RFC822 route-addrs in a reasonable fashion o resolve all reasonable RFC822/RCC976 conforming addresses, as well as a large set non-standard address forms such as !-routes, local-part%domain as well as mixed-form addresses such as !-routes followed by route-addrs. o route using data from a varied set of sources, such as pathalias database files, in core tables, remote network daemons, the output of other programs, etc. o transmit over multiple transport media and protocols, such as UUCP, SMTP or a site-dependent transport programs and protocols o provide sendmail compatible local address aliasing and mail forwarding o return errors to the originator or, if this fails, to the postmaster o produce error messages that are easy to understand o be simple to configure for simple sites, and straight forward to configure for more complex sites o not require the use of configuration files or databases to meet the requirements of common sites o be portable to many machines o be freely available so that smail can be easily distributed to as many machines as possible, and thus improve mail delivery over a wider part of the UUCP and other networks The authors of this document have noted that the currently available mail delivery programs that we know of (sendmail, mmdf, smail2.3, sendmail/smail2.3, and uumail) do not meet the needs stated above. Below is a summary of the strengths and weaknesses that we see in the above mentioned packages: o sendmail: offers a powerful set of capabilities for transforming addresses given as arguments and included in headers. It has a powerful aliasing and forwarding capability. It has the following shortcomings: o does not independently rewrite UUCP From_ lines and Sender: and From: header fields (reported to have been corrected in later versions) o it does not easily use file-based routing databases o sendmail configuration files are difficult to read, understand and maintain (you know something is wrong when people are driven to create sendmail config file generator languages!) o sendmail command arguments and it's configuration files are poorly documented o Many non-BSD sites refuse to use sendmail for valid or bogus reasons. o mmdf: an extremely powerful set of utilities. Unless you need this much power and flexibility and security, it is not worth the time it takes to understand it. There are too many required configuration files. o smail 2.3: a useful program. The latest version has only rudimentary aliasing and forwarding. However, it is not currently capable of obtaining addresses from header fields or changing addresses in headers to conform in any way. It also does not handle enough addressing forms, such as RFC822 route-addrs. o sendmail/smail 2.3: by combining sendmail and smail we get the better of both worlds, but we also lose some performance. We also lose much of sendmail's power for using multiple transports. Section 0.1: Syntax forms. The rules given in this section define syntax forms used in form matching, scanning and transformation rules. Deviations from these rules are noted in the sections where the deviations occur. Literal text: Text that is not enclosed in angle-brackets ( `<' and `>' ) and that does not contain an operators from the list of ``<>{}[]*()''. Unless otherwise stated, case is not significant in matching alphabetic characters. White space in a pattern will match any non-zero amount of white space unless specifically stated otherwise. White space is one or more TAB or SPACE characters. It can include newlines unless a syntax form deals with newlines explicitly. Examples: Received: remote from Quoted literal: Any characters between a grave (backward single quote), and an accent (forward single quote) matches exactly the character string between the two single quotes. Example: `yep!' `[' Character classes: Ed(1)-style character classes are given in square brackets, ( `[' and `]' ). A character class matches one character in the list of characters inside the braces. If two characters in the list are separated by a dash ( `-' ), then any ASCII chars in the range from the first to the second will match. Also, if the list begins with a circumflex ( `^' ), then any ASCII character, other than newline, that is not given in the list will match. As an addition to character class syntax, the sequence `\n' matches a newline, and the sequence `\t' matches a tab. Examples: [^A-Za-z0-9] this will match any ASCII character that is not a letter or a number [,!%@] this will match `,' `!' `%' or `@' Repetition: A pattern followed by an asterisk ( `*' ) represents zero or more repetitions for that pattern. A pattern followed by a plus sign ( `+' ) represents one or more repetitions of the pattern. Named pattern: A name enclosed in angle brackets ( `<' and `>') matches a pattern that is defined elsewhere in the form: <name> = pattern where ``pattern'' can be a syntax form as described in this section, or an English description of what will match. Example: remote from <host> <host> = [^ \t]* the pattern matches the text ``remote from '' followed by <host> that matches any non-space characters up to a newline. Optional pattern: A pattern enclosed in curly braces ( `{' and `}' ) will match zero or one occurrences of that pattern. Examples: From <path> <date> {remote from <host>} the ``remote from <host>'' is optional for a match Grouped patterns: A sequence of patterns enclosed in parentheses ( `(' and `)' ) represent an indivisible pattern and the entire group can be followed by an asterisk to represent repetition of the group. Example: Cc:{(<address>{,})*<address>} The <address> list is separated by optional commas and note that the list itself is optional Or: Unless otherwise noted, the word ``or'' is used to denote alternate patterns that can be matched. Example: (a or b or c)+ will match any of: a ca abacab Section 0.2: Definition of terms The terms defined below are used throughout this document. The numbers beside each term refer to sections or parts of this document where that term is used and/or explained in detail. An integer refers to a complete part, while a dot separated list refers to a section. These numbers serve as a guide for further reading and are by no means complete. !-route (bang route) : 3.1.2.3 A path from a host to a user where each successive part of path is separated from its predecessor by a bang character ( `!' ). Alias : 7.3.1 A collection of addresses that are tied to a name in local form. Each host can have associated with it a list of aliases, and when a local address is received that matches the name of an alias, the message is delivered to the collection of addresses associated with that alias. Alias file : 7.3.1 A file that associates a local form recipient address with a list of addresses that are to be considered recipients of a message in place of the given local address. Bang route : 3.1.2.3 See !-route. BSD : 6.3.1, 7.3.2, 9.6.1 The Berkeley Software Distribution is an interesting variant of UN*X that is distributed by the University of California at Berkeley. These versions of UN*X are also known as 4BSD, or 4.xBSD. where x is 0, 1, 2, 3, ... Config file : 9.3 A file that can redefine the values for a number of smail variables. This file is loaded at run time. Character class : 0.1 A set of characters that can form a single character match in a syntax form. Continuation character : 5.1.1 The character \ at the end of a line in some data files will cause the context of which line to be continued on the next. Generally, a line is continued by having the next line begin with a TAB or SPACE character, so a continuation character is rarely needed. These violate RFC822 so they are not used in headers. Copyleft : abstract, n-2 A term coined by Richard M. Stallman of the Free Software Foundation to denote a particular set of lawbol copyright language. The basic idea behind a copyleft is to forbid anyone from from denying anyone else the right to redistribute copylefted software. /dev/null : sqr(-1) Where flames are best directed and where 0 and 1 bits are obtained for hardware shift operations. Delivery agent : 8 A program, or a set of functions, that moves a message from one place to another. I.e., from host to host over some media, such as phone lines, an Ethernet cable, fiber-optic link or CB radio. Director : 7 Something that transforms (or ``directs'') local form addresses into addresses associated with transports, or into more addresses to be processed. A director is specified by a single director entry in the director file. Director driver : 7.3 A set of smail subroutines that do the actions of a director. It is possible for several director entries to refer to a single director driver. Director entry : 7.2 A set of lines in the director file that define a specific instance of a director. A director entry names a director driver, specifies values to be passed to a director driver, and establishes its operating mode. Director file : 7.2 A file that contains one or more director entries. The director file defines the steps used in deciding what to do with a local form recipient address. Some possibilities are: process the address through an aliases file to replace the address with a different set of recipient addresses; query a remote server across a network for user-name (or full name) to address mappings; forward the message to a new set of addresses defined in a per-user forward file; or produce the name of a mailbox file to receive the message (normally delivery). Driver : 5.5, 6.3, 7.3, 8.5 A set of smail subroutines that handle the low level requirements for a specific function such as a director, router or transport. Domain : 3.1.2.3 A reference to host or collection of hosts within an absolute hierarchy. See RFC822 and RFC920 for more information on mail domains and domain requirements. Domain-literal : 3.1.2.1 Characters enclosed in brackets ( `[' and `]' ). This forms a single token within an address. Forward file : 7.3.2 A file associated with a specific user on a machine that specifies a list of addresses to use for messages that are sent to that user. Forward to : 7.3.2 A configurable capability allowing forwarding of mail by placing the single line ``Forward to <address_list>'' in a mailbox file. Free Software Foundation : 0.2 The Free Software Foundation produces a wide verity of useful copylefted programs from editors to compilers, and from mailers (such as this one!) to an eventual goal of a complete Un*x-compatible software system. For more information write to: Free Software Foundation, 1000 Mass Ave, Cambridge MA 02138, USA. From_ (from space) lines : 1.1 A set of lines at the beginning of a message that can be used to build a !-route back to the sender of the message. NOTE: The ``_'' character refers to a space and not an underscore! Fully Qualified: 2.2 A domain is fully qualified when the last part is a top level domain, such as .com, .edu, .jpn or a pseudo domains .arpa or .uucp. Grade : 9.3, 9.1.2, 9.5, 5.2, 8.5.1.2 A priority assigned to a given mail message. When smail scans a spool directory for work, the oldest message of the highest priority will be processed first. Grouped pattern : 0.1 A sequence of patterns enclosed in parentheses in a syntax form. Used to group patterns to be operated on by operators such as * and +. GNU : abstract, 0.2, n-2 GNU stands for GNU's not Un*x. The G in GNU is not silent. Header : 1.2 A collection of lines after the optional From_ lines and before the body of a message that specify important addressing and debugging information, as well as any other keyed information that a user wishes to put at the top of a message. The form is as a collection of header fields that begin with a field name ending in a colon ( `:' ) and end before the next header field or before the message body. Header field : 1.2 One field from a header. It is defined as one or more lines from the header where the first line begins with a fieldname followed by a colon ( `:' ) and where successive lines are non blank and begin with a white space character, i.e., a tab or a space. Host : 3.2 Some object that can transport and receive mail. :include: file: 7.1, 7.3.1 A file referred to by the aliases file or another :include: file. Contains a list of files, addresses, pipes and :include: files. Literal text : 0.1 Characters within a syntax form that must match exactly, though generally ignoring case, for a pattern match to occur. Local address : 3.2 An address that specifies a recipient on the local host. Local address form : 3.2 An address form that does not supply a host or domain, and thus only contains a local part. Local part : 3.2 The local part of an address that refers to a specific user, pipe or filename in absence of a sitename or domain. Logging : 9.2 The act of writing or updating a log file. Log file : 9.2 Smail has 3 mail types of log files. A panic log file records panic events that should recevied the immediate attention. A transaction log file records smail activity and debugging information. A per-message log file records the process of smail processing an individual mail message. Mailer : 0 A mailer is a collection of one or more programs that receive mail messages from either user agents, or from extern systems via some transport. The mailer performed the required parsing and processing of the mail message and either hands it off to a transport for external transmission and possibly performs local mail delivery. On a typical 4.3BSD system the mailers are /bin/rmail and /usr/lib/sendmail. Mailing list : 7.3.3 A mailing list is a file which contains a list of addresses. A mailing list file can be referenced in an alias or forward file using the address form :include:/path/file. The forward file mechanism is also generalized to support mailing lists which are defined simply by defining a plain text file in a directory setup for this purpose. For this case, a local form address which matches the basename of the mailing list is expanded into the list of addresses contained in the file. Message : 1 The complete collection of characters that are being sent from the sender of a message to the various recipients. A message consists of an optional set of From_ lines, an optional header and an optional message body. The first two parts of a message, the From_ lines and header may be modified by mail transport and mail delivery programs. Message body : 1.3 The collection of characters in a message that are after the optional From_ lines and header. This contains the unformated text that the sender is sending to the recipients of the message. Message ID : 2.3.2 A unique identifier for a message that is specified in a header. This is generally assigned by the host to which the message was originally submitted. Method file : 6.1.3 A file that defines a table of associations between hosts and transports. Name server : 6.1.2 A program or facility that provides a host or domain resolution service. An example is the Berkeley BIND program. Named pattern : 0.1 A name tied to part of a syntax form. Next host : 3.3 Often a message must pass through a list of hosts to go from the local host to a target host. The next host is the first in this list of hosts. Operator : 3.1.2 In an address, a character from the set [%@!<>,:;]. An operator forms a distinct token when it is outside of a quoted text literal or domain literal and when not preceded by a backslash. Path : An alternate name for a route. Often the word path is used when refering to routes over a UUCP network, for historical reasons. Pathalias : 6.3.1 A program by Peter Honeyman that converts the Usenet maps into the pathalias database. Pathalias database : 6.3.1 A database produced by the pathalias program. Alternately a database in the same format as that produced by the pathalias program. Such a database associates hosts and domains with routes that can be used for determining where to send a message. Precedence : 9.3, 9.1.2, 9.5, 5.2, 8.5.1.2 A symbolic name for a grade (see Grade). A grade can be assigned to a message by giving a string within a Precedence: header field which matches a known precedence with a corresponding grade value. Quoted-literal : 3.1.2.1 Characters inside double quotes. This is a token form within an address. Received field : 2.3.1 A tracing/debugging field in the header. Each site through which a message travels should add a Received: field to the message stating the name of the host, the date, the time and a message id. Received fields can also be counted to determine how many sites a message has passed through since originally submitted. This can be useful in detecting infinite loops, by noting when this count is unusually high. Recipient : 7, 8 The user, program or file appointed as a receiver of a message. These are specified using many addressing combinations. However, in general a recipient can be specified using a local name and a domain in the form: local-part@domain-reference. Recursion : 0.2 See Tail recursion. Remainder : 3.2 The address which remains after the target is removed from an address. This is nominally the address which is to be given to the target host. Remote : 6 Relating to users or addresses not on the local host. Remote address : 3.2 An address that specifies a recipient on a remote host. Remote address form : 3.2 An address form that supplies a host or domain. RFC819: n-1 ARPANET Request For Comment document number 819. Useful for understanding the domain naming convention. RFC821: n-1 ARPANET Resuest for Comment document number 821. This document deals with the SMTP protocol. RFC822: n-1 ARPANET Request For Comment document number 822. The mail format standard in given in RFC822. RFC882: n-1 ARPANET Request For Comment document number 882. Domain name concepts and facilities are discussed in this document. RFC920: n-1 ARPANET Request For Comment document number 920. The requirements for domains are found in RFC920. RFC976: n-1 ARPANET Request For Comment document number 976. The UUCP mail interchange format standard is given in RFC976. Route : 3.1.2.3, 3.2, 6 A sequence of hosts and domains through that a message must travel to reach a recipient. For mail over UUCP, routes are generally in !-route form (also called `!'-path form in this document). See the entry for !-route. The name `route' also refers to the first part of a route-addr. See the entry for route-addr for this interpretation. Route-addr : 3.2 A peculiar syntax used in RFC822 to state specifically the path to be used in sending mail from a host to the destination. An example route-addr is: <@kgbvax,@walldrug,@namei,@amdahl:rick@seismo> Route-addr gets its name because it begins with a route to get to the destination host and ends in a normal form address. Router : 6 Something that computes where to send a mail message given the address of a recipient. Router driver : 6.1.2, 6.3 A set of smail subroutines that do the actions of a router. It is possible for several router entries to refer to a single router driver. Router entry : 6.1 A set of lines in the router file that define a specific instance of a router. A router entry names a router driver, specifies values to be passed to a router driver, and establishes how it is to be used. Router file : 6.1 A file containing one or more router entries and which defines the order in which they are used in routing recipient addresses. Shell command : 8.5.1 A command that is to be executed by a command processor such as a UN*X shell program. Smail : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... Originally a program by Chris Seiwald and Mark Horton of AT&T. Later versions were also co-authored by Larry Auton of AT&T. The newest version is being written by Ronald S. Karr and Landon Noll, both of Amdahl Corporation with some review by Larry Auton and Richard Stallman of the Free Software Foundation. Smail package : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... A package that includes the program smail, pathalias and map processing programs and other administrative routines. Smart host : 6.3.6 A host that supposedly has more or better routing information than your local host might have. Thus, a smart-host is sent mail that other hosts cannot route. Smart user host : 7.3.5 A host that supposedly knows more domain users than other host in the domain. As a result, mail is sent to this host when other hosts in the domain received mail for local form addresses that are not understood. SMTP : 8.5.3, 8.1, 8.3, 9.6 Simple Mail Transfer Protocol defined in Stanford Research Institute's Network Information Center (SRI-NIC) Request For Comment document number 821. Spool directory : 9.1.3, 9.3 A directory in that mail messages are spooled. Processing occurs on the data that is in spool files in spool directories. This avoids the loss of mail because of either system failures during delivery, or system failures during the processing of addresses. There can be several spool directories so that errors in writing to one will not result in the loss of messages unless writes to all available spool directories generate errors. Syntax form : 0.1 A string used in this document that describes a pattern of some kind. Tail recursion: See Tail recursion. Target : 3.2 The most significant domain specified in an address. Text-literal : 3.1.2.1 In an address, a set of characters that are not operators, square brackets or double quotes. This is a token form within an address. Transport : 8 Something that moves a message from one location to another. Transport driver : 8.5 A set of smail subroutines that do the actions of a transport. It is possible for several transport entries to refer to a single director transport. Transport entry : 8.3 A set of lines in the transport file that define a specific instance of a transport. A transport entry names a transport driver, specifies values to be passed to a transport driver, and establishes its operating mode. Transport file : 8.3 A file containing one or more transport entries. Transport instance : 8.4.1 The use of the word instance here comes from the Smalltalk computer language, from Xerox PARC. For smail it refers to a structure that groups together a list of addresses that are to be sent in one call to a transport. UN*X : 0.2 UN*X is not a trademark of anyone. Uuname : 6.3.2 The uuname program prints the names of the UUCP neighbor sites found in the UUCP L.sys database. Uuname driver : 6.3.2 A router driver that determines if an address refers to a UUCP neighbor by obtaining a list of neighbors from a program such as the uuname program. USENET : 6.3 A world wide network of sites that exchange news and articles on numerous topics. USENET maps : 6.3, 6.4 A database of sites in the UUCP zone, describing their connectivity. This database is published to the USENET newsgroup comp.mail.maps. This database is used by pathalias to form a pathalias database describing optimal paths from the local host to all other sites on USENET. User agent : 0.2, 2 A program that allows a user to send, receive and reply to mail messages. On a typical System V machine, the user agents would be /bin/mail and /usr/bin/mailx. User smart host : 7.3.5 See Smart user host. UUCP : 0.2, 2, 3, 5, 8, 9, The Unix to Unix Copy Package (UUCP) that is available as a transport facility on most UN*X systems. This package contains programs for file transfer to remote hosts and remote command execution over asynchronous serial lines. UUCP Zone : The collection of sites that transfer mail through direct connections using the UUCP package to other sites in a worldwide UUCP network. UUX : 8.3 The remote command execution facility for UUCP. \f