1149 lines
48 KiB
Plaintext
1149 lines
48 KiB
Plaintext
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.
|
||
|
||
|