aboutsummaryrefslogtreecommitdiff
path: root/gnu/libexec/uucp/doc/uucp.texi
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/libexec/uucp/doc/uucp.texi')
-rw-r--r--gnu/libexec/uucp/doc/uucp.texi4036
1 files changed, 4036 insertions, 0 deletions
diff --git a/gnu/libexec/uucp/doc/uucp.texi b/gnu/libexec/uucp/doc/uucp.texi
new file mode 100644
index 000000000000..5ab74118d6e9
--- /dev/null
+++ b/gnu/libexec/uucp/doc/uucp.texi
@@ -0,0 +1,4036 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename uucp.info
+@settitle Taylor UUCP
+@setchapternewpage odd
+@c %**end of header
+
+@iftex
+@finalout
+@end iftex
+
+@ignore
+---------------------------------------------------------------------->
+Franc,ois Pinard says:
+
+Hi, Ian! This is the promised merging of the current documents from
+Taylor UUCP 1.01, plus the patches to documentation you sent to me, into
+a taylor.texi file. Many things remain to do, among which:
+
+- merging in the Taylor UUCP program man pages.
+----------------------------------------------------------------------<
+@end ignore
+
+@ifinfo
+This file documents Taylor UUCP, version 1.05.
+
+Copyright @copyright{} 1992, 1993, 1994 Ian Lance Taylor
+
+Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+@ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries a copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+section entitled ``Copying'' are included exactly as in the original, and
+provided that the entire resulting derived work is distributed under the
+terms of a permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that the section entitled ``Copying'' may be included in a
+translation approved by the author instead of in the original English.
+@end ifinfo
+
+@titlepage
+@title Taylor UUCP
+@subtitle Version 1.05
+@author Ian Lance Taylor @code{<ian@@airs.com>}
+
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1992, 1993, 1994 Ian Lance Taylor
+
+Published by Ian Lance Taylor @code{<ian@@airs.com>}.
+
+Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+section entitled ``Copying'' are included exactly as in the original, and
+provided that the entire resulting derived work is distributed under the
+terms of a permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that the section entitled ``Copying'' may be included in a
+translation approved by the author instead of in the original English.
+@end titlepage
+
+@node Top, Copying, (dir), (dir)
+@top Taylor UUCP 1.05
+
+This is the documentation for the Taylor UUCP package, version 1.05.
+The programs were written by Ian Lance Taylor. The author can be
+reached at @code{<ian@@airs.com>}, or @samp{c/o Cygnus Support, Building
+200, 1 Kendall Square, Cambridge, MA, 02139, USA}.
+
+There is a mailing list for discussion of the package. To join (or get
+off) the list, send mail to
+@code{<taylor-uucp-request@@gnu.ai.mit.edu>}. Mail to this address is
+answered by a person, not a program. When joining the list, please give
+the address at which you wish to receive mail; do not rely on the
+message headers. To send a message to the list, send it to
+@code{<taylor-uucp@@gnu.ai.mit.edu>}.
+
+Jeff Ross has volunteered to maintain patches for UUCP releases. They
+may be obtained via anonymous FTP from ftp.fdu.edu, in the directory
+pub/taylor-uucp.
+
+@menu
+* Copying:: Taylor UUCP copying conditions
+* Introduction:: Introduction to Taylor UUCP
+* Overall Installation:: Taylor UUCP installation
+* Configuration Files:: Taylor UUCP configuration files
+* Protocols:: UUCP protocol internals
+* Hacking:: Hacking Taylor UUCP
+* Acknowledgements:: Acknowledgements
+
+* Index (concepts):: Concept index
+* Index (configuration file):: Index to new configuration files
+
+ --- The Detailed Node Listing ---
+
+Taylor UUCP Overall Installation
+
+* Configuration:: Configuring Taylor UUCP
+* Compilation:: Compiling Taylor UUCP
+* Testing:: Testing Taylor UUCP
+* Installation:: Installing Taylor UUCP
+* TCP:: TCP together with Taylor UUCP
+
+Installing Taylor UUCP
+
+* Running uucico:: Running uucico
+* Using UUCP for mail and news:: Using UUCP for mail and news.
+* Trimming UUCP Log Files:: Trimming UUCP Log Files
+
+Using UUCP for mail and news.
+
+* Sending mail or news:: Sending mail or news via UUCP
+* Receiving mail or news:: Receiving mail or news via UUCP
+
+Taylor UUCP Configuration Files
+
+* Configuration File Format:: Configuration file format
+* Configuration File Overview:: Configuration File Overview
+* Configuration Examples:: Examples of configuration files
+* Time Strings:: How to write time strings
+* Chat Scripts:: How to write chat scripts
+* config File:: The main configuration file
+* sys File:: The system configuration file
+* port File:: The port configuration files
+* dial File:: The dialer configuration files
+* Security:: Security issues
+
+Examples of Configuration Files
+
+* config File Examples:: Examples of the main configuration file
+* Leaf Example:: Call a single remote site
+* Gateway Example:: The gateway for several local systems
+
+The Main Configuration File
+
+* Miscellaneous (config):: Miscellaneous config file commands
+* Configuration File Names:: Using different configuration files
+* Log File Names:: Using different log files
+* Debugging Levels:: Debugging levels
+
+The System Configuration File
+
+* Defaults and Alternates:: Using defaults and alternates
+* Naming the System:: Naming the system
+* Calling Out:: Calling out
+* Accepting a Call:: Accepting a call
+* Protocol Selection:: Protocol selection
+* File Transfer Control:: File transfer control
+* Miscellaneous (sys):: Miscellaneous sys file commands
+* Default sys File Values:: Default values
+
+Calling Out
+
+* When to Call:: When to call
+* Placing the Call:: Placing the call
+* Logging In:: Logging in
+
+Hacking Taylor UUCP
+
+* System Dependence:: System Dependence
+* Naming Conventions:: Naming Conventions
+* Patches:: Patches
+@end menu
+
+@node Copying, Introduction, Top, Top
+@unnumbered Taylor UUCP Copying Conditions
+
+This package is covered by the GNU Public License. See the file
+@file{COPYING} for details. If you would like to do something with this
+package that you feel is reasonable, but you feel is prohibited by the
+license, contact me to see if we can work it out.
+
+Here is some propaganda from the Free Software Foundation. If you find
+this stuff offensive or annoying, remember that you probably did not
+spend any money to get this code. I did not write this code to make
+life easier for developers of UUCP packages, I wrote it to help end
+users, and I believe that these are the most appropriate conditions for
+distribution.
+
+All the programs, scripts and documents relating to Taylor UUCP are
+@dfn{free}; this means that everyone is free to use them and free to
+redistribute them on a free basis. The Taylor UUCP-related programs are
+not in the public domain; they are copyrighted and there are
+restrictions on their distribution, but these restrictions are designed
+to permit everything that a good cooperating citizen would want to do.
+What is not allowed is to try to prevent others from further sharing any
+version of these programs that they might get from you.
+
+Specifically, we want to make sure that you have the right to give away
+copies of the programs that relate to Taylor UUCP, that you receive
+source code or else can get it if you want it, that you can change these
+programs or use pieces of them in new free programs, and that you know
+you can do these things.
+
+To make sure that everyone has such rights, we have to forbid you to
+deprive anyone else of these rights. For example, if you distribute
+copies of the Taylor UUCP related programs, you must give the recipients
+all the rights that you have. You must make sure that they, too,
+receive or can get the source code. And you must tell them their
+rights.
+
+Also, for our own protection, we must make certain that everyone finds
+out that there is no warranty for the programs that relate to Taylor
+UUCP. If these programs are modified by someone else and passed on, we
+want their recipients to know that what they have is not what we
+distributed, so that any problems introduced by others will not reflect
+on our reputation.
+
+The precise conditions of the licenses for the programs currently being
+distributed that relate to Taylor UUCP are found in the General Public
+Licenses that accompany them.
+
+@node Introduction, Overall Installation, Copying, Top
+@chapter Introduction to Taylor UUCP
+
+General introductions to UUCP are available, and perhaps one day I will
+write one. In the meantime, here is a very brief one that concentrates
+on the programs provided by Taylor UUCP.
+
+Taylor UUCP is a complete UUCP package. It is covered by the GNU Public
+License, which means that the source code is always available. It is
+composed of several programs; most of the names of these programs are
+based on earlier UUCP packages.
+
+@table @code
+
+@item uucp
+
+The @code{uucp} program is used to copy file between systems. It is
+similar to the standard Unix @code{cp} program, except that you can
+refer to a file on a remote system by using @samp{system!} before the
+file name. For example, to copy the file @file{notes.txt} to the system
+@samp{airs}, you would say @samp{uucp notes.txt airs!~/notes.txt}. In
+this example @samp{~} is used to name the UUCP public directory on
+@samp{airs}.
+
+@item uux
+
+The @code{uux} program is used to request the execution of a program on
+a remote system. This is how mail and news are transferred over UUCP.
+As with @code{uucp}, programs and files on remote systems may be named
+by using @samp{system!}. For example, to run the @code{rnews} program
+on @samp{airs} passing it standard input, you would say @samp{uux -
+airs!rnews}. The @samp{-} means to read standard input and set things
+up such that when @code{rnews} runs on @samp{airs} it will receive the
+same standard input.
+
+@end table
+
+Neither @code{uucp} nor @code{uux} actually do any work immediately.
+Instead, they queue up requests for later processing. They then start a
+daemon process which processes the requests and calls up the appropriate
+systems. Normally the system will also start the daemon periodically to
+check if there is any work to be done. The advantage of this approach
+is that it all happens automatically. You don't have to sit around
+waiting for the files to be transferred. The disadvantage is that if
+anything goes wrong it might be a while before anybody notices.
+
+@table @code
+
+@item uustat
+
+The @code{uustat} program does many things. By default it will simply
+list all the jobs you have queued with @code{uucp} or @code{uux} that
+have not yet been processed. You can use @code{uustat} to remove any of
+your jobs from the queue. You can also it use it to show the status of
+the UUCP system in various ways, such as showing the connection status
+of all the remote systems your system knows about. The system
+administrator can use @code{uustat} to automatically discard old jobs
+while sending mail to the user who requested them.
+
+@item uuname
+
+The @code{uuname} program by default lists all the remote systems your
+system knows about. You can also use it to get the name of your local
+system. It is mostly useful for shell scripts.
+
+@item uulog
+
+The @code{uulog} program can be used to display entries in the UUCP log
+file. It can select the entries for a particular system or a particular
+user. You can use it to see what has happened to your queued jobs in
+the past.
+
+@item uuto
+@item uupick
+
+@code{uuto} is a simple shell script interface to @code{uucp}. It will
+transfer a file, or the contents of a directory, to a remote system, and
+notify a particular user on the remote system when it arrives. The
+remote user can then retrieve the file(s) with @code{uupick}.
+
+@item cu
+
+The @code{cu} program can be used to call up another system and
+communicate with it as though you were directly connected. It can also
+do simple file transfers, though it does not provide any error checking.
+
+@end table
+
+These eight programs just described, @code{uucp}, @code{uux},
+@code{uuto}, @code{uupick}, @code{uustat}, @code{uuname}, @code{uulog},
+and @code{cu} are the user programs provided by Taylor UUCP@.
+@code{uucp}, @code{uux}, and @code{uuto} add requests to the work queue,
+@code{uupick} extracts files from the UUCP public directory,
+@code{uustat} examines the work queue, @code{uuname} examines the
+configuration files, @code{uulog} examines the log files, and @code{cu}
+just uses the UUCP configuration files.
+
+The real work is actually done by two daemon processes, which are
+normally run automatically rather than by a user.
+
+@table @code
+
+@item uucico
+
+The @code{uucico} daemon is the program which actually calls the remote
+system and transfers files and requests. @code{uucico} is normally
+started automatically by @code{uucp} and @code{uux}. Most systems will
+also start it periodically to make sure that all work requests are
+handled. @code{uucico} checks the queue to see what work needs to be
+done, and then calls the appropriate systems. If the call fails,
+perhaps because the phone line is busy, @code{uucico} leaves the
+requests in the queue and goes on to the next system to call. It is
+also possible to force @code{uucico} to call a remote system even if
+there is no work to be done for it, so that it can pick up any work that
+may be queued up remotely.
+
+@need 1000
+@item uuxqt
+
+The @code{uuxqt} daemon processes execution requests made by the
+@code{uux} program on remote systems. It also processes requests made
+on the local system which require files from a remote system. It is
+normally started by @code{uucico}.
+
+@end table
+
+Suppose you, on the system @samp{bantam}, want to copy a file to the
+system @samp{airs}. You would run the @code{uucp} command locally, with
+a command like @samp{uucp notes.txt airs!~/notes.txt}. This would queue
+up a request on @samp{bantam} for @samp{airs}, and would then start the
+@code{uucico} daemon. @code{uucico} would see that there was a request
+for @samp{airs} and attempt to call it. When the call succeeded,
+another copy of @code{uucico} would be started on @samp{airs}. The two
+copies of @code{uucico} would tell each other what they had to do and
+transfer the file from @samp{bantam} to @samp{airs}. When the file
+transfer was complete the @code{uucico} on @samp{airs} would move it
+into the UUCP public directory.
+
+UUCP is often used to transfer mail. This is normally done
+automatically by mailer programs. When @samp{bantam} has a mail message
+to send to @samp{ian} at @samp{airs}, it executes @samp{uux - airs!rmail
+ian} and writes the mail message to the @code{uux} process as standard
+input. The @code{uux} program, running on @samp{bantam}, will read the
+standard input and store it, as well as the @code{rmail} request itself,
+on the work queue for @samp{airs}. @code{uux} will then start the
+@code{uucico} daemon. The @code{uucico} daemon will call up
+@samp{airs}, just as in the @code{uucp} example, and transfer the work
+request and the mail message. The @code{uucico} daemon on @samp{airs}
+will put the files on a local work queue. When the communication
+session is over, the @code{uucico} daemon on @samp{airs} will start the
+@code{uuxqt} daemon. @code{uuxqt} will see the request to run, and will
+run @samp{rmail ian} with the mail message as standard input. The
+@code{rmail} program, which is not part of the UUCP package, is then
+responsible for either putting the message in the right mailbox on
+@samp{airs} or forwarding the message on to another system.
+
+Taylor UUCP comes with a few other programs that are useful when
+installing and configuring UUCP.
+
+@table @code
+
+@item uuchk
+
+The @code{uuchk} program reads the UUCP configuration files and displays
+a rather lengthy description of what it finds. This is useful when
+configuring UUCP to make certain that the UUCP package will do what you
+expect it to do.
+
+@item uuconv
+
+The @code{uuconv} program can be used to convert UUCP configuration
+files from one format to another. This can be useful for administrators
+converting from an older UUCP. Taylor UUCP is able to read and use old
+configuration file formats, but some new features can not be selected
+using the old formats.
+
+@item uusched
+
+The @code{uusched} script is just provided for compatibility with older
+UUCP releases. It starts @code{uucico} to call, one at a time, all the
+systems for which work has been queued.
+
+@item tstuu
+
+The @code{tstuu} program is a test harness for the UUCP package; it can
+help check that the package has been configured and compiled correctly.
+However, it uses pseudo-terminals, which means that it is less portable
+than the rest of the package. If it works, it can be useful when
+initially installing Taylor UUCP.
+
+@end table
+
+@node Overall Installation, Configuration Files, Introduction, Top
+@chapter Taylor UUCP Overall Installation
+
+These are the installation instructions for the Taylor UUCP package.
+
+@menu
+* Configuration:: Configuring Taylor UUCP
+* Compilation:: Compiling Taylor UUCP
+* Testing:: Testing Taylor UUCP
+* Installation:: Installing Taylor UUCP
+* TCP:: TCP together with Taylor UUCP
+@end menu
+
+@node Configuration, Compilation, Overall Installation, Overall Installation
+@section Configuring Taylor UUCP
+
+You will have to decide what types of configuration files you want to
+use. This package supports a new sort of configuration file; see
+@ref{Configuration Files}. It also supports V2 configuration files
+(@file{L.sys}, @file{L-devices}, etc.) and HDB configuration files
+(@file{Systems}, @file{Devices}, etc.). No documentation is provided
+for V2 or HDB configuration files. All types of configuration files can
+be used at once, if you are so inclined. Currently using just V2
+configuration files is not really possible, because there is no way to
+specify a dialer (there are no built in dialers, and the program does
+not know how to read @file{acucap} or @file{modemcap}); however, V2
+configuration files can be used with a new style dial file (@pxref{dial
+File}), or with a HDB @file{Dialers} file.
+
+Use of HDB configuration files has two known bugs. A blank line in the
+middle of an entry in the @file{Permissions} file will not be ignored as
+it should be. Dialer programs, as found in some versions of HDB, are
+not recognized directly. If you must use a dialer program, rather than
+an entry in @file{Devices}, you must use the @code{chat-program} command
+in a new style dial file; see @ref{dial File}. You will have to invoke
+the dialer program via a shell script or another program, since an exit
+code of 0 is required to recognize success; the @code{dialHDB} program
+in the @file{contrib} directory may be used for this purpose.
+
+The @code{uuconv} program can be used to convert from V2 or HDB
+configuration files to the new style (it can also do the reverse
+translation, if you are so inclined). It will not do all of the work,
+and the results should be carefully checked, but it can be quite useful.
+
+If you are installing a new system, you will, of course, have to write
+the configuration files; see @ref{Configuration Files}.
+
+You must also decide what sort of spool directory you want to use. If
+you will be using only these programs for UUCP, I recommend
+@samp{SPOOLDIR_TAYLOR}; otherwise select the spool directory
+corresponding to your existing UUCP package. The details of the spool
+directory choices are described at somewhat tedious length in
+@file{unix/spool.c}.
+
+@node Compilation, Testing, Configuration, Overall Installation
+@section Compiling Taylor UUCP
+
+@enumerate
+
+@item
+Take a look at the top of @file{Makefile.in} and set the appropriate
+values for your system. These control where the programs are installed
+and which user on the system owns them (normally they will be owned by a
+special user @code{uucp} rather than a real person; they should probably
+not be owned by @code{root}).
+
+@item
+Run the shell script @code{configure}. This script was generated using
+the @code{autoconf} program written by David MacKenzie of the Free
+Software Foundation. It takes a while to run. It will generate the
+file @file{config.h} based on @file{config.h.in}, and, for each source
+code directory, will generate @file{Makefile} based on
+@file{Makefile.in}.
+
+You can pass certain arguments to @code{configure} in the environment.
+Because @code{configure} will compile little test programs to see what
+is available on your system, you must tell it how to run your compiler.
+It recognizes the following environment variables:
+
+@table @samp
+@item CC
+The C compiler. If this is not set, then if @code{configure} can find
+@samp{gcc} it will use it, otherwise it will use @samp{cc}.
+@item CFLAGS
+Flags to pass to the C compiler when compiling the actual code. If this
+is not set, @code{configure} will use @samp{-g}.
+@item LDFLAGS
+Flags to pass to the C compiler when only linking, not compiling. If
+this is not set, @code{configure} will use the empty string.
+@item LIBS
+Libraries to pass to the C compiler. If this is not set,
+@code{configure} will use the empty string.
+@item INSTALL
+The program to run to install UUCP in the binary directory. If this is
+not set, then if @code{configure} finds the BSD @code{install} program,
+it will set this to @samp{install -c}; otherwise, it will use @samp{cp}.
+@item INSTALLDATA
+The program to run to install UUCP data files, such as the man pages and
+the info pages. If this is not set, then if @code{configure} finds the
+BSD @code{install} program, it will set this to @samp{install -c -m
+644}; otherwise, it will use @samp{cp}.
+@end table
+
+Suppose you want to set the environment variable @samp{CC} to
+@samp{rcc}. If you are using @code{sh} or @code{bash}, invoke
+@code{configure} as @samp{CC=rcc configure}. If you are using
+@code{csh}, do @samp{setenv CC rcc; sh configure}.
+
+On some systems you will want to use @samp{LIBS=-lmalloc}. On Xenix
+derived versions of Unix do not use @samp{LIBS=-lx} because this will
+bring in the wrong versions of certain routines; if you want to use
+@samp{-lx} you must specify @samp{LIBS=-lc -lx}.
+
+If @code{configure} fails for some reason, or if you have a very weird
+system, you may have to configure the package by hand. To do this, copy
+the file @file{config.h.in} to @file{config.h} and edit it for your
+system. Then for each source directory (the top directory, and the
+subdirectories @file{lib}, @file{unix}, and @file{uuconf}) copy
+@file{Makefile.in} to @file{Makefile}, find the words within @kbd{@@}
+characters, and set them correctly for your system.
+
+@item
+Igor V. Semenyuk provided this (lightly edited) note about ISC Unix 3.0.
+The @code{configure} script will default to passing @samp{-posix} to
+@code{gcc}. However, using @samp{-posix} changes the environment to
+POSIX, and on ISC 3.0, at least, the default for POSIX_NO_TRUNC is 1.
+This means nothing for uucp, but can lead to a problem when uuxqt
+executes rmail. IDA sendmail has dbm configuration files named
+@file{mailertable.@{dir,pag@}}. Notice these names are 15 characters
+long. When uuxqt compiled with @samp{-posix} executes rmail, which in
+turn executes sendmail, the later is run under POSIX environment too!
+This leads to sendmail bombing out with @samp{'error opening 'M'
+database: name too long' (mailertable.dir)}. It's rather obscure
+behaviour, and it took me a day to find out the cause. I don't use
+@samp{-posix}, instead I run @code{gcc} with @samp{-D_POSIX_SOURCE}, and
+add @samp{-lcposix} to @samp{LIBS}.
+
+@item
+On some versions of BSDI there is a bug in the shell which causes the
+default value for @samp{CFLAGS} to be set incorrectly. If @samp{echo
+$@{CFLAGS--g@}} echoes @samp{g} rather than @samp{-g}, then you must set
+@samp{CFLAGS} in the environment before running configure. There is a
+patch available from BSDI for this bug. (From David Vrona).
+
+@item
+On AIX 3.2.5, and possibly other versions, @samp{cc -E} does not work,
+reporting @samp{Option NOROCONST is not valid}. Test this before
+running configure by doing something like @samp{touch /tmp/foo.c; cc -E
+/tmp/foo.c}. This may give a warning about the file being empty, but it
+should not give the @samp{Option NOROCONST} warning. The workaround is
+to remove the @samp{,noroconst} entry from the @samp{options} clause in
+the @samp{cc} stanza in @file{/etc/xlc.cfg}. (From Chris Lewis).
+
+@item
+You should verify that @code{configure} worked correctly by checking
+@file{config.h} and the instances of @file{Makefile}.
+
+@item
+Edit @file{policy.h} for your local system. The comments should explain
+the various choices. The default values are intended to be reasonable,
+so you may not have to make any changes.
+
+@item
+Type @samp{make} to compile everything. The @file{tstuu.c} file is not
+particularly portable; if you can't figure out how to compile it you can
+safely ignore it, as it is only used for testing (to use STREAMS
+pseudo-terminals, tstuu.c must be compiled with
+@samp{-DHAVE_STREAMS_PTYS}; this is not automatically determined at the
+moment). If you have any other problems there is probably a bug in the
+@code{configure} script.
+
+@item
+Please report any problems you have. That is the only way they will get
+fixed for other people. Supply a patch if you can (@pxref{Patches}), or
+just ask for help.
+
+@end enumerate
+
+@node Testing, Installation, Compilation, Overall Installation
+@section Testing Taylor UUCP
+
+This package is in use at hundreds, perhaps thousands, of sites, and has
+been running at @file{airs.com} for several years. However, it will
+doubtless fail in some situations. Do not rely on this code until you
+have proven to yourself that it will work.
+
+You can use the @code{uuchk} program to test your configuration files.
+It will read them and print out a verbose description. This program
+should not be made setuid, because it will display passwords if it can
+read them.
+
+If your system supports pseudo-terminals, and you compiled the code to
+support the new style of configuration files, you should be able to use
+the @code{tstuu} program to test the @code{uucico} daemon (if your
+system supports STREAMS based pseudo-terminals, you must compile tstuu.c
+with @samp{-DHAVE_STREAMS_PTYS}, at least at the moment; the STREAMS
+based code was contributed by Marc Boucher).
+
+To run @code{tstuu}, just type @samp{tstuu} with no arguments while
+logged in to the compilation directory (since it runs @file{./uucp},
+@file{./uux} and @file{./uucico}). It will run a lengthy series of
+tests (it takes over ten minutes on a slow VAX). You will need a fair
+amount of space available in @file{/usr/tmp}. You will probably want to
+put it in the background. Do not use @kbd{^Z}, because the program
+traps on @code{SIGCHLD} and winds up dying. It will create a directory
+@file{/usr/tmp/tstuu} and fill it with configuration files, and create
+spool directories @file{/usr/tmp/tstuu/spool1} and
+@file{/usr/tmp/tstuu/spool2}.
+
+If your system does not support the @code{FIONREAD} call, the
+@samp{tstuu} program will run very slowly. This may or may not get
+fixed in a later version.
+
+The program will finish with an execute file named
+@file{X.@var{something}} and a data file named @file{D.@var{something}}
+in the directory @file{/usr/tmp/tstuu/spool1} (or, more likely, in
+subdirectories, depending on the choice of @code{SPOOLDIR} in
+@file{policy.h}). Two log files will be created in the directory
+@file{/usr/tmp/tstuu}. They will be named @file{Log1} and @file{Log2},
+or, if you have selected @code{HAVE_HDB_LOGGING} in @file{policy.h},
+@file{Log1/uucico/test2} and @file{Log2/uucico/test1}. You can test
+@code{uuxqt} by running the command @samp{./uuxqt -I
+/usr/tmp/tstuu/Config1}. This should leave a command file
+@file{C.@var{something}} and a data file @file{D.@var{something}} in
+@file{/usr/tmp/tstuu/spool1} or in subdirectories. Again, there should
+be no errors in the log file.
+
+Assuming you compiled the code with debugging enabled, the @samp{-x}
+switch can be used to set debugging modes; see the @code{debug} command
+for details (@pxref{Debugging Levels}). Use @samp{-x all} to turn on
+all debugging and generate far more output than you will ever want to
+see. The @code{uucico} daemons will put debugging output in the files
+@file{Debug1} and @file{Debug2} in the directory @file{/usr/tmp/tstuu}.
+After that, you're pretty much on your own.
+
+On some systems you can also use @code{tstuu} to test @code{uucico}
+against the system @code{uucico}, by using the @samp{-u} switch. For
+this to work, change the definitions of @code{ZUUCICO_CMD} and
+@code{UUCICO_EXECL} at the top of @file{tstuu.c} to something
+appropriate for your system. The definitions in @file{tstuu.c} are what
+I used for Ultrix 4.0, on which @file{/usr/lib/uucp/uucico} is
+particularly obstinate about being run as a child; I was only able to
+run it by creating a login name with no password whose shell was
+@file{/usr/lib/uucp/uucico}. Calling login in this way will leave fake
+entries in @file{wtmp} and @file{utmp}; if you compile @file{tstout.c}
+(in the @file{contrib} directory) as a setuid @code{root} program,
+@code{tstuu} will run it to clear those entries out. On most systems,
+such hackery should not be necessary, although on SCO I had to su to
+@code{root} (@code{uucp} might also have worked) before I could run
+@file{/usr/lib/uucp/uucico}.
+
+You can test @code{uucp} and @code{uux} (give them the @samp{-r} switch
+to keep them from starting @code{uucico}) to make sure they create the
+right sorts of files. Unfortunately, if you don't know what the right
+sorts of files are, I'm not going to tell you here.
+
+If @code{tstuu} passes, or you can't run it for some reason or other,
+move on to testing with some other system. Set up the configuration
+files (@pxref{Configuration Files}), or use an existing configuration.
+Tell @code{uucico} to dial out to the system by using the @samp{-s}
+system switch (e.g. @samp{uucico -s uunet}). The log file should tell
+you what happens.
+
+If you compiled the code with debugging enabled, you can use debugging
+mode to get a great deal of information about what sort of data is
+flowing back and forth; the various possibilities are described under
+the @code{debug} command (@pxref{Debugging Levels}). When initially
+setting up a connection @samp{-x chat} is probably the most useful (e.g.
+@samp{uucico -s uunet -x chat}); you may also want to use @samp{-x
+handshake,incoming,outgoing}. You can use @samp{-x} multiple times on
+one command line, or you can give it comma separated arguments as in the
+last example. Use @samp{-x all} to turn on all possible debugging
+information. The debugging information is written to a file, normally
+@file{/usr/spool/uucp/Debug}, although the default can be changed in
+@file{policy.h} and the @file{config} file can override the name with
+the @code{debugfile} command. The debugging file may contain passwords
+and some file contents as they are transmitted over the line, so the
+debugging file is only readable by the @code{uucp} user.
+
+You can use the @samp{-f} switch to force @code{uucico} to call out even
+if the last call failed recently; using @samp{-S} when naming a system
+has the same effect. Otherwise the status file (in the @file{.Status}
+subdirectory of the main spool directory, normally
+@file{/usr/spool/uucp}) will prevent too many attempts from occurring in
+rapid succession.
+
+Again, please let me know about any problems you have and how you got
+around them. If you do report a problem, please include the version
+number of the package you are using, and a sample of the debugging file
+showing the problem (debugging information is usually what is needed,
+not just the log file). General questions such as ``why doesn't uucico
+dial out'' are impossible to answer without much more information.
+
+@node Installation, TCP, Testing, Overall Installation
+@section Installing Taylor UUCP
+
+You can install the executable files by becoming @code{root} and typing
+@samp{make install}. Or you can look at what @samp{make install} does
+and do it by hand. It tries to preserve your old programs, if any, but
+it only does this the first time Taylor UUCP is installed (so that if
+you install several versions of Taylor UUCP, you can still go back to
+your original UUCP programs). You can retrieve the original programs by
+typing @samp{make uninstall}.
+
+Note that by default the programs are compiled with debugging
+information, and they are not stripped when they are installed. You may
+want to strip the installed programs to save disk space. See your
+system documentation for strip for more information.
+
+However, simply installing the executable files is not enough. You must
+also arrange for them to be used correctly.
+
+@menu
+* Running uucico:: Running uucico
+* Using UUCP for mail and news:: Using UUCP for mail and news.
+* Trimming UUCP Log Files:: Trimming UUCP Log Files
+@end menu
+
+@node Running uucico, Using UUCP for mail and news, Installation, Installation
+@subsection Running uucico
+
+By default @code{uucp} and @code{uux} will automatically start up
+@code{uucico} to call another system whenever work is queued up.
+However, the call may fail, or you may have put in time restrictions
+which prevent the call at that time (perhaps because telephone rates are
+high) (@pxref{When to Call}). Also, a remote system may have work
+queued up for your system, but may not be calling you for some reason
+(perhaps you have agreed that your system should always place the call).
+To make sure that works get transferred between the systems withing a
+reasonable time period, you should arrange to periodically invoke
+@code{uucico}.
+
+These periodic invocations are normally caused by entries in the
+@file{crontab} file. The exact format of @file{crontab} files, and how
+new entries are added, varies from system to system; check your local
+documentation (try @samp{man cron}).
+
+To attempt to call all systems with outstanding work, use the command
+@samp{uucico -r1}. To attempt to call a particular system, use the
+command @samp{uucico -s @var{system}}. To attempt to call a particular
+system, but only if there is work for it, use the command @samp{uucico
+-C -s @var{system}}.
+
+A common case is to want to try to call a system at a certain time, with
+periodic retries if the call fails. A simple way to do this is to
+create an empty UUCP command file, known as a @dfn{poll file}. If a
+poll file exists for a system, then @samp{uucico -r1} will place a call
+to it. If the call succeeds, the poll file will be deleted.
+
+The file can be easily created using the @samp{touch} command. The name
+of a poll file currently depends on the type of spool directory you are
+using, as set in @file{policy.h}. If you are using
+@code{SPOOLDIR_TAYLOR} (the default), put something like this in your
+@file{crontab} file:
+@example
+touch /usr/spool/uucp/@var{sys}/C./C.A0000
+@end example
+In this example @var{sys} is the system you wish to call, and
+@samp{/usr/spool/uucp} is your UUCP spool directory.
+If you are using @code{SPOOLDIR_HDB}, use
+@example
+touch /usr/spool/uucp/@var{sys}/C.@var{sys}A0000
+@end example
+
+For example, I use the following crontab entries locally:
+
+@example
+45 * * * * /bin/echo /usr/lib/uucp/uucico -r1 | /bin/su uucpa
+40 4,10,15 * * * touch /usr/spool/uucp/uunet/C./C.A0000
+@end example
+
+Every hour, at 45 minutes past, this will check if there is any work to
+be done, and, if there is, will call the appropriate system. Also, at
+4:40am, 10:40am and 3:40pm this will create a poll file file for
+@samp{uunet}, forcing the next check to call @samp{uunet}.
+
+@node Using UUCP for mail and news, Trimming UUCP Log Files, Running uucico, Installation
+@subsection Using UUCP for mail and news.
+
+Taylor UUCP does not include a mail package. All Unix systems come with
+some sort of mail delivery agent, typically @code{sendmail} or
+@code{MMDF}. Source code is available for some alternative mail
+delivery agents, such as @code{IDA sendmail} and @code{smail}.
+
+Taylor UUCP also does not include a news package. The two major Unix
+news packages are @code{C-news} and @code{INN}. Both are available in
+source code form.
+
+Configuring and using mail delivery agents is a notoriously complex
+topic, and I will not be discussing it here. Configuring news systems
+is usually simpler, but I will not be discussing that either. I will
+merely describe the interactions between the mail and news systems and
+UUCP.
+
+A mail or news system interacts with UUCP in two ways: sending and
+receiving.
+
+@menu
+* Sending mail or news:: Sending mail or news via UUCP
+* Receiving mail or news:: Receiving mail or news via UUCP
+@end menu
+
+@node Sending mail or news, Receiving mail or news, Using UUCP for mail and news, Using UUCP for mail and news
+@unnumberedsubsubsec Sending mail or news via UUCP
+
+When mail is to be sent from your machine to another machine via UUCP,
+the mail delivery agent will invoke @code{uux}. It will generally run a
+command such as @samp{uux - @var{system}!rmail}, where @var{system} is
+the remote system to which the mail is being sent. It may pass other
+options to @code{uux}, such as @samp{-r} or @samp{-g}.
+
+News also invokes @code{uux} in order to transfer articles to another
+system. The only difference is that news will use @code{uux} to invoke
+@code{rnews} on the remote system, rather than @code{rmail}.
+
+You should arrange for your mail and news systems to invoke the Taylor
+UUCP version of @code{uux} when sending mail via UUCP. If you simply
+replace any existing version of @code{uux} with the Taylor UUCP version,
+this will probably happen automatically. However, if both versions
+exist on your system, you will probably have to modify the mail and news
+configuration files in some way.
+
+Actually, if both the system UUCP and Taylor UUCP are using the same
+spool directory format, the system @code{uux} will probably work fine
+with the Taylor @code{uucico} (the reverse is not the case: the Taylor
+@code{uux} requires the Taylor @code{uucico}). However, data transfer
+will be somewhat more efficient if the Taylor @code{uux} is used.
+
+@node Receiving mail or news, , Sending mail or news, Using UUCP for mail and news
+@unnumberedsubsubsec Receiving mail or news via UUCP
+
+As noted in @ref{Sending mail or news}, mail is sent by requesting a
+remote execution of @code{rmail}. To receive mail, then, all that is
+necessary is for UUCP to invoke @code{rmail} itself.
+
+Any mail delivery agent will provide an appropriate version of
+@code{rmail}; you must simply make sure that it is in the command path
+used by UUCP (it almost certainly already is). The default command path
+is set in @file{policy.h}, and it may be overridden for a particular
+system by the @code{command-path} command (@pxref{Miscellaneous (sys)}).
+
+Similarly, for news UUCP must be able to invoke @code{rnews}. Any news
+system will provide a version of @code{rnews}, and you must ensure that
+is in a directory on the path that UUCP will search.
+
+@node Trimming UUCP Log Files, , Using UUCP for mail and news, Installation
+@subsection Trimming UUCP Log Files
+
+You should also periodically trim the log files, as they will otherwise
+continue to grow without limit. The names of the log files are set in
+@file{policy.h}, and may be overridden in the configuration file
+(@pxref{config File}). By default they are are
+@file{/usr/spool/uucp/Log} and @file{/usr/spool/uucp/Stats}.
+
+You may find the @code{savelog} program in the @file{contrib} directory
+to be of use. There is a manual page for it in @file{contrib} as well.
+
+@node TCP, , Installation, Overall Installation
+@section TCP together with Taylor UUCP
+
+If your system has a Berkeley style socket library, or a System V style
+TLI interface library, you can compile the code to permit making
+connections over TCP. Specifying that a system should be reached via
+TCP is easy, but nonobvious.
+
+If you are using the new style configuration files, see
+@ref{Configuration Files}. Basically, you can just add the line
+@samp{port type tcp} to the entry in the system configuration file. By
+default UUCP will get the port number by looking up @samp{uucp} in
+@file{/etc/services}; if @samp{uucp} is not found, port 540 will be
+used. You can set the port number to use with the command @samp{port
+service @var{xxx}}, where @var{xxx} can be either a number or a name to
+look up in @file{/etc/services}. You can specify the address of the
+remote host with @samp{address @var{a.b.c}}; if you don't give an
+address, the remote system name will be used. You should give an
+explicit chat script for the system when you use TCP; the default chat
+script begins with a carriage return, which will not work with some UUCP
+TCP servers.
+
+If you are using V2 configuration files, add a line like this to
+@file{L.sys}:
+
+@example
+@var{sys} Any TCP uucp @var{host}.@var{domain} chat-script
+@end example
+
+This will make an entry for system @var{sys}, to be called at any time,
+over TCP, using port number @samp{uucp} (as found in
+@file{/etc/services}; this may be specified as a number), using remote
+host @file{@var{host}.@var{domain}}, with some chat script.
+
+@need 1000
+If you are using HDB configuration files, add a line like this to
+Systems:
+
+@example
+@var{sys} Any TCP - @var{host}.@var{domain} chat-script
+@end example
+
+and a line like this to Devices:
+
+@example
+TCP uucp - -
+@end example
+
+You only need one line in Devices regardless of how many systems you
+contact over TCP. This will make an entry for system @var{sys}, to be
+called at any time, over TCP, using port number @samp{uucp} (as found in
+@file{/etc/services}; this may be specified as a number), using remote
+host @file{@var{host}.@var{domain}}, with some chat script.
+
+The @code{uucico} daemon can also be run as a TCP server. To use the
+default port number, which is a reserved port, @code{uucico} must be
+invoked by root (or it must be set user ID to root, but I don't
+recommend doing that).
+
+Basically, you must define a port, either using the port file
+(@pxref{port File}) if you are using the new configuration method or
+with an entry in Devices if you are using HDB; there is no way to define
+a port using V2. If you are using HDB the port must be named
+@samp{TCP}; a line as shown above will suffice. You can then start
+@code{uucico} as @samp{uucico -p TCP} (after the @samp{-p}, name the
+port; in HDB it must be @samp{TCP}). This will wait for incoming
+connections, and fork off a child for each one. Each connection will be
+prompted with @samp{login:} and @samp{Password:}; the results will be
+checked against the UUCP (not the system) password file
+(@pxref{Configuration File Names}).
+
+Of course, you can get a similar effect by using the BSD @code{uucpd}
+program.
+
+You can also have @code{inetd} start up @code{uucico} with the @samp{-l}
+switch, which will cause it to prompt with @samp{login:} and
+@samp{Password:} and check the results against the UUCP (not the system)
+password file (you may want to also use the @samp{-D} switch to avoid a
+fork, which in this case is unnecessary). This may be used in place of
+@code{uucpd}.
+
+@node Configuration Files, Protocols, Overall Installation, Top
+@chapter Taylor UUCP Configuration Files
+
+This chapter describes the configuration files accepted by the Taylor
+UUCP package if compiled with @code{HAVE_TAYLOR_CONFIG} defined in
+@file{policy.h}.
+
+The configuration files are normally found in the directory
+@var{newconfigdir}, which is defined by the @file{Makefile} variable
+@file{newconfigdir}; by default @var{newconfigdir} is
+@file{/usr/local/conf/uucp}. However, the main configuration file,
+@file{config}, is the only one which must be in that directory, since it
+may specify a different location for any or all of the other files. You
+may run any of the UUCP programs with a different main configuration
+file by using the @samp{-I} option; this can be useful when testing a
+new configuration. When you use the @samp{-I} option the programs will
+revoke any setuid privileges.
+
+@menu
+* Configuration File Format:: Configuration file format
+* Configuration File Overview:: Configuration File Overview
+* Configuration Examples:: Examples of configuration files
+* Time Strings:: How to write time strings
+* Chat Scripts:: How to write chat scripts
+* config File:: The main configuration file
+* sys File:: The system configuration file
+* port File:: The port configuration files
+* dial File:: The dialer configuration files
+* Security:: Security issues
+@end menu
+
+@node Configuration File Format, Configuration File Overview, Configuration Files, Configuration Files
+@section Configuration File Format
+
+All the configuration files follow a simple line-oriented
+@samp{@var{keyword} @var{value}} format. Empty lines are ignored, as
+are leading spaces; unlike HDB, lines with leading spaces are read. The
+first word on each line is a keyword. The rest of the line is
+interpreted according to the keyword. Most keywords are followed by
+numbers, boolean values or simple strings with no embedded spaces.
+
+The @kbd{#} character is used for comments. Everything from a @kbd{#}
+to the end of the line is ignored unless the @kbd{#} is preceded by a
+@kbd{\} (backslash); if the @kbd{#} is preceeded by a @kbd{\}, the
+@kbd{\} is removed but the @kbd{#} remains in the line. This can be
+useful for a phone number containing a @kbd{#}. To enter the sequence
+@samp{\#}, use @samp{\\#}.
+
+The backslash character may be used to continue lines. If the last
+character in a line is a backslash, the backslash is removed and the
+line is continued by the next line. The second line is attached to the
+first with no intervening characters; if you want any whitespace between
+the end of the first line and the start of the second line, you must
+insert it yourself.
+
+However, the backslash is not a general quoting character. For example,
+you cannot use it to get an embedded space in a string argument.
+
+Everything after the keyword must be on the same line. A @var{boolean}
+may be specified as @kbd{y}, @kbd{Y}, @kbd{t}, or @kbd{T} for true and
+@kbd{n}, @kbd{N}, @kbd{f}, or @kbd{F} for false; any trailing characters
+are ignored, so @code{true}, @code{false}, etc., are also acceptable.
+
+@node Configuration File Overview, Configuration Examples, Configuration File Format, Configuration Files
+@section Configuration File Overview
+
+UUCP uses several different types of configuration files, each
+describing a different kind of information. The commands permitted in
+each file are described in detail below. This section is a brief
+description of some of the different types of files.
+
+The @file{config} file is the main configuration file. It describes
+general information not associated with a particular remote system, such
+as the location of various log files. There are reasonable defaults for
+everything that may be specified in the @file{config} file, so you may
+not actually need one on your system.
+
+There may be only one @file{config} file, but there may be one or more
+of each other type of file. The default is one file for each type, but
+more may be listed in the @file{config} file.
+
+The @file{sys} files are used to describe remote systems. Each remote
+system to which you connect must be listed in a @file{sys} file. A
+@file{sys} file will include information for a system, such as the speed
+(baud rate) to use, or when to place calls.
+
+For each system you wish to call, you must describe one or more ports;
+these ports may be defined directly in the @file{sys} file, or they may
+be defined in a @file{port} file.
+
+The @file{port} files are used to describe ports. A port is a
+particular hardware connection on your computer. You would normally
+define as many ports as there are modems attached to your computer. A
+TCP connection is also described using a port.
+
+The @file{dial} files are used to describe dialers. Dialer is
+essentially another word for modem. The @file{dial} file describes the
+commands UUCP should use to dial out on a particular type of modem. You
+would normally define as many dialers as there are types of modems
+attached to your computer. For example, if you have three Telebit
+modems used for UUCP, you would probably define three ports and one
+dialer.
+
+There are other types of configuration files, but these are the
+important ones. The other types are described below.
+
+@node Configuration Examples, Time Strings, Configuration File Overview, Configuration Files
+@section Examples of Configuration Files
+
+This section provides few typical examples of configuration files.
+There are also sample configuration files in the @file{sample}
+subdirectory of the distribution.
+
+@menu
+* config File Examples:: Examples of the main configuration file
+* Leaf Example:: Call a single remote site
+* Gateway Example:: The gateway for several local systems
+@end menu
+
+@node config File Examples, Leaf Example, Configuration Examples, Configuration Examples
+@subsection config File Examples
+@cindex config file examples
+
+To start with, here are some examples of uses of the main configuration
+file, @file{config}. For a complete description of the commands that
+are permitted in @file{config}, see @ref{config File}.
+
+In many cases you will not need to create a @file{config} file at all.
+The most common reason to create one is to give your machine a special
+UUCP name. Other reasons might be to change the UUCP spool directory or
+to permit any remote system to call in.
+
+If you have an internal network of machines, then it is likely that the
+internal name of your UUCP machine is not the name you want to use when
+calling other systems. For example, here at @file{airs.com} our
+mail/news gateway machine is named @file{elmer.airs.com} (it is one of
+several machines all named @file{@var{localname}.airs.com}). If we did
+not provide a @file{config} file, then our UUCP name would be
+@file{elmer}; however, we actually want it to be @file{airs}.
+Therefore, we use the following line in @file{config}:
+
+@example
+nodename airs
+@end example
+
+@cindex changing spool directory
+@cindex spool directory (changing)
+The UUCP spool directory name is set in @file{policy.h} when the code is
+compiled. You might at some point decide that it is appropriate to move
+the spool directory, perhaps to put it on a different disk partition.
+You would use the following commands in @file{config} to change to
+directories on the partition @file{/uucp}:
+
+@example
+spool /uucp/spool
+pubdir /uucp/uucppublic
+logfile /uucp/spool/Log
+debugfile /uucp/spool/Debug
+@end example
+
+You would then move the contents of the current spool directory to
+@file{/uucp/spool}. If you do this, make sure that no UUCP processes
+are running while you change @file{config} and move the spool directory.
+
+@cindex anonymous UUCP
+Suppose you wanted to permit any system to call in to your system and
+request files. This is generally known as @dfn{anonymous UUCP}, since
+the systems which call in are effectively anonymous. By default,
+unknown systems are not permitted to call in. To permit this you must
+use the @code{unknown} command in @file{config}. The @code{unknown}
+command is followed by any command that may appear in the system file;
+for full details, see @ref{sys File}.
+
+I will show two possible anonymous UUCP configurations. The first will
+let any system call in and download files, but will not permit them to
+upload files to your system.
+
+@example
+# No files may be transferred to this system
+unknown receive-request no
+# The public directory is /usr/spool/anonymous
+unknown pubdir /usr/spool/anonymous
+# Only files in the public directory may be sent (the default anyhow)
+unknown remote-send ~
+@end example
+
+@noindent
+Setting the public directory is convenient for the systems which call
+in. It permits to request a file by prefixing it with @file{~/}. For
+example, assuming your system is known as @samp{server}, then to
+retrieve the file @file{/usr/spool/anonymous/INDEX} a user on a remote
+site could just enter @samp{uucp server!~/INDEX ~}; this would transfer
+@file{INDEX} from @samp{server}'s public directory to the user's local
+public directory. Note that when using @samp{csh} or @samp{bash} the
+@kbd{!} and the second @kbd{~} must be quoted.
+
+The next example will permit remote systems to upload files to a special
+directory named @file{/usr/spool/anonymous/upload}. Permitting a remote
+system to upload files permits it to send work requests as well; this
+example is careful to prohibit commands from unknown systems.
+
+@example
+# No commands may be executed (the list of permitted commands is empty)
+unknown commands
+# The public directory is /usr/spool/anonymous
+unknown pubdir /usr/spool/anonymous
+# Only files in the public directory may be sent; users may not download
+# files from the upload directory
+unknown remote-send ~ !~/upload
+# May only upload files into /usr/spool/anonymous/upload
+unknown remote-receive ~/upload
+@end example
+
+@node Leaf Example, Gateway Example, config File Examples, Configuration Examples
+@subsection Leaf Example
+
+@cindex leaf site
+@cindex sys file example (leaf)
+A relatively common simple case is a @dfn{leaf site}, a system which
+only calls or is called by a single remote site. Here is a typical
+@file{sys} file that might be used in such a case. For full details on
+what commands can appear in the @file{sys} file, see @ref{sys File}.
+
+This is the @file{sys} file that is used at @file{airs.com}. We use a
+single modem to dial out to @file{uunet}. This example shows how you
+can specify the port and dialer information directly in the @file{sys}
+file for simple cases. It also shows the use of the following:
+
+@table @code
+
+@item call-login
+Using @code{call-login} and @code{call-password} allows the default
+login chat script to be used. In this case, the login name is specified
+in the call-out login file (@pxref{Configuration File Names}).
+
+@item call-timegrade
+@file{uunet} is requested to not send us news during the daytime.
+
+@item chat-fail
+If the modem returns @samp{BUSY} or @samp{NO CARRIER} the call is
+immediately aborted.
+
+@item protocol-parameter
+Since @file{uunet} tends to be slow, the default timeout has been
+increased.
+
+@end table
+
+This @file{sys} file relies on certain defaults. It will allow
+@file{uunet} to queue up @samp{rmail} and @samp{rnews} commands. It
+will allow users to request files from @file{uunet} into the UUCP public
+directory. It will also allow @file{uunet} to request files from the
+UUCP public directory; in fact @file{uunet} never requests files, but
+for additional security we could add the line @samp{request false}.
+
+@example
+# The following information is for uunet
+system uunet
+
+# The login name and password are kept in the callout password file
+call-login *
+call-password *
+
+# We can send anything at any time.
+time any
+
+# During the day we only accept grade `Z' or above; at other times
+# (not mentioned here) we accept all grades. uunet queues up news
+# at grade `d', which is lower than `Z'.
+call-timegrade Z Wk0755-2305,Su1655-2305
+
+# The phone number.
+phone 7389449
+
+# uunet tends to be slow, so we increase the timeout
+chat-timeout 120
+
+# We are using a preconfigured Telebit 2500.
+port type modem
+port device /dev/ttyd0
+port speed 19200
+port carrier true
+port dialer chat "" ATZ\r\d\c OK ATDT\D CONNECT
+port dialer chat-fail BUSY
+port dialer chat-fail NO\sCARRIER
+port dialer complete \d\d+++\d\dATH\r\c
+port dialer abort \d\d+++\d\dATH\r\c
+
+# Increase the timeout and the number of retries.
+protocol-parameter g timeout 20
+protocol-parameter g retries 10
+@end example
+
+@node Gateway Example, , Leaf Example, Configuration Examples
+@subsection Gateway Example
+
+@cindex gateway
+@cindex sys file example (gateway)
+Many organizations have several local machines which are connected by
+UUCP, and a single machine which connects to the outside world. This
+single machine is often referred to as a @dfn{gateway} machine.
+
+For this example I will assume a fairly simple case. It should still
+provide a good general example. There are three machines, @file{elmer},
+@file{comton} and @file{bugs}. @file{elmer} is the gateway machine for
+which I will show the configuration file. @file{elmer} calls out to
+@file{uupsi}. As an additional complication, @file{uupsi} knows
+@file{elmer} as @file{airs}; this will show how a machine can have one
+name on an internal network but a different name to the external world.
+@file{elmer} has two modems. It also has an TCP/IP connection to
+@file{uupsi}, but since that is supposed to be reserved for interactive
+work (it is, perhaps, only a 9600 baud SLIP line) it will only use it if
+the modems are not available.
+
+A network this small would normally use a single @file{sys} file.
+However, for pedagogical purposes I will show two separate @file{sys}
+files, one for the local systems and one for @file{uupsi}. This is done
+with the @code{sysfile} command in the @file{config} file. Here is the
+@file{config} file.
+
+@example
+# This is config
+# The local sys file
+sysfile /usr/local/lib/uucp/sys.local
+# The remote sys file
+sysfile /usr/local/lib/uucp/sys.remote
+@end example
+
+Using the defaults feature of the @file{sys} file can greatly simplify
+the listing of local systems. Here is @file{sys.local}. Note that this
+assumes that the local systems are trusted; they are permited to request
+any world readable file and to write files into any world writable
+directory.
+
+@example
+# This is sys.local
+# Get the login name and password to use from the call-out file
+call-login *
+call-password *
+
+# The systems must use a particular login
+called-login Ulocal
+
+# Permit sending any world readable file
+local-send /
+remote-send /
+
+# Permit requesting into any world writable directory
+local-receive /
+remote-receive /
+
+# Call at any time
+time any
+
+# Use port1, then port2
+port port1
+
+alternate
+
+port port2
+
+# Now define the systems themselves. Because of all the defaults we
+# used, there is very little to specify for the systems themselves.
+
+system comton
+phone 5551212
+
+system bugs
+phone 5552424
+@end example
+
+The @file{sys.remote} file describes the @file{uupsi} connection. The
+@code{myname} command is used to change the UUCP name to @file{airs}
+when talking to @file{uupsi}.
+
+@example
+# This is sys.remote
+# Define uupsi
+system uupsi
+
+# The login name and password are in the call-out file
+call-login *
+call-password *
+
+# We can call out at any time
+time any
+
+# uupsi uses a special login name
+called-login Uuupsi
+
+# uuspi thinks of us as `airs'
+myname airs
+
+# The phone number
+phone 5554848
+
+# We use port2 first, then port1, then TCP
+
+port port2
+
+alternate
+
+port port1
+
+alternate
+
+# We don't bother to make a special entry in the port file for TCP, we
+# just describe the entire port right here. We use a special chat
+# script over TCP because the usual one confuses some TCP servers.
+port type TCP
+address uu.psi.com
+chat ogin: \L word: \P
+@end example
+
+The ports are defined in the file @file{port} (@pxref{port File}). For
+this example they are both connected to the same type of 2400 baud
+Hayes-compatible modem.
+
+@example
+# This is port
+
+port port1
+type modem
+device /dev/ttyd0
+dialer hayes
+speed 2400
+
+port port2
+type modem
+device /dev/ttyd1
+dialer hayes
+speed 2400
+@end example
+
+Dialers are described in the @file{dial} file (@pxref{dial File}).
+
+@example
+# This is dial
+
+dialer hayes
+
+# The chat script used to dial the phone. \D is the phone number.
+chat "" ATZ\r\d\c OK ATDT\D CONNECT
+
+# If we get BUSY or NO CARRIER we abort the dial immediately
+chat-fail BUSY
+chat-fail NO\sCARRIER
+
+# When the call is over we make sure we hangup the modem.
+complete \d\d+++\d\dATH\r\c
+abort \d\d+++\d\dATH\r\c
+@end example
+
+@node Time Strings, Chat Scripts, Configuration Examples, Configuration Files
+@section Time Strings
+@cindex time strings
+
+Several commands use time strings to specify a range of times. This
+section describes how to write time strings.
+
+A time string may be a list of simple time strings separated with a
+vertical bar @kbd{|} or a comma @kbd{,}.
+
+Each simple time string must begin with @samp{Su}, @samp{Mo}, @samp{Tu},
+@samp{We}, @samp{Th}, @samp{Fr}, or @samp{Sa}, or @samp{Wk} for any
+weekday, or @samp{Any} for any day.
+
+Following the day may be a range of hours separated with a hyphen using
+24 hour time. The range of hours may cross 0; for example
+@samp{2300-0700} means any time except 7 AM to 11 PM. If no time is
+given, calls may be made at any time on the specified day(s).
+
+The time string may also consist of the single word @samp{Never}, which
+does not match any time, or a single word with a name defined in a
+previous @code{timetable} command (@pxref{Miscellaneous (config)}).
+
+Here are a few sample time strings with an explanation of what they
+mean.
+
+@table @samp
+
+@item Wk2305-0855,Sa,Su2305-1655
+
+This means weekdays before 8:55 AM or after 11:05 PM, any time Saturday,
+or Sunday before 4:55 PM or after 11:05 PM. These are approximately the
+times during which night rates apply to phone calls in the U.S.A. Note
+that this time string uses, for example, @samp{2305} rather than
+@samp{2300}; this will ensure a cheap rate phone call even if the
+computer clock is running up to five minutes ahead of the real time.
+
+@item Wk0905-2255,Su1705-2255
+
+This means weekdays from 9:05 AM to 10:55 PM, or Sunday from 5:05 PM to
+10:55 PM. This is approximately the opposite of the previous example.
+
+@item Any
+
+This means any day. Since no time is specified, it means any time on
+any day.
+
+@end table
+
+@node Chat Scripts, config File, Time Strings, Configuration Files
+@section Chat Scripts
+@cindex chat scripts
+
+Chat scripts are used in several different places, such as dialing out
+on modems or logging in to remote systems. Chat scripts are made up of
+pairs of strings. The program waits until it sees the first string,
+known as the @dfn{expect} string, and then sends out the second string,
+the @dfn{send} string.
+
+Each chat script is defined using a set of commands. These commands
+always end in a string beginning with @code{chat}, but may start with
+different strings. For example, in the @file{sys} file there is one set
+of commands beginning with @code{chat} and another set beginning with
+@code{called-chat}. The prefixes are only used to disambiguate
+different types of chat scripts, and this section ignores the prefixes
+when describing the commands.
+
+@table @code
+
+@item chat @var{strings}
+@findex chat
+
+Specify a chat script. The arguments to the @code{chat} command are
+pairs of strings separated by whitespace. The first string of each pair
+is an expect string, the second is a send string. The program will wait
+for the expect string to appear; when it does, the program will send the
+send string. If the expect string does not appear within a certain
+number of seconds (as set by the @code{chat-timeout} command) the chat
+script fails and, typically, the call is aborted. If the final expect
+string is seen (and the optional final send string has been sent), the
+chat script is successful.
+
+An expect string may contain additional subsend and subexpect strings,
+separated by hyphens. If the expect string is not seen, the subsend
+string is sent and the chat script continues by waiting for the
+subexpect string. This means that a hyphen may not appear in an expect
+string; on an ASCII system, use @samp{\055} instead.
+
+An expect string may simply be @samp{""}, meaning to skip the expect
+phase. Otherwise, the following escape characters may appear in expect
+strings:
+
+@table @samp
+@item \b
+a backspace character
+@item \n
+a newline or line feed character
+@item \N
+a null character (for HDB compatibility)
+@item \r
+a carriage return character
+@item \s
+a space character
+@item \t
+a tab character
+@item \\
+a backslash character
+@item \@var{ddd}
+character @var{ddd}, where @var{ddd} are up to three octal digits
+@item \x@var{ddd}
+character @var{ddd}, where @var{ddd} are hexadecimal digits.
+@end table
+
+As in C, there may be up to three octal digits following a backslash,
+but the hexadecimal escape sequence continues as far as possible. To
+follow a hexadecimal escape sequence with a hex digit, interpose a send
+string of @samp{""}.
+
+A chat script expect string may also specify a timeout. This is done by
+using the escape sequence @samp{\W@var{seconds}}. This escape sequence
+may only appear at the very end of the expect string. It temporarily
+overrides the timeout set by @code{chat-timeout} (described below) only
+for the expect string to which it is attached.
+
+A send string may simply be @samp{""} to skip the send phase.
+Otherwise, all of the escape characters legal for expect strings may be
+used, and the following escape characters are also permitted:
+
+@table @samp
+@item EOT
+send an end of transmission character (@kbd{^D})
+@item BREAK
+send a break character (may not work on all systems)
+@item \c
+suppress trailing carriage return at end of send string
+@item \d
+delay sending for 1 or 2 seconds
+@item \e
+disable echo checking
+@item \E
+enable echo checking
+@item \K
+same as @samp{BREAK} (for HDB compatibility)
+@item \p
+pause sending for a fraction of a second
+@end table
+
+Some specific types of chat scripts also define additional escape
+sequences that may appear in the send string. For example, the login
+chat script defines @samp{\L} and @samp{\P} to send the login name and
+password, respectively.
+
+A carriage return will be sent at the end of each send string, unless
+the @kbd{\c} escape sequence appears in the string. Note that some UUCP
+packages use @kbd{\b} for break, but here it means backspace.
+
+Echo checking means that after writing each character the program will
+wait until the character is echoed. Echo checking must be turned on
+separately for each send string for which it is desired; it will be
+turned on for characters following @kbd{\E} and turned off for characters
+following @kbd{\e}.
+
+@item chat-timeout @var{number}
+@findex chat-timeout
+
+The number of seconds to wait for an expect string in the chat script
+before timing out and sending the next subsend or failing the chat
+script entirely. The default value is 10 for a login chat or 60 for
+any other type of chat.
+
+@item chat-fail @var{string}
+@findex chat-fail
+
+If the @var{string} is seen at any time during a chat script, the chat
+script is aborted. The string may not contain any whitespace
+characters; escape sequences must be used for them. Multiple
+@code{chat-fail} commands may appear in a single chat script. The
+default is to have none.
+
+This permits a chat script to be quickly aborted if an error string is
+seen. For example, a script used to dial out on a modem might use the
+command @samp{chat-fail BUSY} to stop the chat script immediately if the
+string @samp{BUSY} was seen.
+
+The @code{chat-fail} strings are considered in the order they are
+listed, so if one string is a suffix of another the longer one should be
+listed first. Of course, if one string is contained within another, the
+smaller string will always be found before the larger string could
+match.
+
+@item chat-seven-bit @var{boolean}
+@findex chat-seven-bit
+
+If the argument is true, all incoming characters are stripped to seven
+bits when being compared to the expect string. Otherwise all eight bits
+are used in the comparison. The default is true, because some Unix
+systems generate parity bits during the login prompt which must be
+ignored while running a chat script. This has no effect on any
+@code{chat-program}, which must ignore parity by itself if necessary.
+
+@item chat-program @var{strings}
+@findex chat-program
+
+Specify a program to run before executing the chat script. This program
+could run its own version of a chat script, or it could do whatever it
+wants. If both @code{chat-program} and @code{chat} are specified, the
+program is executed first followed by the chat script.
+
+The first argument to the @code{chat-program} command is the program
+name to run. The remaining arguments are passed to the program. The
+following escape sequences are recognized in the arguments:
+
+@table @kbd
+@item \Y
+port device name
+@item \S
+port speed
+@item \\
+backslash
+@end table
+
+Some specific uses of @code{chat-program} define additional escape
+sequences.
+
+Arguments other than escape sequences are passed exactly as they appear
+in the configuration file, except that sequences of whitespace are
+compressed to a single space character (this exception may be removed in
+the future).
+
+If the @code{chat-program} command is not used, no program is run.
+
+On Unix, the standard input and standard output of the program will be
+attached to the port in use. Anything the program writes to standard
+error will be written to the UUCP log file. No other file descriptors
+will be open. If the program does not exit with a status of 0, it will
+be assumed to have failed. This means that the dialing programs used by
+some versions of HDB may not be used directly, but you may be able to
+run them via the @code{dialHDB} program in the @file{contrib} directory.
+
+The program will be run as the @code{uucp} user, and the environment
+will be that of the process that started @code{uucico}, so care must be
+taken to maintain security.
+
+No search path is used to find the program; a full path name must be
+given. If the program is an executable shell script, it will be passed
+to @file{/bin/sh} even on systems which are unable to execute shell
+scripts.
+
+@end table
+
+Here is a simple example of a chat script that might be used to reset a
+Hayes compatible modem.
+
+@example
+chat "" ATZ OK-ATZ-OK
+@end example
+
+The first expect string is @samp{""}, so it is ignored. The chat script
+then sends @samp{ATZ}. If the modem responds with @samp{OK}, the chat
+script finishes. If 60 seconds (the default timeout) pass before seeing
+@samp{OK}, the chat script sends another @samp{ATZ}. If it then sees
+@samp{OK}, the chat script succeeds. Otherwise, the chat script fails.
+
+For a more complex chat script example, see @ref{Logging In}.
+
+@node config File, sys File, Chat Scripts, Configuration Files
+@section The Main Configuration File
+@cindex config file
+@cindex main configuration file
+@cindex configuration file (config)
+
+The main configuration file is named @file{config}.
+
+Since all the values that may be specified in the main configuration
+file also have defaults, there need not be a main configuration file at
+all.
+
+Each command in @file{config} may have a program prefix, which is a
+separate word appearing at the beginning of the line. The currently
+supported prefixes are @samp{uucp} and @samp{cu}. Any command prefixed
+by @samp{uucp} will not be read by the @code{cu} program. Any command
+prefixed by @samp{cu} will only be read by the @code{cu} program. For
+example, to use a list of systems known only to @code{cu}, list them in
+a separate file @file{@var{file}} and put @samp{cu sysfile
+@file{@var{file}}} in @file{config}.
+
+@menu
+* Miscellaneous (config):: Miscellaneous config file commands
+* Configuration File Names:: Using different configuration files
+* Log File Names:: Using different log files
+* Debugging Levels:: Debugging levels
+@end menu
+
+@node Miscellaneous (config), Configuration File Names, config File, config File
+@subsection Miscellaneous config File Commands
+
+@table @code
+
+@item nodename @var{string}
+@findex nodename
+@itemx hostname @var{string}
+@findex hostname
+@itemx uuname @var{string}
+@findex uuname
+@cindex UUCP system name
+@cindex system name
+
+These keywords are equivalent. They specify the UUCP name of the local
+host. If there is no configuration file, an appropriate system function
+will be used to get the host name, if possible.
+
+@item spool @var{string}
+@findex spool
+@cindex spool directory
+@cindex /usr/spool/uucp
+
+Specify the spool directory. The default is from @file{policy.h}. This
+is where UUCP files are queued. Status files and various sorts of
+temporary files are also stored in this directory and subdirectories of
+it.
+
+@item pubdir @var{string}
+@findex pubdir in config file
+@cindex public directory
+@cindex uucppublic
+@cindex /usr/spool/uucppublic
+
+Specify the public directory. The default is from @file{policy.h}.
+When a file is named using a leading @kbd{~/}, it is taken from or to
+the public directory. Each system may use a separate public directory
+by using the @code{pubdir} command in the system configuration file; see
+@ref{Miscellaneous (sys)}.
+
+@item lockdir @var{string}
+@findex lockdir
+@cindex lock directory
+
+Specify the directory to place lock files in. The default is from
+@file{policy.h}; see the information in that file. Normally the lock
+directory should be set correctly in @file{policy.h}, and not changed
+here. However, changing the lock directory is sometimes useful for
+testing purposes.
+
+@item unknown @var{string} @dots{}
+@findex unknown
+@cindex unknown systems
+
+The @var{string} and subsequent arguments are treated as though they
+appeared in the system file (@pxref{sys File}). They are used to apply
+to any unknown systems that may call in, probably to set file transfer
+permissions and the like. If the @code{unknown} command is not used,
+unknown systems are not permitted to call in.
+
+@item max-uuxqts @var{number}
+@findex max-uuxqts
+
+Specify the maximum number of @code{uuxqt} processes which may run at
+the same time. Having several @code{uuxqt} processes running at once
+can significantly slow down a system, but since @code{uuxqt} is
+automatically started by @code{uucico}, it can happen quite easily. The
+default for @code{max-uuxqts} is 0, which means that there is no limit.
+If HDB configuration files are being read and the code was compiled
+without @code{HAVE_TAYLOR_CONFIG}, then if the file @file{Maxuuxqts} in
+the configuration directory contains a readable number it will be used as
+the value for @code{max-uuxqts}.
+
+@item run-uuxqt @var{string} or @var{number}
+@findex run-uuxqt
+
+Specify when @code{uuxqt} should be run by @code{uucico}. This may be a
+positive number, in which case @code{uucico} will start a @code{uuxqt}
+process whenever it receives the given number of execution files from
+the remote system, and, if necessary, at the end of the call. The
+argument may also be one of the strings @samp{once}, @samp{percall}, or
+@samp{never}. The string @samp{once} means that @code{uucico} will
+start @code{uuxqt} once at the end of execution. The string
+@samp{percall} means that @code{uucico} will start @code{uuxqt} once per
+call that it makes (this is only different from @code{once} when
+@code{uucico} is invoked in a way that causes it to make multiple calls,
+such as when the @samp{-r1} argument is used without the @samp{-s}
+argument). The string @samp{never} means that @code{uucico} will never
+start @code{uuxqt}, in which case @code{uuxqt} should be periodically
+run via some other mechanism. The default depends upon which type of
+configuration files are being used; if @code{HAVE_TAYLOR_CONFIG} is used
+the default is @samp{once}, otherwise if @code{HAVE_HDB_CONFIG} is used
+the default is @samp{percall}, and otherwise, for @code{HAVE_V2_CONFIG},
+the default is @samp{10}.
+
+@item timetable @var{string} @var{string}
+@findex timetable
+
+The @code{timetable} defines a timetable that may be used in
+subsequently appearing time strings; @ref{Time Strings}. The first
+string names the timetable entry; the second is a time string.
+
+The following @code{timetable} commands are predefined. The NonPeak
+timetable is included for compatibility. It originally described the
+offpeak hours of Tymnet and Telenet, but both have since changed their
+schedules.
+
+@example
+timetable Evening Wk1705-0755,Sa,Su
+timetable Night Wk2305-0755,Sa,Su2305-1655
+timetable NonPeak Wk1805-0655,Sa,Su
+@end example
+
+If this command does not appear, then obviously no additional timetables
+will be defined.
+
+@item v2-files @var{boolean}
+@findex v2-files
+
+If the code was compiled to be able to read V2 configuration files, a
+false argument to this command will prevent them from being read.
+This can be useful while testing. The default is true.
+
+@item hdb-files @var{boolean}
+@findex hdb-files
+
+If the code was compiled to be able to read HDB configuration files, a
+false argument to this command will prevent them from being read.
+This can be useful while testing. The default is true.
+
+@end table
+
+@node Configuration File Names, Log File Names, Miscellaneous (config), config File
+@subsection Configuration File Names
+
+@table @code
+
+@item sysfile @var{strings}
+@findex sysfile
+
+Specify the system file(s). The default is the file @file{sys} in the
+directory @var{newconfigdir}. These files hold information about other
+systems with which this system communicates; see @ref{sys File}.
+Multiple system files may be given on the line, and the @code{sysfile}
+command may be repeated; each system file has its own set of defaults.
+
+@item portfile @var{strings}
+@findex portfile
+
+Specify the port file(s). The default is the file @file{port} in the
+directory @var{newconfigdir}. These files describe ports which are used
+to call other systems and accept calls from other systems; see @ref{port
+File}. No port files need be named at all. Multiple port files may be
+given on the line, and the @code{portfile} command may be repeated.
+
+@item dialfile @var{strings}
+@findex dialfile
+
+Specify the dial file(s). The default is the file @file{dial} in the
+directory @var{newconfigdir}. These files describe dialing devices
+(modems); @xref{dial File}. No dial files need be named at all.
+Multiple dial files may be given on the line, and the @code{dialfile}
+command may be repeated.
+
+@item dialcodefile @var{strings}
+@findex dialcodefile
+@cindex configuration file (dialcode)
+@cindex dialcode file
+@cindex dialcode configuration file
+
+Specify the dialcode file(s). The default is the file @file{dialcode}
+in the directory @var{newconfigdir}. These files specify dialcodes that
+may be used when sending phone numbers to a modem. This permits using
+the same set of phone numbers in different area-codes or with different
+phone systems, by using dialcodes to specify the calling sequence. When
+a phone number goes through dialcode translation, the leading alphabetic
+characters are stripped off. The dialcode files are read line by line,
+just like any other configuration file, and when a line is found whose
+first word is the same as the leading characters from the phone number,
+the second word on the line (which would normally consist of numbers)
+replaces the dialcode in the phone number. No dialcode file need be
+used. Multiple dialcode files may be specified on the line, and the
+@code{dialcodefile} command may be repeated; all the dialcode files will
+be read in turn until a dialcode is located.
+
+@item callfile @var{strings}
+@findex callfile
+@cindex call out file
+@cindex call configuration file
+@cindex call out login name
+@cindex call out password
+@cindex configuration file (call)
+
+Specify the call out login name and password file(s). The default is
+the file @file{call} in the directory @var{newconfigdir}. If the call
+out login name or password for a system are given as @kbd{*}
+(@pxref{Logging In}), these files are read to get the real login name or
+password. Each line in the file(s) has three words: the system name,
+the login name, and the password. The login name and password may
+contain escape sequences like those in a chat script expect string
+(@pxref{Chat Scripts}). This file is only used when placing calls to
+remote systems; the password file described under @code{passwdfile}
+below is used for incoming calls. The intention of the call out file is
+to permit the system file to be publically readable; the call out files
+must obviously be kept secure. These files need not be used. Multiple
+call out files may be specified on the line, and the @code{callfile}
+command may be repeated; all the files will be read in turn until the
+system is found.
+
+@item passwdfile @var{strings}
+@findex passwdfile
+@cindex passwd file
+@cindex passwd configuration file
+@cindex configuration file (passwd)
+@cindex call in login name
+@cindex call in password
+
+Specify the password file(s) to use for login names when @code{uucico}
+is doing its own login prompting, which it does when given the
+@samp{-e}, @samp{-l} or @samp{-w} switches. The default is the file
+@file{passwd} in the directory @var{newconfigdir}. Each line in the
+file(s) has two words: the login name and the password (e.g. @code{Ufoo
+foopas}). They may contain escape sequences like those in a chat script
+expect string (@pxref{Chat Scripts}). The login name is accepted before
+the system name is known, so these are independent of which system is
+calling in; a particular login may be required for a system by using the
+@code{called-login} command in the system file (@pxref{Accepting a
+Call}). These password files are optional, although one must exist if
+@code{uucico} is to present its own login prompts.
+
+As a special exception, a colon may be used to separate the login name
+from the password, and a colon may be used to terminate the password.
+This means that the login name and password may not contain a colon.
+This feature, in conjunction with the @code{HAVE_ENCRYPTED_PASSWORDS}
+macro in @file{policy.h}, permits using a standard Unix
+@file{/etc/passwd} as a UUCP password file, providing the same set of
+login names and passwords for both @code{getty} and @code{uucico}.
+
+Multiple password files may be specified on the line, and the
+@code{passwdfile} command may be repeated; all the files will be read in
+turn until the login name is found.
+
+@end table
+
+@node Log File Names, Debugging Levels, Configuration File Names, config File
+@subsection Log File Names
+
+@table @code
+
+@item logfile @var{string}
+@findex logfile
+@cindex log file
+
+Name the log file. The default is from @file{policy.h}. Logging
+information is written to this file. If @code{HAVE_HDB_LOGGING} is
+defined in @file{policy.h}, then by default a separate log file is used
+for each system. Using this command to name a log file will cause all
+the systems to use it.
+
+@item statfile @var{string}
+@findex statfile
+@cindex statistics file
+
+Name the statistics file. The default is from @file{policy.h}.
+Statistical information about file transfers is written to this file.
+
+@item debugfile @var{string}
+@findex debugfile
+@cindex debugging file
+
+Name the file to which all debugging information is written. The
+default is from @file{policy.h}. This command is only effective if the
+code has been compiled to include debugging (this is controlled by the
+@code{DEBUG} macro in @file{policy.h}). If debugging is on, messages
+written to the log file are also written to the debugging file to make
+it easier to keep the order of actions straight. The debugging file is
+different from the log file because information such as passwords can
+appear in it, so it must be not be publically readable.
+
+@end table
+
+@node Debugging Levels, , Log File Names, config File
+@subsection Debugging Levels
+
+@table @code
+
+@item debug @var{string} @dots{}
+@findex debug in config file
+
+Set the debugging level. This command is only effective if the code has
+been compiled to include debugging. The default is to have no
+debugging. The arguments are strings which name the types of debugging
+to be turned on. The following types of debugging are defined:
+
+@table @samp
+@item abnormal
+Output debugging messages for abnormal situations, such as recoverable errors.
+@item chat
+Output debugging messages for chat scripts.
+@item handshake
+Output debugging messages for the initial handshake.
+@item uucp-proto
+Output debugging messages for the UUCP session protocol.
+@item proto
+Output debugging messages for the individual link protocols.
+@item port
+Output debugging messages for actions on the communication port.
+@item config
+Output debugging messages while reading the configuration files.
+@item spooldir
+Output debugging messages for actions in the spool directory.
+@item execute
+Output debugging messages whenever another program is executed.
+@item incoming
+List all incoming data in the debugging file.
+@item outgoing
+List all outgoing data in the debugging file.
+@item all
+All of the above.
+@end table
+
+The debugging level may also be specified as a number. A 1 will set
+@samp{chat} debugging, a 2 will set both @samp{chat} and
+@samp{handshake} debugging, and so on down the possibilities. Currently
+an 11 will turn on all possible debugging, since there are 11 types of
+debugging messages listed above; more debugging types may be added in
+the future. The @code{debug} command may be used several times in the
+configuration file; every debugging type named will be turned on. When
+running any of the programs, the @samp{-x} switch (actually, for
+@code{uulog} it's the @samp{-X} switch) may be used to turn on
+debugging. The argument to the @samp{-x} switch is one of the strings
+listed above, or a number as described above, or a comma separated list
+of strings (e.g. @samp{-x chat,handshake}). The @samp{-x} switch may
+also appear several times on the command line, in which case all named
+debugging types will be turned on. The @samp{-x} debugging is in
+addition to any debugging specified by the @code{debug} command; there
+is no way to cancel debugging information. The debugging level may also
+be set specifically for calls to or from a specific system with the
+@code{debug} command in the system file (@pxref{Miscellaneous (sys)}).
+
+The debugging messages are somewhat idiosyncratic; it may be necessary
+to refer to the source code for additional information in some cases.
+
+@end table
+
+@node sys File, port File, config File, Configuration Files
+@section The System Configuration File
+@cindex sys file
+@cindex system configuration file
+@cindex configuration file (sys)
+
+By default there is a single system configuration, named @file{sys} in
+the directory @var{newconfigdir}. This may be overridden by the
+@code{sysfile} command in the main configuration file; see
+@ref{Configuration File Names}.
+
+These files describe all remote systems known to the UUCP package.
+
+@menu
+* Defaults and Alternates:: Using defaults and alternates
+* Naming the System:: Naming the system
+* Calling Out:: Calling out
+* Accepting a Call:: Accepting a call
+* Protocol Selection:: Protocol selection
+* File Transfer Control:: File transfer control
+* Miscellaneous (sys):: Miscellaneous sys file commands
+* Default sys File Values:: Default values
+@end menu
+
+@node Defaults and Alternates, Naming the System, sys File, sys File
+@subsection Defaults and Alternates
+
+The first set of commands in the file, up to the first @code{system}
+command, specify defaults to be used for all systems in that file. Each
+@file{sys} file uses a different set of defaults.
+
+Subsequently, each set of commands from @code{system} up to the next
+@code{system} command describe a particular system. Default values may
+be overridden for specific systems.
+
+Each system may then have a series of alternate choices to use when
+calling out or calling in. The first set of commands for a particular
+system, up to the first @code{alternate} command, provide the first
+choice. Subsequently, each set of commands from @code{alternate} up to
+the next @code{alternate} command describe an alternate choice for
+calling out or calling in.
+
+When a system is called, the commands before the first @code{alternate}
+are used to select a phone number, port, and so forth; if the call fails
+for some reason, the commands between the first @code{alternate} and the
+second are used, and so forth. Well, not quite. Actually, each
+succeeding alternate will only be used if it is different in some
+relevant way (different phone number, different chat script, etc.). If
+you want to force the same alternate to be used again (to retry a phone
+call more than once, for example), enter the phone number (or any other
+relevant field) again to make it appear different.
+
+The alternates can also be used to give different permissions to an
+incoming call based on the login name. This will only be done if the
+first set of commands, before the first @code{alternate} command, uses
+the @code{called-login} command. The list of alternates will be
+searched, and the first alternate with a matching @code{called-login}
+command will be used. If no alternates match, the call will be
+rejected.
+
+The @code{alternate} command may also be used in the file-wide defaults
+(the set of commands before the first @code{system} command). This
+might be used to specify a list of ports which are available for all
+systems (for an example of this, see @ref{Gateway Example}) or to
+specify permissions based on the login name used by the remote system
+when it calls in. The first alternate for each system will default to
+the first alternate for the file-wide defaults (as modified by the
+commands used before the first @code{alternate} command for this
+system), the second alternate for each system to the second alternate
+for the file-wide defaults (as modified the same way), and so forth. If
+a system specifies more alternates than the file-wide defaults, the
+trailing ones will default to the last file-wide default alternate. If
+a system specifies fewer alternates than the file-wide defaults, the
+trailing file-wide default alternates will be used unmodified. The
+@code{default-alternates} command may be used to modify this behaviour.
+
+This can all get rather confusing, although it's easier to use than to
+describe concisely; the @code{uuchk} program may be used to ensure that
+you are getting what you want.
+
+@node Naming the System, Calling Out, Defaults and Alternates, sys File
+@subsection Naming the System
+
+@table @code
+
+@item system @var{string}
+@findex system
+
+Specify the remote system name. Subsequent commands up to the next
+@code{system} command refer to this system.
+
+@item alternate [@var{string}]
+@findex alternate
+
+Start an alternate set of commands (@pxref{Defaults and Alternates}).
+An optional argument may be used to name the alternate. This name will
+be put in the log file if the alternate is used to call the system.
+There is no way to name the first alternate (the commands before the
+first @code{alternate} command).
+
+@item default-alternates @var{boolean}
+@findex default-alternates
+
+If the argument is false, any remaining default alternates (from the
+defaults specified at the top of the current system file) will not be
+used. The default is true.
+
+@item alias @var{string}
+@findex alias
+
+Specify an alias for the current system. The alias may be used by local
+@code{uucp} and @code{uux} commands, as well as by the remote system
+(which can be convenient if a remote system changes its name). The
+default is to have no aliases.
+
+@item myname @var{string}
+@findex myname
+
+Specifies a different system name to use when calling the remote system.
+Also, if @code{called-login} is used and is not @samp{ANY}, then, when a
+system logs in with that login name, @var{string} is used as the local
+system name. Because the local system name must be determined before
+the remote system has identified itself, using @code{myname} and
+@code{called-login} together for any system will set the local name for
+that login; this means that each locally used system name must have a
+unique login name associated with it. This allows a system to have
+different names for an external and an internal network. The default is
+to not use a special local name.
+
+@end table
+
+@node Calling Out, Accepting a Call, Naming the System, sys File
+@subsection Calling Out
+
+This section describes commands used when placing a call to another
+system.
+
+@menu
+* When to Call:: When to call
+* Placing the Call:: Placing the call
+* Logging In:: Logging in
+@end menu
+
+@node When to Call, Placing the Call, Calling Out, Calling Out
+@subsubsection When to Call
+
+@table @code
+
+@item time @var{string} [@var{number}]
+@findex time
+
+Specify when the system may be called. The first argument is a time
+string; see @ref{Time Strings}. The optional second argument specifies
+a retry time in minutes. If a call made during a time that matches the
+time string fails, no more calls are permitted until the retry time has
+passed. By default an exponentially increasing retry time is used:
+after each failure the next retry period is longer. A retry time
+specified in the @code{time} command is always a fixed amount of time.
+
+The @code{time} command may appear multiple times in a single alternate,
+in which case if any time string matches the system may be called. When
+the @code{time} command is used for a particular system, any @code{time}
+or @code{timegrade} commands that appeared in the system defaults are
+ignored.
+
+The default time string is @samp{Never}.
+
+@item timegrade @var{character} @var{string} [@var{number}]
+@findex timegrade
+
+The @var{character} specifies a grade. It must be a single letter or
+digit. The @var{string} is a time string (@pxref{Time Strings}). All
+jobs of grade @var{character} or higher (where @kbd{0} > @kbd{9} >
+@kbd{A} > @kbd{Z} > @kbd{a} > @kbd{z}) may be run at the specified time.
+An ordinary @code{time} command is equivalent to using @code{timegrade}
+with a grade of @kbd{z}, permitting all jobs. If there are no jobs of a
+sufficiently high grade according to the time string, the system will
+not be called. Giving the @samp{-s} switch to @code{uucico} to force it
+to call a system causes it to assume there is a job of grade @kbd{0}
+waiting to be run.
+
+The optional third argument specifies a retry time in minutes. See the
+@code{time} command, above, for more details.
+
+Note that the @code{timegrade} command serves two purposes: 1) if there
+is no job of sufficiently high grade the system will not be called, and
+2) if the system is called anyway (because the @samp{-s} switch was
+given to @code{uucico}) only jobs of sufficiently high grade will be
+transferred. However, if the other system calls in, the
+@code{timegrade} commands are ignored, and jobs of any grade may be
+transferred (but see @code{call-timegrade} below). Also, the
+@code{timegrade} command will not prevent the other system from
+transferring any job it chooses, regardless of who placed the call.
+
+The @code{timegrade} command may appear multiple times without using
+@code{alternate}. When the @code{timegrade} command is used for a
+particular system, any @code{time} or @code{timegrade} commands that
+appeared in the system defaults are ignored.
+
+If this command does not appear, there are no restrictions on what grade
+of work may be done at what time.
+
+@item max-retries @var{number}
+@findex max-retries
+
+Gives the maximum number of times this system may be retried. If this
+many calls to the system fail, it will be called at most once a day
+whatever the retry time is. The default is 26.
+
+@item success-wait @var{number}
+
+A retry time, in seconds, which applies after a successful call. This
+can be used to put a limit on how frequently the system is called. For
+example, an argument of 1800 means that the system will not be called
+more than once every half hour. The default is 0, which means that
+there is no limit.
+
+@item call-timegrade @var{character} @var{string}
+@findex call-timegrade
+
+The @var{character} is a single character @kbd{A} to @kbd{Z}, @kbd{a} to
+@kbd{z}, or @kbd{0} to @kbd{9} and specifies a grade. The @var{string}
+is a time string as described under the @code{time} command. If a call
+is placed to the other system during a time which matches the time
+string, the remote system will be requested to only run jobs of grade
+@var{character} or higher. Unfortunately, there is no way to guarantee
+that the other system will obey the request (this UUCP package will, but
+there are others which will not); moreover job grades are historically
+somewhat arbitrary, so specifying a grade will only be meaningful if the
+other system cooperates in assigning grades. This grade restriction
+only applies when the other system is called, not when the other system
+calls in.
+
+The @code{call-timegrade} command may appear multiple times without
+using @code{alternate}. If this command does not appear, or if none of
+the time strings match, the remote system will be allowed to send
+whatever grades of work it chooses.
+
+@end table
+
+@node Placing the Call, Logging In, When to Call, Calling Out
+@subsubsection Placing the Call
+
+@table @code
+
+@itemx speed @var{number}
+@findex speed in sys file
+@item baud @var{number}
+@findex baud in sys file
+
+Specify the speed (the term @dfn{baud} is technically incorrect, but
+widely understood) at which to call the system. This will try all
+available ports with that speed until an unlocked port is found. The
+ports are defined in the port file. If both @code{speed} and
+@code{port} commands appear, both are used when selecting a port. To
+allow calls at more than one speed, the @code{alternate} command must be
+used (@pxref{Defaults and Alternates}). If this command does not
+appear, there is no default; the speed may be specified in the port
+file, but if it is not then the natural speed of the port will be used
+(whatever that means on the system). Specifying an explicit speed of 0
+will request the natural speed of the port (whatever the system sets it
+to), overriding any default speed from the defaults at the top of the
+file.
+
+@item port @var{string}
+@findex port in sys file
+
+Name a particular port or type of port to use when calling the system.
+The information for this port is obtained from the port file. If this
+command does not appear, there is no default; a port must somehow be
+specified in order to call out (it may be specified implicitly using the
+@code{speed} command or explicitly using the next version of
+@code{port}). There may be many ports with the same name; each will be
+tried in turn until an unlocked one is found which matches the desired
+speed.
+
+@item port @var{string} @dots{}
+
+If more than one string follows the @code{port} command, the strings are
+treated as a command that might appear in the port file (@pxref{port
+File}). If a port is named (by using a single string following
+@code{port}) these commands are ignored; their purpose is to permit
+defining the port completely in the system file rather than always
+requiring entries in two different files. In order to call out, a port
+must be specified using some version of the @code{port} command, or by
+using the @code{speed} command to select ports from the port file.
+
+@item phone @var{string}
+@findex phone
+@itemx address @var{string}
+@findex address
+
+Give a phone number to call (when using a modem port) or a remote host
+to contact (when using a TCP or TLI port). The commands @code{phone}
+and @code{address} are equivalent; the duplication is intended to
+provide a mnemonic choice depending on the type of port in use.
+
+When used with a modem port, an @kbd{=} character in the phone number
+means to wait for a secondary dial tone (although only some modems
+support this); a @kbd{-} character means to pause while dialing for 1
+second (again, only some modems support this). If the system has more
+than one phone number, each one must appear in a different alternate.
+The @code{phone} command must appear in order to call out on a modem;
+there is no default.
+
+When used with a TCP port, the string names the host to contact. It may
+be a domain name or a numeric Internet address. If no address is
+specified, the system name is used.
+
+When used with a TLI port, the string is treated as though it were an
+expect string in a chat script, allowing the use of escape characters
+(@pxref{Chat Scripts}). The @code{dialer-sequence} command in the port
+file may override this address (@pxref{port File}).
+
+When used with a port that not a modem or TCP or TLI, this command is
+ignored.
+
+@end table
+
+@node Logging In, , Placing the Call, Calling Out
+@subsubsection Logging In
+@table @code
+
+@item chat @var{strings}
+@findex chat in sys file
+@item chat-timeout @var{number}
+@findex chat-timeout in sys file
+@item chat-fail @var{string}
+@findex chat-fail in sys file
+@item chat-seven-bit @var{boolean}
+@findex chat-seven-bit in sys file
+@item chat-program @var{strings}
+@findex chat-program in sys file
+
+These commands describe a chat script to use when logging on to a remote
+system. Chat scripts are explained in @ref{Chat Scripts}.
+
+Two additional escape sequences may be used in send strings.
+
+@table @samp
+@item \L
+Send the login name, as set by the @code{call-login} command.
+@item \P
+Send the password, as set by the @code{call-password} command.
+@end table
+
+Three additional escape sequences may be used with the
+@code{chat-program} command. These are @samp{\L} and @samp{\P}, which
+become the login name and password, respectively, and @samp{\Z}, which
+becomes the name of the system of being called.
+
+The default chat script is:
+
+@example
+chat "" \r\c ogin:-BREAK-ogin:-BREAK-ogin: \L word: \P
+@end example
+
+This will send a carriage return (the @kbd{\c} suppresses the additional
+trailing carriage return that would otherwise be sent) and waits for the
+string @samp{ogin:} (which would be the last part of the @samp{login:}
+prompt supplied by a Unix system). If it doesn't see @samp{ogin:}, it
+sends a break and waits for @samp{ogin:} again. If it still doesn't see
+@samp{ogin:}, it sends another break and waits for @samp{ogin:} again.
+If it still doesn't see @samp{ogin:}, the chat script aborts and hangs
+up the phone. If it does see @samp{ogin:} at some point, it sends the
+login name (as specified by the @code{call-login} command) followed by a
+carriage return (since all send strings are followed by a carriage
+return unless @kbd{\c} is used) and waits for the string @samp{word:}
+(which would be the last part of the @samp{Password:} prompt supplied by
+a Unix system). If it sees @samp{word:}, it sends the password and a
+carriage return, completing the chat script. The program will then
+enter the handshake phase of the UUCP protocol.
+
+This chat script will work for most systems, so you will only be
+required to use the @code{call-login} and @code{call-password} commands.
+In fact, in the file-wide defaults you could set defaults of
+@samp{call-login *} and @samp{call-password *}; you would then just have
+to make an entry for each system in the call-out login file.
+
+Some systems seem to flush input after the @samp{login:} prompt, so they
+may need a version of this chat script with a @kbd{\d} before the
+@kbd{\L}. When using UUCP over TCP, some servers will not be handle the
+initial carriage return sent by this chat script; in this case you may
+have to specify the simple chat script @samp{ogin: \L word: \P}.
+
+@item call-login @var{string}
+@findex call-login
+
+Specify the login name to send with @kbd{\L} in the chat script. If the
+string is @samp{*} (e.g. @samp{call-login *}) the login name will be
+fetched from the call out login name and password file
+(@pxref{Configuration File Names}). The string may contain escape
+sequences as though it were an expect string in a chat script
+(@pxref{Chat Scripts}). There is no default.
+
+@item call-password @var{string}
+@findex call-password
+
+Specify the password to send with @kbd{\P} in the chat script. If the
+string is @samp{*} (e.g. @samp{call-password *}) the password will be
+fetched from the call-out login name and password file
+(@pxref{Configuration File Names}). The string may contain escape
+sequences as though it were an expect string in a chat script
+(@pxref{Chat Scripts}). There is no default.
+
+@end table
+
+@node Accepting a Call, Protocol Selection, Calling Out, sys File
+@subsection Accepting a Call
+
+@table @code
+
+@item called-login @var{strings}
+@findex called-login
+
+The first @var{string} specifies the login name that the system must use
+when calling in. If it is @samp{ANY} (e.g. @samp{called-login ANY}) any
+login name may be used; this is useful to override a file-wide default
+and to indicate that future alternates may have different login names.
+Case is significant. The default value is @samp{ANY}.
+
+Different alternates (@pxref{Defaults and Alternates}) may use different
+@code{called-login} commands, in which case the login name will be used
+to select which alternate is in effect; this will only work if the first
+alternate (before the first @code{alternate} command) uses the
+@code{called-login} command.
+
+Additional strings may be specified after the login name; they are a
+list of which systems are permitted to use this login name. If this
+feature is used, then normally the login name will only be given in a
+single @code{called-login} command. Only systems which appear on the
+list, or which use an explicit @code{called-login} command, will be
+permitted to use that login name. If the same login name is used more
+than once with a list of systems, all the lists are concatenated
+together. This feature permits you to restrict a login name to a
+particular set of systems without requiring you to use the
+@code{called-login} command for every single system; you can achieve a
+similar effect by using a different system file for each permitted login
+name with an appropriate @code{called-login} command in the file-wide
+defaults.
+
+@item callback @var{boolean}
+@findex callback
+
+If @var{boolean} is true, then when the remote system calls
+@code{uucico} will hang up the connection and prepare to call it back.
+The default is false.
+
+@item called-chat @var{strings}
+@findex called-chat
+@item called-chat-timeout @var{number}
+@findex called-chat-timeout
+@item called-chat-fail @var{string}
+@findex called-chat-fail
+@item called-chat-seven-bit @var{boolean}
+@findex called-chat-seven-bit
+@item called-chat-program @var{strings}
+@findex called-chat-program
+
+These commands may be used to define a chat script (@pxref{Chat
+Scripts}) that is run whenever the local system is called by the system
+being defined. The chat script defined by the @code{chat} command
+(@pxref{Logging In}), on the other hand, is used when the remote system
+is called. This called chat script might be used to set special modem
+parameters that are appropriate to a particular system. It is run after
+protocol negotiation is complete, but before the protocol has been
+started. See @ref{Logging In} for additional escape sequence which may
+be used besides those defined for all chat scripts. There is no default
+called chat script. If the called chat script fails, the incoming call
+will be aborted.
+
+@end table
+
+@node Protocol Selection, File Transfer Control, Accepting a Call, sys File
+@subsection Protocol Selection
+
+@table @code
+
+@item protocol @var{string}
+@findex protocol in sys file
+
+Specifies which protocols to use for the other system, and in which
+order to use them. This would not normally be used. For example,
+@samp{protocol tfg}.
+
+The default depends on the characteristics of the port and the dialer,
+as specified by the @code{seven-bit} and @code{reliable} commands. If
+neither the port nor the dialer use either of these commands, the
+default is to assume an eight-bit reliable connection. The commands
+@samp{seven-bit true} or @samp{reliable false} might be used in either
+the port or the dialer to change this. Each protocol has particular
+requirements that must be met before it will be considered during
+negotiation with the remote side.
+
+The @samp{t} and @samp{e} protocols are intended for use over TCP or
+some other communication path with end to end reliability, as they do no
+checking of the data at all. They will only be considered on a TCP port
+which is both reliable and eight bit.
+
+The @samp{i} protocol is a bidirectional protocol. It requires an
+eight-bit connection. It will run over a half-duplex link, such as
+Telebit modems in PEP mode, but for efficient use of such a connection
+you must use the @code{half-duplex} command (@pxref{port File}).
+
+The @samp{g} protocol is robust, but requires an eight-bit connection.
+
+The @samp{G} protocol is the System V Release 4 version of the @samp{g}
+protocol.
+
+The @samp{a} protocol is a Zmodem like protocol, contributed by Doug
+Evans. It requires an eight-bit connection, but unlike the @samp{g} or
+@samp{i} protocol it will work if certain control characters may not be
+transmitted.
+
+The @samp{j} protocol is a variant of the @samp{i} protocol which can
+avoid certain control characters. The set of characters it avoids can
+be set by a parameter. While it technically does not require an eight
+bit connection (it could be configured to avoid all characters with the
+high bit set) it would be very inefficient to use it over one. It is
+useful over a eight-bit connection that will not transmit certain
+control characters.
+
+The @samp{f} protocol is intended for use with X.25 connections; it
+checksums each file as a whole, so any error causes the entire file to
+be retransmitted. It requires a reliable connection, but only uses
+seven-bit transmissions. It is a streaming protocol, so, while it can
+be used on a serial port, the port must be completely reliable and flow
+controlled; many aren't.
+
+The @samp{v} protocol is the @samp{g} protocol as used by the DOS
+program UUPC/Extended. It is provided only so that UUPC/Extended users
+can use it; there is no particular reason to select it.
+
+The protocols will be considered in the order shown above. This means
+that if neither the @code{seven-bit} nor the @code{reliable} command are
+used, the @samp{t} protocol will be used over a TCP connection and the
+@samp{i} protocol will be used over any other type of connection
+(subject, of course, to what is supported by the remote system; it may
+be assumed that all systems support the @samp{g} protocol).
+
+Note that currently specifying both @samp{seven-bit true} and
+@samp{reliable false} will not match any protocol. If this occurs
+through a combination of port and dialer specifications, you will have
+to use the @code{protocol} command for the system or no protocol will be
+selected at all (the only reasonable choice would be @samp{protocol f}).
+
+A protocol list may also be specified for a port (@pxref{port File}),
+but if there is a list for the system the list for the port is ignored.
+
+@item protocol-parameter @var{character} @var{string} @dots{}
+@findex protocol-parameter in sys file
+
+@var{character} is a single character specifying a protocol. The
+remaining strings are a command specific to that protocol which will be
+executed if that protocol is used. A typical command is something like
+@samp{window 7}. The particular commands are protocol specific.
+
+The @samp{i} protocol supports the following commands, all of which take
+numeric arguments:
+
+@table @code
+@item window
+The window size to request the remote system to use. This must be
+between 1 and 16 inclusive. The default is 16.
+@item packet-size
+The packet size to request the remote system to use. This must be
+between 1 and 4095 inclusive. The default is 1024.
+@item remote-packet-size
+If this is between 1 and 4095 inclusive, the packet size requested by
+the remote system is ignored and this is used instead. The default is
+0, which means that the remote system's request is honored.
+@item sync-timeout
+The length of time, in seconds, to wait for a SYNC packet from the remote
+system. SYNC packets are exchanged when the protocol is started. The
+default is 10.
+@item sync-retries
+The number of times to retry sending a SYNC packet before giving up.
+The default is 6.
+@item timeout
+The length of time, in seconds, to wait for an incoming packet before
+sending a negative acknowledgement. The default is 10.
+@item retries
+The number of times to retry sending a packet or a negative
+acknowledgement before giving up and closing the connection. The
+default is 6.
+@item errors
+The maximum number of errors to permit before closing the connection.
+The default is 100.
+@item error-decay
+The rate at which to ignore errors. Each time this many packets are
+received, the error count is decreased by one, so that a long connection
+with an occasional error will not exceed the limit set by @code{errors}.
+The default is 10.
+@item ack-frequency
+The number of packets to receive before sending an acknowledgement. The
+default is half the requested window size, which should provide good
+performance in most cases.
+@end table
+
+The @samp{g}, @samp{G} and @samp{v} protocols support the following
+commands, all of which take numeric arguments, except
+@code{short-packets} which takes a boolean argument:
+
+@table @code
+@item window
+The window size to request the remote system to use. This must be
+between 1 and 7 inclusive. The default is 7.
+@item packet-size
+The packet size to request the remote system to use. This must be a
+power of 2 between 32 and 4096 inclusive. The default is 64 for the
+@samp{g} and @samp{G} protocols and 512 for the @samp{v} protocol. Many
+older UUCP packages do not support packet sizes larger than 64, and many
+others do not support packet sizes larger than 128. Some UUCP packages
+will even dump core if a larger packet size is requested. The packet
+size is not a negotiation, and it may be different in each direction.
+If you request a packet size larger than the remote system supports, you
+will not be able to send any files.
+@item startup-retries
+The number of times to retry the initialization sequence. The default
+is 8.
+@item init-retries
+The number of times to retry one phase of the initialization sequence
+(there are three phases). The default is 4.
+@item init-timeout
+The timeout in seconds for one phase of the initialization sequence. The
+default is 10.
+@item retries
+The number of times to retry sending either a data packet or a request
+for the next packet. The default is 6.
+@item timeout
+The timeout in seconds when waiting for either a data packet or an
+acknowledgement. The default is 10.
+@item garbage
+The number of unrecognized bytes to permit before dropping the
+connection. This must be larger than the packet size. The default is
+10000.
+@item errors
+The number of errors (malformed packets, out of order packets, bad
+checksums, or packets rejected by the remote system) to permit before
+dropping the connection. The default is 100.
+@item error-decay
+The rate at which to ignore errors. Each time this many packets are
+received, the error count is decreased by one, so that a long connection
+with an occasional error will not exceed the limit set by @code{errors}.
+The default is 10.
+@item remote-window
+If this is between 1 and 7 inclusive, the window size requested by the
+remote system is ignored and this is used instead. This can be useful
+when dealing with some poor UUCP packages. The default is 0, which
+means that the remote system's request is honored.
+@item remote-packet-size
+If this is between 32 and 4096 inclusive the packet size requested by
+the remote system is ignored and this is used instead. There is
+probably no good reason to use this. The default is 0, which means that
+the remote system's request is honored.
+@item short-packets
+If this is true, then the code will optimize by sending shorter packets
+when there is less data to send. This confuses some UUCP packages, such
+as System V Release 4 (when using the @samp{G} protocol) and Waffle;
+when connecting to such a package, this parameter must be set to false.
+The default is true for the @samp{g} and @samp{v} protocols and false
+for the @samp{G} protocol.
+@end table
+
+The @samp{a} protocol is a Zmodem like protocol contributed by Doug
+Evans. It supports the following commands, all of which take numeric
+arguments except for @code{escape-control}, which takes a boolean
+argument:
+
+@table @code
+@item timeout
+Number of seconds to wait for a packet to arrive. The default is 10.
+@item retries
+The number of times to retry sending a packet. The default is 10.
+@item startup-retries
+The number of times to retry sending the initialization packet. The
+default is 4.
+@item garbage
+The number of garbage characters to accept before closing the
+connection. The default is 2400.
+@item send-window
+The number of characters that may be sent before waiting for an
+acknowledgement. The default is 1024.
+@item escape-control
+Whether to escape control characters. If this is true, the protocol may
+be used over a connection which does not transmit certain control
+characters, such as @code{XON} or @code{XOFF}. The connection must
+still transmit eight bit characters other than control characters. The
+default is false.
+@end table
+
+The @samp{j} protocol can be used over an eight bit connection that will
+not transmit certain control characters. It accepts the same protocol
+parameters that the @samp{i} protocol accepts, as well as one more:
+
+@table @code
+@item avoid
+A list of characters to avoid. This is a string which is interpreted as
+an escape sequence (@pxref{Chat Scripts}). The protocol does not have a
+way to avoid printable ASCII characters (byte values from 32 to 126,
+inclusive); only ASCII control characters and eight-bit characters may
+be avoided. The default value is @samp{\021\023}; these are the
+characters @code{XON} and @code{XOFF} which many connections use for
+flow control. If the package is configured to use @code{HAVE_BSD_TTY},
+then on some versions of Unix you may have to avoid @samp{\377} as well,
+due to the way some implementations of the BSD terminal driver handle
+signals.
+@end table
+
+The @samp{f} protocol is intended for use with error-correcting modems
+only; it checksums each file as a whole, so any error causes the entire
+file to be retransmitted. It supports the following commands, both of
+which take numeric arguments:
+
+@table @code
+@item timeout
+The timeout in seconds before giving up. The default is 120.
+@item retries
+How many times to retry sending a file. The default is 2.
+@end table
+
+The @samp{t} and @samp{e} protocols are intended for use over TCP or
+some other communication path with end to end reliability, as they do no
+checking of the data at all. They both support a single command, which
+takes a numeric argument:
+
+@table @code
+@item timeout
+The timeout in seconds before giving up. The default is 120.
+@end table
+
+The protocol parameters are reset to their default values after each
+call.
+
+@end table
+
+@node File Transfer Control, Miscellaneous (sys), Protocol Selection, sys File
+@subsection File Transfer Control
+
+@table @code
+
+@item send-request @var{boolean}
+@findex send-request
+
+The @var{boolean} determines whether the remote system is permitted to
+request files from the local system. The default is yes.
+
+@item receive-request @var{boolean}
+@findex receive-request
+
+The @var{boolean} determines whether the remote system is permitted to
+send files to the local system. The default is yes.
+
+@item request @var{boolean}
+@findex request
+
+A shorthand command, equivalent to specifying both @samp{send-request
+@var{boolean}} and @samp{receive-request @var{boolean}}.
+
+@item call-transfer @var{boolean}
+@findex call-transfer
+
+The @var{boolean} is checked when the local system places the call. It
+determines whether the local system may do file transfers queued up for
+the remote system. The default is yes.
+
+@item called-transfer @var{boolean}
+@findex called-transfer
+
+The @var{boolean} is checked when the remote system calls in. It
+determines whether the local system may do file transfers queued up for
+the remote system. The default is yes.
+
+@item transfer @var{boolean}
+@findex transfer
+
+Equivalent to specifying both @samp{call-transfer @var{boolean}}
+@samp{called-transfer @var{boolean}}.
+
+@item call-local-size @var{number} @var{string}
+@findex call-local-size
+
+The @var{string} is a time string (@pxref{Time Strings}). The
+@var{number} is the size in bytes of the largest file that should be
+transferred at a time matching the time string if the local system
+placed the call and the request was made by the local system. This
+command may appear multiple times in a single alternate. If this
+command does not appear, or if none of the time strings match, there are
+no size restrictions.
+
+With all the size control commands, the size of a file from the remote
+system (as opposed to a file from the local system) will only be checked
+if the other system is running this package; other UUCP packages will
+not understand a maximum size request, nor will they provide the size of
+remote files.
+
+@item call-remote-size @var{number} @var{string}
+@findex call-remote-size
+
+Specify the size in bytes of the largest file that should be
+transferred at a given time by remote request when the local system
+placed the call. This command may appear multiple times in a single
+alternate. If this command does not appear, there are no size
+restrictions.
+
+@item called-local-size @var{number} @var{string}
+@findex called-local-size
+
+Specify the size in bytes of the largest file that should be transferred
+at a given time by local request when the remote system placed the call.
+This command may appear multiple times in a single alternate. If this
+command does not appear, there are no size restrictions.
+
+@item called-remote-size @var{number} @var{string}
+@findex called-remote-size
+
+Specify the size in bytes of the largest file that should be transferred
+at a given time by remote request when the remote system placed the
+call. This command may appear multiple times in a single alternate. If
+this command does not appear, there are no size restrictions.
+
+@item local-send @var{strings}
+@findex local-send
+
+Specifies that files in the directories named by the @var{strings} may
+be sent to the remote system when requested locally (using @code{uucp}
+or @code{uux}). The directories in the list should be separated by
+whitespace. A @kbd{~} may be used for the public directory. On a Unix
+system, this is typically @file{/usr/spool/uucppublic}; the public
+directory may be set with the @code{pubdir} command. Here is an example
+of @code{local-send}:
+
+@example
+local-send ~ /usr/spool/ftp/pub
+@end example
+
+Listing a directory allows all files within the directory and all
+subdirectories to be sent. Directories may be excluded by preceding
+them with an exclamation point. For example:
+
+@example
+local-send /usr/ftp !/usr/ftp/private ~
+@end example
+
+@noindent
+means that all files in @file{/usr/ftp} or the public directory may be
+sent, except those files in @file{/usr/ftp/private}. The list of
+directories is read from left to right, and the last directory to apply
+takes effect; this means that directories should be listed from top
+down. The default is the root directory (i.e., any file at all may be
+sent by local request).
+
+@item remote-send @var{strings}
+@findex remote-send
+
+Specifies that files in the named directories may be sent to the remote
+system when requested by the remote system. The default is @kbd{~}.
+
+@item local-receive @var{strings}
+@findex local-receive
+
+Specifies that files may be received into the named directories when
+requested by a local user. The default is @kbd{~}.
+
+@item remote-receive @var{strings}
+@findex remote-receive
+
+Specifies that files may be received into the named directories when
+requested by the remote system. The default is @kbd{~}. On Unix, the
+remote system may only request that files be received into directories
+that are writeable by the world, regardless of how this is set.
+
+@item forward-to @var{strings}
+@findex forward-to
+
+Specifies a list of systems to which files may be forwarded. The remote
+system may forward files through the local system on to any of the
+systems in this list. The string @samp{ANY} may be used to permit
+forwarding to any system. The default is to not permit forwarding to
+other systems. Note that if the remote system is permitted to execute
+the @code{uucp} command, it effectively has the ability to forward to
+any system.
+
+@item forward-from @var{strings}
+@findex forward-from
+
+Specifies a list of systems from which files may be forwarded. The
+remote system may request files via the local system from any of the
+systems in this list. The string @samp{ANY} may be used to permit
+forwarding to any system. The default is to not permit forwarding from
+other systems. Note that if a remote system is permitted to execute the
+@code{uucp} command, it effectively has the ability to request files
+from any system.
+
+@item forward @var{strings}
+@findex forward
+
+Equivalent to specifying both @samp{forward-to @var{strings}} and
+@samp{forward-from @var{strings}}. This would normally be used rather
+than either of the more specific commands.
+
+@end table
+
+@node Miscellaneous (sys), Default sys File Values, File Transfer Control, sys File
+@subsection Miscellaneous sys File Commands
+
+@table @code
+
+@item sequence @var{boolean}
+@findex sequence
+
+If @var{boolean} is true, then conversation sequencing is automatically
+used for the remote system, so that if somebody manages to spoof as the
+remote system, it will be detected the next time the remote system
+actually calls. This is false by default.
+
+@item command-path @var{string}
+@findex command-path
+
+Specifies the path (a list of whitespace separated directories) to be
+searched to locate commands to execute. This is only used for commands
+requested by @code{uux}, not for chat programs. The default is from
+@file{policy.h}.
+
+@item commands @var{strings}
+@findex commands
+
+The list of commands which the remote system is permitted to execute
+locally. For example: @samp{commands rnews rmail}. If the value is
+@samp{ALL} (case significant), all commands may be executed. The
+default is @samp{rnews rmail}.
+
+@item free-space @var{number}
+@findex free-space
+
+Specify the minimum amount of file system space (in bytes) to leave free
+after receiving a file. If the incoming file will not fit, it will be
+rejected. This initial rejection will only work when talking to another
+instance of this package, since older UUCP packages do not provide the
+file size of incoming files. Also, while a file is being received,
+@code{uucico} will periodically check the amount of free space. If it
+drops below the amount given by the @code{free-space} command, the file
+transfer will be aborted. The default amount of space to leave free is
+from @file{policy.h}. This file space checking may not work on all
+systems.
+
+@item pubdir @var{string}
+@findex pubdir in sys file
+
+Specifies the public directory that is used when @kbd{~} is specifed in
+a file transfer or a list of directories. This essentially overrides
+the public directory specified in the main configuration file for this
+system only. The default is the public directory specified in the main
+configuration file (which defaults to a value from @file{policy.h}).
+
+@item debug @var{string} @dots{}
+@findex debug in sys file
+
+Set additional debugging for calls to or from the system. This may be
+used to debug a connection with a specific system. It is particularly
+useful when debugging incoming calls, since debugging information will
+be generated whenever the call comes in. See the @code{debug} command
+in the main configuration file (@pxref{Debugging Levels}) for more
+details. The debugging information specified here is in addition to
+that specified in the main configuration file or on the command line.
+
+@item max-remote-debug @var{string} @dots{}
+@findex max-remote-debug
+
+When the system calls in, it may request that the debugging level be set
+to a certain value. This command may be used to put a limit on the
+debugging level which the system may request, to avoid filling up the
+disk with debugging information. Only the debugging types named in the
+@code{max-remote-debug} command may be turned on by the remote system.
+To prohibit any debugging, use @samp{max-remote-debug none}.
+
+@end table
+
+@node Default sys File Values, , Miscellaneous (sys), sys File
+@subsection Default sys File Values
+
+The following are used as default values for all systems; they can be
+considered as appearing before the start of the file.
+
+@example
+time Never
+chat "" \r\c ogin:-BREAK-ogin:-BREAK-ogin: \L word: \P
+chat-timeout 10
+callback n
+sequence n
+request y
+transfer y
+local-send /
+remote-send ~
+local-receive ~
+remove-receive ~
+command-path [ from @file{policy.h} ]
+commands rnews rmail
+max-remote-debug abnormal,chat,handshake
+@end example
+
+@node port File, dial File, sys File, Configuration Files
+@section The Port Configuration File
+@cindex port file
+@cindex port configuration file
+@cindex configuration file (port)
+
+The port files may be used to name and describe ports. By default there
+is a single port file, named @file{port} in the directory
+@var{newconfigdir}. This may be overridden by the @code{portfile}
+command in the main configuration file; see @ref{Configuration File
+Names}.
+
+Any commands in a port file before the first @code{port} command specify
+defaults for all ports in the file; however, since the @code{type}
+command must appear before all other commands for a port, the defaults
+are only useful if all ports in the file are of the same type (this
+restriction may be lifted in a later version). All commands after a
+@code{port} command up to the next @code{port} command then describe
+that port. There are different types of ports; each type supports its
+own set of commands. Each command indicates which types of ports
+support it. There may be many ports with the same name; if a system
+requests a port by name then each port with that name will be tried
+until an unlocked one is found.
+
+@table @code
+
+@item port @var{string}
+@findex port in port file
+
+Introduces and names a port.
+
+@item type @var{string}
+@findex type
+
+Define the type of port. The default is @samp{modem}. If this command
+appears, it must immediately follow the @code{port} command. The type defines
+what commands are subsequently allowed. Currently the types are:
+
+@table @samp
+@item modem
+For a modem hookup.
+@item stdin
+For a connection through standard input and standard output, as when
+@code{uucico} is run as a login shell.
+@item direct
+For a direct connection to another system.
+@item tcp
+For a connection using TCP.
+@item tli
+For a connection using TLI.
+@item pipe
+For a connection through a pipe running another program.
+@end table
+
+@item protocol @var{string}
+@findex protocol in port file
+
+Specify a list of protocols to use for this port. This is just like the
+corresponding command for a system (@pxref{Protocol Selection}). A
+protocol list for a system takes precedence over a list for a port.
+
+@item protocol-parameter @var{character} @var{strings} [ any type ]
+@findex protocol-parameter in port file
+
+The same command as the @code{protocol-parameter} command used for
+systems (@pxref{Protocol Selection}). This one takes precedence.
+
+@item seven-bit @var{boolean} [ any type ]
+@findex seven-bit in port file
+
+This is only used during protocol negotiation; if the argument is true,
+it forces the selection of a protocol which works across a seven-bit
+link. It does not prevent eight bit characters from being transmitted.
+The default is false.
+
+@item reliable @var{boolean} [ any type ]
+@findex reliable in port file
+
+This is only used during protocol negotiation; if the argument is
+false, it forces the selection of a protocol which works across
+an unreliable communication link. The default is true. It would
+be more common to specify this for a dialer rather than a port.
+
+@item half-duplex @var{boolean} [ any type ]
+@findex half-duplex in port file
+
+If the argument is true, it means that the port only supports
+half-duplex connections. This only affects bidirectional protocols, and
+causes them to not do bidirectional transfers.
+
+@item device @var{string} [ modem, direct and tli only ]
+@findex device
+
+Names the device associated with this port. If the device is not named,
+the port name is taken as the device. Device names are system
+dependent. On Unix, a modem or direct connection might be something
+like @file{/dev/ttyd0}; a TLI port might be @file{/dev/inet/tcp}.
+
+@itemx speed @var{number} [modem and direct only ]
+@findex speed in port file
+@item baud @var{number} [ modem and direct only ]
+@findex baud in port file
+
+The speed this port runs at. If a system specifies a speed but no port
+name, then all ports which match the speed will be tried in order. If
+the speed is not specified here and is not specified by the system, the
+natural speed of the port will be used by default.
+
+@itemx speed-range @var{number} @var{number} [ modem only ]
+@findex speed-range
+@item baud-range @var{number} @var{number} [ modem only ]
+@findex baud-range
+
+Specify a range of speeds this port can run at. The first number is the
+minimum speed, the second number is the maximum speed. These numbers
+will be used when matching a system which specifies a desired speed.
+The simple @code{speed} (or @code{baud}) command is still used to
+determine the speed to run at if the system does not specify a speed.
+For example, the command @samp{speed-range 300 19200} means that the
+port will match any system which uses a speed from 300 to 19200 baud
+(and will use the speed specified by the system); this could be combined
+with @samp{speed 2400}, which means that when this port is used with a
+system that does not specify a speed, the port will be used at 2400
+baud.
+
+@item carrier @var{boolean} [ modem and direct only ]
+@findex carrier in port file
+
+The argument indicates whether the port supports carrier.
+
+If a modem port does not support carrier, the carrier detect signal will
+never be required on this port, regardless of what the modem chat script
+indicates. The default for a modem port is true.
+
+If a direct port supports carrier, the port will be set to expect
+carrier whenever it is used. The default for a direct port is false.
+
+@item hardflow @var{boolean} [ modem and direct only ]
+@findex hardflow
+
+The argument indicates whether the port supports hardware flow control.
+If it does not, hardware flow control will not be turned on for this
+port. The default is true. Hardware flow control is only supported on
+some systems.
+
+@item dial-device @var{string} [ modem only ]
+@findex dial-device
+
+Dialing instructions should be output to the named device, rather than
+to the normal port device. The default is to output to the normal port
+device.
+
+@item dialer @var{string} [ modem only ]
+@findex dialer in port file
+
+Name a dialer to use. The information is looked up in the dial file.
+There is no default. Some sort of dialer information must be specified
+to call out on a modem.
+
+@item dialer @var{string} @dots{} [ modem only ]
+
+Execute a dialer command. If a dialer is named (by using the first form
+of this command, described just above), these commands are ignored.
+They may be used to specify dialer information directly in simple
+situations without needing to go to a separate file. There is no
+default. Some sort of dialer information must be specified to call out
+on a modem.
+
+@item dialer-sequence @var{strings} [ modem or tcp or tli only ]
+@findex dialer-sequence
+
+Name a sequence of dialers and tokens (phone numbers) to use. The first
+argument names a dialer, and the second argument names a token. The
+third argument names another dialer, and so on. If there are an odd
+number of arguments, the phone number specified with a @code{phone}
+command in the system file is used as the final token. The token is
+what is used for @kbd{\D} or @kbd{\T} in the dialer chat script. If the
+token in this string is @kbd{\D}, the system phone number will be used;
+if it is @kbd{\T}, the system phone number will be used after undergoing
+dialcodes translation. A missing final token is taken as @kbd{\D}.
+
+This command currently does not work if @code{dial-device} is specified;
+to handle this correctly will require a more systematic notion of chat
+scripts. Moreover, the @code{complete} and @code{abort} chat scripts,
+the protocol parameters, and the @code{carrier} and @code{dtr-toggle}
+commands are ignored for all but the first dialer.
+
+This command basically lets you specify a sequence of chat scripts to
+use. For example, the first dialer might get you to a local network and
+the second dialer might describe how to select a machine from the local
+network. This lets you break your dialing sequence into simple modules,
+and may make it easier to share dialer entries between machines.
+
+This command is to only way to use a chat script with a TCP port. This
+can be useful when using a modem which is accessed via TCP.
+
+When this command is used with a TLI port, then if the first dialer is
+@samp{TLI} or @samp{TLIS} the first token is used as the address to
+connect to. If the first dialer is something else, or if there is no
+token, the address given by the @code{address} command is used
+(@pxref{Placing the Call}). Escape sequences in the address are
+expanded as they are for chat script expect strings (@pxref{Chat
+Scripts}). The different between @samp{TLI} and @samp{TLIS} is that the
+latter implies the command @samp{stream true}. These contortions are
+all for HDB compatibility. Any subsequent dialers are treated as they
+are for a TCP port.
+
+@item lockname @var{string} [ modem and direct only ]
+@findex lockname
+
+Give the name to use when locking this port. On Unix, this is the name
+of the file that will be created in the lock directory. It is used as
+is, so on Unix it should generally start with @samp{LCK..}. For
+example, if a single port were named both @file{/dev/ttycu0} and
+@file{/dev/tty0} (perhaps with different characteristics keyed on the
+minor device number), then the command @code{lockname LCK..ttycu0} could
+be used to force the latter to use the same lock file name as the
+former.
+
+@item service @var{string} [ tcp only ]
+@findex service
+
+Name the TCP port number to use. This may be a number. If not, it will
+be looked up in @file{/etc/services}. If this is not specified, the
+string @samp{uucp} is looked up in @file{/etc/services}. If it is not
+found, port number 540 (the standard UUCP-over-TCP port number) will be
+used.
+
+@item push @var{strings} [ tli only ]
+@findex push
+
+Give a list of modules to push on to the TLI stream.
+
+@item stream @var{boolean} [ tli only ]
+@findex stream
+
+If this is true, and the @code{push} command was not used, the
+@samp{tirdwr} module is pushed on to the TLI stream.
+
+@item server-address @var{string} [ tli only ]
+@findex server-address
+
+Give the address to use when running as a TLI server. Escape sequences
+in the address are expanded as they are for chat script expect strings
+(@pxref{Chat Scripts}).
+
+@item command @var{strings} [ pipe only ]
+@findex command
+
+Give the command, with arguments, to run when using a pipe port type.
+When a port of this type is used, the command is executed and uucico
+communicates with it over a pipe. This permits uucico or cu to
+communicate with another system which can only be reached through some
+unusual means. A sample use might be @samp{command /bin/rlogin -E -8 -l
+@var{login} @var{system}}. The command is run with the full privileges
+of UUCP; it is responsible for maintaining security.
+
+@end table
+
+@node dial File, Security, port File, Configuration Files
+@section The Dialer Configuration File
+@cindex dial file
+@cindex dialer configuration file
+@cindex configuration file (dial)
+
+The dialer configuration files define dialers. By default there is a
+single dialer file, named @file{dial} in the directory
+@var{newconfigdir}. This may be overridden by the @code{dialfile}
+command in the main configuration file; see @ref{Configuration File
+Names}.
+
+Any commands in the file before the first @code{dialer} command specify
+defaults for all the dialers in the file. All commands after a
+@code{dialer} command up to the next @code{dialer} command are
+associated with the named dialer.
+
+@table @code
+
+@item dialer @var{string}
+@findex dialer in dial file
+
+Introduces and names a dialer.
+
+@item chat @var{strings}
+@findex chat in dial file
+@item chat-timeout @var{number}
+@findex chat-timeout in dial file
+@item chat-fail @var{string}
+@findex chat-fail in dial file
+@item chat-seven-bit @var{boolean}
+@findex chat-seven-bit in dial file
+@item chat-program @var{strings}
+@findex chat-program in dial file
+
+Specify a chat script to be used to dial the phone. See @ref{Chat
+Scripts} for full details on chat scripts.
+
+Taylor UUCP will sleep for one second between attempts to dial out on a
+modem. If your modem requires a longer wait period, you must start your
+chat script with delays (@samp{\d} in a send string).
+
+The chat script will be read from and sent to the port specified by the
+@code{dial-device} command for the port, if there is one.
+
+The following escape addition escape sequences may appear in send
+strings:
+
+@table @kbd
+@item \D
+send phone number without dialcode translation
+@item \T
+send phone number with dialcode translation
+@item \M
+do not require carrier
+@item \m
+require carrier (fail if not present)
+@end table
+
+See the description of the dialcodes file (@pxref{Configuration File
+Names}) for a description of dialcode translation. If the port does not
+support carrier (as set by the @code{carrier} command in the port file)
+@kbd{\M} and @kbd{\m} are ignored. If both the port and the dialer
+support carrier (as set by the @code{carrier} command in the port file
+and the @code{carrier} command in the dialer file), then every chat
+script implicitly begins with @kbd{\M} and ends with @kbd{\m}. There is
+no default chat script for dialers.
+
+The following additional escape sequences may be used in
+@code{chat-program}:
+
+@table @kbd
+@item \D
+phone number without dialcode translation
+@item \T
+phone number with dialcode translation
+@end table
+
+If the program changes the port in any way (e.g., sets parity) the
+changes will be preserved during protocol negotiation, but once the
+protocol is selected it will change the port settings.
+
+@item dialtone @var{string}
+@findex dialtone
+
+A string to output when dialing the phone number which causes the modem
+to wait for a secondary dial tone. This is used to translate the
+@kbd{=} character in a phone number. The default is a comma.
+
+@item pause @var{string}
+@findex pause
+
+A string to output when dialing the phone number which causes the modem
+to wait for 1 second. This is used to translate the @kbd{-} character
+in a phone number. The default is a comma.
+
+@item carrier @var{boolean}
+@findex carrier in dial file
+
+If the argument is true, the dialer supports the modem carrier signal.
+After the phone number is dialed, @code{uucico} will require that
+carrier be on. One some systems, it will be able to wait for it. If
+the argument is false, carrier will not be required. The default is
+true.
+
+@item carrier-wait @var{number}
+@findex carrier-wait
+
+If the port is supposed to wait for carrier, this may be used to
+indicate how many seconds to wait. The default is 60 seconds. Only
+some systems support waiting for carrier.
+
+@item dtr-toggle @var{boolean} @var{boolean}
+@findex dtr-toggle
+
+If the first argument is true, then DTR is toggled before using
+the modem. This is only supported on some systems and some ports. The
+second @var{boolean} need not be present; if it is, and it is
+true, the program will sleep for 1 second after toggling DTR.
+The default is not to toggle DTR.
+
+@item complete-chat @var{strings}
+@findex complete-chat
+@item complete-chat-timeout @var{number}
+@findex complete-chat-timeout
+@item complete-chat-fail @var{string}
+@findex complete-chat-fail
+@item complete-chat-seven-bit @var{boolean}
+@findex complete-chat-seven-bit
+@item complete-chat-program @var{strings}
+@findex complete-chat-program
+
+These commands define a chat script (@pxref{Chat Scripts}) which is run
+when a call is finished normally. This allows the modem to be reset.
+There is no default. No additional escape sequences may be used.
+
+@item complete @var{string}
+@findex complete
+
+This is a simple use of @code{complete-chat}. It is equivalent to
+@code{complete-chat "" @var{string}}; this has the effect of sending
+@var{string} to the modem when a call finishes normally.
+
+@item abort-chat @var{strings}
+@findex abort-chat
+@item abort-chat-timeout @var{number}
+@findex abort-chat-timeout
+@item abort-chat-fail @var{string}
+@findex abort-chat-fail
+@item abort-chat-seven-bit @var{boolean}
+@findex abort-chat-seven-bit
+@item abort-chat-program @var{strings}
+@findex abort-chat-program
+
+These commands define a chat script (@pxref{Chat Scripts}) to be run
+when a call is aborted. They may be used to interrupt and reset the
+modem. There is no default. No additional escape sequences may be
+used.
+
+@item abort @var{string}
+@findex abort
+
+This is a simple use of @code{abort-chat}. It is equivalent to
+@code{abort-chat "" @var{string}}; this has the effect of sending
+@var{string} to the modem when a call is aborted.
+
+@item protocol-parameter @var{character} @var{strings}
+@findex protocol-parameter in dial file
+
+Set protocol parameters, just like the @code{protocol-parameter} command
+in the system configuration file or the port configuration file; see
+@ref{Protocol Selection}. These parameters take precedence, then those
+for the port, then those for the system.
+
+@item seven-bit @var{boolean}
+@findex seven-bit in dial file
+
+This is only used during protocol negotiation; if it is true, it
+forces selection of a protocol which works across a seven-bit link. It
+does not prevent eight bit characters from being transmitted. The
+default is false. It would be more common to specify this for a
+port than for a dialer.
+
+@item reliable @var{boolean}
+@findex reliable in dial file
+
+This is only used during protocol negotiation; if it is false, it
+forces selection of a protocol which works across an unreliable
+communication link. The default is true.
+
+@item half-duplex @var{boolean} [ any type ]
+@findex half-duplex in dial file
+
+If the argument is true, it means that the dialer only supports
+half-duplex connections. This only affects bidirectional protocols, and
+causes them to not do bidirectional transfers.
+
+@end table
+
+@node Security, , dial File, Configuration Files
+@section Security
+
+This discussion of UUCP security applies only to Unix. It is a bit
+cursory; suggestions for improvement are solicited.
+
+UUCP is traditionally not very secure. Taylor UUCP addresses some
+security issues, but is still far from being a secure system.
+
+If security is very important to you, then you should not permit any
+external access to your computer, including UUCP. Any opening to the
+outside world is a potential security risk.
+
+By default Taylor UUCP provides few mechanisms to secure local users of
+the system from each other. You can allow increased security by putting
+the owner of the UUCP programs (normally @code{uucp}) into a separate
+group; the use of this is explained in the following paragraphs, which
+refer to this separate group as @code{uucp-group}.
+
+When the @code{uucp} program is invoked to copy a file to a remote
+system, it will by default copy the file into the UUCP spool directory.
+When the @code{uux} program is used, the @samp{-C} switch must be used
+to copy the file into the UUCP spool directory. In any case, once the
+file has been copied into the spool directory, other local users will
+not be able to access it.
+
+When a file is requested from a remote system, UUCP will only permit it
+to be placed in a directory which is writable by the requesting user.
+The directory must also be writable by UUCP. A local user can create a
+directory with a group of @code{uucp-group} and set the mode to permit
+group write access. This will allow the file be requested without
+permitting it to be viewed by any other user.
+
+There is no provision for security for @code{uucp} requests (as opposed
+to @code{uux} requests) made by a user on a remote system. A file sent
+over by a remote request may only be placed in a directory which is
+world writable, and the file will be world readable and writable. This
+will permit any local user to destroy or replace the contents of the
+file. A file requested by a remote system must be world readable, and
+the directory it is in must be world readable. Any local user will be
+able to examine, although not necessarily modify, the file before it is
+sent.
+
+There are some security holes and race conditions that apply to the
+above discussion which I will not elaborate on. They are not hidden
+from anybody who reads the source code, but they are somewhat technical
+and difficult (though scarcely impossible) to exploit. Suffice it to
+say that even under the best of conditions UUCP is not completely
+secure.
+
+For many sites, security from remote sites is a more important
+consideration. Fortunately, Taylor UUCP does provide some support in
+this area.
+
+The greatest security is provided by always dialing out to the other
+site. This prevents anybody from pretending to be the other site. Of
+course, only one side of the connection can do this.
+
+If remote dialins must be permitted, then it is best if the dialin line
+is used only for UUCP. If this is the case, then you should create a
+call-in password file (@pxref{Configuration File Names}) and let
+@code{uucico} do its own login prompting. For example, to let remote
+sites log in on a port named @samp{entry} in the port file (@pxref{port
+File}) you might invoke @samp{uucico -p entry}. This would cause
+@code{uucico} to enter an endless loop of login prompts and daemon
+executions. The advantage of this approach is that even if remote users
+break into the system by guessing or learning the password, they will
+only be able to do whatever @code{uucico} permits them to do. They will
+not be able to start a shell on your system.
+
+If remote users can dial in and log on to your system, then you have a
+security hazard more serious than that posed by UUCP. But then, you
+probably knew that already.
+
+Once your system has connected with the remote UUCP, there is a fair
+amount of control you can exercise. You can use the @code{remote-send}
+and @code{remote-receive} commands to control the directories the remote
+UUCP can access. You can use the @code{request} command to prevent the
+remote UUCP from making any requests of your system at all; however, if
+you do this it will not even be able to send you mail or news. If you
+do permit remote requests, you should be careful to restrict what
+commands may be executed at the remote system's request. The default is
+@code{rmail} and @code{rnews}, which will suffice for most systems.
+
+If different remote systems call in and they must be granted different
+privileges (perhaps some systems are within the same organization and
+some are not) then the @code{called-login} command should be used for
+each system to require that they different login names. Otherwise it
+would be simple for a remote system to use the @code{myname} command and
+pretend to be a different system. The @code{sequence} command can be
+used to detect when one system pretended to be another, but since the
+sequence numbers must be reset manually after a failed handshake this
+can sometimes be more trouble than it's worth.
+
+@node Protocols, Hacking, Configuration Files, Top
+@chapter UUCP protocol internals
+
+A detailed description of how the various UUCP protocols work is posted
+monthly to the newsgroups @samp{comp.mail.uucp}, @samp{news.answers} and
+@samp{comp.answers}. There is no need to read this information in order
+to use Taylor UUCP. It is intended for people who are interested in how
+the UUCP code works.
+
+@node Hacking, Acknowledgements, Protocols, Top
+@chapter Hacking Taylor UUCP
+
+This chapter provides the briefest of guides to the Taylor UUCP source
+code itself.
+
+@menu
+* System Dependence:: System Dependence
+* Naming Conventions:: Naming Conventions
+* Patches:: Patches
+@end menu
+
+@node System Dependence, Naming Conventions, Hacking, Hacking
+@section System Dependence
+
+The code is carefully segregated into a system independent portion and a
+system dependent portion. The system dependent code is in the
+@file{unix} subdirectory, and also in the files @file{tcp.c},
+@file{tli.c} and @file{sysh.unx} (also known as @file{sysdep.h}).
+
+With the right configuration parameters, the system independent code
+calls only ANSI C functions. Some of the less common ANSI C functions
+are also provided in the @file{lib} directory. The replacement function
+@code{strtol} in @file{lib/strtol.c} assumes that the characters @kbd{A}
+to @kbd{F} and @kbd{a} to @kbd{f} appear in strictly sequential order.
+The function @code{igradecmp} in @file{uuconf/grdcmp.c} assumes that the
+upper and lower case letters appear in order. Both assumptions are true
+for ASCII and EBCDIC, but neither is guaranteed by ANSI C. Disregarding
+these caveats, I believe that the system independent portion of the code
+is strictly conforming.
+
+That's not too exciting, since all the work is done in the system
+dependent code. I think that this code can conform to POSIX 1003.1,
+given the right compilation parameters. I'm a bit less certain about
+this, though.
+
+The code is in use on a 16 bit segmented system with no function
+prototypes, so I'm certain that all casts to long and pointers are done
+when necessary.
+
+@node Naming Conventions, Patches, System Dependence, Hacking
+@section Naming Conventions
+
+I use a modified Hungarian naming convention for my variables and
+functions. As with all naming conventions, the code is rather opaque if
+you are not familiar with it, but becomes clear and easy to use with
+time.
+
+The first character indicates the type of the variable (or function
+return value). Sometimes additional characters are used. I use the
+following type prefixes:
+
+@table @samp
+@item a
+array; the next character is the type of an element
+@item b
+byte or character
+@item c
+count of something
+@item e
+stdio FILE *
+@item f
+boolean
+@item i
+generic integer
+@item l
+double
+@item o
+file descriptor (as returned by open, creat, etc.)
+@item p
+generic pointer
+@item q
+pointer to structure
+@item s
+structure
+@item u
+void (function return values only)
+@item z
+character string
+@end table
+
+A generic pointer (@code{p}) is sometimes a @code{void *}, sometimes a
+function pointer in which case the prefix is pf, and sometimes a pointer
+to another type, in which case the next character is the type to which
+it points (pf is overloaded).
+
+An array of strings (@code{char *[]}) would be named @code{az} (array of
+string). If this array were passed to a function, the function
+parameter would be named @code{paz} (pointer to array of string).
+
+Note that the variable name prefixes do not necessarily indicate the
+type of the variable. For example, a variable prefixed with i may be
+int, long or short. Similarly, a variable prefixed with b may be a char
+or an int; for example, the return value of getchar would be caught in
+an int variable prefixed with b.
+
+For a non-local variable (extern or file static), the first character
+after the type prefix is capitalized.
+
+Most static variables and functions use another letter after the type
+prefix to indicate which module they come from. This is to help
+distinguish different names in the debugger. For example, all static
+functions in @file{protg.c}, the @samp{g} protocol source code, use a
+module prefix of @samp{g}. This isn't too useful, as a number of
+modules use a module prefix of @samp{s}.
+
+@node Patches, , Naming Conventions, Hacking
+@section Patches
+
+I am always grateful for any patches sent in. Much of the flexibility
+and portability of the code is due to other people. Please do not
+hesitate to send me any changes you have found necessary or useful.
+
+When sending a patch, please send the output of the Unix @code{diff}
+program invoked with the @samp{-c} option (if you have the GNU version
+of @code{diff}, use the @samp{-p} option). Always invoke @code{diff}
+with the original file first and the modified file second.
+
+If your @code{diff} does not support @samp{-c} (or you don't have
+@code{diff}), send a complete copy of the modified file (if you have
+just changed a single function, you can just send the new version of the
+function). In particular, please do not send @code{diff} output without
+the @samp{-c} option, as it is useless.
+
+If you have made a number of changes, it is very convenient for me if
+you send each change as a separate mail message. Sometimes I will think
+that one change is useful but another one is not. If they are in
+different messages it is much easier for me to apply one but not the
+other.
+
+I rarely apply the patches directly. Instead I work my way through the
+hunks and apply each one separately. This ensures that the naming
+remains consistent, and that I understand all the code.
+
+If you can not follow all these rules, then don't. But if you do, it
+makes it more likely that I will incorporate your changes. I am not
+paid for my UUCP work, and my available time is unfortunately very
+restricted. The package is important to me, and I do what I can, but I
+can not do all that I would like, much less all that everybody else
+would like.
+
+Finally, please do not be offended if I do not reply to messages for
+some time, even a few weeks. I am often behind on my mail, and if I
+think your message deserves a considered reply I will often put it aside
+until I have time to deal with it.
+
+@node Acknowledgements, Index (concepts), Hacking, Top
+@chapter Acknowledgements
+
+This is a list of people who gave help or suggestions while I was
+working on the Taylor UUCP project. Appearance on this list does not
+constitute endorsement of the program, particularly since some of the
+comments were criticisms. I've probably left some people off, and I
+apologize for any oversight; it does not mean your contribution was
+unappreciated.
+
+@ifinfo
+First of all, I would like to thank the people at Infinity Development
+Systems (formerly AIRS, which lives on in the domain name, at least for
+now) for permitting me to use their computers and @file{uunet} access.
+I would also like to thank Richard Stallman @code{<rms@@gnu.ai.mit.edu>}
+for founding the Free Software Foundation and John Gilmore
+@code{<gnu@@cygnus.com>} for writing the initial version of gnuucp which
+was a direct inspiration for this somewhat larger project. Chip
+Salzenberg @code{<chip@@tct.com>} has contributed many patches.
+Franc,ois Pinard @code{<pinard@@iro.umontreal.ca>} tirelessly tested the
+code and suggested many improvements. He also put together the initial
+version of this document. Doug Evans contributed the zmodem protocol.
+Marc Boucher @code{<marc@@CAM.ORG>} contributed the code supporting the
+pipe port type. Finally, Verbus M. Counts @code{<verbus@@westmark.com>}
+and Centel Federal Systems, Inc. deserve special thanks, since they
+actually paid me money to port this code to System III.
+@end ifinfo
+@iftex
+First of all, I would like to thank the people at Infinity Development
+Systems (formerly AIRS, which lives on in the domain name, at least for
+now) for permitting me to use their computers and @file{uunet} access.
+I would also like to thank Richard Stallman @code{<rms@@gnu.ai.mit.edu>}
+for founding the Free Software Foundation and John Gilmore
+@code{<gnu@@cygnus.com>} for writing the initial version of gnuucp which
+was a direct inspiration for this somewhat larger project. Chip
+Salzenberg @code{<chip@@tct.com>} has contributed many patches.
+@tex
+Fran\c cois Pinard
+@end tex
+@code{<pinard@@iro.umontreal.ca>} tirelessly tested the code and
+suggested many improvements. He also put together the initial version
+of this document. Doug Evans contributed the zmodem protocol. Marc
+Boucher @code{<marc@@CAM.ORG>} contributed the code supporting the pipe
+port type. Finally, Verbus M. Counts @code{<verbus@@westmark.com>} and
+Centel Federal Systems, Inc. deserve special thanks, since they actually
+paid me money to port this code to System III.
+@end iftex
+
+In alphabetical order:
+
+@example
+"Earle F. Ake - SAIC" @code{<ake@@Dayton.SAIC.COM>}
+@code{mra@@searchtech.com} (Michael Almond)
+@code{cambler@@zeus.calpoly.edu} (Christopher J. Ambler)
+Brian W. Antoine @code{<briana@@tau-ceti.isc-br.com>}
+@code{jantypas@@soft21.s21.com} (John Antypas)
+@code{james@@bigtex.cactus.org} (James Van Artsdalen)
+@code{nba@@sysware.DK} (Niels Baggesen)
+@code{uunet!hotmomma!sdb} (Scott Ballantyne)
+Zacharias Beckman @code{<zac@@dolphin.com>}
+@code{mike@@mbsun.ann-arbor.mi.us} (Mike Bernson)
+@code{bob@@usixth.sublink.org} (Roberto Biancardi)
+@code{statsci!scott@@coco.ms.washington.edu} (Scott Blachowicz)
+@code{bag%wood2.cs.kiev.ua@@relay.ussr.eu.net} (Andrey G Blochintsev)
+@code{spider@@Orb.Nashua.NH.US} (Spider Boardman)
+Gregory Bond @code{<gnb@@bby.com.au>}
+Marc Boucher @code{<marc@@CAM.ORG>}
+@code{dean@@coplex.com} (Dean Brooks)
+@code{jbrow@@radical.com} (Jim Brownfield)
+@code{dave@@dlb.com} (Dave Buck)
+@code{gordon@@sneaky.lonestar.org} (Gordon Burditt)
+@code{dburr@@sbphy.physics.ucsb.edu} (Donald Burr)
+@code{mib@@gnu.ai.mit.edu} (Michael I Bushnell)
+Brian Campbell @code{<brianc@@quantum.on.ca>}
+Andrew A. Chernov @code{<ache@@astral.msk.su>}
+@code{mafc!frank@@bach.helios.de} (Frank Conrad)
+Ed Carp @code{<erc@@apple.com>}
+@code{mpc@@mbs.linet.org} (Mark Clements)
+@code{verbus@@westmark.westmark.com} (Verbus M. Counts)
+@code{cbmvax!snark.thyrsus.com!cowan} (John Cowan)
+Bob Cunningham @code{<bob@@soest.hawaii.edu>}
+@code{kdburg@@incoahe.hanse.de} (Klaus Dahlenburg)
+Damon @code{<d@@exnet.co.uk>}
+@code{hubert@@arakis.fdn.org} (Hubert Delahaye)
+@code{markd@@bushwire.apana.org.au} (Mark Delany)
+Allen Delaney @code{<allen@@brc.ubc.ca>}
+@code{denny@@dakota.alisa.com} (Bob Denny)
+@code{ssd@@nevets.oau.org} (Steven S. Dick)
+@code{gert@@greenie.gold.sub.org} (Gert Doering)
+@code{gemini@@geminix.in-berlin.de} (Uwe Doering)
+Hans-Dieter Doll @code{<hd2@@Insel.DE>}
+Mark W. Eichin @code{<eichin@@cygnus.com>}
+Andrew Evans @code{<andrew@@airs.com>}
+@code{dje@@cygnus.com} (Doug Evans)
+Marc Evans @code{<marc@@synergytics.com>}
+Dan Everhart @code{<dan@@dyndata.com>}
+@code{kksys!kegworks!lfahnoe@@cs.umn.edu} (Larry Fahnoe)
+@code{fenner@@jazz.psu.edu} (Bill Fenner)
+@code{jaf@@inference.com} (Jose A. Fernandez)
+"David J. Fiander" @code{<golem!david@@news.lsuc.on.ca>}
+Thomas Fischer @code{<batman@@olorin.dark.sub.org>}
+@code{louis@@marco.de} (Ju"rgen Fluk)
+@code{erik@@eab.retix.com} (Erik Forsberg)
+@code{andy@@scp.caltech.edu} (Andy Fyfe)
+Lele Gaifax @code{<piggy@@idea.sublink.org>}
+@code{Peter.Galbavy@@micromuse.co.uk}
+@code{hunter@@phoenix.pub.uu.oz.au} (James Gardiner [hunter])
+Terry Gardner @code{<cphpcom!tjg01>}
+@code{ol@@infopro.spb.su} (Oleg Girko)
+@code{jimmy@@tokyo07.info.com} (Jim Gottlieb)
+Benoit Grange @code{<ben@@fizz.fdn.org>}
+@code{elg@@elgamy.jpunix.com} (Eric Lee Green)
+@code{ryan@@cs.umb.edu} (Daniel R. Guilderson)
+@code{greg@@gagme.chi.il.us} (Gregory Gulik)
+Richard H. Gumpertz @code{<rhg@@cps.com>}
+Michael Haberler @code{<mah@@parrot.prv.univie.ac.at>}
+Daniel Hagerty @code{<hag@@eddie.mit.edu>}
+@code{jh@@moon.nbn.com} (John Harkin)
+@code{guy@@auspex.auspex.com} (Guy Harris)
+Petri Helenius @code{<pete@@fidata.fi>}
+@code{gabe@@edi.com} (B. Gabriel Helou)
+Bob Hemedinger @code{<bob@@dalek.mwc.com>}
+Andrew Herbert @code{<andrew@@werple.pub.uu.oz.au>}
+Peter Honeyman @code{<honey@@citi.umich.edu>}
+@code{jhood@@smoke.marlboro.vt.us} (John Hood)
+Bill Irwin @code{<bill@@twg.bc.ca>}
+@code{pmcgw!personal-media.co.jp!ishikawa} (Chiaki Ishikawa)
+@code{bei@@dogface.austin.tx.us} (Bob Izenberg)
+@code{djamiga!djjames@@fsd.com} (D.J.James)
+Rob Janssen @code{<cmgit!rob@@relay.nluug.nl>}
+@code{harvee!esj} (Eric S Johansson)
+Kevin Johnson @code{<kjj@@pondscum.phx.mcd.mot.com>}
+Alan Judge @code{<aj@@dec4ie.IEunet.ie>}
+@code{chris@@cj_net.in-berlin.de} (Christof Junge)
+@code{tron@@Veritas.COM} (Ronald S. Karr)
+Brendan Kehoe @code{<brendan@@cs.widener.edu>}
+@code{warlock@@csuchico.edu} (John Kennedy)
+@code{kersing@@nlmug.nl.mugnet.org} (Jac Kersing)
+Gabor Kiss @code{<kissg@@sztaki.hu>}
+@code{gero@@gkminix.han.de} (Gero Kuhlmann)
+@code{rob@@pact.nl} (Rob Kurver)
+@code{kent@@sparky.IMD.Sterling.COM} (Kent Landfield)
+@code{lebaron@@inrs-telecom.uquebec.ca} (Gregory LeBaron)
+@code{karl@@sugar.NeoSoft.Com} (Karl Lehenbauer)
+@code{alex@@hal.rhein-main.de} (Alexander Lehmann)
+@code{merlyn@@digibd.com} (Merlyn LeRoy)
+@code{clewis@@ferret.ocunix.on.ca} (Chris Lewis)
+@code{gdonl@@ssi1.com} (Don Lewis)
+@code{libove@@libove.det.dec.com} (Jay Vassos-Libove)
+@code{bruce%blilly@@Broadcast.Sony.COM} (Bruce Lilly)
+Ted Lindgreen @code{<tlindgreen@@encore.nl>}
+@code{andrew@@cubetech.com} (Andrew Loewenstern)
+"Arne Ludwig" @code{<arne@@rrzbu.hanse.de>}
+Matthew Lyle @code{<matt@@mips.mitek.com>}
+@code{djm@@eng.umd.edu} (David J. MacKenzie)
+John R MacMillan @code{<chance!john@@sq.sq.com>}
+Giles D Malet @code{<shrdlu!gdm@@provar.kwnet.on.ca>}
+@code{mem@@mv.MV.COM} (Mark E. Mallett)
+@code{pepe@@dit.upm.es} (Jose A. Manas)
+@code{peter@@xpoint.ruessel.sub.org} (Peter Mandrella)
+@code{martelli@@cadlab.sublink.org} (Alex Martelli)
+W Christopher Martin @code{<wcm@@geek.ca.geac.com>}
+Yanek Martinson @code{<yanek@@mthvax.cs.miami.edu>}
+@code{jm@@aristote.univ-paris8.fr} (Jean Mehat)
+@code{me@@halfab.freiburg.sub.org} (Udo Meyer)
+@code{les@@chinet.chi.il.us} (Leslie Mikesell)
+@code{mmitchel@@digi.lonestar.org} (Mitch Mitchell)
+Emmanuel Mogenet @code{<mgix@@krainte.jpn.thomson-di.fr>}
+@code{rmohr@@infoac.rmi.de} (Rupert Mohr)
+Jason Molenda @code{<molenda@@sequent.com>}
+@code{ianm@@icsbelf.co.uk} (Ian Moran)
+@code{brian@@ilinx.wimsey.bc.ca} (Brian J. Murrell)
+@code{service@@infohh.rmi.de} (Dirk Musstopf)
+@code{lyndon@@cs.athabascau.ca} (Lyndon Nerenberg)
+@code{rolf@@saans.north.de} (Rolf Nerstheimer)
+@code{tom@@smart.bo.open.de} (Thomas Neumann)
+@code{mnichols@@pacesetter.com}
+Richard E. Nickle @code{<trystro!rick@@Think.COM>}
+@code{stephan@@sunlab.ka.sub.org} (Stephan Niemz)
+@code{nolan@@helios.unl.edu} (Michael Nolan)
+david nugent @code{<david@@csource.oz.au>}
+Jim O'Connor @code{<jim@@bahamut.fsc.com>}
+Petri Ojala @code{<ojala@@funet.fi>}
+@code{oneill@@cs.ulowell.edu} (Brian 'Doc' O'Neill)
+@code{abekas!dragoman!mikep@@decwrl.dec.com} (Mike Park)
+Tim Peiffer @code{peiffer@@cs.umn.edu}
+@code{don@@blkhole.resun.com} (Don Phillips)
+"Mark Pizzolato 415-369-9366" @code{<mark@@infocomm.com>}
+John Plate @code{<plate@@infotek.dk>}
+@code{dplatt@@ntg.com} (Dave Platt)
+@code{eldorado@@tharr.UUCP} (Mark Powell)
+Mark Powell @code{<mark@@inet-uk.co.uk>}
+@code{pozar@@kumr.lns.com} (Tim Pozar)
+@code{putsch@@uicc.com} (Jeff Putsch)
+@code{ar@@nvmr.robin.de} (Andreas Raab)
+Jarmo Raiha @code{<jarmo@@ksvltd.FI>}
+Scott Reynolds @code{<scott@@clmqt.marquette.Mi.US>}
+@code{mcr@@Sandelman.OCUnix.On.Ca} (Michael Richardson)
+Kenji Rikitake @code{<kenji@@rcac.astem.or.jp>}
+@code{arnold@@cc.gatech.edu} (Arnold Robbins)
+@code{steve@@Nyongwa.cam.org} (Steve M. Robbins)
+Serge Robyns @code{<sr@@denkart.be>}
+Lawrence E. Rosenman @code{<ler@@lerami.lerctr.org>}
+Jeff Ross @code{<jeff@@wisdom.bubble.org>}
+Aleksey P. Rudnev @code{<alex@@kiae.su>}
+"Heiko W.Rupp" @code{<hwr@@pilhuhn.ka.sub.org>}
+@code{wolfgang@@wsrcc.com} (Wolfgang S. Rupprecht)
+@code{tbr@@tfic.bc.ca} (Tom Rushworth)
+@code{jsacco@@ssl.com} (Joseph E. Sacco)
+@code{rsalz@@bbn.com} (Rich Salz)
+@code{sojurn!mike@@hobbes.cert.sei.cmu.edu} (Mike Sangrey)
+Nickolay Saukh @code{<nms@@ussr.EU.net>}
+@code{heiko@@lotte.sax.de} (Heiko Schlittermann)
+Eric Schnoebelen @code{<eric@@cirr.com>}
+@code{russell@@alpha3.ersys.edmonton.ab.ca} (Russell Schulz)
+@code{scott@@geom.umn.edu}
+Igor V. Semenyuk @code{<iga@@argrd0.argonaut.su>}
+Christopher Sawtell @code{<chris@@gerty.equinox.gen.nz>}
+@code{schuler@@bds.sub.org} (Bernd Schuler)
+@code{uunet!gold.sub.org!root} (Christian Seyb)
+@code{s4mjs!mjs@@nirvo.nirvonics.com} (M. J. Shannon Jr.)
+@code{peter@@ficc.ferranti.com} (Peter da Silva)
+@code{vince@@victrola.sea.wa.us} (Vince Skahan)
+@code{frumious!pat} (Patrick Smith)
+@code{roscom!monty@@bu.edu} (Monty Solomon)
+@code{sommerfeld@@orchard.medford.ma.us} (Bill Sommerfeld)
+Julian Stacey @code{<stacey@@guug.de>}
+Harlan Stenn @code{<harlan@@mumps.pfcs.com>}
+Ralf Stephan @code{<ralf@@ark.abg.sub.org>}
+@code{johannes@@titan.westfalen.de} (Johannes Stille)
+@code{chs@@antic.apu.fi} (Hannu Strang)
+@code{ralf@@reswi.ruhr.de} (Ralf E. Stranzenbach)
+@code{sullivan@@Mathcom.com} (S. Sullivan)
+Shigeya Suzuki @code{<shigeya@@dink.foretune.co.jp>}
+@code{swiers@@plains.NoDak.edu}
+Oleg Tabarovsky @code{<olg@@olghome.pccentre.msk.su>}
+John Theus @code{<john@@theus.rain.com>}
+@code{rd@@aii.com} (Bob Thrush)
+ppKarsten Thygesen @code{<karthy@@dannug.dk>}
+Graham Toal @code{<gtoal@@pizzabox.demon.co.uk>}
+@code{rmtodd@@servalan.servalan.com} (Richard Todd)
+Martin Tomes @code{<mt00@@controls.eurotherm.co.uk>}
+Len Tower @code{<tower-prep@@ai.mit.edu>}
+Mark Towfiq @code{<justice!towfiq@@Eingedi.Newton.MA.US>}
+@code{mju@@mudos.ann-arbor.mi.us} (Marc Unangst)
+Tomi Vainio @code{<tomppa@@fidata.fi>}
+Andrew Vignaux @code{<ajv@@ferrari.datamark.co.nz>}
+@code{vogel@@omega.ssw.de} (Andreas Vogel)
+@code{jos@@bull.nl} (Jos Vos)
+@code{jv@@nl.net} (Johan Vromans)
+David Vrona @code{<dave@@sashimi.wwa.com>}
+@code{Marcel.Waldvogel@@nice.usergroup.ethz.ch} (Marcel Waldvogel)
+@code{steve@@nshore.org} (Stephen J. Walick)
+@code{syd@@dsinc.dsi.com} (Syd Weinstein)
+@code{gerben@@rna.indiv.nluug.nl} (Gerben Wierda)
+@code{jbw@@cs.bu.edu} (Joe Wells)
+@code{frnkmth!twwells.com!bill} (T. William Wells)
+Peter Wemm @code{<Peter_Wemm@@zeus.dialix.oz.au>}
+@code{mauxci!eci386!woods@@apple.com} (Greg A. Woods)
+Michael Yu.Yaroslavtsev @code{<mike@@yaranga.ipmce.su>}
+Alexei K. Yushin @code{<root@@july.elis.crimea.ua>}
+@code{jon@@console.ais.org} (Jon Zeeff)
+Matthias Zepf @code{<agnus@@amylnd.stgt.sub.org>}
+Eric Ziegast @code{<uunet!ziegast>}
+@end example
+
+@node Index (concepts), Index (configuration file), Acknowledgements, Top
+@unnumbered Concept Index
+
+@printindex cp
+
+@node Index (configuration file), , Index (concepts), Top
+@unnumbered Configuration File Index
+
+@printindex fn
+
+@contents
+@bye