dfbe7fa063
This package contains the standard UUCP package from the Free Software Foundation, with uucico, uusched, uuxqt, uux, uucp, uustat, uulog, uuname, uuto, uupick and cu. Added files Added install files, man manuals and patches. Fixed whitespace and using vman Removed -R Added suggested changes Added underlining New suggested changes
8833 lines
376 KiB
Diff
8833 lines
376 KiB
Diff
Description: Changes from previous version
|
||
This patch contains all changes from previous versions.
|
||
Author: Thorsten Alteholz <debian@alteholz.de>
|
||
--- uucp-1.07.orig/uucico.c
|
||
+++ uucp-1.07/uucico.c
|
||
@@ -125,6 +125,9 @@ struct spass
|
||
struct sconnection *qconn;
|
||
};
|
||
|
||
+/* min. grade set on commandline */
|
||
+static char cmdlgrade = '\0';
|
||
+
|
||
/* Local functions. */
|
||
|
||
static void uusage P((void));
|
||
@@ -175,6 +178,7 @@ static const struct option asLongopts[]
|
||
{ "nodetach", no_argument, NULL, 'D' },
|
||
{ "loop", no_argument, NULL, 'e' },
|
||
{ "force", no_argument, NULL, 'f'},
|
||
+ { "grade", required_argument, NULL, 'g'},
|
||
{ "stdin", required_argument, NULL, 'i' },
|
||
{ "prompt", no_argument, NULL, 'l' },
|
||
{ "port", required_argument, NULL, 'p' },
|
||
@@ -249,9 +253,9 @@ main (argc, argv)
|
||
++zProgram;
|
||
|
||
#if COHERENT_C_OPTION
|
||
- zopts = "c:CDefi:I:lp:qr:s:S:u:x:X:vwz";
|
||
+ zopts = "c:CDefg:i:I:lp:qr:s:S:u:x:X:vwz";
|
||
#else
|
||
- zopts = "cCDefi:I:lp:qr:s:S:u:x:X:vwz";
|
||
+ zopts = "cCDefg:i:I:lp:qr:s:S:u:x:X:vwz";
|
||
#endif
|
||
|
||
while ((iopt = getopt_long (argc, argv, zopts,
|
||
@@ -292,6 +296,14 @@ main (argc, argv)
|
||
failed call. */
|
||
fforce = TRUE;
|
||
break;
|
||
+
|
||
+ case 'g':
|
||
+ /* Force a grade */
|
||
+ if (isalpha(optarg[0]))
|
||
+ cmdlgrade = optarg[0];
|
||
+ else
|
||
+ fprintf (stderr, "%s: invalid grade \n", zProgram);
|
||
+ break;
|
||
|
||
case 'i':
|
||
/* Type of port to use for standard input. Only TLI is
|
||
@@ -796,6 +808,7 @@ uhelp ()
|
||
printf ("Usage: %s [options]\n", zProgram);
|
||
printf (" -s,-S,--system system: Call system (-S implies -f)\n");
|
||
printf (" -f,--force: Force call despite system status\n");
|
||
+ printf (" -g,--grade: limit outgoing call to a given grade\n");
|
||
printf (" -r state: 1 for master, 0 for slave (default)\n");
|
||
printf (" --master: Act as master\n");
|
||
printf (" --slave: Act as slave (default)\n");
|
||
@@ -1369,12 +1382,18 @@ fdo_call (qdaemon, qstat, qdialer, pfcal
|
||
boolean fret;
|
||
|
||
/* Determine the grade we should request of the other system. A
|
||
- '\0' means that no restrictions have been made. */
|
||
- if (! ftimespan_match (qsys->uuconf_qcalltimegrade, &ival,
|
||
- (int *) NULL))
|
||
- bgrade = '\0';
|
||
+ '\0' means that no restrictions have been made.
|
||
+ If a grade is set on the command line, the calltimegrade-value
|
||
+ is overwritten. */
|
||
+
|
||
+ if (cmdlgrade != '\0')
|
||
+ bgrade = cmdlgrade;
|
||
else
|
||
- bgrade = (char) ival;
|
||
+ if (! ftimespan_match (qsys->uuconf_qcalltimegrade, &ival,
|
||
+ (int *) NULL))
|
||
+ bgrade = '\0';
|
||
+ else
|
||
+ bgrade = (char) ival;
|
||
|
||
/* Determine the name we will call ourselves. */
|
||
if (qsys->uuconf_zlocalname != NULL)
|
||
--- uucp-1.07.orig/uucp.info-2
|
||
+++ uucp-1.07/uucp.info-2
|
||
@@ -1,4 +1,6 @@
|
||
-This is uucp.info, produced by makeinfo version 4.1 from uucp.texi.
|
||
+This is uucp.info, produced by makeinfo version 4.11 from uucp.texi.
|
||
+
|
||
+INFO-DIR-SECTION Networking tools
|
||
|
||
START-INFO-DIR-ENTRY
|
||
* UUCP: (uucp). Transfer mail and news across phone lines.
|
||
@@ -25,1247 +27,1119 @@ versions, except that the section entitl
|
||
a translation approved by the author instead of in the original English.
|
||
|
||
|
||
-File: uucp.info, Node: Invoking cu, Next: Invoking uucico, Prev: Invoking uupick, Up: Invoking the UUCP Programs
|
||
-
|
||
-Invoking cu
|
||
-===========
|
||
-
|
||
-* Menu:
|
||
-
|
||
-* cu Description:: Description of cu
|
||
-* cu Commands:: Commands Supported by cu
|
||
-* cu Variables:: Variables Supported by cu
|
||
-* cu Options:: Options Supported by cu
|
||
-
|
||
-
|
||
-File: uucp.info, Node: cu Description, Next: cu Commands, Prev: Invoking cu, Up: Invoking cu
|
||
-
|
||
-cu Description
|
||
---------------
|
||
-
|
||
- cu [options] [system | phone | "dir"]
|
||
-
|
||
- The `cu' program is used to call up another system and act as a dial
|
||
-in terminal. It can also do simple file transfers with no error
|
||
-checking.
|
||
-
|
||
- The `cu' program takes a single non-option argument.
|
||
-
|
||
- If the argument is the string `dir' cu will make a direct connection
|
||
-to the port. This may only be used by users with write access to the
|
||
-port, as it permits reprogramming the modem.
|
||
-
|
||
- Otherwise, if the argument begins with a digit, it is taken to be a
|
||
-phone number to call.
|
||
-
|
||
- Otherwise, it is taken to be the name of a system to call.
|
||
-
|
||
- The `-z' or `--system' options may be used to name a system
|
||
-beginning with a digit, and the `-c' or `--phone' options may be used
|
||
-to name a phone number that does not begin with a digit.
|
||
-
|
||
- The `cu' program locates a port to use in the UUCP configuration
|
||
-files. If a simple system name is given, it will select a port
|
||
-appropriate for that system. The `-p', `--port', `-l', `--line', `-s',
|
||
-and `--speed' options may be used to control the port selection.
|
||
-
|
||
- When a connection is made to the remote system, `cu' forks into two
|
||
-processes. One reads from the port and writes to the terminal, while
|
||
-the other reads from the terminal and writes to the port.
|
||
-
|
||
-
|
||
-File: uucp.info, Node: cu Commands, Next: cu Variables, Prev: cu Description, Up: Invoking cu
|
||
-
|
||
-cu Commands
|
||
------------
|
||
-
|
||
- The `cu' program provides several commands that may be used during
|
||
-the conversation. The commands all begin with an escape character,
|
||
-which by default is `~' (tilde). The escape character is only
|
||
-recognized at the beginning of a line. To send an escape character to
|
||
-the remote system at the start of a line, it must be entered twice. All
|
||
-commands are either a single character or a word beginning with `%'
|
||
-(percent sign).
|
||
-
|
||
- The `cu' program recognizes the following commands.
|
||
-
|
||
-`~.'
|
||
- Terminate the conversation.
|
||
-
|
||
-`~! command'
|
||
- Run command in a shell. If command is empty, starts up a shell.
|
||
-
|
||
-`~$ command'
|
||
- Run command, sending the standard output to the remote system.
|
||
-
|
||
-`~| command'
|
||
- Run command, taking the standard input from the remote system.
|
||
-
|
||
-`~+ command'
|
||
- Run command, taking the standard input from the remote system and
|
||
- sending the standard output to the remote system.
|
||
-
|
||
-`~#, ~%break'
|
||
- Send a break signal, if possible.
|
||
-
|
||
-`~c directory, ~%cd directory'
|
||
- Change the local directory.
|
||
-
|
||
-`~> file'
|
||
- Send a file to the remote system. This just dumps the file over
|
||
- the communication line. It is assumed that the remote system is
|
||
- expecting it.
|
||
-
|
||
-`~<'
|
||
- Receive a file from the remote system. This prompts for the local
|
||
- file name and for the remote command to execute to begin the file
|
||
- transfer. It continues accepting data until the contents of the
|
||
- `eofread' variable are seen.
|
||
-
|
||
-`~p from to'
|
||
-`~%put from to'
|
||
- Send a file to a remote Unix system. This runs the appropriate
|
||
- commands on the remote system.
|
||
-
|
||
-`~t from to'
|
||
-`~%take from to'
|
||
- Retrieve a file from a remote Unix system. This runs the
|
||
- appropriate commands on the remote system.
|
||
-
|
||
-`~s variable value'
|
||
- Set a `cu' variable to the given value. If value is not given, the
|
||
- variable is set to `true'.
|
||
-
|
||
-`~! variable'
|
||
- Set a `cu' variable to `false'.
|
||
-
|
||
-`~z'
|
||
- Suspend the cu session. This is only supported on some systems.
|
||
- On systems for which `^Z' may be used to suspend a job, `~^Z' will
|
||
- also suspend the session.
|
||
-
|
||
-`~%nostop'
|
||
- Turn off XON/XOFF handling.
|
||
-
|
||
-`~%stop'
|
||
- Turn on XON/XOFF handling.
|
||
-
|
||
-`~v'
|
||
- List all the variables and their values.
|
||
-
|
||
-`~?'
|
||
- List all commands.
|
||
-
|
||
-
|
||
-File: uucp.info, Node: cu Variables, Next: cu Options, Prev: cu Commands, Up: Invoking cu
|
||
-
|
||
-cu Variables
|
||
-------------
|
||
-
|
||
- The `cu' program also supports several variables. They may be
|
||
-listed with the `~v' command, and set with the `~s' or `~!' commands.
|
||
-
|
||
-`escape'
|
||
- The escape character. The default is `~' (tilde).
|
||
-
|
||
-`delay'
|
||
- If this variable is true, `cu' will delay for a second, after
|
||
- recognizing the escape character, before printing the name of the
|
||
- local system. The default is true.
|
||
-
|
||
-`eol'
|
||
- The list of characters which are considered to finish a line. The
|
||
- escape character is only recognized after one of these is seen.
|
||
- The default is `carriage return', `^U', `^C', `^O', `^D', `^S',
|
||
- `^Q', `^R'.
|
||
-
|
||
-`binary'
|
||
- Whether to transfer binary data when sending a file. If this is
|
||
- false, then newlines in the file being sent are converted to
|
||
- carriage returns. The default is false.
|
||
-
|
||
-`binary-prefix'
|
||
- A string used before sending a binary character in a file
|
||
- transfer, if the `binary' variable is true. The default is `^V'.
|
||
-
|
||
-`echo-check'
|
||
- Whether to check file transfers by examining what the remote system
|
||
- echoes back. This probably doesn't work very well. The default is
|
||
- false.
|
||
-
|
||
-`echonl'
|
||
- The character to look for after sending each line in a file. The
|
||
- default is carriage return.
|
||
-
|
||
-`timeout'
|
||
- The timeout to use, in seconds, when looking for a character,
|
||
- either when doing echo checking or when looking for the `echonl'
|
||
- character. The default is 30.
|
||
-
|
||
-`kill'
|
||
- The character to use delete a line if the echo check fails. The
|
||
- default is `^U'.
|
||
-
|
||
-`resend'
|
||
- The number of times to resend a line if the echo check continues to
|
||
- fail. The default is 10.
|
||
-
|
||
-`eofwrite'
|
||
- The string to write after sending a file with the `~>' command.
|
||
- The default is `^D'.
|
||
-
|
||
-`eofread'
|
||
- The string to look for when receiving a file with the ` ~<'
|
||
- command. The default is `$', which is intended to be a typical
|
||
- shell prompt.
|
||
-
|
||
-`verbose'
|
||
- Whether to print accumulated information during a file transfer.
|
||
- The default is true.
|
||
-
|
||
-
|
||
-File: uucp.info, Node: cu Options, Prev: cu Variables, Up: Invoking cu
|
||
-
|
||
-cu Options
|
||
-----------
|
||
-
|
||
- The following options may be given to `cu'.
|
||
-
|
||
-`-e'
|
||
-`--parity=even'
|
||
- Use even parity.
|
||
-
|
||
-`-o'
|
||
-`--parity=odd'
|
||
- Use odd parity.
|
||
-
|
||
-`--parity=none'
|
||
- Use no parity. No parity is also used if both `-e' and `-o' are
|
||
- given.
|
||
-
|
||
-`-h'
|
||
-`--halfduplex'
|
||
- Echo characters locally (half-duplex mode).
|
||
-
|
||
-`--nostop'
|
||
- Turn off XON/XOFF handling (it is on by default).
|
||
-
|
||
-`-E char'
|
||
-`--escape char'
|
||
- Set the escape character. Initially `~' (tilde). To eliminate the
|
||
- escape character, use `-E '''.
|
||
-
|
||
-`-z system'
|
||
-`--system system'
|
||
- The system to call.
|
||
-
|
||
-`-c phone-number'
|
||
-`--phone phone-number'
|
||
- The phone number to call.
|
||
-
|
||
-`-p port'
|
||
-`-a port'
|
||
-`--port port'
|
||
- Name the port to use.
|
||
-
|
||
-`-l line'
|
||
-`--line line'
|
||
- Name the line to use by giving a device name. This may be used to
|
||
- dial out on ports that are not listed in the UUCP configuration
|
||
- files. Write access to the device is required.
|
||
-
|
||
-`-s speed'
|
||
-`-#'
|
||
-`--speed speed'
|
||
- The speed (baud rate) to use. Here, `-#' means an actual number;
|
||
- e.g., `-9600'.
|
||
-
|
||
-`-n'
|
||
-`--prompt'
|
||
- Prompt for the phone number to use.
|
||
-
|
||
-`-d'
|
||
- Enter debugging mode. Equivalent to `--debug all'.
|
||
-
|
||
-`-x type'
|
||
-`--debug type'
|
||
-`-I file'
|
||
-`--config file'
|
||
-`-v'
|
||
-`--version'
|
||
-`--help'
|
||
- *Note Standard Options::.
|
||
-
|
||
-
|
||
-File: uucp.info, Node: Invoking uucico, Next: Invoking uuxqt, Prev: Invoking cu, Up: Invoking the UUCP Programs
|
||
-
|
||
-Invoking uucico
|
||
-===============
|
||
-
|
||
-* Menu:
|
||
-
|
||
-* uucico Description:: Description of uucico
|
||
-* uucico Options:: Options Supported by uucico
|
||
-
|
||
-
|
||
-File: uucp.info, Node: uucico Description, Next: uucico Options, Prev: Invoking uucico, Up: Invoking uucico
|
||
-
|
||
-uucico Description
|
||
-------------------
|
||
-
|
||
- uucico [options]
|
||
-
|
||
- The `uucico' daemon processes file transfer requests queued by
|
||
-`uucp' and `uux'. It is started when `uucp' or `uux' is run (unless
|
||
-they are given the `-r' or `--nouucico' options). It is also typically
|
||
-started periodically using entries in the `crontab' table(s).
|
||
-
|
||
- When `uucico' is invoked with `-r1', `--master', `-s', `--system',
|
||
-or `-S', the daemon will place a call to a remote system, running in
|
||
-master mode. Otherwise the daemon will start in slave mode, accepting
|
||
-a call from a remote system. Typically a special login name will be
|
||
-set up for UUCP which automatically invokes `uucico' when a remote
|
||
-system calls in and logs in under that name.
|
||
-
|
||
- When `uucico' terminates, it invokes the `uuxqt' daemon, unless the
|
||
-`-q' or `--nouuxqt' options were given; `uuxqt' executes any work
|
||
-orders created by `uux' on a remote system, and any work orders created
|
||
-locally which have received remote files for which they were waiting.
|
||
-
|
||
- If a call fails, `uucico' will normally refuse to retry the call
|
||
-until a certain (configurable) amount of time has passed. This may be
|
||
-overriden by the `-f', `--force', or `-S' options.
|
||
-
|
||
- The `-l', `--prompt', `-e', or `--loop' options may be used to force
|
||
-`uucico' to produce its own prompts of `login: ' and `Password:'. When
|
||
-another `uucico' daemon calls in, it will see these prompts and log in
|
||
-as usual. The login name and password will normally be checked against
|
||
-a separate list kept specially for `uucico', rather than the
|
||
-`/etc/passwd' file (*note Configuration File Names::). It is possible,
|
||
-on some systems, to configure `uucico' to use `/etc/passwd'. The `-l'
|
||
-or `--prompt' options will prompt once and then exit; in this mode the
|
||
-UUCP administrator, or the superuser, may use the `-u' or `--login'
|
||
-option to force a login name, in which case `uucico' will not prompt
|
||
-for one. The `-e' or `--loop' options will prompt again after the
|
||
-first session is over; in this mode `uucico' will permanently control a
|
||
-port.
|
||
-
|
||
- If `uucico' receives a `SIGQUIT', `SIGTERM' or `SIGPIPE' signal, it
|
||
-will cleanly abort any current conversation with a remote system and
|
||
-exit. If it receives a `SIGHUP' signal it will abort any current
|
||
-conversation, but will continue to place calls to (if invoked with
|
||
-`-r1' or `--master') and accept calls from (if invoked with `-e' or
|
||
-`--loop') other systems. If it receives a `SIGINT' signal it will
|
||
-finish the current conversation, but will not place or accept any more
|
||
-calls.
|
||
-
|
||
-
|
||
-File: uucp.info, Node: uucico Options, Prev: uucico Description, Up: Invoking uucico
|
||
-
|
||
-uucico Options
|
||
---------------
|
||
-
|
||
- The following options may be given to `uucico'.
|
||
-
|
||
-`-r1'
|
||
-`--master'
|
||
- Start in master mode: call out to a remote system. Implied by
|
||
- `-s', `--system', or `-S'. If no system is specified,
|
||
- sequentially call every system for which work is waiting to be
|
||
- done.
|
||
-
|
||
-`-r0'
|
||
-`--slave'
|
||
- Start in slave mode. This is the default.
|
||
-
|
||
-`-s system'
|
||
-`--system system'
|
||
- Call the specified system.
|
||
-
|
||
-`-S system'
|
||
- Call the specified system, ignoring any required wait. This is
|
||
- equivalent to `-s system -f'.
|
||
-
|
||
-`-f'
|
||
-`--force'
|
||
- Ignore any required wait for any systems to be called.
|
||
-
|
||
-`-l'
|
||
-`--prompt'
|
||
- Prompt for login name and password using `login: ' and
|
||
- `Password:'. This allows `uucico' to be easily run from `inetd'.
|
||
- The login name and password are checked against the UUCP password
|
||
- file, which need not be `/etc/passwd'. The `--login' option may
|
||
- be used to force a login name, in which cause `uucico' will only
|
||
- prompt for a password.
|
||
-
|
||
-`-p port'
|
||
-`--port port'
|
||
- Specify a port to call out on or to listen to.
|
||
-
|
||
-`-e'
|
||
-`--loop'
|
||
- Enter an endless loop of login/password prompts and slave mode
|
||
- daemon execution. The program will not stop by itself; you must
|
||
- use `kill' to shut it down.
|
||
-
|
||
-`-w'
|
||
-`--wait'
|
||
- After calling out (to a particular system when `-s', `--system',
|
||
- or `-S' is specifed, or to all systems which have work when just
|
||
- `-r1' or `--master' is specifed), begin an endless loop as with
|
||
- `--loop'.
|
||
-
|
||
-`-q'
|
||
-`--nouuxqt'
|
||
- Do not start the `uuxqt' daemon when finished.
|
||
-
|
||
-`-c'
|
||
-`--quiet'
|
||
- If no calls are permitted at this time, then don't make the call,
|
||
- but also do not put an error message in the log file and do not
|
||
- update the system status (as reported by `uustat'). This can be
|
||
- convenient for automated polling scripts, which may want to simply
|
||
- attempt to call every system rather than worry about which
|
||
- particular systems may be called at the moment. This option also
|
||
- suppresses the log message indicating that there is no work to be
|
||
- done.
|
||
-
|
||
-`-C'
|
||
-`--ifwork'
|
||
- Only call the system named by `-s', `--system', or `-S' if there
|
||
- is work for that system.
|
||
-
|
||
-`-D'
|
||
-`--nodetach'
|
||
- Do not detach from the controlling terminal. Normally `uucico'
|
||
- detaches from the terminal before each call out to another system
|
||
- and before invoking `uuxqt'. This option prevents this.
|
||
-
|
||
-`-u name'
|
||
-`--login name'
|
||
- Set the login name to use instead of that of the invoking user.
|
||
- This option may only be used by the UUCP administrator or the
|
||
- superuser. If used with `--prompt', this will cause `uucico' to
|
||
- prompt only for the password, not the login name.
|
||
-
|
||
-`-z'
|
||
-`--try-next'
|
||
- If a call fails after the remote system is reached, try the next
|
||
- alternate rather than simply exiting.
|
||
-
|
||
-`-i type'
|
||
-`--stdin type'
|
||
- Set the type of port to use when using standard input. The only
|
||
- supported port type is TLI, and this is only available on machines
|
||
- which support the TLI networking interface. Specifying `-i TLI'
|
||
- causes `uucico' to use TLI calls to perform I/O.
|
||
-
|
||
-`-X type'
|
||
- Same as the standard option `-x type'. Provided for historical
|
||
- compatibility.
|
||
-
|
||
-`-x type'
|
||
-`--debug type'
|
||
-`-I file'
|
||
-`--config file'
|
||
-`-v'
|
||
-`--version'
|
||
-`--help'
|
||
- *Note Standard Options::.
|
||
-
|
||
-
|
||
-File: uucp.info, Node: Invoking uuxqt, Next: Invoking uuchk, Prev: Invoking uucico, Up: Invoking the UUCP Programs
|
||
-
|
||
-Invoking uuxqt
|
||
-==============
|
||
-
|
||
- uuxqt [-c command] [-s system] [--command command] [--system system]
|
||
-
|
||
- The `uuxqt' daemon executes commands requested by `uux' from either
|
||
-the local system or from remote systems. It is started automatically
|
||
-by the `uucico' daemon (unless `uucico' is given the `-q' or
|
||
-`--nouuxqt' options).
|
||
-
|
||
- There is normally no need to run `uuxqt', since it will be invoked
|
||
-by `uucico'. However, `uuxqt' can be invoked directly to provide
|
||
-greater control over the processing of the work queue.
|
||
-
|
||
- Multiple invocations of `uuxqt' may be run at once, as controlled by
|
||
-the `max-uuxqts' configuration command; see *Note Miscellaneous
|
||
-(config)::.
|
||
-
|
||
- The following options may be given to `uuxqt'.
|
||
-
|
||
-`-c command'
|
||
-`--command command'
|
||
- Only execute requests for the specified command. For example,
|
||
- `uuxqt --command rmail'.
|
||
-
|
||
-`-s system'
|
||
-`--system system'
|
||
- Only execute requests originating from the specified system.
|
||
-
|
||
-`-x type'
|
||
-`--debug type'
|
||
-`-I file'
|
||
-`--config'
|
||
-`-v'
|
||
-`--version'
|
||
-`--help'
|
||
- *Note Standard Options::.
|
||
-
|
||
-
|
||
-File: uucp.info, Node: Invoking uuchk, Next: Invoking uuconv, Prev: Invoking uuxqt, Up: Invoking the UUCP Programs
|
||
-
|
||
-Invoking uuchk
|
||
-==============
|
||
-
|
||
- uuchk [-s system] [--system system]
|
||
-
|
||
- The `uuchk' program displays information read from the UUCP
|
||
-configuration files. It should be used to ensure that UUCP has been
|
||
-configured correctly.
|
||
-
|
||
- The `-s' or `--system' options may be used to display the
|
||
-configuration for just the specified system, rather than for all
|
||
-systems. The `uuchk' program also supports the standard UUCP program
|
||
-options; see *Note Standard Options::.
|
||
-
|
||
-
|
||
-File: uucp.info, Node: Invoking uuconv, Next: Invoking uusched, Prev: Invoking uuchk, Up: Invoking the UUCP Programs
|
||
-
|
||
-Invoking uuconv
|
||
-===============
|
||
-
|
||
- uuconv -i type -o type [-p program] [--program program]
|
||
- uuconv --input type --output type [-p program] [--program program]
|
||
-
|
||
- The `uuconv' program converts UUCP configuration files from one
|
||
-format to another. The type of configuration file to read is specified
|
||
-using the `-i' or `--input' options. The type of configuration file to
|
||
-write is specified using the `-o' or `--output' options.
|
||
-
|
||
- The supported configuration file types are `taylor', `v2', and
|
||
-`hdb'. For a description of the `taylor' configuration files, see
|
||
-*Note Configuration Files::. The other types of configuration files
|
||
-are used by traditional UUCP packages, and are not described in this
|
||
-manual.
|
||
-
|
||
- An input configuration of type `v2' or `hdb' is read from a compiled
|
||
-in directory (specified by `oldconfigdir' in `Makefile'). An input
|
||
-configuration of type `taylor' is read from a compiled in directory by
|
||
-default, but may be overridden with the standard `-I' or `--config'
|
||
-options (*note Standard Options::).
|
||
-
|
||
- The output configuration is written to files in the directory in
|
||
-which `uuconv' is run.
|
||
-
|
||
- Some information in the input files may not be representable in the
|
||
-desired output format, in which case `uuconv' will silently discard it.
|
||
-The output of `uuconv' should be carefully checked before it is used.
|
||
-The `uuchk' program may be used for this purpose; see *Note Invoking
|
||
-uuchk::.
|
||
-
|
||
- The `-p' or `--program' option may be used to convert specific `cu'
|
||
-configuration information, rather than the default of only converting
|
||
-the `uucp' configuration information; see *Note config File::.
|
||
-
|
||
- The `uuchk' program also supports the standard UUCP program options;
|
||
-see *Note Standard Options::.
|
||
+File: uucp.info, Node: j Protocol, Next: x Protocol, Prev: i Protocol, Up: Protocols
|
||
|
||
-
|
||
-File: uucp.info, Node: Invoking uusched, Prev: Invoking uuconv, Up: Invoking the UUCP Programs
|
||
+6.12 UUCP `j' Protocol
|
||
+======================
|
||
|
||
-Invoking uusched
|
||
-================
|
||
+The `j' protocol is a variant of the `i' protocol. It was also written
|
||
+by Ian Lance Taylor, and first appeared in Taylor UUCP version 1.04.
|
||
|
||
- The `uusched' program is actually just a shell script which invokes
|
||
-the `uucico' daemon. It is provided for backward compatibility. It
|
||
-causes `uucico' to call all systems for which there is work. Any
|
||
-option which may be given to `uucico' may also be given to `uusched'.
|
||
-*Note Invoking uucico::.
|
||
+ The `j' protocol is a version of the `i' protocol designed for
|
||
+communication links which intercept a few characters, such as XON or
|
||
+XOFF. It is not efficient to use it on a link which intercepts many
|
||
+characters, such as a seven bit link. The `j' protocol performs no
|
||
+error correction or detection; that is presumed to be the responsibility
|
||
+of the `i' protocol.
|
||
+
|
||
+ When the `j' protocol starts up, each system sends a printable ASCII
|
||
+string indicating which characters it wants to avoid using. The string
|
||
+begins with the ASCII character `^' (octal 136) and ends with the ASCII
|
||
+character `~' (octal 176). After sending this string, each system
|
||
+looks for the corresponding string from the remote system. The strings
|
||
+are composed of escape sequences: `\ooo', where `o' is an octal digit.
|
||
+For example, sending the string `^\021\023~' means that the ASCII XON
|
||
+and XOFF characters should be avoided. The union of the characters
|
||
+described in both strings (the string which is sent and the string
|
||
+which is received) is the set of characters which must be avoided in
|
||
+this conversation. Avoiding a printable ASCII character (octal 040 to
|
||
+octal 176, inclusive) is not permitted.
|
||
+
|
||
+ After the exchange of characters to avoid, the normal `i' protocol
|
||
+start up is done, and the rest of the conversation uses the normal `i'
|
||
+protocol. However, each `i' protocol packet is wrapped to become a `j'
|
||
+protocol packet.
|
||
+
|
||
+ Each `j' protocol packet consists of a seven byte header, followed
|
||
+by data bytes, followed by index bytes, followed by a one byte trailer.
|
||
+The packet header looks like this:
|
||
+
|
||
+`^'
|
||
+ Every packet begins with the ASCII character `^', octal 136.
|
||
+
|
||
+HIGH
|
||
+LOW
|
||
+ These two characters give the total number of bytes in the packet.
|
||
+ Both HIGH and LOW are printable ASCII characters. The length of
|
||
+ the packet is `(HIGH - 040) * 0100 + (LOW - 040)', where `040 <=
|
||
+ HIGH < 0177' and `040 <= LOW < 0140'. This permits a length of
|
||
+ 6079 bytes, but there is a further restriction on packet size
|
||
+ described below.
|
||
+
|
||
+`='
|
||
+ The ASCII character `=', octal 075.
|
||
+
|
||
+DATA-HIGH
|
||
+DATA-LOW
|
||
+ These two characters give the total number of data bytes in the
|
||
+ packet. The encoding is as described for HIGH and LOW. The number
|
||
+ of data bytes is the size of the `i' protocol packet wrapped inside
|
||
+ this `j' protocol packet.
|
||
+
|
||
+`@'
|
||
+ The ASCII character `@', octal 100.
|
||
+
|
||
+ The header is followed by the number of data bytes given in
|
||
+DATA-HIGH and DATA-LOW. These data bytes are the `i' protocol packet
|
||
+which is being wrapped in the `j' protocol packet. However, each
|
||
+character in the `i' protocol packet which the `j' protocol must avoid
|
||
+is transformed into a printable ASCII character (recall that avoiding a
|
||
+printable ASCII character is not permitted). Two index bytes are used
|
||
+for each character which must be transformed.
|
||
+
|
||
+ The index bytes immediately follow the data bytes. The index bytes
|
||
+are created in pairs. Each pair of index bytes encodes the location of
|
||
+a character in the `i' protocol packet which was transformed to become
|
||
+a printable ASCII character. Each pair of index bytes also encodes the
|
||
+precise transformation which was performed.
|
||
+
|
||
+ When the sender finds a character which must be avoided, it will
|
||
+transform it using one or two operations. If the character is 0200 or
|
||
+greater, it will subtract 0200. If the resulting character is less than
|
||
+020, or is equal to 0177, it will xor by 020. The result is a printable
|
||
+ASCII character.
|
||
+
|
||
+ The zero based byte index of the character within the `i' protocol
|
||
+packet is determined. This index is turned into a two byte printable
|
||
+ASCII index, INDEX-HIGH and INDEX-LOW, such that the index is
|
||
+`(INDEX-HIGH - 040) * 040 + (INDEX-LOW - 040)'. INDEX-LOW is
|
||
+restricted such that `040 <= INDEX-LOW < 0100'. INDEX-HIGH is not
|
||
+permitted to be 0176, so `040 <= INDEX-HIGH < 0176'. INDEX-LOW is then
|
||
+modified to encode the transformation:
|
||
+
|
||
+ * If the character transformation only had to subtract 0200, then
|
||
+ INDEX-LOW is used as is.
|
||
+
|
||
+ * If the character transformation only had to xor by 020, then 040
|
||
+ is added to INDEX-LOW.
|
||
+
|
||
+ * If both operations had to be performed, then 0100 is added to
|
||
+ INDEX-LOW. However, if the value of INDEX-LOW was initially 077,
|
||
+ then adding 0100 would result in 0177, which is not a printable
|
||
+ ASCII character. For that special case, INDEX-HIGH is set to
|
||
+ 0176, and INDEX-LOW is set to the original value of INDEX-HIGH.
|
||
+
|
||
+ The receiver decodes the index bytes as follows (this is the reverse
|
||
+of the operations performed by the sender, presented here for additional
|
||
+clarity):
|
||
+
|
||
+ * The first byte in the index is INDEX-HIGH, and the second is
|
||
+ INDEX-LOW.
|
||
+
|
||
+ * If `040 <= INDEX-HIGH < 0176', the index refers to the data byte
|
||
+ at position `(INDEX-HIGH - 040) * 040 + INDEX-LOW % 040'.
|
||
+
|
||
+ * If `040 <= INDEX-LOW < 0100', then 0200 must be added to indexed
|
||
+ byte.
|
||
+
|
||
+ * If `0100 <= INDEX-LOW < 0140', then 020 must be xor'ed to the
|
||
+ indexed byte.
|
||
+
|
||
+ * If `0140 <= INDEX-LOW < 0177', then 0200 must be added to the
|
||
+ indexed byte, and 020 must be xor'ed to the indexed byte.
|
||
+
|
||
+ * If `INDEX-HIGH == 0176', the index refers to the data byte at
|
||
+ position `(INDEX-LOW - 040) * 040 + 037'. 0200 must be added to
|
||
+ the indexed byte, and 020 must be xor'ed to the indexed byte.
|
||
+
|
||
+ This means the largest `i' protocol packet which may be wrapped
|
||
+inside a `j' protocol packet is `(0175 - 040) * 040 + (077 - 040) ==
|
||
+3007' bytes.
|
||
+
|
||
+ The final character in a `j' protocol packet, following the index
|
||
+bytes, is the ASCII character `~' (octal 176).
|
||
+
|
||
+ The motivation behind using an indexing scheme, rather than escape
|
||
+characters, is to avoid data movement. The sender may simply add a
|
||
+header and a trailer to the `i' protocol packet. Once the receiver has
|
||
+loaded the `j' protocol packet, it may scan the index bytes,
|
||
+transforming the data bytes, and then pass the data bytes directly on to
|
||
+the `i' protocol routine.
|
||
+
|
||
+
|
||
+File: uucp.info, Node: x Protocol, Next: y Protocol, Prev: j Protocol, Up: Protocols
|
||
+
|
||
+6.13 UUCP `x' Protocol
|
||
+======================
|
||
+
|
||
+The `x' protocol is used in Europe (and probably elsewhere) with
|
||
+machines that contain an builtin X.25 card and can send eight bit data
|
||
+transparently across X.25 circuits, without interference from the X.28
|
||
+or X.29 layers. The protocol sends packets of 512 bytes, and relies on
|
||
+a write of zero bytes being read as zero bytes without stopping
|
||
+communication. It first appeared in the original System V UUCP
|
||
+implementation.
|
||
+
|
||
+
|
||
+File: uucp.info, Node: y Protocol, Next: d Protocol, Prev: x Protocol, Up: Protocols
|
||
+
|
||
+6.14 UUCP `y' Protocol
|
||
+======================
|
||
+
|
||
+The `y' protocol was developed by Jorge Cwik for use in FX UUCICO, a PC
|
||
+uucico program. It is designed for communication lines which handle
|
||
+error correction and flow control. It requires an eight bit clean
|
||
+connection. It performs error detection, but not error correction:
|
||
+when an error is detected, the line is dropped. It is a streaming
|
||
+protocol, like the `f' protocol; there are no packet acknowledgements,
|
||
+so the protocol is efficient over a half-duplex communication line such
|
||
+as PEP.
|
||
+
|
||
+ Every packet contains a six byte header:
|
||
+
|
||
+sequence low byte
|
||
+sequence high byte
|
||
+ A two byte sequence number, in little endian order. The first
|
||
+ sequence number is 0. Since the first packet is always a sync
|
||
+ packet (described below) the sequence number of the first data
|
||
+ packet is always 1. Each system counts sequence numbers
|
||
+ independently.
|
||
+
|
||
+length low byte
|
||
+length high byte
|
||
+ A two byte data length, in little endian order. If the high bit
|
||
+ of the sixteen bit field is clear, this is the number of data
|
||
+ bytes which follow the six byte header. If the high bit is set,
|
||
+ there is no data, and the length field is a type of control packet.
|
||
+
|
||
+checksum low byte
|
||
+checksum high byte
|
||
+ A two byte checksum, in little endian order. The checksum is
|
||
+ computed over the data bytes. The checksum algorithm is described
|
||
+ below. If there are no data bytes, the checksum is sent as 0.
|
||
+
|
||
+ When the protocol starts up, each side must send a sync packet.
|
||
+This is a packet with a normal six byte header followed by data. The
|
||
+sequence number of the sync packet should be 0. Currently at least
|
||
+four bytes of data must be sent with the sync packet. Additional bytes
|
||
+should be ignored. They are defined as follows:
|
||
+
|
||
+version
|
||
+ The version number of the protocol. Currently this must be 1.
|
||
+ Larger numbers should be ignored; it is the responsibility of the
|
||
+ newer version to accommodate the older one.
|
||
+
|
||
+packet size
|
||
+ The maximum data length to use divided by 256. This is sent as a
|
||
+ single byte. The maximum data length permitted is 32768, which
|
||
+ would be sent as 128. Customarily both systems will use the same
|
||
+ maximum data length, the lower of the two requested.
|
||
+
|
||
+flags low byte
|
||
+flags high byte
|
||
+ Two bytes of flags. None are currently defined. These bytes
|
||
+ should be sent as 0, and ignored by the receiver.
|
||
+
|
||
+ A length field with the high bit set is a control packet. The
|
||
+following control packet types are defined:
|
||
+
|
||
+0xfffe `YPKT_ACK'
|
||
+ Acknowledges correct receipt of a file.
|
||
+
|
||
+0xfffd `YPKT_ERR'
|
||
+ Indicates an incorrect checksum.
|
||
+
|
||
+0xfffc `YPKT_BAD'
|
||
+ Indicates a bad sequence number, an invalid length, or some other
|
||
+ error.
|
||
+
|
||
+ If a control packet other than `YPKT_ACK' is received, the
|
||
+connection is dropped. If a checksum error is detected for a received
|
||
+packet, a `YPKT_ERR' control packet is sent, and the connection is
|
||
+dropped. If a packet is received out of sequence, a `YPKT_BAD' control
|
||
+packet is sent, and the connection is dropped.
|
||
+
|
||
+ The checksum is initialized to 0xffff. For each data byte in a
|
||
+packet it is modified as follows (where B is the byte before it has been
|
||
+transformed as described above):
|
||
+
|
||
+ /* Rotate the checksum left. */
|
||
+ if ((ichk & 0x8000) == 0)
|
||
+ ichk <<= 1;
|
||
+ else
|
||
+ {
|
||
+ ichk <<= 1;
|
||
+ ++ichk;
|
||
+ }
|
||
+
|
||
+ /* Add the next byte into the checksum. */
|
||
+ ichk += B;
|
||
+
|
||
+ This is the same algorithm as that used by the `f' protocol.
|
||
+
|
||
+ A command is sent as a sequence of data packets followed by a null
|
||
+byte. In the normal case, a command will fit into a single packet.
|
||
+The packet should be exactly the length of the command plus a null
|
||
+byte. If the command is too long, more packets are sent as required.
|
||
+
|
||
+ A file is sent as a sequence of data packets, ending with a zero
|
||
+length packet. The data packets may be of any length greater than zero
|
||
+and less than or equal to the maximum permitted packet size specified
|
||
+in the initial sync packet.
|
||
+
|
||
+ After the zero length packet ending a file transfer has been
|
||
+received, the receiving system sends a `YPKT_ACK' control packet. The
|
||
+sending system waits for the `YPKT_ACK' control packet before
|
||
+continuing; this wait should be done with a large timeout, since there
|
||
+may be a considerable amount of data buffered on the communication path.
|
||
+
|
||
+
|
||
+File: uucp.info, Node: d Protocol, Next: h Protocol, Prev: y Protocol, Up: Protocols
|
||
+
|
||
+6.15 UUCP `d' Protocol
|
||
+======================
|
||
+
|
||
+The `d' protocol is apparently used for DataKit muxhost (not RS-232)
|
||
+connections. No file size is sent. When a file has been completely
|
||
+transferred, a write of zero bytes is done; this must be read as zero
|
||
+bytes on the other end.
|
||
+
|
||
+
|
||
+File: uucp.info, Node: h Protocol, Next: v Protocol, Prev: d Protocol, Up: Protocols
|
||
+
|
||
+6.16 UUCP `h' Protocol
|
||
+======================
|
||
+
|
||
+The `h' protocol is apparently used in some places with HST modems. It
|
||
+does no error checking, and is not that different from the `t'
|
||
+protocol. I don't know the details.
|
||
+
|
||
+
|
||
+File: uucp.info, Node: v Protocol, Prev: h Protocol, Up: Protocols
|
||
+
|
||
+6.17 UUCP `v' Protocol
|
||
+======================
|
||
+
|
||
+The `v' protocol is used by UUPC/extended, a PC UUCP program. It is
|
||
+simply a version of the `g' protocol which supports packets of any
|
||
+size, and also supports sending packets of different sizes during the
|
||
+same conversation. There are many `g' protocol implementations which
|
||
+support both, but there are also many which do not. Using `v' ensures
|
||
+that everything is supported.
|
||
|
||
|
||
-File: uucp.info, Node: Installing Taylor UUCP, Next: Using Taylor UUCP, Prev: Invoking the UUCP Programs, Up: Top
|
||
+File: uucp.info, Node: Hacking, Next: Acknowledgements, Prev: Protocols, Up: Top
|
||
|
||
-Installing Taylor UUCP
|
||
-**********************
|
||
+7 Hacking Taylor UUCP
|
||
+*********************
|
||
|
||
- These are the installation instructions for the Taylor UUCP package.
|
||
+This chapter provides the briefest of guides to the Taylor UUCP source
|
||
+code itself.
|
||
|
||
* Menu:
|
||
|
||
-* Compilation:: Compiling Taylor UUCP
|
||
-* Testing the Compilation:: Testing the Compilation
|
||
-* Installing the Binaries:: Installing the Binaries
|
||
-* Configuration:: Configuring Taylor UUCP
|
||
-* Testing the Installation:: Testing the Installation
|
||
+* System Dependence:: System Dependence
|
||
+* Naming Conventions:: Naming Conventions
|
||
+* Patches:: Patches
|
||
|
||
|
||
-File: uucp.info, Node: Compilation, Next: Testing the Compilation, Prev: Installing Taylor UUCP, Up: Installing Taylor UUCP
|
||
+File: uucp.info, Node: System Dependence, Next: Naming Conventions, Prev: Hacking, Up: Hacking
|
||
|
||
-Compiling Taylor UUCP
|
||
+7.1 System Dependence
|
||
=====================
|
||
|
||
- If you have a source code distribution, you must first compile it for
|
||
-your system. Free versions of Unix, such as Linux, NetBSD, or FreeBSD,
|
||
-often come with pre-compiled binary distributions of UUCP. If you are
|
||
-using a binary distribution, you may skip to the configuration section
|
||
-(*note Configuration::).
|
||
-
|
||
- Follow these steps to compile the source code.
|
||
-
|
||
- 1. Take a look at the top of `Makefile.in' and set the appropriate
|
||
- values for your system. These control where the programs are
|
||
- installed and which user on the system owns them (normally they
|
||
- will be owned by a special user `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
|
||
- the `autoconf' program written by David MacKenzie of the Free
|
||
- Software Foundation. It takes a while to run. It will generate
|
||
- the file `config.h' based on `config.h.in', and, for each source
|
||
- code directory, will generate `Makefile' based on `Makefile.in'.
|
||
-
|
||
- You can pass certain arguments to `configure' in the environment.
|
||
- Because `configure' will compile little test programs to see what
|
||
- is available on your system, you must tell it how to run your
|
||
- compiler. It recognizes the following environment variables:
|
||
-
|
||
- `CC'
|
||
- The C compiler. If this is not set, then if `configure' can
|
||
- find `gcc' it will use it, otherwise it will use `cc'.
|
||
-
|
||
- `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 this is not set, then if `configure' finds the BSD
|
||
- `install' program, it will set this to `install -c';
|
||
- otherwise, it will use `cp'.
|
||
-
|
||
- Suppose, for example, you want to set the environment variable `CC'
|
||
- to `rcc'. If you are using `sh', `bash', or `ksh', 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 Xenix
|
||
- derived versions of Unix 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'.
|
||
-
|
||
- You can also pass other arguments to `configure' on the command
|
||
- line. Use `configure --help' for a complete list. Of particular
|
||
- interest:
|
||
- `--prefix=DIRNAME'
|
||
- The directory under which all files are installed. Default
|
||
- `/usr/local'.
|
||
-
|
||
- `--with-newconfigdir=DIRNAME'
|
||
- The directory in which to find new style configuration files.
|
||
- Default `PREFIX/conf/uucp'.
|
||
-
|
||
- `--with-oldconfigdir=DIRNAME'
|
||
- The directory in which to find old style configuration files.
|
||
- Default `/usr/lib/uucp'.
|
||
-
|
||
- If `configure' fails for some reason, or if you have a very weird
|
||
- system, you may have to configure the package by hand. To do
|
||
- this, copy the file `config.h.in' to `config.h' and edit it for
|
||
- your system. Then for each source directory (the top directory,
|
||
- and the subdirectories `lib', `unix', and `uuconf') copy
|
||
- `Makefile.in' to `Makefile', find the words within `@' characters,
|
||
- and set them correctly for your system.
|
||
-
|
||
- 3. Igor V. Semenyuk provided this (lightly edited) note about ISC
|
||
- Unix 3.0. The `configure' script will default to passing `-posix'
|
||
- to `gcc'. However, using `-posix' changes the environment to
|
||
- POSIX, and on ISC 3.0, at least, the default for `POSIX_NO_TRUNC'
|
||
- is 1. This can lead to a problem when `uuxqt' executes `rmail'.
|
||
- `IDA sendmail' has dbm configuration files named
|
||
- `mailertable.{dir,pag}'. Notice these names are 15 characters
|
||
- long. When `uuxqt' compiled with the `-posix' executes `rmail',
|
||
- which in turn executes `sendmail', the later is run under the
|
||
- POSIX environment too. This leads to `sendmail' bombing out with
|
||
- `'error opening 'M' database: name too long' (mailertable.dir)'.
|
||
- It's rather obscure behaviour, and it took me a day to find out
|
||
- the cause. I don't use the `-posix' switch; instead, I run `gcc'
|
||
- with `-D_POSIX_SOURCE', and add `-lcposix' to `LIBS'.
|
||
-
|
||
- 4. On some versions of BSDI there is a bug in the shell which causes
|
||
- the default value for `CFLAGS' to be set incorrectly. If `echo
|
||
- ${CFLAGS--g}' echoes `g' rather than `-g', then you must set
|
||
- `CFLAGS' in the environment before running configure. There is a
|
||
- patch available from BSDI for this bug. (Reported by David Vrona).
|
||
-
|
||
- 5. On AIX 3.2.5, and possibly other versions, `cc -E' does not work,
|
||
- reporting `Option NOROCONST is not valid'. Test this before
|
||
- running configure by doing something like `touch /tmp/foo.c; cc -E
|
||
- /tmp/foo.c'. This may give a warning about the file being empty,
|
||
- but it should not give the `Option NOROCONST' warning. The
|
||
- workaround is to remove the `,noroconst' entry from the `options'
|
||
- clause in the `cc' stanza in `/etc/xlc.cfg'. (Reported by Chris
|
||
- Lewis).
|
||
-
|
||
- 6. You should verify that `configure' worked correctly by checking
|
||
- `config.h' and the instances of `Makefile'.
|
||
-
|
||
- 7. Edit `policy.h' for your local system. The comments explain the
|
||
- various choices. The default values are intended to be
|
||
- reasonable, so you may not have to make any changes.
|
||
-
|
||
- You must decide what type of configuration files to use; for more
|
||
- information on the choices, see *Note Configuration::.
|
||
-
|
||
- You must also decide what sort of spool directory you want to use.
|
||
- If this is a new installation, I recommend `SPOOLDIR_TAYLOR';
|
||
- otherwise, select the spool directory corresponding to your
|
||
- existing UUCP package.
|
||
-
|
||
- 8. Type `make' to compile everything.
|
||
-
|
||
- 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. To use STREAMS pseudo-terminals, tstuu.c
|
||
- must be compiled with `-DHAVE_STREAMS_PTYS'; this is not
|
||
- determined by the configure script.
|
||
-
|
||
- If you have any other problems there is probably a bug in the
|
||
- `configure' script.
|
||
-
|
||
- 9. Please report any problems you have. That is the only way they
|
||
- will get fixed for other people. Supply a patch if you can (*note
|
||
- Patches::), or just ask for help.
|
||
-
|
||
-
|
||
-
|
||
-File: uucp.info, Node: Testing the Compilation, Next: Installing the Binaries, Prev: Compilation, Up: Installing Taylor UUCP
|
||
-
|
||
-Testing the Compilation
|
||
-=======================
|
||
-
|
||
- If your system supports pseudo-terminals, and you compiled the code
|
||
-to support the new style of configuration files (`HAVE_TAYLOR_CONFIG'
|
||
-was set to 1 in `policy.h'), you should be able to use the `tstuu'
|
||
-program to test the `uucico' daemon. If your system supports STREAMS
|
||
-based pseudo-terminals, you must compile tstuu.c with
|
||
-`-DHAVE_STREAMS_PTYS'. (The STREAMS based code was contributed by Marc
|
||
-Boucher).
|
||
-
|
||
- To run `tstuu', just type `tstuu' with no arguments. You must run
|
||
-it in the compilation directory, since it runs `./uucp', `./uux' and
|
||
-`./uucico'. The `tstuu' program will run a lengthy series of tests (it
|
||
-takes over ten minutes on a slow VAX). You will need a fair amount of
|
||
-space available in `/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. The `tstuu' program 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'.
|
||
-
|
||
- If your system does not support the `FIONREAD' call, the `tstuu'
|
||
-program will run very slowly. This may or may not get fixed in a later
|
||
-version.
|
||
-
|
||
- The `tstuu' program will finish with an execute file named
|
||
-`X.SOMETHING' and a data file named `D.SOMETHING' in the directory
|
||
-`/usr/tmp/tstuu/spool1' (or, more likely, in subdirectories, depending
|
||
-on the choice of `SPOOLDIR' in `policy.h'). Two log files will be
|
||
-created in the directory `/usr/tmp/tstuu'. They will be named `Log1'
|
||
-and `Log2', or, if you have selected `HAVE_HDB_LOGGING' in `policy.h',
|
||
-`Log1/uucico/test2' and `Log2/uucico/test1'. There should be no errors
|
||
-in the log files.
|
||
-
|
||
- You can test `uuxqt' with `./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 the files `Debug1'
|
||
-and `Debug2' in the directory `/usr/tmp/tstuu'. After that, you're
|
||
-pretty much on your own.
|
||
-
|
||
- On some systems you can also use `tstuu' to test `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, on 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 a setuid `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 you can not run `tstuu', or if it fails inexplicably, don't worry
|
||
-about it too much. On some systems `tstuu' will fail because of
|
||
-problems using pseudo terminals, which will not matter in normal use.
|
||
-The real test of the package is talking to another system.
|
||
-
|
||
-
|
||
-File: uucp.info, Node: Installing the Binaries, Next: Configuration, Prev: Testing the Compilation, Up: Installing Taylor UUCP
|
||
+The code is carefully segregated into a system independent portion and a
|
||
+system dependent portion. The system dependent code is in the `unix'
|
||
+subdirectory, and also in the file `sysh.unx' (also known as
|
||
+`sysdep.h').
|
||
|
||
-Installing the Binaries
|
||
-=======================
|
||
+ With the right configuration parameters, the system independent code
|
||
+calls only ANSI C functions. Some of the less common ANSI C functions
|
||
+are also provided in the `lib' directory. The replacement function
|
||
+`strtol' in `lib/strtol.c' assumes that the characters `A' to `F' and
|
||
+`a' to `f' appear in strictly sequential order. The function
|
||
+`igradecmp' in `uuconf/grdcmp.c' assumes that the upper and lower case
|
||
+letters appear in order. Both assumptions are true for ASCII and
|
||
+EBCDIC, but neither is guaranteed by ANSI C. Disregarding these
|
||
+caveats, I believe that the system independent portion of the code is
|
||
+strictly conforming.
|
||
|
||
- You can install the executable files by becoming `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, but it only
|
||
-does this the first time Taylor UUCP is installed (so that if you
|
||
-install several versions of Taylor UUCP, you can still go back to your
|
||
-original UUCP programs). You can retrieve the original programs by
|
||
-typing `make uninstall'.
|
||
-
|
||
- Note that by default the programs are compiled with debugging
|
||
-information, and they are not stripped when they are installed. You may
|
||
-want to strip the installed programs to save disk space. For more
|
||
-information, see your system documentation for the `strip' program.
|
||
+ That's not too exciting, since all the work is done in the system
|
||
+dependent code. I think that this code can conform to POSIX 1003.1,
|
||
+given the right compilation parameters. I'm a bit less certain about
|
||
+this, though.
|
||
|
||
- Of course, simply installing the executable files is not enough. You
|
||
-must also arrange for them to be used correctly.
|
||
+ The code has been used on a 16 bit segmented system with no function
|
||
+prototypes, so I'm fairly certain that all casts to long and pointers
|
||
+are done when necessary.
|
||
|
||
|
||
-File: uucp.info, Node: Configuration, Next: Testing the Installation, Prev: Installing the Binaries, Up: Installing Taylor UUCP
|
||
-
|
||
-Configuring Taylor UUCP
|
||
-=======================
|
||
+File: uucp.info, Node: Naming Conventions, Next: Patches, Prev: System Dependence, Up: Hacking
|
||
|
||
- You will have to decide what types of configuration files you want to
|
||
-use. This package supports a new sort of configuration file; see *Note
|
||
-Configuration Files::. It also supports V2 configuration files
|
||
-(`L.sys', `L-devices', etc.) and HDB configuration files (`Systems',
|
||
-`Devices', etc.). No documentation is provided for V2 or HDB
|
||
-configuration files. All types of configuration files can be used at
|
||
-once, if you are so inclined. Currently using just V2 configuration
|
||
-files is not really possible, because there is no way to specify a
|
||
-dialer (there are no built in dialers, and the program does not know
|
||
-how to read `acucap' or `modemcap'); however, V2 configuration files
|
||
-can be used with a new style dial file (*note dial File::), or with a
|
||
-HDB `Dialers' file.
|
||
-
|
||
- Use of HDB 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, as found in some versions of HDB, 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 dial file; see *Note dial File::. You will have to invoke the
|
||
-dialer program via a shell script or another program, since an exit
|
||
-code of 0 is required to recognize success; the `dialHDB' program in
|
||
-the `contrib' directory may be used for this purpose.
|
||
-
|
||
- The `uuconv' (*note Invoking uuconv::) program can be used to
|
||
-convert from V2 or HDB configuration files to the new style (it can also
|
||
-do the reverse translation, if you are so inclined). It will not do all
|
||
-of the work, and the results should be carefully checked, but it can be
|
||
-quite useful.
|
||
-
|
||
- If you are installing a new system, you will, of course, have to
|
||
-write the configuration files; see *Note Configuration Files:: for
|
||
-details on how to do this.
|
||
+7.2 Naming Conventions
|
||
+======================
|
||
|
||
- After writing the configuration files, use the `uuchk' program to
|
||
-verify that they are what you expect; see *Note Invoking uuchk::.
|
||
-
|
||
-
|
||
-File: uucp.info, Node: Testing the Installation, Prev: Configuration, Up: Installing Taylor UUCP
|
||
+I use a modified Hungarian naming convention for my variables and
|
||
+functions. As with all naming conventions, the code is rather opaque if
|
||
+you are not familiar with it, but becomes clear and easy to use with
|
||
+time.
|
||
|
||
-Testing the Installation
|
||
-========================
|
||
-
|
||
- After you have written the configuration files, and verified them
|
||
-with the `uuchk' program (*note Invoking uuchk::), you must check that
|
||
-UUCP can correctly contact another system.
|
||
-
|
||
- 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. The exact location of the log file depends upon the settings
|
||
-in `policy.h' when you compiled the program, and on the use of the
|
||
-`logfile' command in the `config' file. Typical locations are
|
||
-`/usr/spool/uucp/Log' or a subdirectory under `/usr/spool/uucp/.Log'.
|
||
-
|
||
- 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
|
||
-with 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 `config' file can override the default 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') (*note Status
|
||
-Directory::) will prevent too many attempts from occurring in rapid
|
||
-succession.
|
||
-
|
||
- On older System V based systems which do not have the `setreuid'
|
||
-system call, problems may arise if ordinary users can start an execution
|
||
-of `uuxqt', perhaps indirectly via `uucp' or `uux'. UUCP jobs may wind
|
||
-up executing with a real user ID of the user who invoked `uuxqt', which
|
||
-can cause problems if the UUCP job checks the real user ID for security
|
||
-purposes. On such systems, it is safest to put `run-uuxqt never'
|
||
-(*note Miscellaneous (config)::) in the `config' file, so that `uucico'
|
||
-never starts `uuxqt', and invoke `uuxqt' directly from a `crontab' file.
|
||
-
|
||
- Please let me know about any problems you have and how you got around
|
||
-them. If you do report a problem, please include the version number of
|
||
-the package you are using, the operating system you are running it on,
|
||
-and a sample of the debugging file showing the problem (debugging
|
||
-information is usually what is needed, not just the log file). General
|
||
-questions such as "why doesn't `uucico' dial out" are impossible to
|
||
-answer without much more information.
|
||
-
|
||
-
|
||
-File: uucp.info, Node: Using Taylor UUCP, Next: Configuration Files, Prev: Installing Taylor UUCP, Up: Top
|
||
+ The first character indicates the type of the variable (or function
|
||
+return value). Sometimes additional characters are used. I use the
|
||
+following type prefixes:
|
||
|
||
-Using Taylor UUCP
|
||
-*****************
|
||
+`a'
|
||
+ array; the next character is the type of an element
|
||
|
||
-* Menu:
|
||
+`b'
|
||
+ byte or character
|
||
|
||
-* Calling Other Systems:: Calling Other Systems
|
||
-* Accepting Calls:: Accepting Calls
|
||
-* Mail and News:: Using UUCP for Mail and News
|
||
-* The Spool Directory Layout:: The Spool Directory Layout
|
||
-* Spool Directory Cleaning:: Cleaning the UUCP Spool Directory
|
||
+`c'
|
||
+ count of something
|
||
|
||
-
|
||
-File: uucp.info, Node: Calling Other Systems, Next: Accepting Calls, Prev: Using Taylor UUCP, Up: Using Taylor UUCP
|
||
+`e'
|
||
+ stdio FILE *
|
||
|
||
-Calling Other Systems
|
||
-=====================
|
||
+`f'
|
||
+ boolean
|
||
|
||
- By default `uucp' and `uux' will automatically start up `uucico' to
|
||
-call another system whenever work is queued up. However, the call may
|
||
-fail, or you may have put in time restrictions which prevent the call
|
||
-at that time (perhaps because telephone rates are high) (*note When to
|
||
-Call::). Also, a remote system may have work queued up for your
|
||
-system, but may not be calling you for some reason (perhaps you have
|
||
-agreed that your system should always place the call). To make sure
|
||
-that work gets transferred between the systems withing a reasonable
|
||
-time period, you should arrange to periodically invoke `uucico'.
|
||
-
|
||
- These periodic invocations are normally triggered by entries in the
|
||
-`crontab' file. The exact format of `crontab' files, and how new
|
||
-entries are added, varies from system to system; check your local
|
||
-documentation (try `man cron').
|
||
-
|
||
- To attempt to call all systems with outstanding work, use the command
|
||
-`uucico -r1'. To attempt to call a particular system, use the command
|
||
-`uucico -s SYSTEM'. To attempt to call a particular system, but only
|
||
-if there is work for it, use the command `uucico -C -s SYSTEM'. (*note
|
||
-Invoking uucico::).
|
||
-
|
||
- A common case is to want to try to call a system at a certain time,
|
||
-with periodic retries if the call fails. A simple way to do this is to
|
||
-create an empty UUCP command file, known as a "poll file". If a poll
|
||
-file exists for a system, then `uucico -r1' will place a call to it.
|
||
-If the call succeeds, the poll file will be deleted.
|
||
-
|
||
- A poll file can be easily created using the `uux' command, by
|
||
-requesting the execution of an empty command. To create a poll file for
|
||
-SYSTEM, just do something like this:
|
||
- uux -r SYSTEM!
|
||
- The `-r' tells `uux' to not start up `uucico' immediately. Of
|
||
-course, if you do want `uucico' to start up right away, omit the `-r';
|
||
-if the call fails, the poll file will be left around to cause a later
|
||
-call.
|
||
-
|
||
- For example, I use the following crontab entries locally:
|
||
-
|
||
- 45 * * * * /bin/echo /usr/lib/uucp/uucico -r1 | /bin/su uucpa
|
||
- 40 4,10,15 * * * /usr/bin/uux -r uunet!
|
||
-
|
||
- Every hour, at 45 minutes past, this will check if there is any work
|
||
-to be done, and, if there is, will call the appropriate system. Also,
|
||
-at 4:40am, 10:40am, and 3:40pm, this will create a poll file file for
|
||
-`uunet', forcing the next run of `uucico' to call `uunet'.
|
||
+`i'
|
||
+ generic integer
|
||
|
||
-
|
||
-File: uucp.info, Node: Accepting Calls, Next: Mail and News, Prev: Calling Other Systems, Up: Using Taylor UUCP
|
||
+`l'
|
||
+ double
|
||
|
||
-Accepting Calls
|
||
-===============
|
||
+`o'
|
||
+ file descriptor (as returned by open, creat, etc.)
|
||
|
||
- To accept calls from another system, you must arrange matters such
|
||
-that when that system calls in, it automatically invokes `uucico' on
|
||
-your system.
|
||
-
|
||
- The most common arrangement is to create a special user name and
|
||
-password for incoming UUCP calls. This user name typically uses the
|
||
-same user ID as the regular `uucp' user (Unix permits several user
|
||
-names to share the same user ID). The shell for this user name should
|
||
-be set to `uucico'.
|
||
-
|
||
- Here is a sample `/etc/passwd' line to accept calls from a remote
|
||
-system named airs:
|
||
- Uairs:PASSWORD:4:8:airs UUCP:/usr/spool/uucp:/usr/lib/uucp/uucico
|
||
- The details may vary on your system. You must use reasonable user
|
||
-and group ID's. You must use the correct file name for `uucico'. The
|
||
-PASSWORD must appear in the UUCP configuration files on the remote
|
||
-system, but will otherwise never be seen or typed by a human.
|
||
-
|
||
- Note that `uucico' appears as the login shell, and that it will be
|
||
-run with no arguments. This means that it will start in slave mode and
|
||
-accept an incoming connection. *Note Invoking uucico::.
|
||
-
|
||
- On some systems, creating an empty file named `.hushlogin' in the
|
||
-home directory will skip the printing of various bits of information
|
||
-when the remote `uucico' logs in, speeding up the UUCP connection
|
||
-process.
|
||
-
|
||
- For the greatest security, each system which calls in should use a
|
||
-different user name, each with a different password, and the
|
||
-`called-login' command should be used in the `sys' file to ensure that
|
||
-the correct login name is used. *Note Accepting a Call::, and see
|
||
-*Note Security::.
|
||
-
|
||
- If you never need to dial out from your system, but only accept
|
||
-incoming calls, you can arrange for `uucico' to handle logins itself,
|
||
-completely controlling the port, by using the `--endless' option.
|
||
-*Note Invoking uucico::.
|
||
+`p'
|
||
+ generic pointer
|
||
|
||
-
|
||
-File: uucp.info, Node: Mail and News, Next: The Spool Directory Layout, Prev: Accepting Calls, Up: Using Taylor UUCP
|
||
+`q'
|
||
+ pointer to structure
|
||
|
||
-Using UUCP for Mail and News.
|
||
-=============================
|
||
+`s'
|
||
+ structure
|
||
|
||
- Taylor UUCP does not include a mail package. All Unix systems come
|
||
-with some sort of mail delivery agent, typically `sendmail' or `MMDF'.
|
||
-Source code is available for some alternative mail delivery agents,
|
||
-such as `IDA sendmail' and `smail'.
|
||
-
|
||
- Taylor UUCP also does not include a news package. The two major Unix
|
||
-news packages are `C-news' and `INN'. Both are available in source
|
||
-code form.
|
||
-
|
||
- Configuring and using mail delivery agents is a notoriously complex
|
||
-topic, and I will not be discussing it here. Configuring news systems
|
||
-is usually simpler, but I will not be discussing that either. I will
|
||
-merely describe the interactions between the mail and news systems and
|
||
-UUCP.
|
||
+`u'
|
||
+ void (function return values only)
|
||
|
||
- A mail or news system interacts with UUCP in two ways: sending and
|
||
-receiving.
|
||
+`z'
|
||
+ character string
|
||
|
||
-* Menu:
|
||
+ A generic pointer (`p') is sometimes a `void *', sometimes a
|
||
+function pointer in which case the prefix is pf, and sometimes a pointer
|
||
+to another type, in which case the next character is the type to which
|
||
+it points (pf is overloaded).
|
||
|
||
-* Sending mail or news:: Sending mail or news via UUCP
|
||
-* Receiving mail or news:: Receiving mail or news via UUCP
|
||
+ An array of strings (`char *[]') would be named `az' (array of
|
||
+string). If this array were passed to a function, the function
|
||
+parameter would be named `paz' (pointer to array of string).
|
||
|
||
-
|
||
-File: uucp.info, Node: Sending mail or news, Next: Receiving mail or news, Prev: Mail and News, Up: Mail and News
|
||
+ Note that the variable name prefixes do not necessarily indicate the
|
||
+type of the variable. For example, a variable prefixed with `i' may be
|
||
+int, long or short. Similarly, a variable prefixed with `b' may be a
|
||
+char or an int; for example, the return value of `getchar' would be
|
||
+caught in an int variable prefixed with `b'.
|
||
|
||
-Sending mail or news via UUCP
|
||
------------------------------
|
||
+ For a non-local variable (extern or file static), the first character
|
||
+after the type prefix is capitalized.
|
||
|
||
- When mail is to be sent from your machine to another machine via
|
||
-UUCP, the mail delivery agent will invoke `uux'. It will generally run
|
||
-a command such as `uux - SYSTEM!rmail ADDRESS', where SYSTEM is the
|
||
-remote system to which the mail is being sent. It may pass other
|
||
-options to `uux', such as `-r' or `-g' (*note Invoking uux::).
|
||
-
|
||
- The news system also invokes `uux' in order to transfer articles to
|
||
-another system. The only difference is that news will use `uux' to
|
||
-invoke `rnews' on the remote system, rather than `rmail'.
|
||
-
|
||
- You should arrange for your mail and news systems to invoke the
|
||
-Taylor UUCP version of `uux'. If you only have Taylor UUCP, or if you
|
||
-simply replace any existing version of `uux' with the Taylor UUCP
|
||
-version, this will probably happen automatically. However, if you have
|
||
-two UUCP packages installed on your system, you will probably have to
|
||
-modify the mail and news configuration files in some way.
|
||
-
|
||
- Actually, if both the system UUCP and Taylor UUCP are using the same
|
||
-spool directory format, the system `uux' will probably work fine with
|
||
-the Taylor `uucico' (the reverse is not the case: the Taylor `uux'
|
||
-requires the Taylor `uucico'). However, data transfer will be somewhat
|
||
-more efficient if the Taylor `uux' is used.
|
||
+ Most static variables and functions use another letter after the type
|
||
+prefix to indicate which module they come from. This is to help
|
||
+distinguish different names in the debugger. For example, all static
|
||
+functions in `protg.c', the `g' protocol source code, use a module
|
||
+prefix of `g'. This isn't too useful, as a number of modules use a
|
||
+module prefix of `s'.
|
||
|
||
|
||
-File: uucp.info, Node: Receiving mail or news, Prev: Sending mail or news, Up: Mail and News
|
||
+File: uucp.info, Node: Patches, Prev: Naming Conventions, Up: Hacking
|
||
|
||
-Receiving mail or news via UUCP
|
||
--------------------------------
|
||
+7.3 Patches
|
||
+===========
|
||
|
||
- To receive mail, all that is necessary is for UUCP to invoke
|
||
-`rmail'. Any mail delivery agent will provide an appropriate version
|
||
-of `rmail'; you must simply make sure that it is in the command path
|
||
-used by UUCP (it almost certainly already is). The default command
|
||
-path is set in `policy.h', and it may be overridden for a particular
|
||
-system by the `command-path' command (*note Miscellaneous (sys)::).
|
||
-
|
||
- Similarly, for news UUCP must be able to invoke `rnews'. Any news
|
||
-system will provide a version of `rnews', and you must ensure that is
|
||
-in a directory on the path that UUCP will search.
|
||
+I am always grateful for any patches sent in. Much of the flexibility
|
||
+and portability of the code is due to other people. Please do not
|
||
+hesitate to send me any changes you have found necessary or useful.
|
||
+
|
||
+ When sending a patch, please send the output of the Unix `diff'
|
||
+program invoked with the `-c' option (if you have the GNU version of
|
||
+`diff', use the `-p' option). Always invoke `diff' with the original
|
||
+file first and the modified file second.
|
||
+
|
||
+ If your `diff' does not support `-c' (or you don't have `diff'),
|
||
+send a complete copy of the modified file (if you have just changed a
|
||
+single function, you can just send the new version of the function).
|
||
+In particular, please do not send `diff' output without the `-c'
|
||
+option, as it is useless.
|
||
+
|
||
+ If you have made a number of changes, it is very convenient for me if
|
||
+you send each change as a separate mail message. Sometimes I will think
|
||
+that one change is useful but another one is not. If they are in
|
||
+different messages it is much easier for me to apply one but not the
|
||
+other.
|
||
+
|
||
+ I rarely apply the patches directly. Instead I work my way through
|
||
+the hunks and apply each one separately. This ensures that the naming
|
||
+remains consistent, and that I understand all the code.
|
||
+
|
||
+ If you can not follow all these rules, then don't. But if you do, it
|
||
+makes it more likely that I will incorporate your changes. I am not
|
||
+paid for my UUCP work, and my available time is unfortunately very
|
||
+restricted. The package is important to me, and I do what I can, but I
|
||
+can not do all that I would like, much less all that everybody else
|
||
+would like.
|
||
+
|
||
+ Finally, please do not be offended if I do not reply to messages for
|
||
+some time, even a few weeks. I am often behind on my mail, and if I
|
||
+think your message deserves a considered reply I will often put it aside
|
||
+until I have time to deal with it.
|
||
+
|
||
+
|
||
+File: uucp.info, Node: Acknowledgements, Next: Index (concepts), Prev: Hacking, Up: Top
|
||
+
|
||
+8 Acknowledgements
|
||
+******************
|
||
+
|
||
+This is a list of people who gave help or suggestions while I was
|
||
+working on the Taylor UUCP project. Appearance on this list does not
|
||
+constitute endorsement of the program, particularly since some of the
|
||
+comments were criticisms. I've probably left some people off, and I
|
||
+apologize for any oversight; it does not mean your contribution was
|
||
+unappreciated.
|
||
+
|
||
+ First of all, I would like to thank the people at Infinity
|
||
+Development Systems (formerly AIRS, which lives on in the domain name)
|
||
+for permitting me to use their computers and `uunet' access. I would
|
||
+also like to thank Richard Stallman <rms@gnu.org> for founding the Free
|
||
+Software Foundation, and John Gilmore <gnu@toad.com> for writing the
|
||
+initial version of gnuucp (based on uuslave) which was a direct
|
||
+inspiration for this somewhat larger project. Chip Salzenberg
|
||
+<chip@tct.com> has contributed many patches. Franc,ois Pinard
|
||
+<pinard@iro.umontreal.ca> tirelessly tested the code and suggested many
|
||
+improvements. He also put together the initial version of this manual.
|
||
+Doug Evans contributed the zmodem protocol. Marc Boucher
|
||
+<marc@CAM.ORG> contributed the code supporting the pipe port type.
|
||
+Jorge Cwik <jorge@laser.satlink.net> contributed the `y' protocol code.
|
||
+Finally, Verbus M. Counts <verbus@westmark.com> and Centel Federal
|
||
+Systems, Inc., deserve special thanks, since they actually paid me
|
||
+money to port this code to System III.
|
||
+
|
||
+ In alphabetical order:
|
||
+
|
||
+ Meno Abels <Meno.Abels@Technical.Adviser.com>
|
||
+ "Earle F. Ake - SAIC" <ake@Dayton.SAIC.COM>
|
||
+ <mra@searchtech.com> (Michael Almond)
|
||
+ <cambler@zeus.calpoly.edu> (Christopher J. Ambler)
|
||
+ Brian W. Antoine <briana@tau-ceti.isc-br.com>
|
||
+ <jantypas@soft21.s21.com> (John Antypas)
|
||
+ <james@bigtex.cactus.org> (James Van Artsdalen)
|
||
+ <jima@netcom.com> (Jim Avera)
|
||
+ <nba@sysware.DK> (Niels Baggesen)
|
||
+ <uunet!hotmomma!sdb> (Scott Ballantyne)
|
||
+ Zacharias Beckman <zac@dolphin.com>
|
||
+ <mike@mbsun.ann-arbor.mi.us> (Mike Bernson)
|
||
+ <bob@usixth.sublink.org> (Roberto Biancardi)
|
||
+ <statsci!scott@coco.ms.washington.edu> (Scott Blachowicz)
|
||
+ <bag%wood2.cs.kiev.ua@relay.ussr.eu.net> (Andrey G Blochintsev)
|
||
+ <spider@Orb.Nashua.NH.US> (Spider Boardman)
|
||
+ Gregory Bond <gnb@bby.com.au>
|
||
+ Marc Boucher <marc@CAM.ORG>
|
||
+ Ard van Breemen <ard@cstmel.hobby.nl>
|
||
+ <dean@coplex.com> (Dean Brooks)
|
||
+ <jbrow@radical.com> (Jim Brownfield)
|
||
+ <dave@dlb.com> (Dave Buck)
|
||
+ <gordon@sneaky.lonestar.org> (Gordon Burditt)
|
||
+ <dburr@sbphy.physics.ucsb.edu> (Donald Burr)
|
||
+ <mib@gnu.ai.mit.edu> (Michael I Bushnell)
|
||
+ Brian Campbell <brianc@quantum.on.ca>
|
||
+ Andrew A. Chernov <ache@astral.msk.su>
|
||
+ <jhc@iscp.bellcore.com> (Jonathan Clark)
|
||
+ <mafc!frank@bach.helios.de> (Frank Conrad)
|
||
+ Ed Carp <erc@apple.com>
|
||
+ <mpc@mbs.linet.org> (Mark Clements)
|
||
+ <verbus@westmark.westmark.com> (Verbus M. Counts)
|
||
+ <cbmvax!snark.thyrsus.com!cowan> (John Cowan)
|
||
+ Bob Cunningham <bob@soest.hawaii.edu>
|
||
+ <jorge@laser.satlink.net> (Jorge Cwik)
|
||
+ <kdburg@incoahe.hanse.de> (Klaus Dahlenburg)
|
||
+ Damon <d@exnet.co.uk>
|
||
+ <celit!billd@UCSD.EDU> (Bill Davidson)
|
||
+ <hubert@arakis.fdn.org> (Hubert Delahaye)
|
||
+ <markd@bushwire.apana.org.au> (Mark Delany)
|
||
+ Allen Delaney <allen@brc.ubc.ca>
|
||
+ Gerriet M. Denkmann <gerriet@hazel.north.de>
|
||
+ <denny@dakota.alisa.com> (Bob Denny)
|
||
+ Drew Derbyshire <ahd@kew.com>
|
||
+ <ssd@nevets.oau.org> (Steven S. Dick)
|
||
+ <gert@greenie.gold.sub.org> (Gert Doering)
|
||
+ <gemini@geminix.in-berlin.de> (Uwe Doering)
|
||
+ Hans-Dieter Doll <hd2@Insel.DE>
|
||
+ <deane@deane.teleride.on.ca> (Dean Edmonds)
|
||
+ Mark W. Eichin <eichin@cygnus.com>
|
||
+ <erik@pdnfido.fidonet.org>
|
||
+ Andrew Evans <andrew@airs.com>
|
||
+ <dje@cygnus.com> (Doug Evans)
|
||
+ Marc Evans <marc@synergytics.com>
|
||
+ Dan Everhart <dan@dyndata.com>
|
||
+ <kksys!kegworks!lfahnoe@cs.umn.edu> (Larry Fahnoe)
|
||
+ Matthew Farwell <dylan@ibmpcug.co.uk>
|
||
+ <fenner@jazz.psu.edu> (Bill Fenner)
|
||
+ <jaf@inference.com> (Jose A. Fernandez)
|
||
+ "David J. Fiander" <golem!david@news.lsuc.on.ca>
|
||
+ Thomas Fischer <batman@olorin.dark.sub.org>
|
||
+ Mister Flash <flash@sam.imash.ras.ru>
|
||
+ <louis@marco.de> (Ju"rgen Fluk)
|
||
+ <erik@eab.retix.com> (Erik Forsberg)
|
||
+ <andy@scp.caltech.edu> (Andy Fyfe)
|
||
+ Lele Gaifax <piggy@idea.sublink.org>
|
||
+ <Peter.Galbavy@micromuse.co.uk>
|
||
+ <hunter@phoenix.pub.uu.oz.au> (James Gardiner [hunter])
|
||
+ Terry Gardner <cphpcom!tjg01>
|
||
+ <dgilbert@gamiga.guelphnet.dweomer.org> (David Gilbert)
|
||
+ <ol@infopro.spb.su> (Oleg Girko)
|
||
+ <jimmy@tokyo07.info.com> (Jim Gottlieb)
|
||
+ Benoit Grange <ben@fizz.fdn.org>
|
||
+ <elg@elgamy.jpunix.com> (Eric Lee Green)
|
||
+ <ryan@cs.umb.edu> (Daniel R. Guilderson)
|
||
+ <greg@gagme.chi.il.us> (Gregory Gulik)
|
||
+ Richard H. Gumpertz <rhg@cps.com>
|
||
+ Scott Guthridge <scooter@cube.rain.com>
|
||
+ Michael Haberler <mah@parrot.prv.univie.ac.at>
|
||
+ Daniel Hagerty <hag@eddie.mit.edu>
|
||
+ <jh@moon.nbn.com> (John Harkin)
|
||
+ <guy@auspex.auspex.com> (Guy Harris)
|
||
+ <hsw1@papa.attmail.com> (Stephen Harris)
|
||
+ Tom Ivar Helbekkmo <tih@Norway.EU.net>
|
||
+ Petri Helenius <pete@fidata.fi>
|
||
+ <gabe@edi.com> (B. Gabriel Helou)
|
||
+ Bob Hemedinger <bob@dalek.mwc.com>
|
||
+ Andrew Herbert <andrew@werple.pub.uu.oz.au>
|
||
+ <kherron@ms.uky.edu> (Kenneth Herron)
|
||
+ Peter Honeyman <honey@citi.umich.edu>
|
||
+ <jhood@smoke.marlboro.vt.us> (John Hood)
|
||
+ Mark Horsburgh <markh@kcbbs.gen.nz>
|
||
+ John Hughes <john@Calva.COM>
|
||
+ Mike Ipatow <mip@fido.itc.e-burg.su>
|
||
+ Bill Irwin <bill@twg.bc.ca>
|
||
+ <pmcgw!personal-media.co.jp!ishikawa> (Chiaki Ishikawa)
|
||
+ <ai@easy.in-chemnitz.de> (Andreas Israel)
|
||
+ <iverson@lionheart.com> (Tim Iverson)
|
||
+ <bei@dogface.austin.tx.us> (Bob Izenberg)
|
||
+ <djamiga!djjames@fsd.com> (D.J.James)
|
||
+ Rob Janssen <cmgit!rob@relay.nluug.nl>
|
||
+ <harvee!esj> (Eric S Johansson)
|
||
+ Kevin Johnson <kjj@pondscum.phx.mcd.mot.com>
|
||
+ <rj@rainbow.in-berlin.de> (Robert Joop)
|
||
+ Alan Judge <aj@dec4ie.IEunet.ie>
|
||
+ <chris@cj_net.in-berlin.de> (Christof Junge)
|
||
+ Romain Kang <romain@pyramid.com>
|
||
+ <tron@Veritas.COM> (Ronald S. Karr)
|
||
+ Brendan Kehoe <brendan@cs.widener.edu>
|
||
+ <warlock@csuchico.edu> (John Kennedy)
|
||
+ <kersing@nlmug.nl.mugnet.org> (Jac Kersing)
|
||
+ <ok@daveg.PFM-Mainz.de> (Olaf Kirch)
|
||
+ Gabor Kiss <kissg@sztaki.hu>
|
||
+ <gero@gkminix.han.de> (Gero Kuhlmann)
|
||
+ <rob@pact.nl> (Rob Kurver)
|
||
+ "C.A. Lademann" <cal@zls.gtn.com>
|
||
+ <kent@sparky.IMD.Sterling.COM> (Kent Landfield)
|
||
+ Tin Le <tin@saigon.com>
|
||
+ <lebaron@inrs-telecom.uquebec.ca> (Gregory LeBaron)
|
||
+ <karl@sugar.NeoSoft.Com> (Karl Lehenbauer)
|
||
+ <alex@hal.rhein-main.de> (Alexander Lehmann)
|
||
+ <merlyn@digibd.com> (Merlyn LeRoy)
|
||
+ <clewis@ferret.ocunix.on.ca> (Chris Lewis)
|
||
+ <gdonl@ssi1.com> (Don Lewis)
|
||
+ <libove@libove.det.dec.com> (Jay Vassos-Libove)
|
||
+ <bruce%blilly@Broadcast.Sony.COM> (Bruce Lilly)
|
||
+ Godfrey van der Linden <Godfrey_van_der_Linden@NeXT.COM>
|
||
+ Ted Lindgreen <tlindgreen@encore.nl>
|
||
+ <andrew@cubetech.com> (Andrew Loewenstern)
|
||
+ "Arne Ludwig" <arne@rrzbu.hanse.de>
|
||
+ Matthew Lyle <matt@mips.mitek.com>
|
||
+ <djm@eng.umd.edu> (David J. MacKenzie)
|
||
+ John R MacMillan <chance!john@sq.sq.com>
|
||
+ <jum@helios.de> (Jens-Uwe Mager)
|
||
+ Giles D Malet <shrdlu!gdm@provar.kwnet.on.ca>
|
||
+ <mem@mv.MV.COM> (Mark E. Mallett)
|
||
+ <pepe@dit.upm.es> (Jose A. Manas)
|
||
+ <peter@xpoint.ruessel.sub.org> (Peter Mandrella)
|
||
+ <martelli@cadlab.sublink.org> (Alex Martelli)
|
||
+ W Christopher Martin <wcm@geek.ca.geac.com>
|
||
+ Yanek Martinson <yanek@mthvax.cs.miami.edu>
|
||
+ <thomasm@mechti.wupper.de> (Thomas Mechtersheimer)
|
||
+ <jm@aristote.univ-paris8.fr> (Jean Mehat)
|
||
+ <me@halfab.freiburg.sub.org> (Udo Meyer)
|
||
+ <les@chinet.chi.il.us> (Leslie Mikesell)
|
||
+ <bug@cyberdex.cuug.ab.ca> (Trever Miller)
|
||
+ <mmitchel@digi.lonestar.org> (Mitch Mitchell)
|
||
+ Emmanuel Mogenet <mgix@krainte.jpn.thomson-di.fr>
|
||
+ <rmohr@infoac.rmi.de> (Rupert Mohr)
|
||
+ Jason Molenda <molenda@sequent.com>
|
||
+ <ianm@icsbelf.co.uk> (Ian Moran)
|
||
+ <jmorriso@bogomips.ee.ubc.ca> (John Paul Morrison)
|
||
+ <brian@ilinx.wimsey.bc.ca> (Brian J. Murrell)
|
||
+ <service@infohh.rmi.de> (Dirk Musstopf)
|
||
+ <lyndon@cs.athabascau.ca> (Lyndon Nerenberg)
|
||
+ <rolf@saans.north.de> (Rolf Nerstheimer)
|
||
+ <tom@smart.bo.open.de> (Thomas Neumann)
|
||
+ <mnichols@pacesetter.com>
|
||
+ Richard E. Nickle <trystro!rick@Think.COM>
|
||
+ <stephan@sunlab.ka.sub.org> (Stephan Niemz)
|
||
+ <raymond@es.ele.tue.nl> (Raymond Nijssen)
|
||
+ <nolan@helios.unl.edu> (Michael Nolan)
|
||
+ david nugent <david@csource.oz.au>
|
||
+ Jim O'Connor <jim@bahamut.fsc.com>
|
||
+ <kevin%kosman.uucp@nrc.com> (Kevin O'Gorman)
|
||
+ Petri Ojala <ojala@funet.fi>
|
||
+ <oneill@cs.ulowell.edu> (Brian 'Doc' O'Neill)
|
||
+ <Stephen.Page@prg.oxford.ac.uk>
|
||
+ Peter Palfrader <peter@palfrader.org>
|
||
+ <abekas!dragoman!mikep@decwrl.dec.com> (Mike Park)
|
||
+ Tim Peiffer <peiffer@cs.umn.edu>
|
||
+ <don@blkhole.resun.com> (Don Phillips)
|
||
+ "Mark Pizzolato 415-369-9366" <mark@infocomm.com>
|
||
+ John Plate <plate@infotek.dk>
|
||
+ <dplatt@ntg.com> (Dave Platt)
|
||
+ <eldorado@tharr.UUCP> (Mark Powell)
|
||
+ Mark Powell <mark@inet-uk.co.uk>
|
||
+ <pozar@kumr.lns.com> (Tim Pozar)
|
||
+ <joey@tessi.UUCP> (Joey Pruett)
|
||
+ Paul Pryor <ptp@fallschurch-acirs2.army.mil>
|
||
+ <putsch@uicc.com> (Jeff Putsch)
|
||
+ <ar@nvmr.robin.de> (Andreas Raab)
|
||
+ Vadim Radionov <rvp@zfs.lg.ua>
|
||
+ Jarmo Raiha <jarmo@ksvltd.FI>
|
||
+ James Revell <revell@uunet.uu.net>
|
||
+ Scott Reynolds <scott@clmqt.marquette.Mi.US>
|
||
+ <mcr@Sandelman.OCUnix.On.Ca> (Michael Richardson)
|
||
+ Kenji Rikitake <kenji@rcac.astem.or.jp>
|
||
+ <arnold@cc.gatech.edu> (Arnold Robbins)
|
||
+ <steve@Nyongwa.cam.org> (Steve M. Robbins)
|
||
+ Ollivier Robert <Ollivier.Robert@keltia.frmug.fr.net>
|
||
+ Serge Robyns <sr@denkart.be>
|
||
+ Lawrence E. Rosenman <ler@lerami.lerctr.org>
|
||
+ Jeff Ross <jeff@wisdom.bubble.org>
|
||
+ Aleksey P. Rudnev <alex@kiae.su>
|
||
+ "Heiko W.Rupp" <hwr@pilhuhn.ka.sub.org>
|
||
+ <wolfgang@wsrcc.com> (Wolfgang S. Rupprecht)
|
||
+ <tbr@tfic.bc.ca> (Tom Rushworth)
|
||
+ Peter Rye <prye@picu-sgh.demon.co.uk>
|
||
+ <jsacco@ssl.com> (Joseph E. Sacco)
|
||
+ <rsalz@bbn.com> (Rich Salz)
|
||
+ Curt Sampson <curt@portal.ca>
|
||
+ <sojurn!mike@hobbes.cert.sei.cmu.edu> (Mike Sangrey)
|
||
+ Nickolay Saukh <nms@ussr.EU.net>
|
||
+ Ignatios Souvatzis <is@jocelyn.rhein.de>
|
||
+ <heiko@lotte.sax.de> (Heiko Schlittermann)
|
||
+ Eric Schnoebelen <eric@cirr.com>
|
||
+ <russell@alpha3.ersys.edmonton.ab.ca> (Russell Schulz)
|
||
+ <scott@geom.umn.edu>
|
||
+ Igor V. Semenyuk <iga@argrd0.argonaut.su>
|
||
+ Christopher Sawtell <chris@gerty.equinox.gen.nz>
|
||
+ <schuler@bds.sub.org> (Bernd Schuler)
|
||
+ <uunet!gold.sub.org!root> (Christian Seyb)
|
||
+ Marcus Shang <marcus.shang@canada.cdev.com>
|
||
+ <s4mjs!mjs@nirvo.nirvonics.com> (M. J. Shannon Jr.)
|
||
+ <shields@tembel.org> (Michael Shields)
|
||
+ <peter@ficc.ferranti.com> (Peter da Silva)
|
||
+ <vince@victrola.sea.wa.us> (Vince Skahan)
|
||
+ <frumious!pat> (Patrick Smith)
|
||
+ <roscom!monty@bu.edu> (Monty Solomon)
|
||
+ <sommerfeld@orchard.medford.ma.us> (Bill Sommerfeld)
|
||
+ Julian Stacey <stacey@guug.de>
|
||
+ <evesg@etlrips.etl.go.jp> (Gjoen Stein)
|
||
+ Harlan Stenn <harlan@mumps.pfcs.com>
|
||
+ Ralf Stephan <ralf@ark.abg.sub.org>
|
||
+ <johannes@titan.westfalen.de> (Johannes Stille)
|
||
+ <chs@antic.apu.fi> (Hannu Strang)
|
||
+ <ralf@reswi.ruhr.de> (Ralf E. Stranzenbach)
|
||
+ <sullivan@Mathcom.com> (S. Sullivan)
|
||
+ Shigeya Suzuki <shigeya@dink.foretune.co.jp>
|
||
+ <kls@ditka.Chicago.COM> (Karl Swartz)
|
||
+ <swiers@plains.NoDak.edu>
|
||
+ Oleg Tabarovsky <olg@olghome.pccentre.msk.su>
|
||
+ <ikeda@honey.misystems.co.jp> (Takatoshi Ikeda)
|
||
+ John Theus <john@theus.rain.com>
|
||
+ <rd@aii.com> (Bob Thrush)
|
||
+ ppKarsten Thygesen <karthy@dannug.dk>
|
||
+ Graham Toal <gtoal@pizzabox.demon.co.uk>
|
||
+ <rmtodd@servalan.servalan.com> (Richard Todd)
|
||
+ Michael Ju. Tokarev <mjt@tls.msk.ru>
|
||
+ Martin Tomes <mt00@controls.eurotherm.co.uk>
|
||
+ Len Tower <tower-prep@ai.mit.edu>
|
||
+ Mark Towfiq <justice!towfiq@Eingedi.Newton.MA.US>
|
||
+ <mju@mudos.ann-arbor.mi.us> (Marc Unangst)
|
||
+ Matthias Urlichs <urlichs@smurf.noris.de>
|
||
+ Tomi Vainio <tomppa@fidata.fi>
|
||
+ <a3@a3.xs4all.nl> (Adri Verhoef)
|
||
+ Andrew Vignaux <ajv@ferrari.datamark.co.nz>
|
||
+ <vogel@omega.ssw.de> (Andreas Vogel)
|
||
+ Dima Volodin <dvv@hq.demos.su>
|
||
+ <jos@bull.nl> (Jos Vos)
|
||
+ <jv@nl.net> (Johan Vromans)
|
||
+ David Vrona <dave@sashimi.wwa.com>
|
||
+ <Marcel.Waldvogel@nice.usergroup.ethz.ch> (Marcel Waldvogel)
|
||
+ <steve@nshore.org> (Stephen J. Walick)
|
||
+ <syd@dsinc.dsi.com> (Syd Weinstein)
|
||
+ <gerben@rna.indiv.nluug.nl> (Gerben Wierda)
|
||
+ <jbw@cs.bu.edu> (Joe Wells)
|
||
+ <frnkmth!twwells.com!bill> (T. William Wells)
|
||
+ Peter Wemm <Peter_Wemm@zeus.dialix.oz.au>
|
||
+ <mauxci!eci386!woods@apple.com> (Greg A. Woods)
|
||
+ <John.Woods@proteon.com> (John Woods)
|
||
+ Michael Yu.Yaroslavtsev <mike@yaranga.ipmce.su>
|
||
+ Alexei K. Yushin <root@july.elis.crimea.ua>
|
||
+ <jon@console.ais.org> (Jon Zeeff)
|
||
+ Matthias Zepf <agnus@amylnd.stgt.sub.org>
|
||
+ Eric Ziegast <uunet!ziegast>
|
||
|
||
|
||
-File: uucp.info, Node: The Spool Directory Layout, Next: Spool Directory Cleaning, Prev: Mail and News, Up: Using Taylor UUCP
|
||
-
|
||
-The Spool Directory Layout
|
||
-==========================
|
||
+File: uucp.info, Node: Index (concepts), Next: Index (configuration file), Prev: Acknowledgements, Up: Top
|
||
|
||
- In general, the layout of the spool directory may be safely ignored.
|
||
-However, it is documented here for the curious. This description only
|
||
-covers the `SPOOLDIR_TAYLOR' layout. The ways in which the other spool
|
||
-directory layouts differ are described in the source file
|
||
-`unix/spool.c'.
|
||
-
|
||
- Directories and files are only created when they are needed, so a
|
||
-typical system will not have all of the entries described here.
|
||
+Concept Index
|
||
+*************
|
||
|
||
+ |