NetBSD/gnu/libexec/uucp/uucp.info-1

1149 lines
48 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Info file uucp.info, produced by Makeinfo, -*- Text -*- from input
file uucp.texi.
This file documents Taylor UUCP, version 1.03.
Copyright (C) 1992 Free Software Foundation, Inc.
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.

File: uucp.info, Node: Top, Next: Copying, Prev: (dir), Up: (dir)
Taylor UUCP 1.03
****************
This is the documentation for the Taylor UUCP package, version 1.03.
The programs were written by Ian Lance Taylor. The author can be
reached at `<ian@airs.com>', or, equivalently, `<uunet!airs!ian>', or
`c/o Infinity Development, P.O. Box 520, Waltham MA, 02254'.
There is a mailing list for discussion of the package. To join the
list, send a message to `<taylor-uucp-request@gnu.ai.mit.edu>'. Make
sure you include the address you want to receive messages at; do not
rely on the `From:' header. To send a message to the list, send it to
`<taylor-uucp@gnu.ai.mit.edu>'.
* 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
* Usage:: Using Taylor UUCP
* TCP:: TCP together with Taylor UUCP
Taylor UUCP Configuration Files
* Configuration File Format:: Configuration file format
* 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
UUCP protocol internals
* Grades:: UUCP grades
* Lock Files:: UUCP lock file format
* UUCP Protocol:: The common UUCP protocol
* g Protocol:: The UUCP `g' protocol
* f Protocol:: The UUCP `f' protocol
* t Protocol:: The UUCP `t' protocol
* e Protocol:: The UUCP `e' protocol
* x Protocol:: The UUCP `x' protocol
* d Protocol:: The UUCP `d' protocol
* Capital G Protocol:: The UUCP `G' protocol
* Documentation References:: Documentation references
The Common UUCP Protocol
* Initial Handshake:: Initial handshake
* File Requests:: File requests
* Final Handshake:: Final handshake
File Requests
* S Request:: S request
* R Request:: R request
* X Request:: X request
* H Request:: H request
Hacking Taylor UUCP
* System Dependence:: System Dependence
* Naming Conventions:: Naming Conventions
* Patches:: Patches

File: uucp.info, Node: Copying, Next: Introduction, Prev: Top, Up: Top
Taylor UUCP Copying Conditions
******************************
This package is covered by the GNU Public License. See the 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
"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.

File: uucp.info, Node: Introduction, Next: Overall Installation, Prev: Copying, Up: Top
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, the names of which were
established by earlier UUCP packages.
`uucp'
The `uucp' program is used to copy file between systems. It is
similar to the standard Unix `cp' program, except that you can
refer to a file on a remote system by using `system!' before the
file name. For example, to copy the file `notes.txt' to the
system `airs', you would say `uucp notes.txt airs!~/notes.txt'.
In this example `~' is used to name the UUCP public directory on
`airs'.
`uux'
The `uux' program is used to request a program to be executed on a
remote system. This is how mail and news are transferred over
UUCP. As with `uucp', programs and files on remote systems may
be named by using `system!'. For example, to run the `rnews'
program on `airs' passing it standard input, you would say `uux -
airs!rnews'. The `-' means to read standard input and set things
up so that when `rnews' runs on `airs' it will receive the same
standard input.
Neither `uucp' nor `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. Usually the daemon will also be started
regularly to check if there is any work to be done and to do it. The
advantage of this system 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.
`uustat'
The `uustat' program does several things. By default it will
simply list all the jobs you have queued with `uucp' or `uux'
that have not yet been processed. You can use `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 systems your system knows about.
`uuname'
The `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.
`uulog'
The `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.
These five programs just described, `uucp', `uux', `uustat',
`uuname', and `uulog', are the user programs provided by Taylor UUCP.
The first two add requests to the work queue, the third examines the
work queue, the fourth examines the configuration files, and the last
examines the log files. The real work is actually done by two daemon
processes, which are normally run automatically rather than by a user.
`uucico'
The `uucico' daemon is the program which actually calls the remote
system and transfers files and requests. `uucico' is normally
started automatically by `uucp' and `uux'. Most systems will
also start it periodically to make sure that all work requests are
handled. `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, `uucico' leaves the
requests in the queue and goes on to the next system to call. It
is also possible to force `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.
`uuxqt'
The `uuxqt' daemon processes execution requests made by the `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 `uucico'.
Suppose you, on the system `bantam', want to copy a file to the
system `airs'. You would run the `uucp' command locally, with a
command like `uucp notes.txt airs!~/notes.txt'. This would queue up a
request on `bantam' for `airs', and would then start the `uucico'
daemon. `uucico' would see that there was a request for `airs' and
attempt to call it. When the call succeeded, another copy of `uucico'
would be started on `airs'. The two copies of `uucico' would tell
each other what they had to do and transfer the file from `bantam' to
`airs'. When the file transfer was complete the `uucico' on `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 `bantam' has a mail message to
send to `ian' at `airs', it executes `uux - airs!rmail ian' and writes
the mail message to the `uux' process as standard input. The `uux'
program, running on `bantam', will read the standard input and store
it and the `rmail' request on the work queue for `airs'. `uux' will
then start the `uucico' daemon. The `uucico' daemon will call up
`airs', just as in the `uucp' example, and transfer the work request
and the mail message itself. The `uucico' daemon on `airs' will put
the files on a local work queue. When the communication session is
over, the `uucico' daemon on `airs' will start the `uuxqt' daemon.
`uuxqt' will see the request to run, and will run `rmail ian' with the
mail message as standard input. The `rmail' program, which is not
part of the UUCP package, is then responsible for either putting the
message in the right mailbox on `airs' or forwarding the message on to
another system.
Taylor UUCP comes with two other programs that are useful when
installing and configuring UUCP.
`uuchk'
The `uuchk' program reads the UUCP configuration files and
displays a rather lengthy description of what it finds. This is
very useful when configuring UUCP to make certain that the UUCP
package will do what you expect it to do.
`tstuu'
The `tstuu' program is a test harness for the UUCP package, which
will help ensure that it has been configured and compiled
correctly. It does not test everything, however, and it only
runs on Unix systems which support Berkeley style
pseudo-terminals. It can be useful when initially installing
Taylor UUCP.

File: uucp.info, Node: Overall Installation, Next: Configuration Files, Prev: Introduction, Up: Top
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
* Usage:: Using Taylor UUCP
* TCP:: TCP together with Taylor UUCP

File: uucp.info, Node: Configuration, Next: Compilation, Prev: Overall Installation, Up: Overall Installation
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; *Note
Configuration files::. It also supports V2 configuration files
(`L.sys', `L-devices', etc.) and BNU configuration files (`Systems',
`Devices', etc.). No documentation is provided for V2 or BNU
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 `acucap' or `modemcap'); however, V2 configuration files
can be used with a new style dialer file (*note dial file::.), or with
a BNU `Dialers' file.
Use of BNU configuration files has two known bugs. A blank line in
the middle of an entry in the `Permissions' file will not be ignored as
it should be. Dialer programs are not recognized directly. If you
must use a dialer program, rather than an entry in `Devices', you must
use the `chat-program' command in a new style dialer file; see *Note
dial file::. You will have to invoke the dialer program via a shell
script, since an exit code of 0 is required to recognize success.
If you are installing a new system, or you want to use the new form
of configuration files, you must write the configuration files.
You must also decide what sort of spool directory you want to use.
If you will only be using these programs, I recommend
`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 `sys3.unx'.

File: uucp.info, Node: Compilation, Next: Testing, Prev: Configuration, Up: Overall Installation
Compiling Taylor UUCP
=====================
1. Take a look at the top of `Makefile.in' and set the appropriate
values for your system. These control where the program is
installed and which user on the system owns them (normally they
will be owned by a special user `uucp' rather than a real person;
they should probably not be owned by `root').
2. Run the shell script `configure'. This script was generated using
David MacKenzie's `autoconf' program. It takes a while to run.
It will generate a file `conf.h', and copy `Makefile.in' to
`Makefile' with substitions (specifically, it will replace all
words between `@' characters in `Makefile.in').
You can pass certain arguments to `configure' in the
environment. Because `configure' will compile and run 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:
`CC'
The C compiler. If this is not set, then if `configure' can
find `gcc' it will use `gcc -O', otherwise it will use `cc'.
`DEFS'
Flags to pass the C compiler during configuration testing.
If this is not set, `configure' will use the empty string.
`CFLAGS'
Flags to pass to the C compiler when compiling the actual
code. If this is not set, `configure' will use `-g'.
`LDFLAGS'
Flags to pass to the C compiler when only linking, not
compiling. If this is not set, `configure' will use the
empty string.
`LIBS'
Libraries to pass to the C compiler. If this is not set,
`configure' will use the empty string.
`INSTALL'
The program to run to install UUCP in the binary directory.
If `configure' finds the BSD `install' program, it will set
this to `install -c'; otherwise, it will use `cp'.
`INSTALLDATA'
The program to run to install UUCP data files, such as the
man pages and the info pages. If `configure' finds the BSD
`install' program, it will set this to `install -c -m 644';
otherwise, it will use `cp'.
Suppose you want to set the environment variable `CC' to
`rcc'. If you are using `sh' or `bash', invoke `configure' as
`CC=rcc configure'. If you are using `csh', do `setenv CC rcc;
sh configure'.
On some systems you will want to use `LIBS=-lmalloc'. On some
you will want `LIBS=-lsocket'. On Xenix derived systems do not
use `LIBS=-lx' because this will bring in the wrong versions of
certain routines; if you want to use `-lx' you must specify
`LIBS=-lc -lx'.
If `configure' fails for some reason, or if you have a very
wierd system, you may have to configure the package by hand. To
do this, copy the file `conf.h-dist' to `conf.h' and edit it for
your system. Then copy `Makefile.in' to `Makefile', find the
words within `@' characters, and set them correctly for your
system.
3. You should verify that `configure' worked correctly by checking
the files `conf.h' and `Makefile'.
4. This package uses the `alloca' function. The `configure' script
will try to figure out how to make it work on your system. If
`alloca' cannot be found, a simplistic substitute from `alloca.c'
will be used. If you provide your own `alloca.o' file, it will
be used instead; you might, for example, use the one from the GNU
emacs distribution. If none of this makes any sense to you,
don't worry; everything will probably work fine.
5. Edit `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.
6. Type `make' to compile everything. You may get warnings about
implicit function declarations; ignore these (if you think they
can be eliminated, and you really know what you are talking
about, you may tell me about them). You may also get warnings
about `getopt.c' (this is from the GNU library and I do not want
to change it) and about a variable not protected from `setjmp' in
`sys2.c' (the data flow ensures that this can never be a
problem). The `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. If you have any other problems
there is probably a bug in the `configure' script.
7. Please report any problems you have. That is the only way they
will get fixed for other people. Supply a patch if you can, or
just ask for help.

File: uucp.info, Node: Testing, Next: Installation, Prev: Compilation, Up: Overall Installation
Testing Taylor UUCP
===================
This package is in use at many sites, and has been running at
`airs.com' for several months. 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 `uuchk' program to test your configuration files.
It will read them and print out a verbose description. This is
particularly important if you are using V2 or BNU configuration files,
because there may be bugs in how they are read. This program should
not be made suid, because it will display passwords if it can read
them.
If your system supports BSD style pseudo-terminals, and you
compiled the code to support the new style of configuration files, you
should be able to use the `tstuu' program to test the `uucico' daemon.
Just type `tstuu' with no arguments while logged in to the compilation
directory (since it runs `./uucp', `./uux' and `./uucico') to 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 `/usr/tmp'. You
will probably want to put it in the background. Do not use `^Z',
because the program traps on `SIGCHLD' and winds up dying. It will
create a directory `/usr/tmp/tstuu' and fill it with configuration
files, and create spool directories `/usr/tmp/tstuu/spool1' and
`/usr/tmp/tstuu/spool2'.
The program will finish with an execute file `X.SOMETHING' and a
data file `D.SOMETHING' in `/usr/tmp/tstuu/spool1' (or, more likely,
in subdirectories, depending on the choice of `SPOOLDIR' in
`sysdep.h'). The log files `/usr/tmp/tstuu/Log1' and
`/usr/tmp/tstuu/Log2' (or, if you have selected `HAVE_BNU_LOGGING',
`/usr/tmp/tstuu/Log1/uucico/test2' and
`/usr/tmp/tstuu/Log2/uucico/test1') should look fairly normal. You
can test `uuxqt' by typing `./uuxqt -I /usr/tmp/tstuu/Config1'. This
should leave a command file `C.SOMETHING' and a data file
`D.SOMETHING' in `/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 `-x'
switch can be used to set debugging modes; see the `debug' command for
details (*note Debugging Levels::.). Use `-x all' to turn on all
debugging and generate far more output than you will ever want to see.
The `uucico' daemons will put debugging output in
`/usr/tmp/tstuu/Debug1' and `/usr/tmp/tstuu/Debug2'. At this point
you're pretty much on your own.
On some systems you can also use `tstuu' to test my `uucico'
against the system `uucico', by using the `-u' switch. For this to
work, change the definitions of `ZUUCICO_CMD' and `UUCICO_EXECL' at
the top of `tstuu.c' to something appropriate for your system. The
definitions in `tstuu.c' are what I used for Ultrix 4.0, in which
`/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 `/usr/lib/uucp/uucico'. Calling login in
this way will leave fake entries in `wtmp' and `utmp'; if you compile
`tstout.c' (in the `contrib' directory) as an suid `root' program,
`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 `root'
(`uucp' might also have worked) before I could run
`/usr/lib/uucp/uucico'.
You can test `uucp' and `uux' (give them the `-r' switch to keep
them from starting `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 `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 (*note Configuration files::.), or use an existing configuration.
Tell `uucico' to dial out to the system by using the `-s' system
switch (e.g. `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 `debug' command (*note Debugging Levels::.). When
initially setting up a connection `-x chat' is probably the most
useful (e.g. `uucico -s uunet -x chat'); you may also want to use `-x
handshake,incoming,outgoing'. You can use `-x' multiple times on one
command line, or you can give it comma separated arguments as in the
last example. Use `-x all' to turn on all possible debugging
information. The debugging information is written to a file, normally
`/usr/spool/uucp/Debug' although the default can be changed in
`policy.h' and the configuration file can override the name with the
`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 `uucp' user.
You can use the `-f' switch to force `uucico' to call out even if
the last call failed recently; using `-S' when naming a system has the
same effect. Otherwise the status file (in the `.Status' subdirectory
of the main spool directory, normally `/usr/spool/uucp') will prevent
too many attempts from occurring in rapid succession.
Again, let me know about any problems you have and how you got
around them.

File: uucp.info, Node: Installation, Next: Usage, Prev: Testing, Up: Overall Installation
Installing Taylor UUCP
======================
You can install by suing to `root' and typing `make install'. Or
you can look at what make install does and do it by hand. It tries to
preserve your old programs, if any. You can retrieve them by typing
`make uninstall'.

File: uucp.info, Node: Usage, Next: TCP, Prev: Installation, Up: Overall Installation
Using Taylor UUCP
=================
This package does not come with any fancy shell scripts or
scheduling programs. Maybe someday. If you have another package, you
may well be able to use the scheduling mechanisms it provides.
Otherwise, the program can be used by making crontab entries.
Whenever you want to call all systems with outstanding work, use
uucico -r1
Whenever you want to call a specific system `foo', use
uucico -s foo
If you want to make sure that a system foo gets retried if the
original call fails, create an empty work file for it. For example,
if using `SPOOLDIR_TAYLOR',
touch /usr/spool/uucp/foo/C./C.A0000
If using `SPOOLDIR_BNU', use
touch /usr/spool/uucp/foo/C.fooA0000
I use the following crontab entries locally:
45 * * * * /bin/echo /usr/lib/uucp/uucico -r1 | /bin/su uucpa
40 4,10,15 * * * touch /usr/spool/uucp/uunet/C./C.A0000
Every hour, at 45 minutes past, this will check if there is any
work to be done. Also, at 4:40am, 10:40am and 3:40pm this will create
an empty work file for `uunet', forcing the next check to call `uunet'.
You will also want to periodically trim the log files, which by
default are `/usr/spool/uucp/Log' and `/usr/spool/uucp/Stats'. The
`savelog' program in the `contrib' directory may be of use.

File: uucp.info, Node: TCP, Prev: Usage, Up: Overall Installation
TCP together with Taylor UUCP
=============================
If your system has a Berkeley style socket 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 *Note
Configuration files::. Basically, you can just add the line `port
type tcp' to the entry in the system configuration file. By default
UUCP will get the port number by looking up `uucp' in `/etc/services';
if `uucp' is not found, port 540 will be used. You can set the port
number to use with the command `port service XXX', where XXX can be
either a number or a name to look up in `/etc/services'. You can
specify the address of the remote host with `address 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
`L.sys':
foo Any TCP uucp foo.domain chat-script
This will make an entry for system foo, to be called at any time,
over TCP, using port number `uucp' (as found in `/etc/services'; this
may be specified as a number), using remote host `foo.domain', with
some chat script.
If you are using BNU configuration files, add a line like this to
Systems:
foo Any TCP - foo.domain chat-script
and a line like this to Devices:
TCP uucp - -
You only need one line in Devices regardless of how many systems you
contact over TCP. This will make an entry for system foo, to be called
at any time, over TCP, using port number `uucp' (as found in
`/etc/services'; this may be specified as a number), using remote host
`foo.domain', with some chat script.
The `uucico' daemon can also be run as a TCP server. This code
mostly works, but it's not perfect. I don't recommend investigating it
unless you are willing to tinker a bit. You will not be able to use
the default port number because `uucico' will not be running as `root'
and will therefore not be able to bind a reserved port.
Basically, you must define a port, either using the port file
(*note port file::.) if you are using the new configuration method or
with an entry in Devices if you are using BNU; there is no way to
define a port using V2. If you are using BNU the port must be named
`TCP'; a line as shown above will suffice. You can then start
`uucico' as `uucico -p TCP' (after the `-p', name the port; in BNU it
must be `TCP'). This will wait for incoming connections, and fork off
a child for each one. Each connection will be prompted with `login:'
and `Password:'; the results will be checked against the UUCP (not the
system) password file (*note Configuration File Names::.). Of course,
you can get a similar effect by using the BSD `uucpd' program.
You can also have `inetd' start up `uucico' with the `-l' switch,
which will cause it to prompt with `login:' and `Password:' and check
the results against the UUCP (not the system) password file. This may
be used in place of `uucpd'.

File: uucp.info, Node: Configuration Files, Next: Protocols, Prev: Overall Installation, Up: Top
Taylor UUCP Configuration Files
*******************************
This chapter describes the configuration files accepted by the
Taylor UUCP package if compiled with `HAVE_TAYLOR_CONFIG' defined in
`conf.h'.
The configuration files are normally found in the directory
NEWCONFIGDIR, which is defined by the `Makefile' variable
`newconfigdir'; by default NEWCONFIGDIR is `/usr/local/lib/uucp'.
However, the main configuration 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 `-I'
option; this can be useful when testing a new configuration. When you
use the `-I' option the programs will revoke their setuid privileges.
* Menu:
* Configuration File Format:: Configuration file format
* 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

File: uucp.info, Node: Configuration File Format, Next: Configuration Examples, Prev: Configuration Files, Up: Configuration Files
Configuration File Format
=========================
All the configuration files follow a simple line-oriented `KEYWORD
VALUE' format. Empty lines are ignored, as are leading spaces; unlike
BNU, 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 `#' character is used for comments. Everything from a `#' to
the end of the line is ignored unless the `#' is preceded by a `\'
(backslash); if the `#' is preceeded by a `\', the `\' is removed but
the `#' remains in the line. This can be useful for a phone number
containing a `#'. To enter the sequence `\#', you would use `\\#'.
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 BOOLEAN
may be specified as `y', `Y', `t', or `T' for true and `n', `N', `f',
or `F' for false; any trailing characters are ignored, so `true',
`false', etc., are also acceptable.

File: uucp.info, Node: Configuration Examples, Next: Time Strings, Prev: Configuration File Format, Up: Configuration Files
Examples of Configuration Files
===============================
All the configuration commands are explained in the following
sections. However, I'll start by giving a few examples of
configuration files. For a more complete description of any of the
commands used here see the appropriate section of this chapter.
* 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

File: uucp.info, Node: config File Examples, Next: Leaf Example, Prev: Configuration Examples, Up: Configuration Examples
config File Examples
--------------------
To start with, here are some examples of uses of the main
configuration file, `config'. For a complete description of the
commands that are permitted in `config', see *Note config file::.
In many cases you will not need to create a `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 `airs.com' our
mail/news gateway machine is named `elmer.airs.com' (it is one of
several machines all named `LOCALNAME.airs.com'). If we did not
provide a `config' file, then our UUCP name would be `elmer'; however,
we actually want it to be `airs'. Therefore, we use the following
line in `config':
nodename airs
The UUCP spool directory name is set in `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 might use the following commands in `config' to change
to directories on the partition `/uucp':
spool /uucp/spool
pubdir /uucp/uucppublic
logfile /uucp/spool/Log
debugfile /uucp/spool/Debug
You would then move the contents of the current spool directory to
`/uucp/spool'. If you do this, make sure that no UUCP processes are
running while you change `config' and move the spool directory.
Suppose you wanted to permit any system to call in to your system
and request files. This is generally known as "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 `unknown' command in `config'. The `unknown' command is
followed by any command that may appear in the system file; for full
details, see *Note 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.
# No files may be transferred to this system
unknown 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 ~
Setting the public directory is convenient for the systems which call
in. It permits to request a file by prefixing it with `~/'. For
example, assuming your system is known as `server', then to retrieve
the file `/usr/spool/anonymous/INDEX' a user on a remote site could
just enter `uucp server!~/INDEX ~'; this would transfer `INDEX' from
`server''s public directory to the user's local public directory.
Note that when using `csh' or `bash' the `!' and the second `~' must
be quoted.
The next example will permit remote systems to upload files to a
special directory `/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.
# 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

File: uucp.info, Node: Leaf Example, Next: Gateway Example, Prev: config File Examples, Up: Configuration Examples
Leaf Example
------------
A relatively common simple case is a "leaf site", a system which
only calls or is called by a single remote site. Here is a typical
`sys' file that might be used in such a case. For full details on
what commands can appear in the `sys' file, see *Note sys file::.
This is the `sys' file that is used at `airs.com'. We use a single
modem to dial out to `uunet'. This example shows how you can specify
the port and dialer information directly in the `sys' file for simple
cases. It also shows the use of the following:
`call-login'
Using `call-login' and `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 (*note Configuration File Names::.).
`call-timegrade'
`uunet' is requested to not send us news during the daytime.
`chat-fail'
If the modem returns `BUSY' or `NO CARRIER' the call is
immediately aborted.
`protocol-parameter'
Since `uunet' tends to be slow, the default timeout has been
increased.
This `sys' file relies on certain defaults. It will allow `uunet'
to queue up `rmail' and `rnews' commands. It will allow users to
request files from `uunet' into the UUCP public directory. It will
also `uunet' to request files from the UUCP public directory; in fact
`uunet' never requests files, but for additional security we could add
the line `request false'.
# 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 baud 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

File: uucp.info, Node: Gateway Example, Prev: Leaf Example, Up: Configuration Examples
Gateway Example
---------------
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 "gateway" machine.
For this example I will assume a fairly simple case. It should
still provide a good general example. There are three machines,
`elmer', `comton' and `bugs'. `elmer' is the gateway machine for
which I will show the configuration file. `elmer' calls out to
`uupsi'. As an additional complication, `uupsi' knows `elmer' as
`airs'; this will show how a machine can have one name on an internal
network but a different name to the external world. `elmer' has two
modems. It also has an TCP/IP connection to `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 `sys' file.
However, for pedagogical purposes I will show two separate `sys'
files, one for the local systems and one for `uupsi'. This is done
with the `sysfile' command in the `config' file. Here is the `config'
file.
# 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
Using the defaults feature of the `sys' file can greatly simplify
the listing of local systems. Here is `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.
# 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
The `sys.remote' file describes the `uupsi' connection. The
`myname' command is used to change the UUCP name to `airs' when
talking to `uupsi'.
# 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
The ports are defined in the file `port' (*note port file::.). For
this example they are both connected to the same type of 2400 baud
Hayes-compatible modem.
# 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
Dialers are described in the `dial' file (*note dial file::.).
# 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

File: uucp.info, Node: Time Strings, Next: Chat Scripts, Prev: Configuration Examples, Up: Configuration Files
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 `|' or a command `,'.
Each simple time string must begin with `Su', `Mo', `Tu', `We',
`Th', `Fr', or `Sa', or `Wk' for any weekday, or `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
`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 `Never', which
does not match any time, or a single word with a name defined in a
previous `timetable' command (*note Miscellaneous (sys)::.).
Here are a few sample time strings with an explanation of what they
mean.
`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, `2305' rather than `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.
`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.
`Any'
Since no time is specified, this means any time on any day.