1194 lines
49 KiB
Plaintext
1194 lines
49 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: Miscellaneous (sys), Next: Default sys File Values, Prev: File Transfer Control, Up: sys File
|
||
|
||
Miscellaneous sys File Commands
|
||
-------------------------------
|
||
|
||
`sequence BOOLEAN'
|
||
If BOOLEAN is true, then conversation sequencing is automatically
|
||
used for the remote system, so that if somebody manages to spoof
|
||
as the remote system, it will be detected the next time the
|
||
remote system actually calls. This is false by default.
|
||
|
||
`command-path STRING'
|
||
Specifies the path (a list of whitespace separated directories)
|
||
to be searched to locate commands to execute. This is only used
|
||
for commands requested by `uux', not for chat programs. The
|
||
default is from `policy.h'.
|
||
|
||
`commands STRINGS'
|
||
The list of commands which the remote system is permitted to
|
||
execute locally. For example: `commands rnews rmail'. If the
|
||
value is `ALL' (case significant), all commands may be executed.
|
||
The default is `rnews rmail'.
|
||
|
||
`free-space NUMBER'
|
||
Specify the minimum amount of file system space (in bytes) to
|
||
leave free after receiving a file. If the incoming file will not
|
||
fit, it will be rejected. This will only work when talking to
|
||
another instance of this package, since older UUCP packages do
|
||
not provide the file size of incoming files. There is no
|
||
provision for reserving space, so it is still possible for
|
||
multiple `uucico' daemons to use up all available file space; a
|
||
sufficiently large value for `free-space' will avoid this problem
|
||
to some extent. The default is from `policy.h'. Not all systems
|
||
may be able to provide the amount of available space.
|
||
|
||
`pubdir STRING'
|
||
Specifies the public directory that is used when `~' is specifed
|
||
in a file transfer or a list of directories. This essentially
|
||
overrides the public directory specified in the main
|
||
configuration file for this system only. The default is the
|
||
public directory specified in the main configuration file (which
|
||
defaults to a value from `policy.h').
|
||
|
||
`debug STRING ...'
|
||
Set additional debugging for calls to or from the system. This
|
||
may be used to debug a connection with a specific system. It is
|
||
particularly useful when debugging incoming calls, since
|
||
debugging information will be generated whenever the call comes
|
||
in. See the `debug' command in the main configuration file
|
||
(*note Debugging Levels::.) for more details. The debugging
|
||
information specified here is in addition to that specified in
|
||
the main configuration file or on the command line.
|
||
|
||
`max-remote-debug STRING ...'
|
||
When the system calls in, it may request that the debugging level
|
||
be set to a certain value. This command may be used to put a
|
||
limit on the debugging level which the system may request, to
|
||
avoid filling up the disk with debugging information. Only the
|
||
debugging types named in the `max-remote-debug' command may be
|
||
turned on by the remote system. To prohibit any debugging, use
|
||
`max-remote-debug none'. The default is
|
||
`abnormal,chat,handshake'; to turn off these default entries, you
|
||
must use `max-remote-debug none' followed by other
|
||
`max-remote-debug' commands specifying the settings you want.
|
||
|
||
`timetable STRING STRING'
|
||
This is actually not specific to a system; it can appear anywhere
|
||
in the file(s). In a future release this command will probably
|
||
be moved to the main configuration file.
|
||
|
||
The `timetable' defines a timetable that may be used in
|
||
subsequently appearing time strings; *Note Time Strings::. The
|
||
first string names the timetable entry; the second is a time
|
||
string.
|
||
|
||
The following `timetable' commands are predefined. The NonPeak
|
||
timetable is included for compatibility. It originally described
|
||
the offpeak hours of Tymnet and Telenet, but both have since
|
||
changed their schedules.
|
||
|
||
timetable Evening Wk1705-0755,Sa,Su
|
||
timetable Night Wk2305-0755,Sa,Su2305-1655
|
||
timetable NonPeak Wk1805-0655,Sa,Su
|
||
|
||
If this command does not appear, then obviously no additional
|
||
timetables will be defined.
|
||
|
||
|
||
File: uucp.info, Node: Default sys File Values, Prev: Miscellaneous (sys), Up: sys File
|
||
|
||
Default sys File Values
|
||
-----------------------
|
||
|
||
The following are used as default values for all systems; they can
|
||
be considered as appearing before the start of the file.
|
||
|
||
timetable Evening Wk1705-0755,Sa,Su
|
||
timetable Night Wk2305-0755,Sa,Su2305-1655
|
||
timetable NonPeak Wk1805-0655,Sa,Su
|
||
time Never
|
||
chat "" \r\c ogin:-BREAK-ogin:-BREAK-ogin: \L word: \P
|
||
chat-timeout 10
|
||
callback n
|
||
sequence n
|
||
request y
|
||
transfer y
|
||
local-send /
|
||
remote-send ~
|
||
local-receive ~
|
||
remove-receive ~
|
||
command-path [ from `policy.h' ]
|
||
commands rnews rmail
|
||
max-remote-debug abnormal,chat,handshake
|
||
|
||
|
||
File: uucp.info, Node: port File, Next: dial File, Prev: sys File, Up: Configuration Files
|
||
|
||
The Port Configuration File
|
||
===========================
|
||
|
||
The port files may be used to name and describe ports. The first
|
||
command in each file must be `port'. All command up to the next
|
||
`port' command then describe that port. There are different types of
|
||
ports; each type supports its own set of commands. Each command
|
||
indicates which types of ports support it. There may be many ports
|
||
with the same name; if a system requests a port by name then each port
|
||
with that name will be tried until an unlocked one is found.
|
||
|
||
`port STRING'
|
||
Introduces and names a port.
|
||
|
||
`type STRING'
|
||
Define the type of port. The default is `modem'. If this command
|
||
appears, it must immediately follow the `port' command. The type
|
||
defines what commands are subsequently allowed. Currently the
|
||
types are:
|
||
|
||
`modem'
|
||
For a modem hookup.
|
||
|
||
`stdin'
|
||
For a connection through standard input and standard output,
|
||
as when `uucico' is run as a login shell.
|
||
|
||
`direct'
|
||
For a direct connection to another system.
|
||
|
||
`tcp'
|
||
For a connection using TCP.
|
||
|
||
`protocol STRING'
|
||
Specify a list of protocols to use for this port. This is just
|
||
like the corresponding command for a system (*note Protocol
|
||
Selection::.). A protocol list for a system takes precedence
|
||
over a list for a port.
|
||
|
||
`protocol-parameter CHARACTER STRINGS [ any type ]'
|
||
The same command as the `protocol-parameter' command used for
|
||
systems (*note Protocol Selection::.). This one takes precedence.
|
||
|
||
`seven-bit BOOLEAN [ any type ]'
|
||
This is only used during protocol negotiation; if the argument is
|
||
`true', it forces the selection of a protocol which works across a
|
||
seven-bit link. It does not prevent eight bit characters from
|
||
being transmitted. The default is `false'.
|
||
|
||
`reliable BOOLEAN [ any type ]'
|
||
This is only used during protocol negotiation; if the argument is
|
||
`false', it forces the selection of a protocol which works across
|
||
an unreliable communication link. The default is `true'. It
|
||
would be more common to specify this for a dialer rather than a
|
||
port.
|
||
|
||
`device STRING [ modem and direct only ]'
|
||
Names the device associated with this port. If the device is not
|
||
named, the port name is taken as the device. Device names are
|
||
system dependent, but a Unix example would be `/dev/ttyd0'.
|
||
|
||
`baud NUMBER [ modem and direct only ]'
|
||
`speed NUMBER [modem and direct only ]'
|
||
The speed this port runs at. If a system specifies a speed but
|
||
no port name, then all ports which match the speed will be tried
|
||
in order. If the speed is not specified here and is not
|
||
specified by the system, the natural speed of the port will be
|
||
used by default.
|
||
|
||
`baud-range NUMBER NUMBER [ modem only ]'
|
||
`speed-range NUMBER NUMBER [ modem only ]'
|
||
Specify a range of speeds this port can run at. The first number
|
||
is the minimum speed, the second number is the maximum speed.
|
||
These numbers will be used when matching a system which specifies
|
||
a desired speed. The simple `speed' (or `baud') command is still
|
||
used to determine the speed to run at if the system does not
|
||
specify a speed. For example, the command `speed-range 300
|
||
19200' means that the port will match any system which uses a
|
||
speed from 300 to 19200 baud (and will use the speed specified by
|
||
the system); this could be combined with `speed 2400', which
|
||
means that when this port is used with a system that does not
|
||
specify a speed, the port will be used at 2400 baud.
|
||
|
||
`carrier BOOLEAN [ modem only ]'
|
||
The argument indicates whether the port supports carrier. If it
|
||
does not, carrier will never be required on this port, regardless
|
||
of what the modem chat script indicates. The default is `true'.
|
||
|
||
`dial-device STRING [ modem only ]'
|
||
Dialing instructions should be output to the named device, rather
|
||
than to the normal port device. The default is to output to the
|
||
normal port device.
|
||
|
||
`dialer STRING [ modem only ]'
|
||
Name a dialer to use. The information is looked up in the dialer
|
||
file. There is no default. Some sort of dialer information must
|
||
be specified to call out on a modem.
|
||
|
||
`dialer STRING ... [ modem only ]'
|
||
Execute a dialer command. If a dialer is named (by using the
|
||
first form of this command, described just above), these commands
|
||
are ignored. They may be used to specify dialer information
|
||
directly in simple situations without needing to go to a separate
|
||
file. There is no default. Some sort of dialer information must
|
||
be specified to call out on a modem.
|
||
|
||
`dialer-sequence STRINGS [ modem only ]'
|
||
Name a sequence of dialers and tokens (phone numbers) to use.
|
||
The first argument names a dialer, and the second argument names
|
||
a token. The third argument names another dialer, and so on. If
|
||
there are an odd number of arguments, the phone number specified
|
||
with a `phone' command in the system file is used as the final
|
||
token. The token is what is used for `\D' or `\T' in the dialer
|
||
chat script. If the token in this string is `\D', the system
|
||
phone number will be used; if it is `\T', the system phone number
|
||
will be used after undergoing dialcodes translation. A missing
|
||
final token is taken as `\D'.
|
||
|
||
This command currently does not work if `dial-device' is
|
||
specified; to handle this correctly will require a more
|
||
systematic notion of chat scripts. Moreover, only the `complete'
|
||
and `abort' chat scripts from the first dialer specified are
|
||
used, and only the protocol parameters from the first dialer are
|
||
used.
|
||
|
||
`lockname STRING [ modem and direct only ]'
|
||
Give the name to use when locking this port. On Unix, this is
|
||
the name of the file that will be created in the lock directory.
|
||
It is used as is, so on Unix it should generally start with
|
||
`LCK..'. For example, if a single port were named both
|
||
`/dev/ttycu0' and `/dev/tty0' (perhaps with different
|
||
characteristics keyed on the minor device number), then the
|
||
command `lockname LCK..ttycu0' could be used to force the latter
|
||
to use the same lock file name as the former.
|
||
|
||
`service STRING [ tcp only ]'
|
||
Name the TCP port number to use. This may be a number. If not,
|
||
it will be looked up in `/etc/services'. If this is not
|
||
specified, the string `uucp' is looked up in `/etc/services'. If
|
||
it is not found, port number 540 (the standard UUCP-over-TCP port
|
||
number) will be used.
|
||
|
||
|
||
File: uucp.info, Node: dial File, Next: Security, Prev: port File, Up: Configuration Files
|
||
|
||
The Dialer Configuration File
|
||
=============================
|
||
|
||
The dialer configuration files define dialers. The first command in
|
||
each file must be a `dialer' command, which names the dialer.
|
||
Subsequent commands up to the next `dialer' command are associated
|
||
with the named dialer.
|
||
|
||
`dialer STRING'
|
||
Introduces and names a dialer.
|
||
|
||
`chat STRINGS'
|
||
`chat-timeout NUMBER'
|
||
`chat-fail STRING'
|
||
`chat-seven-bit BOOLEAN'
|
||
`chat-program STRINGS'
|
||
Specify a chat script to be used to dial the phone. See *Note
|
||
Chat Scripts:: for full details on chat scripts.
|
||
|
||
Taylor UUCP will sleep for one second between attempts to dial
|
||
out on a modem. If your modem requires a longer wait period, you
|
||
must start your chat script with delays (`\d' in a send string).
|
||
|
||
The chat script will be read from and sent to the port specified
|
||
by the `dial-device' command for the port, if there is one.
|
||
|
||
The following escape addition escape sequences may appear in send
|
||
strings:
|
||
|
||
`\D'
|
||
send phone number without dialcode translation
|
||
|
||
`\T'
|
||
send phone number with dialcode translation
|
||
|
||
`\M'
|
||
do not require carrier
|
||
|
||
`\m'
|
||
require carrier (fail if not present)
|
||
|
||
See the description of the dialcodes file (*note Configuration
|
||
File Names::.) for a description of dialcode translation. If the
|
||
port does not support carrier (as set by the `carrier' command in
|
||
the port file) `\M' and `\m' are ignored. If both the port and
|
||
the dialer support carrier (as set by the `carrier' command in
|
||
the port file and the `carrier' command in the dialer file), then
|
||
every chat script implicitly begins with `\M' and ends with `\m'.
|
||
There is no default chat script for dialers.
|
||
|
||
The following additional escape sequences may be used in
|
||
`chat-program':
|
||
|
||
`\D'
|
||
phone number without dialcode translation
|
||
|
||
`\T'
|
||
phone number with dialcode translation
|
||
|
||
If the program changes the port in any way (e.g., sets parity) the
|
||
changes will be preserved during protocol negotiation, but once
|
||
the protocol is selected it will change the port settings.
|
||
|
||
`dialtone STRING'
|
||
A string to output when dialing the phone number which causes the
|
||
modem to wait for a secondary dial tone. This is used to
|
||
translate the `=' character in a phone number. The default is a
|
||
comma.
|
||
|
||
`pause STRING'
|
||
A string to output when dialing the phone number which causes the
|
||
modem to wait for 1 second. This is used to translate the `-'
|
||
character in a phone number. The default is a comma.
|
||
|
||
`carrier BOOLEAN'
|
||
If the argument is `true', the dialer supports the modem carrier
|
||
signal. After the phone number is dialed, `uucico' will require
|
||
that carrier be on. One some systems, it will be able to wait
|
||
for it. If the argument is `false', carrier will not be
|
||
required. The default is `true'.
|
||
|
||
`carrier-wait NUMBER'
|
||
If the port is supposed to wait for carrier, this may be used to
|
||
indicate how many seconds to wait. The default is 60 seconds.
|
||
Only some systems support waiting for carrier.
|
||
|
||
`dtr-toggle BOOLEAN BOOLEAN'
|
||
If the first argument is `true', then DTR is toggled before using
|
||
the modem. This is only supported on some systems and some
|
||
ports. The second BOOLEAN need not be present; if it is, and it
|
||
is `true', the program will sleep for 1 second after toggling DTR.
|
||
The default is not to toggle DTR.
|
||
|
||
`complete-chat STRINGS'
|
||
`complete-chat-timeout NUMBER'
|
||
`complete-chat-fail STRING'
|
||
`complete-chat-seven-bit BOOLEAN'
|
||
`complete-chat-program STRINGS'
|
||
These commands define a chat script (*note Chat Scripts::.) which
|
||
is run when a call is finished normally. This allows the modem
|
||
to be reset. There is no default. No additional escape
|
||
sequences may be used.
|
||
|
||
`complete STRING'
|
||
This is a simple use of `complete-chat'. It is equivalent to
|
||
`complete-chat "" STRING'; this has the effect of sending STRING
|
||
to the modem when a call finishes normally.
|
||
|
||
`abort-chat STRINGS'
|
||
`abort-chat-timeout NUMBER'
|
||
`abort-chat-fail STRING'
|
||
`abort-chat-seven-bit BOOLEAN'
|
||
`abort-chat-program STRINGS'
|
||
These commands define a chat script (*note Chat Scripts::.) to be
|
||
run when a call is aborted. They may be used to interrupt and
|
||
reset the modem. There is no default. No additional escape
|
||
sequences may be used.
|
||
|
||
`abort STRING'
|
||
This is a simple use of `abort-chat'. It is equivalent to
|
||
`abort-chat "" STRING'; this has the effect of sending STRING to
|
||
the modem when a call is aborted.
|
||
|
||
`protocol-parameter CHARACTER STRINGS'
|
||
Set protocol parameters, just like the `protocol-parameter'
|
||
command in the system configuration file or the port
|
||
configuration file; see *Note Protocol Selection::. These
|
||
parameters take precedence, then those for the port, then those
|
||
for the system.
|
||
|
||
`seven-bit BOOLEAN'
|
||
This is only used during protocol negotiation; if it is `true', it
|
||
forces selection of a protocol which works across a seven-bit
|
||
link. It does not prevent eight bit characters from being
|
||
transmitted. The default is `false'. It would be more common to
|
||
specify this for a port than for a dialer.
|
||
|
||
`reliable BOOLEAN'
|
||
This is only used during protocol negotiation; if it is `false',
|
||
it forces selection of a protocol which works across an unreliable
|
||
communication link. The default is `true'.
|
||
|
||
|
||
File: uucp.info, Node: Security, Prev: dial File, Up: Configuration Files
|
||
|
||
Security
|
||
========
|
||
|
||
This discussion of UUCP security applies only to Unix. It is a bit
|
||
cursory; suggestions for improvement are solicited.
|
||
|
||
UUCP is traditionally not very secure. Taylor UUCP addresses some
|
||
security issues, but is still far from being a secure system.
|
||
|
||
If security is very important to you, then you should not permit any
|
||
external access to your computer, including UUCP. Any opening to the
|
||
outside world is a potential security risk.
|
||
|
||
By default Taylor UUCP provides few mechanisms to secure local
|
||
users of the system from each other. You can allow increased security
|
||
by putting the owner of the UUCP programs (normally `uucp') into a
|
||
separate group; the use of this is explained in the following
|
||
paragraphs, which refer to this separate group as `uucp-group'.
|
||
|
||
When the `uucp' program is invoked to copy a file to a remote
|
||
system, it will by default copy the file into the UUCP spool directory.
|
||
When the `uux' program is used, the `-C' switch must be used to copy
|
||
the file into the UUCP spool directory. In any case, once the file
|
||
has been copied into the spool directory, other local users will not
|
||
be able to access it. In version 1.03 there is a security hole in
|
||
that for the file to be copied it must be readable by `uucp'.
|
||
Changing the group of the file to `uucp-group' and making it group
|
||
readable will permit UUCP to read it without granting access to other
|
||
users.
|
||
|
||
When a file is requested from a remote system, UUCP will only
|
||
permit it to be placed in a directory which is writable by the
|
||
requesting user. The directory must also be writable by UUCP. A
|
||
local user can create a directory with a group of `uucp-group' and set
|
||
the mode to permit group write access. This will allow the file be
|
||
requested without permitting it to be viewed by any other user.
|
||
|
||
There is no provision for security for `uucp' requests (as opposed
|
||
to `uux' requests) made by a user on a remote system. A file sent
|
||
over by a remote request may only be placed in a directory which is
|
||
world writable, and the file will be world readable and writable. This
|
||
will permit any local user to destroy or replace the contents of the
|
||
file. A file requested by a remote system must be world readable, and
|
||
the directory it is in must be world readable. Any local user will be
|
||
able to examine, although not necessarily modify, the file before it is
|
||
sent.
|
||
|
||
There are some security holes and race conditions that apply to the
|
||
above discussion which I will not elaborate on. They are not hidden
|
||
from anybody who reads the source code, but they are somewhat technical
|
||
and difficult (but scarcely impossible) to exploit. Suffice it to say
|
||
that even under the best of conditions UUCP is not completely secure.
|
||
|
||
For many sites, security from remote sites is a more important
|
||
consideration. Fortunately, Taylor UUCP does provide some support in
|
||
this area.
|
||
|
||
The greatest security is provided by always dialing out to the other
|
||
site. This prevents anybody from pretending to be the other site. Of
|
||
course, only one side of the connection can do this.
|
||
|
||
If remote dialins must be permitted, then it is best if the dialin
|
||
line is used only for UUCP. If this is the case, then you should
|
||
create a call-in password file (*note Configuration File Names::.) and
|
||
let `uucico' do its own login prompting. For example, to let remote
|
||
sites log in on a port named `entry' in the port file (*note port
|
||
file::.) you might invoke `uucico -p entry'. This would cause
|
||
`uucico' to enter an endless loop of login prompts and daemon
|
||
executions. The advantage of this approach is that even if remote
|
||
users break into the system by guessing or learning the password, they
|
||
will only be able to do whatever `uucico' permits them to do. They
|
||
will not be able to start a shell on your system.
|
||
|
||
If remote users can dial in and log on to your system, then you
|
||
have a security hazard more serious than that posed by UUCP. But
|
||
then, you probably knew that already.
|
||
|
||
Once your system has connected with the remote UUCP, there is a fair
|
||
amount of control you can exercise. You can use the `remote-send' and
|
||
`remote-receive' commands to control the directories the remote UUCP
|
||
can access. You can use the `request' command to prevent the remote
|
||
UUCP from making any requests of your system at all; however, if you
|
||
do this it will not even be able to send you mail or news. If you do
|
||
permit remote requests, you should be careful to restrict what
|
||
commands may be executed at the remote system's request. The default
|
||
is `rmail' and `rnews', which will suffice for most systems.
|
||
|
||
If different remote systems call in and they must be granted
|
||
different privileges (perhaps some systems are within the same
|
||
organization and some are not) then the `called-login' command should
|
||
be used for each system to require that they different login names.
|
||
Otherwise it would be simple for a remote system to use the `myname'
|
||
command and pretend to be a different system. The `sequence' command
|
||
can be used to detect when one system pretended to be another, but
|
||
since the sequence numbers must be reset manually after a failed
|
||
handshake this can sometimes be more trouble than it's worth.
|
||
|
||
|
||
File: uucp.info, Node: Protocols, Next: Hacking, Prev: Configuration Files, Up: Top
|
||
|
||
UUCP protocol internals
|
||
***********************
|
||
|
||
This chapter describes how the various UUCP protocols work, and
|
||
discusses some other internal UUCP issues.
|
||
|
||
This chapter is quite technical. You do not need to understand it,
|
||
or even read it, in order to use Taylor UUCP. It is intended for
|
||
people who are interested in how UUCP code works.
|
||
|
||
Most of the discussion covers the protocols used by all UUCP
|
||
packages, not just Taylor UUCP. Any information specific to Taylor
|
||
UUCP is indicated as such. There are some pointers to the actual
|
||
functions in the Taylor UUCP source code, for those who are extremely
|
||
interested in actual UUCP implementation.
|
||
|
||
* Menu:
|
||
|
||
* 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
|
||
|
||
|
||
File: uucp.info, Node: Grades, Next: Lock Files, Prev: Protocols, Up: Protocols
|
||
|
||
UUCP Grades
|
||
===========
|
||
|
||
Modern UUCP packages support grades for each command. The grades
|
||
generally range from `A' (the highest) to `Z' followed by `a' to `z'.
|
||
Taylor UUCP also supports `0' to `9' before `A'. Some UUCP packages
|
||
may permit any ASCII character as a grade.
|
||
|
||
On Unix, these grades are encoded in the name of the command file.
|
||
A command file name generally has the form
|
||
|
||
C.nnnngssss
|
||
|
||
where NNNN is the remote system name for which the command is queued,
|
||
G is a single character grade, and SSSS is a four character sequence
|
||
number. For example, a command file created for the system `airs' at
|
||
grade `Z' might be named
|
||
|
||
C.airsZ2551
|
||
|
||
The remote system name will be truncated to seven characters, to
|
||
ensure that the command file name will fit in the 14 character file
|
||
name limit of the traditional Unix file system. UUCP packages which
|
||
have no other means of distinguishing which command files are intended
|
||
for which systems thus require all *systems they connect to* to have
|
||
names that are unique in the first seven characters. Some UUCP
|
||
packages use a variant of this format which truncates the system name
|
||
to six characters. BNU uses a different spool directory format, which
|
||
allows up to fourteen characters to be used for each system name. The
|
||
Taylor UUCP spool directory format is configurable. The new Taylor
|
||
spool directory format permits system names to be as long as file
|
||
names; the maximum length of a file name depends on the particular
|
||
Unix file system being used.
|
||
|
||
The sequence number in the command file name may be a decimal
|
||
integer, or it may be a hexadecimal integer, or it may contain any
|
||
alphanumeric character. Different UUCP packages are different.
|
||
|
||
Taylor UUCP creates command files in the function
|
||
`zsysdep_spool_commands'. The file name is constructed by the
|
||
function `zsfile_name', which knows about all the different types of
|
||
spool directories supported by Taylor UUCP. The Taylor UUCP sequence
|
||
number can contain any alphanumeric character; the next sequence number
|
||
is determined by the function `fscmd_seq'.
|
||
|
||
I do not know how command grades are handled in non-Unix UUCP
|
||
packages.
|
||
|
||
Modern UUCP packages allow you to restrict file transfer by grade
|
||
depending on the time of day. Typically this is done with a line in
|
||
the `Systems' (or `L.sys') file like this:
|
||
|
||
airs Any/Z,Any2305-0855 ...
|
||
|
||
This allows only grades `Z' and above to be transferred at any
|
||
time. Lower grades may only be transferred at night. I believe that
|
||
this grade restriction applies to local commands as well as to remote
|
||
commands, but I am not sure. It may only apply if the UUCP package
|
||
places the call, not if it is called by the remote system. Taylor UUCP
|
||
can use the `timegrade' and `call-timegrade' commands (*note When to
|
||
Call::.) to achieve the same effect (and supports the above format
|
||
when reading `Systems' or `L.sys').
|
||
|
||
This sort of grade restriction is most useful if you know what
|
||
grades are being used at the remote site. The default grades used
|
||
depend on the UUCP package. Generally `uucp' and `uux' have different
|
||
defaults. A particular grade can be specified with the `-g' option to
|
||
`uucp' or `uux'. For example, to request execution of rnews on airs
|
||
with grade `d', you might use something like
|
||
|
||
uux -gd - airs!rnews <article
|
||
|
||
`uunet' queues up mail at grade `Z' and news at grade `d'. The
|
||
example above would allow mail to be received at any time, but would
|
||
only permit news to be transferred at night.
|
||
|
||
|
||
File: uucp.info, Node: Lock Files, Next: UUCP Protocol, Prev: Grades, Up: Protocols
|
||
|
||
UUCP Lock File Format
|
||
=====================
|
||
|
||
This discussion applies only to Unix. I have no idea how UUCP locks
|
||
ports on other systems.
|
||
|
||
UUCP creates files to lock serial ports and systems. On most (if
|
||
not all) systems, these same lock files are also used by cu to
|
||
coordinate access to serial ports. On some systems getty also uses
|
||
these lock files.
|
||
|
||
The lock file normally contains the process ID of the locking
|
||
process. This makes it easy to determine whether a lock is still
|
||
valid. The algorithm is to create a temporary file and then link it
|
||
to the name that must be locked. If the link fails because a file
|
||
with that name already exists, the existing file is read to get the
|
||
process ID. If the process still exists, the lock attempt fails.
|
||
Otherwise the lock file is deleted and the locking algorithm is
|
||
retried.
|
||
|
||
Older UUCP packages put the lock files in the main UUCP spool
|
||
directory, /usr/spool/uucp. BNU UUCP generally puts the lock files in
|
||
a directory of their own, usually /usr/spool/locks or /etc/locks.
|
||
|
||
The original UUCP lock file format encoded the process ID as a four
|
||
byte binary number. The order of the bytes was host-dependent. BNU
|
||
UUCP stores the process ID as a ten byte ASCII decimal number, with a
|
||
trailing newline. For example, if process 1570 holds a lock file, it
|
||
would contain the eleven characters space, space, space, space, space,
|
||
space, one, five, seven, zero, newline. Some versions of UUCP add a
|
||
second line indicating which program created the lock (uucp, cu, or
|
||
getty). I have also seen a third type of UUCP lock file which did not
|
||
contain the process ID at all.
|
||
|
||
The name of the lock file is generally "LCK.." followed by the base
|
||
name of the device. For example, to lock /dev/ttyd0 the file
|
||
LCK..ttyd0 would be created. There are various exceptions. On SCO
|
||
Unix, the lock file name is always forced to lower case even if the
|
||
device name has upper case letters. System V Release 4 UUCP forms the
|
||
lock file name using the major and minor device numbers rather than
|
||
the device name (this is pretty sensible if you think about it).
|
||
|
||
Taylor UUCP can be configured to use various different types of
|
||
locking. The actual locking code is in the function `fsdo_lock'.
|
||
|
||
|
||
File: uucp.info, Node: UUCP Protocol, Next: g Protocol, Prev: Lock Files, Up: Protocols
|
||
|
||
The Common UUCP Protocol
|
||
========================
|
||
|
||
The UUCP protocol is a conversation between two UUCP packages. A
|
||
UUCP conversation consists of three parts: an initial handshake, a
|
||
series of file transfer requests, and a final handshake.
|
||
|
||
Before the initial handshake, the caller will usually have logged
|
||
in the called machine and somehow started the UUCP package there. On
|
||
Unix this is normally done by setting the shell of the login name used
|
||
to `uucico'.
|
||
|
||
* Menu:
|
||
|
||
* Initial Handshake:: Initial handshake
|
||
* File Requests:: File requests
|
||
* Final Handshake:: Final handshake
|
||
|
||
|
||
File: uucp.info, Node: Initial Handshake, Next: File Requests, Prev: UUCP Protocol, Up: UUCP Protocol
|
||
|
||
Initial Handshake
|
||
-----------------
|
||
|
||
All messages in the initial handshake begin with a `^P' (a byte
|
||
with the octal value \020) and end with a null byte (\000).
|
||
|
||
Taylor UUCP implements the initial handshake for the calling
|
||
machine in `fdo_call', and for the called machine in `faccept_call'.
|
||
|
||
The initial handshake goes as follows. It is begun by the called
|
||
machine.
|
||
|
||
called: `\020Shere=HOSTNAME\000'
|
||
The HOSTNAME is the UUCP name of the called machine. Older UUCP
|
||
packages do not output it, and simply send `\020Shere\000'.
|
||
|
||
caller: `\020SHOSTNAME OPTIONS\000'
|
||
The HOSTNAME is the UUCP name of the calling machine. The
|
||
following OPTIONS may appear (or there may be none):
|
||
|
||
`-QSEQ'
|
||
Report sequence number for this conversation. The sequence
|
||
number is stored at both sites, and incremented after each
|
||
call. If there is a sequence number mismatch, something has
|
||
gone wrong (somebody may have broken security by pretending
|
||
to be one of the machines) and the call is denied. If the
|
||
sequence number changes on one of the machines, perhaps
|
||
because of an attempted breakin or because a disk backup was
|
||
restored, the sequence numbers on the two machines must be
|
||
reconciled manually.
|
||
|
||
`-xLEVEL'
|
||
Requests the called system to set its debugging level to the
|
||
specified value. This is not supported by all systems.
|
||
Taylor UUCP currently never generates this switch. When it
|
||
sees it, it restricts the value according to
|
||
`max-remote-debug' (*note Miscellaneous (sys)::.).
|
||
|
||
`-pGRADE'
|
||
`-vgrade=GRADE'
|
||
Requests the called system to only transfer files of the
|
||
specified grade or higher. This is not supported by all
|
||
systems. Some systems support `-p', some support
|
||
`-vgrade='. Taylor UUCP supports both.
|
||
|
||
`-R'
|
||
Indicates that the calling UUCP understands how to restart
|
||
failed file transmissions. Supported only by System V
|
||
Release 4 UUCP.
|
||
|
||
`-ULIMIT'
|
||
Reports the `ulimit' value of the calling UUCP. The limit is
|
||
specified as a base 16 number in C notation (e.g.,
|
||
`-U0x1000000'). This number is the number of 512 byte
|
||
blocks in the largest file which the calling UUCP can
|
||
create. The called UUCP may not transfer a file larger than
|
||
this. Supported by System V Release 4 UUCP. Taylor UUCP
|
||
understands this option, but never generates it.
|
||
|
||
`-N'
|
||
Indicates that the calling UUCP understands the Taylor UUCP
|
||
size limiting extensions. Supported only by Taylor UUCP.
|
||
|
||
called: `\020ROK\000'
|
||
There are actually several possible responses.
|
||
|
||
`ROK'
|
||
The calling UUCP is acceptable, and the handshake proceeds
|
||
to the protocol negotiation. Some options may also appear;
|
||
see below.
|
||
|
||
`ROKN'
|
||
The calling UUCP is acceptable, it specified `-N', and the
|
||
called UUCP also understands the Taylor UUCP size limiting
|
||
extensions. Supported only by Taylor UUCP.
|
||
|
||
`RLCK'
|
||
The called UUCP already has a lock for the calling UUCP,
|
||
which normally indicates the two machines are already
|
||
communicating.
|
||
|
||
`RCB'
|
||
The called UUCP will call back. This may be used to avoid
|
||
impostors. Note that only one machine out of each pair
|
||
should call back, or no conversation will ever begin.
|
||
|
||
`RBADSEQ'
|
||
The call sequence number is wrong (see the `-Q' discussion
|
||
above).
|
||
|
||
`RLOGIN'
|
||
The calling UUCP is using the wrong login name.
|
||
|
||
`RYou are unknown to me'
|
||
The calling UUCP is not known to the called UUCP, and the
|
||
called UUCP does not permit connections from unknown systems.
|
||
|
||
If the response is `ROK', the following options are supported by
|
||
System V Release 4 UUCP.
|
||
|
||
`-R'
|
||
The called UUCP knows how to restart failed file
|
||
transmissions.
|
||
|
||
`-ULIMIT'
|
||
Reports the ulimit value of the called UUCP. The limit is
|
||
specified as a base 16 number in C notation. This number is
|
||
the number of 512 byte blocks in the largest file which the
|
||
called UUCP can create. The calling UUCP may not send a
|
||
file larger than this.
|
||
|
||
`-xLEVEL'
|
||
I'm told that this is sometimes sent by SVR4 UUCP, but I'm
|
||
not sure exactly what it means. It may request the calling
|
||
UUCP to set its debugging level to the specified value.
|
||
|
||
If the response is not `ROK' (or `ROKN') both sides hang up the
|
||
phone, abandoning the call.
|
||
|
||
called: `\020PPROTOCOLS\000'
|
||
The `P' is a literal character. Note that the called UUCP outputs
|
||
two strings in a row. The PROTOCOLS string is a list of UUCP
|
||
protocols supported by the caller. Each UUCP protocol has a
|
||
single character name. For example, the called UUCP might send
|
||
`\020Pgf\000'.
|
||
|
||
caller: `\020UPROTOCOL\000'
|
||
The `U' is a literal character. The calling UUCP selects which
|
||
PROTOCOL to use out of the protocols offered by the called UUCP.
|
||
If there are no mutually supported protocols, the calling UUCP
|
||
sends `\020UN\000' and both sides hang up the phone. Otherwise
|
||
the calling UUCP sends something like `\020Ug\000'.
|
||
|
||
Most UUCP packages will consider each locally supported protocol in
|
||
turn and select the first one supported by the called UUCP. With some
|
||
versions of BNU UUCP, this can be modified by giving a list of
|
||
protocols after the device name in the Devices file or the `Systems'
|
||
file. Taylor UUCP provides the `protocol' command which may be used
|
||
either for a system (*note Protocol Selection::.) or a port (*note
|
||
port file::.).
|
||
|
||
After the protocol has been selected and the initial handshake has
|
||
been completed, both sides turn on the selected protocol. For some
|
||
protocols (notably `g') a further handshake is done at this point.
|
||
|
||
Each protocol supports a method for sending a command to the remote
|
||
system. This method is used to transmit a series of commands between
|
||
the two UUCP packages. At all times, one package is the master and the
|
||
other is the slave. Initially, the calling UUCP is the master.
|
||
|
||
If a protocol error occurs during the exchange of commands, both
|
||
sides move immediately to the final handshake.
|
||
|
||
|
||
File: uucp.info, Node: File Requests, Next: Final Handshake, Prev: Initial Handshake, Up: UUCP Protocol
|
||
|
||
File Requests
|
||
-------------
|
||
|
||
The master will send one of four commands: `S', `R', `X' or `H'.
|
||
|
||
Any file name referred to below is either an absolute pathname
|
||
beginning with `/', a public directory pathname beginning with `~/', a
|
||
pathname relative to a user's home directory beginning with `~USER/',
|
||
or a spool directory file name. File names in the spool directory are
|
||
not pathnames, but instead are converted to pathnames within the spool
|
||
directory by UUCP. They always begin with `C.' (for a command file
|
||
created by `uucp' or `uux'), `D.' (for a data file created by `uucp',
|
||
`uux' or by an execution, or received from another system for an
|
||
execution), or `X.' (for an execution file created by `uux' or
|
||
received from another system).
|
||
|
||
Taylor UUCP chooses which request to send next in the function
|
||
`fuucp'. This is also where Taylor UUCP processes incoming commands
|
||
from the remote system.
|
||
|
||
* Menu:
|
||
|
||
* S Request:: S request
|
||
* R Request:: R request
|
||
* X Request:: X request
|
||
* H Request:: H request
|
||
|
||
|
||
File: uucp.info, Node: S Request, Next: R Request, Prev: File Requests, Up: File Requests
|
||
|
||
S Request
|
||
.........
|
||
|
||
master: `S FROM TO USER -OPTIONS TEMP MODE NOTIFY SIZE'
|
||
|
||
The `S' and the `-' are literal characters. This is a request by
|
||
the master to send a file to the slave. Taylor UUCP handles the `S'
|
||
request in the function `fsend_file'.
|
||
|
||
FROM
|
||
The name of the file to send. If the `C' option does not appear
|
||
in OPTIONS, the master will actually open and send this file.
|
||
Otherwise the file has been copied to the spool directory, where
|
||
it is named TEMP. The slave ignores this field unless TO is a
|
||
directory, in which case the basename of FROM will be used as the
|
||
file name. If FROM is a spool directory filename, it must be a
|
||
data file created for or by an execution, and must begin with
|
||
`D.'.
|
||
|
||
TO
|
||
The name to give the file on the slave. If this field names a
|
||
directory the file is placed within that directory with the
|
||
basename of FROM. A name ending in `/' is taken to be a
|
||
directory even if one does not already exist with that name. If
|
||
TO begins with `X.', an execution file will be created on the
|
||
slave. Otherwise, if TO begins with `D.' it names a data file to
|
||
be used by some execution file. Otherwise, TO should not be in
|
||
the spool directory.
|
||
|
||
USER
|
||
The name of the user who requested the transfer.
|
||
|
||
OPTIONS
|
||
A list of options to control the transfer. The following options
|
||
are defined (all options are single characters):
|
||
|
||
`C'
|
||
The file has been copied to the spool directory (the master
|
||
should use TEMP rather than FROM).
|
||
|
||
`c'
|
||
The file has not been copied to the spool directory (this is
|
||
the default).
|
||
|
||
`d'
|
||
The slave should create directories as necessary (this is
|
||
the default).
|
||
|
||
`f'
|
||
The slave should not create directories if necessary, but
|
||
should fail the transfer instead.
|
||
|
||
`m'
|
||
The master should send mail to USER when the transfer is
|
||
complete.
|
||
|
||
`n'
|
||
The slave should send mail to NOTIFY when the transfer is
|
||
complete.
|
||
|
||
TEMP
|
||
If the `C' option appears in OPTIONS, this names the file to be
|
||
sent. Otherwise if FROM is in the spool directory, TEMP is the
|
||
same as FROM. Otherwise TEMP is a dummy string, normally `D.0'.
|
||
After the transfer has been succesfully completed, the master
|
||
will delete the file TEMP.
|
||
|
||
MODE
|
||
This is an octal number giving the mode of the file on the
|
||
master. If the file is not in the spool directory, the slave
|
||
will always create it with mode 0666, except that if (MODE &
|
||
0111) is not zero (the file is executable), the slave will create
|
||
the file with mode 0777. If the file is in the spool directory,
|
||
some UUCP packages will use the algorithm above and some will
|
||
always create the file with mode 0600 (Taylor UUCP does the
|
||
latter).
|
||
|
||
NOTIFY
|
||
This field is only used if the `n' option appears in OPTIONS.
|
||
Otherwise, it may not appear, or it may be the string `dummy', or
|
||
it may simply be a pair of double quotes. If the `n' option is
|
||
specified, then when the transfer is successfully completed the
|
||
slave will send mail to NOTIFY, which must be a legal mailing
|
||
address on the slave.
|
||
|
||
SIZE
|
||
This field is only present when doing size negotiation, either
|
||
with Taylor UUCP or SVR4 UUCP. It is the size of the file in
|
||
bytes. SVR4 UUCP sends the size in base 16 as 0x... while Taylor
|
||
UUCP sends the size as a decimal integer (a later version of
|
||
Taylor UUCP will probably change to the SVR4 behaviour).
|
||
|
||
The slave then responds with an S command response. Taylor UUCP
|
||
generates these responses in `freceive_file' and `ftransfer_fail'.
|
||
|
||
`SY START'
|
||
The slave is willing to accept the file, and file transfer
|
||
begins. The START field will only be present when using SVR4
|
||
file restart. It specifies the byte offset into the file at
|
||
which to start sending. If this is a new file, START will be 0x0.
|
||
|
||
`SN2'
|
||
The slave denies permission to transfer the file. This can mean
|
||
that the destination directory may not be accessed, or that no
|
||
requests are permitted. It implies that the file transfer will
|
||
never succeed.
|
||
|
||
`SN4'
|
||
The slave is unable to create the necessary temporary file. This
|
||
implies that the file transfer might succeed later.
|
||
|
||
`SN6'
|
||
This is only used by Taylor UUCP size negotiation. It means that
|
||
the slave considers the file too large to transfer at the moment,
|
||
but it may be possible to transfer it at some other time.
|
||
|
||
`SN7'
|
||
This is only used by Taylor UUCP size negotiation. It means that
|
||
the slave considers the file too large to ever transfer.
|
||
|
||
If the slave responds with `SY', a file transfer begins. When the
|
||
file transfer is complete, the slave sends a `C' command response.
|
||
Taylor UUCP generates this confirmation in `fprecfile_confirm' and
|
||
checks it in `fpsendfile_confirm'.
|
||
|
||
`CY'
|
||
The file transfer was successful.
|
||
|
||
`CN5'
|
||
The temporary file could not be moved into the final location.
|
||
This implies that the file transfer will never succeed.
|
||
|
||
After the `C' command response has been received (in the `SY' case)
|
||
or immediately (in an `SN' case) the master will send another command.
|
||
|
||
|
||
File: uucp.info, Node: R Request, Next: X Request, Prev: S Request, Up: File Requests
|
||
|
||
R Request
|
||
.........
|
||
|
||
master: `R FROM TO USER -OPTIONS SIZE'
|
||
|
||
The `R' and the `-' are literal characters. This is a request by
|
||
the master to receive a file from the slave. I do not know how SVR4
|
||
UUCP implements file transfer restart in this case. Taylor UUCP
|
||
implements the `R' request in `freceive_file'.
|
||
|
||
FROM
|
||
This is the name of the file on the slave which the master wishes
|
||
to receive. It must not be in the spool directory, and it may
|
||
not contain any wildcards.
|
||
|
||
TO
|
||
This is the name of the file to create on the master. I do not
|
||
believe that it can be a directory. It may only be in the spool
|
||
directory if this file is being requested to support an execution
|
||
either on the master or on some system other than the slave.
|
||
|
||
USER
|
||
The name of the user who requested the transfer.
|
||
|
||
OPTIONS
|
||
A list of options to control the transfer. The following options
|
||
are defined (all options are single characters):
|
||
|
||
`d'
|
||
The master should create directories as necessary (this is
|
||
the default).
|
||
|
||
`f'
|
||
The master should not create directories if necessary, but
|
||
should fail the transfer instead.
|
||
|
||
`m'
|
||
The master should send mail to USER when the transfer is
|
||
complete.
|
||
|
||
SIZE
|
||
This only appears if Taylor UUCP size negotiation is being used.
|
||
It specifies the largest file which the master is prepared to
|
||
accept (when using SVR4 UUCP, this was specified in the `-U'
|
||
option during the initial handshake).
|
||
|
||
The slave then responds with an `R' command response. Taylor UUCP
|
||
generates these responses in `fsend_file' and `ftransfer_fail'.
|
||
|
||
`RY MODE'
|
||
The slave is willing to send the file, and file transfer begins.
|
||
MODE is the octal mode of the file on the slave. The master uses
|
||
this to set the mode of the file on the master's system just as
|
||
the slave does the MODE argument in the send command (*note S
|
||
Request::.).
|
||
|
||
`RN2'
|
||
The slave is not willing to send the file, either because it is
|
||
not permitted or because the file does not exist. This implies
|
||
that the file request will never succeed.
|
||
|
||
`RN6'
|
||
This is only used by Taylor UUCP size negotiation. It means that
|
||
the file is too large to send, either because of the size limit
|
||
specifies by the master or because the slave considers it too
|
||
large. The file transfer might succeed later, or it might not
|
||
(this will be cleared up in a later release of Taylor UUCP).
|
||
|
||
If the slave responds with `RY', a file transfer begins. When the
|
||
file transfer is complete, the master sends a `C' command. The slave
|
||
pretty much ignores this, although it may log it. Taylor UUCP sends
|
||
this confirmation in `fprecfile_confirm' and checks it in
|
||
`fpsendfile_confirm'.
|
||
|
||
`CY'
|
||
The file transfer was successful.
|
||
|
||
`CN5'
|
||
The temporary file could not be moved into the final location.
|
||
|
||
After the `C' command response has been sent (in the `RY' case) or
|
||
immediately (in an `RN' case) the master will send another command.
|
||
|
||
|
||
File: uucp.info, Node: X Request, Next: H Request, Prev: R Request, Up: File Requests
|
||
|
||
X Request
|
||
.........
|
||
|
||
master: `X FROM TO USER -OPTIONS'
|
||
|
||
The `X' and the `-' are literal characters. This is a request by
|
||
the master to, in essence, execute `uucp' on the slave. The slave
|
||
should execute `uucp FROM TO'. Taylor UUCP generates the `X' request
|
||
in `fxcmd' and handles it in `fdo_xcmd'.
|
||
|
||
FROM
|
||
This is the name of the file or files on the slave which the
|
||
master wishes to transfer. Any wildcards are expanded on the
|
||
slave. If the master is requesting that the files be transferred
|
||
to itself, the request would normally contain wildcard
|
||
characters, since otherwise an `R' command would suffice. The
|
||
master can also use this command to request that the slave
|
||
transfer files to a third system.
|
||
|
||
TO
|
||
This is the name of the file or directory to which the files
|
||
should be transferred. This will normally use a UUCP name. For
|
||
example, if the master wishes to receive the files itself, it
|
||
would use `MASTER!PATH'.
|
||
|
||
USER
|
||
The name of the user who requested the transfer.
|
||
|
||
OPTIONS
|
||
A list of options to control the transfer. It is not clear
|
||
which, if any, options are supported by most UUCP packages.
|
||
Taylor UUCP ignores the options field.
|
||
|
||
The slave then responds with an X command response. Taylor UUCP
|
||
sends this response in either `fxcmd_confirm' or `ftransfer_fail'.
|
||
|
||
`XY'
|
||
The request was accepted, and the appropriate file transfer
|
||
commands have been queued up for later processing.
|
||
|
||
`XN'
|
||
The request was denied. No particular reason is given.
|
||
|
||
In either case, the master will then send another command.
|
||
|
||
|
||
File: uucp.info, Node: H Request, Prev: X Request, Up: File Requests
|
||
|
||
H Request
|
||
.........
|
||
|
||
master: `H'
|
||
|
||
This is used by the master to hang up the connection. The slave
|
||
will respond with an `H' command response. Taylor UUCP processes this
|
||
request in `fhangup_request', `fhangup_reply', and `fgetcmd'.
|
||
|
||
`HY'
|
||
The slave agrees to hang up the connection. In this case the
|
||
master sends another `HY' command. In some UUCP packages,
|
||
including Taylor UUCP, the slave will then send a third `HY'
|
||
command. At this point the protocol is shut down, and the final
|
||
handshake is begun.
|
||
|
||
`HN'
|
||
The slave does not agree to hang up. In this case the master and
|
||
the slave exchange roles. The next command will be sent by the
|
||
former slave, which is the new master. The roles may be reversed
|
||
several times during a single connection.
|
||
|
||
|