|
|
1.1 root 1: \input texinfo @c -*-texinfo-*-
2: @c %**start of header
3: @setfilename uucp.info
4: @settitle Taylor UUCP
5: @setchapternewpage odd
6: @c %**end of header
7:
8: @iftex
9: @finalout
10: @end iftex
11:
12: @ignore
13: ---------------------------------------------------------------------->
14: Franc,ois Pinard says:
15:
16: Hi, Ian! This is the promised merging of the current documents from
17: Taylor UUCP 1.01, plus the patches to documentation you sent to me, into
18: a taylor.texi file. Many things remain to do, among which:
19:
20: - merging in the Taylor UUCP program man pages.
21: ----------------------------------------------------------------------<
22: @end ignore
23:
24: @ifinfo
25: This file documents Taylor UUCP, version 1.04.
26:
27: Copyright @copyright{} 1992, 1993 Ian Lance Taylor
28:
29: Permission is granted to make and distribute verbatim copies of this
30: manual provided the copyright notice and this permission notice are
31: preserved on all copies.
32:
33: @ignore
34: Permission is granted to process this file through TeX and print the
35: results, provided the printed document carries a copying permission
36: notice identical to this one except for the removal of this paragraph
37: (this paragraph not being relevant to the printed manual).
38:
39: @end ignore
40: Permission is granted to copy and distribute modified versions of this
41: manual under the conditions for verbatim copying, provided also that the
42: section entitled ``Copying'' are included exactly as in the original, and
43: provided that the entire resulting derived work is distributed under the
44: terms of a permission notice identical to this one.
45:
46: Permission is granted to copy and distribute translations of this manual
47: into another language, under the above conditions for modified versions,
48: except that the section entitled ``Copying'' may be included in a
49: translation approved by the author instead of in the original English.
50: @end ifinfo
51:
52: @titlepage
53: @title Taylor UUCP
54: @subtitle Version 1.04
55: @author Ian Lance Taylor @code{<ian@@airs.com>}
56:
57: @page
58: @vskip 0pt plus 1filll
59: Copyright @copyright{} 1992, 1993 Ian Lance Taylor
60:
61: Published by Ian Lance Taylor @code{<ian@@airs.com>}.
62:
63: Permission is granted to make and distribute verbatim copies of this
64: manual provided the copyright notice and this permission notice are
65: preserved on all copies.
66:
67: Permission is granted to copy and distribute modified versions of this
68: manual under the conditions for verbatim copying, provided also that the
69: section entitled ``Copying'' are included exactly as in the original, and
70: provided that the entire resulting derived work is distributed under the
71: terms of a permission notice identical to this one.
72:
73: Permission is granted to copy and distribute translations of this manual
74: into another language, under the above conditions for modified versions,
75: except that the section entitled ``Copying'' may be included in a
76: translation approved by the author instead of in the original English.
77: @end titlepage
78:
79: @node Top, Copying, (dir), (dir)
80: @top Taylor UUCP 1.04
81:
82: This is the documentation for the Taylor UUCP package, version 1.04.
83: The programs were written by Ian Lance Taylor. The author can be
84: reached at @code{<ian@@airs.com>}, or @samp{c/o Cygnus Support, 4th
85: Floor, Building 200, 1 Kendall Square, Cambridge, MA, 02139}.
86:
87: There is a mailing list for discussion of the package. To join (or get
88: off) the list, send mail to
89: @code{<taylor-uucp-request@@gnu.ai.mit.edu>}. Mail to this address is
90: answered by a person, not a program. When joining the list, please give
91: the address at which you wish to receive mail; do not rely on the
92: message headers. To send a message to the list, send it to
93: @code{<taylor-uucp@@gnu.ai.mit.edu>}.
94:
95: @menu
96: * Copying:: Taylor UUCP copying conditions
97: * Introduction:: Introduction to Taylor UUCP
98: * Overall Installation:: Taylor UUCP installation
99: * Configuration Files:: Taylor UUCP configuration files
100: * Protocols:: UUCP protocol internals
101: * Hacking:: Hacking Taylor UUCP
102: * Acknowledgements:: Acknowledgements
103:
104: * Index (concepts):: Concept index
105: * Index (configuration file):: Index to new configuration files
106:
107: --- The Detailed Node Listing ---
108:
109: Taylor UUCP Overall Installation
110:
111: * Configuration:: Configuring Taylor UUCP
112: * Compilation:: Compiling Taylor UUCP
113: * Testing:: Testing Taylor UUCP
114: * Installation:: Installing Taylor UUCP
115: * TCP:: TCP together with Taylor UUCP
116:
117: Installing Taylor UUCP
118:
119: * Running uucico:: Running uucico
120: * Using UUCP for mail and news:: Using UUCP for mail and news.
121: * Trimming UUCP Log Files:: Trimming UUCP Log Files
122:
123: Using UUCP for mail and news.
124:
125: * Sending mail or news:: Sending mail or news via UUCP
126: * Receiving mail or news:: Receiving mail or news via UUCP
127:
128: Taylor UUCP Configuration Files
129:
130: * Configuration File Format:: Configuration file format
131: * Configuration Examples:: Examples of configuration files
132: * Time Strings:: How to write time strings
133: * Chat Scripts:: How to write chat scripts
134: * config File:: The main configuration file
135: * sys File:: The system configuration file
136: * port File:: The port configuration files
137: * dial File:: The dialer configuration files
138: * Security:: Security issues
139:
140: Examples of Configuration Files
141:
142: * config File Examples:: Examples of the main configuration file
143: * Leaf Example:: Call a single remote site
144: * Gateway Example:: The gateway for several local systems
145:
146: The Main Configuration File
147:
148: * Miscellaneous (config):: Miscellaneous config file commands
149: * Configuration File Names:: Using different configuration files
150: * Log File Names:: Using different log files
151: * Debugging Levels:: Debugging levels
152:
153: The System Configuration File
154:
155: * Defaults and Alternates:: Using defaults and alternates
156: * Naming the System:: Naming the system
157: * Calling Out:: Calling out
158: * Accepting a Call:: Accepting a call
159: * Protocol Selection:: Protocol selection
160: * File Transfer Control:: File transfer control
161: * Miscellaneous (sys):: Miscellaneous sys file commands
162: * Default sys File Values:: Default values
163:
164: Calling Out
165:
166: * When to Call:: When to call
167: * Placing the Call:: Placing the call
168: * Logging In:: Logging in
169:
170: UUCP protocol internals
171:
172: * Grades:: UUCP grades
173: * Lock Files:: UUCP lock file format
174: * UUCP Protocol:: The common UUCP protocol
175: * g Protocol:: The UUCP @samp{g} protocol
176: * f Protocol:: The UUCP @samp{f} protocol
177: * t Protocol:: The UUCP @samp{t} protocol
178: * e Protocol:: The UUCP @samp{e} protocol
179: * x Protocol:: The UUCP @samp{x} protocol
180: * d Protocol:: The UUCP @samp{d} protocol
181: * Capital G Protocol:: The UUCP @samp{G} protocol
182: * Documentation References:: Documentation references
183:
184: The Common UUCP Protocol
185:
186: * Initial Handshake:: Initial handshake
187: * File Requests:: File requests
188: * Final Handshake:: Final handshake
189:
190: File Requests
191:
192: * S Request:: S request
193: * R Request:: R request
194: * X Request:: X request
195: * H Request:: H request
196:
197: Hacking Taylor UUCP
198:
199: * System Dependence:: System Dependence
200: * Naming Conventions:: Naming Conventions
201: * Patches:: Patches
202: @end menu
203:
204: @node Copying, Introduction, Top, Top
205: @unnumbered Taylor UUCP Copying Conditions
206:
207: This package is covered by the GNU Public License. See the file
208: @file{COPYING} for details. If you would like to do something with this
209: package that you feel is reasonable, but you feel is prohibited by the
210: license, contact me to see if we can work it out.
211:
212: Here is some propaganda from the Free Software Foundation. If you find
213: this stuff offensive or annoying, remember that you probably did not
214: spend any money to get this code. I did not write this code to make
215: life easier for developers of UUCP packages, I wrote it to help end
216: users, and I believe that these are the most appropriate conditions for
217: distribution.
218:
219: All the programs, scripts and documents relating to Taylor UUCP are
220: @dfn{free}; this means that everyone is free to use them and free to
221: redistribute them on a free basis. The Taylor UUCP-related programs are
222: not in the public domain; they are copyrighted and there are
223: restrictions on their distribution, but these restrictions are designed
224: to permit everything that a good cooperating citizen would want to do.
225: What is not allowed is to try to prevent others from further sharing any
226: version of these programs that they might get from you.
227:
228: Specifically, we want to make sure that you have the right to give away
229: copies of the programs that relate to Taylor UUCP, that you receive
230: source code or else can get it if you want it, that you can change these
231: programs or use pieces of them in new free programs, and that you know
232: you can do these things.
233:
234: To make sure that everyone has such rights, we have to forbid you to
235: deprive anyone else of these rights. For example, if you distribute
236: copies of the Taylor UUCP related programs, you must give the recipients
237: all the rights that you have. You must make sure that they, too,
238: receive or can get the source code. And you must tell them their
239: rights.
240:
241: Also, for our own protection, we must make certain that everyone finds
242: out that there is no warranty for the programs that relate to Taylor
243: UUCP. If these programs are modified by someone else and passed on, we
244: want their recipients to know that what they have is not what we
245: distributed, so that any problems introduced by others will not reflect
246: on our reputation.
247:
248: The precise conditions of the licenses for the programs currently being
249: distributed that relate to Taylor UUCP are found in the General Public
250: Licenses that accompany them.
251:
252: @node Introduction, Overall Installation, Copying, Top
253: @chapter Introduction to Taylor UUCP
254:
255: General introductions to UUCP are available, and perhaps one day I will
256: write one. In the meantime, here is a very brief one that concentrates
257: on the programs provided by Taylor UUCP.
258:
259: Taylor UUCP is a complete UUCP package. It is covered by the GNU Public
260: License, which means that the source code is always available. It is
261: composed of several programs; most of the names of these programs are
262: based on earlier UUCP packages.
263:
264: @table @code
265:
266: @item uucp
267:
268: The @code{uucp} program is used to copy file between systems. It is
269: similar to the standard Unix @code{cp} program, except that you can
270: refer to a file on a remote system by using @samp{system!} before the
271: file name. For example, to copy the file @file{notes.txt} to the system
272: @samp{airs}, you would say @samp{uucp notes.txt airs!~/notes.txt}. In
273: this example @samp{~} is used to name the UUCP public directory on
274: @samp{airs}.
275:
276: @item uux
277:
278: The @code{uux} program is used to request a program to be executed on a
279: remote system. This is how mail and news are transferred over UUCP. As
280: with @code{uucp}, programs and files on remote systems may be named by
281: using @samp{system!}. For example, to run the @code{rnews} program on
282: @samp{airs} passing it standard input, you would say @samp{uux -
283: airs!rnews}. The @samp{-} means to read standard input and set things
284: up such that when @code{rnews} runs on @samp{airs} it will receive the
285: same standard input.
286:
287: @end table
288:
289: Neither @code{uucp} nor @code{uux} actually do any work immediately.
290: Instead, they queue up requests for later processing. They then start a
291: daemon process which processes the requests and calls up the appropriate
292: systems. Normally the system will also start the daemon periodically to
293: check if there is any work to be done. The advantage of this approach
294: is that it all happens automatically. You don't have to sit around
295: waiting for the files to be transferred. The disadvantage is that if
296: anything goes wrong it might be a while before anybody notices.
297:
298: @table @code
299:
300: @item uustat
301:
302: The @code{uustat} program does many things. By default it will simply
303: list all the jobs you have queued with @code{uucp} or @code{uux} that
304: have not yet been processed. You can use @code{uustat} to remove any of
305: your jobs from the queue. You can also it use it to show the status of
306: the UUCP system in various ways, such as showing the connection status
307: of all the remote systems your system knows about. The system
308: administrator can use @code{uustat} to automatically discard old jobs
309: while sending mail to the user who requested them.
310:
311: @item uuname
312:
313: The @code{uuname} program by default lists all the remote systems your
314: system knows about. You can also use it to get the name of your local
315: system. It is mostly useful for shell scripts.
316:
317: @item uulog
318:
319: The @code{uulog} program can be used to display entries in the UUCP log
320: file. It can select the entries for a particular system or a particular
321: user. You can use it to see what has happened to your queued jobs in
322: the past.
323:
324: @item uuto
325: @item uupick
326:
327: @code{uuto} is a simple shell script interface to @code{uucp}. It will
328: transfer a file, or the contents of a directory, to a remote system, and
329: notify a particular user on the remote system when it arrives. The
330: remote user can then retrieve the file(s) with @code{uupick}.
331:
332: @item cu
333:
334: The @code{cu} program can be used to call up another system and
335: communicate with it as though you were directly connected. It can also
336: do simple file transfers, though it does not provide any error checking.
337:
338: @end table
339:
340: These eight programs just described, @code{uucp}, @code{uux},
341: @code{uuto}, @code{uupick}, @code{uustat}, @code{uuname}, @code{uulog},
342: and @code{cu} are the user programs provided by Taylor UUCP@.
343: @code{uucp}, @code{uux}, and @code{uuto} add requests to the work queue,
344: @code{uupick} extracts files from the UUCP public directory,
345: @code{uustat} examines the work queue, @code{uuname} examines the
346: configuration files, @code{uulog} examines the log files, and @code{cu}
347: just uses the UUCP configuration files.
348:
349: The real work is actually done by two daemon processes, which are
350: normally run automatically rather than by a user.
351:
352: @table @code
353:
354: @item uucico
355:
356: The @code{uucico} daemon is the program which actually calls the remote
357: system and transfers files and requests. @code{uucico} is normally
358: started automatically by @code{uucp} and @code{uux}. Most systems will
359: also start it periodically to make sure that all work requests are
360: handled. @code{uucico} checks the queue to see what work needs to be
361: done, and then calls the appropriate systems. If the call fails,
362: perhaps because the phone line is busy, @code{uucico} leaves the
363: requests in the queue and goes on to the next system to call. It is
364: also possible to force @code{uucico} to call a remote system even if
365: there is no work to be done for it, so that it can pick up any work that
366: may be queued up remotely.
367:
368: @item uuxqt
369:
370: The @code{uuxqt} daemon processes execution requests made by the
371: @code{uux} program on remote systems. It also processes requests made
372: on the local system which require files from a remote system. It is
373: normally started by @code{uucico}.
374:
375: @end table
376:
377: Suppose you, on the system @samp{bantam}, want to copy a file to the
378: system @samp{airs}. You would run the @code{uucp} command locally, with
379: a command like @samp{uucp notes.txt airs!~/notes.txt}. This would queue
380: up a request on @samp{bantam} for @samp{airs}, and would then start the
381: @code{uucico} daemon. @code{uucico} would see that there was a request
382: for @samp{airs} and attempt to call it. When the call succeeded,
383: another copy of @code{uucico} would be started on @samp{airs}. The two
384: copies of @code{uucico} would tell each other what they had to do and
385: transfer the file from @samp{bantam} to @samp{airs}. When the file
386: transfer was complete the @code{uucico} on @samp{airs} would move it
387: into the UUCP public directory.
388:
389: UUCP is often used to transfer mail. This is normally done
390: automatically by mailer programs. When @samp{bantam} has a mail message
391: to send to @samp{ian} at @samp{airs}, it executes @samp{uux - airs!rmail
392: ian} and writes the mail message to the @code{uux} process as standard
393: input. The @code{uux} program, running on @samp{bantam}, will read the
394: standard input and store it, as well as the @code{rmail} request itself,
395: on the work queue for @samp{airs}. @code{uux} will then start the
396: @code{uucico} daemon. The @code{uucico} daemon will call up
397: @samp{airs}, just as in the @code{uucp} example, and transfer the work
398: request and the mail message. The @code{uucico} daemon on @samp{airs}
399: will put the files on a local work queue. When the communication
400: session is over, the @code{uucico} daemon on @samp{airs} will start the
401: @code{uuxqt} daemon. @code{uuxqt} will see the request to run, and will
402: run @samp{rmail ian} with the mail message as standard input. The
403: @code{rmail} program, which is not part of the UUCP package, is then
404: responsible for either putting the message in the right mailbox on
405: @samp{airs} or forwarding the message on to another system.
406:
407: Taylor UUCP comes with a few other programs that are useful when
408: installing and configuring UUCP.
409:
410: @table @code
411:
412: @item uuchk
413:
414: The @code{uuchk} program reads the UUCP configuration files and displays
415: a rather lengthy description of what it finds. This is useful when
416: configuring UUCP to make certain that the UUCP package will do what you
417: expect it to do.
418:
419: @item uuconv
420:
421: The @code{uuconv} program can be used to convert UUCP configuration
422: files from one support format to another. This can be useful for
423: administrators converting from an older UUCP. Taylor UUCP is able to
424: read and use old configuration file formats, but some new features can
425: not be selected using the old formats.
426:
427: @item uusched
428:
429: The @code{uusched} script is just provided for compatibility with older
430: UUCP releases. It starts @code{uucico} to call, one at a time, all the
431: systems for which work has been queued.
432:
433: @item tstuu
434:
435: The @code{tstuu} program is a test harness for the UUCP package, which
436: will help ensure that it has been configured and compiled correctly. It
437: does not test everything, however. It only runs on Unix systems which
438: support Berkeley style pseudo-terminals or STREAMS style
439: pseudo-terminals. It can be useful when initially installing Taylor
440: UUCP.
441:
442: @end table
443:
444: @node Overall Installation, Configuration Files, Introduction, Top
445: @chapter Taylor UUCP Overall Installation
446:
447: These are the installation instructions for the Taylor UUCP package.
448:
449: @menu
450: * Configuration:: Configuring Taylor UUCP
451: * Compilation:: Compiling Taylor UUCP
452: * Testing:: Testing Taylor UUCP
453: * Installation:: Installing Taylor UUCP
454: * TCP:: TCP together with Taylor UUCP
455: @end menu
456:
457: @node Configuration, Compilation, Overall Installation, Overall Installation
458: @section Configuring Taylor UUCP
459:
460: You will have to decide what types of configuration files you want to
461: use. This package supports a new sort of configuration file; see
462: @ref{Configuration Files}. It also supports V2 configuration files
463: (@file{L.sys}, @file{L-devices}, etc.) and HDB configuration files
464: (@file{Systems}, @file{Devices}, etc.). No documentation is provided
465: for V2 or HDB configuration files. All types of configuration files can
466: be used at once, if you are so inclined. Currently using just V2
467: configuration files is not really possible, because there is no way to
468: specify a dialer (there are no built in dialers, and the program does
469: not know how to read @file{acucap} or @file{modemcap}); however, V2
470: configuration files can be used with a new style dialer file
471: (@pxref{dial File}), or with a HDB @file{Dialers} file.
472:
473: Use of HDB configuration files has two known bugs. A blank line in the
474: middle of an entry in the @file{Permissions} file will not be ignored as
475: it should be. Dialer programs, as found in some versions of HDB, are
476: not recognized directly. If you must use a dialer program, rather than
477: an entry in @file{Devices}, you must use the @code{chat-program} command
478: in a new style dialer file; see @ref{dial File}. You will have to
479: invoke the dialer program via a shell script, since an exit code of 0 is
480: required to recognize success.
481:
482: The @code{uuconv} program can be used to convert from V2 or HDB
483: configuration files to the new style (it can also do the reverse
484: translation, if you are so inclined). It will not do all of the work,
485: and the results should be carefully checked, but it can be quite useful.
486:
487: If you are installing a new system, you will, of course, have to write
488: the configuration files; see @ref{Configuration Files}.
489:
490: You must also decide what sort of spool directory you want to use. If
491: you will only be using these programs, I recommend
492: @samp{SPOOLDIR_TAYLOR}; otherwise select the spool directory
493: corresponding to your existing UUCP package. The details of the spool
494: directory choices are described at somewhat tedious length in
495: @file{unix/spool.c}.
496:
497: @node Compilation, Testing, Configuration, Overall Installation
498: @section Compiling Taylor UUCP
499:
500: @enumerate
501:
502: @item
503: Take a look at the top of @file{Makefile.in} and set the appropriate
504: values for your system. These control where the programs are installed
505: and which user on the system owns them (normally they will be owned by a
506: special user @code{uucp} rather than a real person; they should probably
507: not be owned by @code{root}).
508:
509: @item
510: Run the shell script @code{configure}. This script was generated using
511: the @code{autoconf} program written by David MacKenzie of the Free
512: Software Foundation. It takes a while to run. It will generate the
513: file @file{conf.h} based on @file{conf.h.in}, and, for each source code
514: directory, will generate @file{Makefile} based on @file{Makefile.in}.
515:
516: You can pass certain arguments to @code{configure} in the environment.
517: Because @code{configure} will compile little test programs to see what
518: is available on your system, you must tell it how to run your compiler.
519: It recognizes the following environment variables:
520:
521: @table @samp
522: @item CC
523: The C compiler. If this is not set, then if @code{configure} can find
524: @samp{gcc} it will use it, otherwise it will use @samp{cc}.
525: @item CFLAGS
526: Flags to pass to the C compiler when compiling the actual code. If this
527: is not set, @code{configure} will use @samp{-g}.
528: @item LDFLAGS
529: Flags to pass to the C compiler when only linking, not compiling. If
530: this is not set, @code{configure} will use the empty string.
531: @item LIBS
532: Libraries to pass to the C compiler. If this is not set,
533: @code{configure} will use the empty string.
534: @item INSTALL
535: The program to run to install UUCP in the binary directory. If this is
536: not set, then if @code{configure} finds the BSD @code{install} program,
537: it will set this to @samp{install -c}; otherwise, it will use @samp{cp}.
538: @item INSTALLDATA
539: The program to run to install UUCP data files, such as the man pages and
540: the info pages. If this is not set, then if @code{configure} finds the
541: BSD @code{install} program, it will set this to @samp{install -c -m
542: 644}; otherwise, it will use @samp{cp}.
543: @end table
544:
545: Suppose you want to set the environment variable @samp{CC} to
546: @samp{rcc}. If you are using @code{sh} or @code{bash}, invoke
547: @code{configure} as @samp{CC=rcc configure}. If you are using
548: @code{csh}, do @samp{setenv CC rcc; sh configure}.
549:
550: On some systems you will want to use @samp{LIBS=-lmalloc}. On Xenix
551: derived versions of Unix do not use @samp{LIBS=-lx} because this will
552: bring in the wrong versions of certain routines; if you want to use
553: @samp{-lx} you must specify @samp{LIBS=-lc -lx}.
554:
555: If @code{configure} fails for some reason, or if you have a very wierd
556: system, you may have to configure the package by hand. To do this, copy
557: the file @file{conf.h.in} to @file{conf.h} and edit it for your system.
558: Then for each source directory (the top directory, and the
559: subdirectories @file{lib}, @file{unix}, and @file{uuconf}) copy
560: @file{Makefile.in} to @file{Makefile}, find the words within @kbd{@@}
561: characters, and set them correctly for your system.
562:
563: @item
564: Igor V. Semenyuk provided this (lightly edited) note about ISC Unix 3.0.
565: The @code{configure} script will default to passing @samp{-posix} to
566: @code{gcc}. However, using @samp{-posix} changes the environment to
567: POSIX, and on ISC 3.0, at least, the default for POSIX_NO_TRUNC is 1.
568: This means nothing for uucp, but can lead to a problem when uuxqt
569: executes rmail. IDA sendmail has dbm configuration files named
570: @file{mailertable.@{dir,pag@}}. Notice these names are 15 characters
571: long. When uuxqt compiled with @samp{-posix} executes rmail, which in
572: turn executes sendmail, the later is run under POSIX environment too!
573: This leads to sendmail bombing out with @samp{'error opening 'M'
574: database: name too long' (mailertable.dir)}. It's rather obscure
575: behaviour, and it took me a day to find out the cause. I don't use
576: @samp{-posix}, instead I run @code{gcc} with @samp{-D_POSIX_SOURCE}, and
577: add @samp{-lcposix} to @samp{LIBS}.
578:
579: @item
580: You should verify that @code{configure} worked correctly by checking
581: @file{conf.h} and the instances of @file{Makefile}.
582:
583: @item
584: Edit @file{policy.h} for your local system. The comments should explain
585: the various choices. The default values are intended to be reasonable,
586: so you may not have to make any changes.
587:
588: @item
589: Type @samp{make} to compile everything. The @file{tstuu.c} file is not
590: particularly portable; if you can't figure out how to compile it you can
591: safely ignore it, as it is only used for testing (to use STREAMS
592: pseudo-terminals, tstuu.c must be compiled with
593: @samp{-DHAVE_STREAMS_PTYS}; this is not automatically determined at the
594: moment). If you have any other problems there is probably a bug in the
595: @code{configure} script.
596:
597: @item
598: Please report any problems you have. That is the only way they will get
599: fixed for other people. Supply a patch if you can (@pxref{Patches}), or
600: just ask for help.
601:
602: @end enumerate
603:
604: @node Testing, Installation, Compilation, Overall Installation
605: @section Testing Taylor UUCP
606:
607: This package is in use at many sites, and has been running at
608: @file{airs.com} for over a year. However, it will doubtless fail in
609: some situations. Do not rely on this code until you have proven to
610: yourself that it will work.
611:
612: You can use the @code{uuchk} program to test your configuration files.
613: It will read them and print out a verbose description. This program
614: should not be made setuid, because it will display passwords if it can
615: read them.
616:
617: If your system supports pseudo-terminals, and you compiled the code to
618: support the new style of configuration files, you should be able to use
619: the @code{tstuu} program to test the @code{uucico} daemon (if your
620: system supports STREAMS based pseudo-terminals, you must compile tstuu.c
621: with @samp{-DHAVE_STREAMS_PTYS}, at least at the moment; the STREAMS
622: based code was contributed by Marc Boucher).
623:
624: To run @code{tstuu}, just type @samp{tstuu} with no arguments while
625: logged in to the compilation directory (since it runs @file{./uucp},
626: @file{./uux} and @file{./uucico}). It will run a lengthy series of
627: tests (it takes over ten minutes on a slow VAX). You will need a fair
628: amount of space available in @file{/usr/tmp}. You will probably want to
629: put it in the background. Do not use @kbd{^Z}, because the program
630: traps on @code{SIGCHLD} and winds up dying. It will create a directory
631: @file{/usr/tmp/tstuu} and fill it with configuration files, and create
632: spool directories @file{/usr/tmp/tstuu/spool1} and
633: @file{/usr/tmp/tstuu/spool2}.
634:
635: If your system does not support the @code{FIONREAD} call, the
636: @samp{tstuu} program will run very slowly. This may or may not get
637: fixed in a later version.
638:
639: The @samp{tstuu} program does not seem to work under SunOS 4.1.1. This
640: seems to be due to a bug in the implementation of ptys.
641:
642: The program will finish with an execute file named
643: @file{X.@var{something}} and a data file named @file{D.@var{something}}
644: in the directory @file{/usr/tmp/tstuu/spool1} (or, more likely, in
645: subdirectories, depending on the choice of @code{SPOOLDIR} in
646: @file{policy.h}). Two log files will be created in the directory
647: @file{/usr/tmp/tstuu}. They will be named @file{Log1} and @file{Log2},
648: or, if you have selected @code{HAVE_HDB_LOGGING} in @file{policy.h},
649: @file{Log1/uucico/test2} and @file{Log2/uucico/test1}. You can test
650: @code{uuxqt} by running the command @samp{./uuxqt -I
651: /usr/tmp/tstuu/Config1}. This should leave a command file
652: @file{C.@var{something}} and a data file @file{D.@var{something}} in
653: @file{/usr/tmp/tstuu/spool1} or in subdirectories. Again, there should
654: be no errors in the log file.
655:
656: Assuming you compiled the code with debugging enabled, the @samp{-x}
657: switch can be used to set debugging modes; see the @code{debug} command
658: for details (@pxref{Debugging Levels}). Use @samp{-x all} to turn on
659: all debugging and generate far more output than you will ever want to
660: see. The @code{uucico} daemons will put debugging output in the files
661: @file{Debug1} and @file{Debug2} in the directory @file{/usr/tmp/tstuu}.
662: After that, you're pretty much on your own.
663:
664: On some systems you can also use @code{tstuu} to test @code{uucico}
665: against the system @code{uucico}, by using the @samp{-u} switch. For
666: this to work, change the definitions of @code{ZUUCICO_CMD} and
667: @code{UUCICO_EXECL} at the top of @file{tstuu.c} to something
668: appropriate for your system. The definitions in @file{tstuu.c} are what
669: I used for Ultrix 4.0, on which @file{/usr/lib/uucp/uucico} is
670: particularly obstinate about being run as a child; I was only able to
671: run it by creating a login name with no password whose shell was
672: @file{/usr/lib/uucp/uucico}. Calling login in this way will leave fake
673: entries in @file{wtmp} and @file{utmp}; if you compile @file{tstout.c}
674: (in the @file{contrib} directory) as a setuid @code{root} program,
675: @code{tstuu} will run it to clear those entries out. On most systems,
676: such hackery should not be necessary, although on SCO I had to su to
677: @code{root} (@code{uucp} might also have worked) before I could run
678: @file{/usr/lib/uucp/uucico}.
679:
680: You can test @code{uucp} and @code{uux} (give them the @samp{-r} switch
681: to keep them from starting @code{uucico}) to make sure they create the
682: right sorts of files. Unfortunately, if you don't know what the right
683: sorts of files are, I'm not going to tell you here.
684:
685: If @code{tstuu} passes, or you can't run it for some reason or other,
686: move on to testing with some other system. Set up the configuration
687: files (@pxref{Configuration Files}), or use an existing configuration.
688: Tell @code{uucico} to dial out to the system by using the @samp{-s}
689: system switch (e.g. @samp{uucico -s uunet}). The log file should tell
690: you what happens.
691:
692: If you compiled the code with debugging enabled, you can use debugging
693: mode to get a great deal of information about what sort of data is
694: flowing back and forth; the various possibilities are described under
695: the @code{debug} command (@pxref{Debugging Levels}). When initially
696: setting up a connection @samp{-x chat} is probably the most useful (e.g.
697: @samp{uucico -s uunet -x chat}); you may also want to use @samp{-x
698: handshake,incoming,outgoing}. You can use @samp{-x} multiple times on
699: one command line, or you can give it comma separated arguments as in the
700: last example. Use @samp{-x all} to turn on all possible debugging
701: information. The debugging information is written to a file, normally
702: @file{/usr/spool/uucp/Debug}, although the default can be changed in
703: @file{policy.h} and the configuration file can override the name with
704: the @code{debugfile} command. The debugging file may contain passwords
705: and some file contents as they are transmitted over the line, so the
706: debugging file is only readable by the @code{uucp} user.
707:
708: You can use the @samp{-f} switch to force @code{uucico} to call out even
709: if the last call failed recently; using @samp{-S} when naming a system
710: has the same effect. Otherwise the status file (in the @file{.Status}
711: subdirectory of the main spool directory, normally
712: @file{/usr/spool/uucp}) will prevent too many attempts from occurring in
713: rapid succession.
714:
715: Again, please let me know about any problems you have and how you got
716: around them. If you do report a problem, please include the version
717: number of the package you are using, and a sample of the debugging file
718: showing the problem. General questions such as ``why doesn't uucico
719: dial out'' are impossible to answer without much more information.
720:
721: @node Installation, TCP, Testing, Overall Installation
722: @section Installing Taylor UUCP
723:
724: You can install the executable files by becoming @code{root} and typing
725: @samp{make install}. Or you can look at what @samp{make install} does
726: and do it by hand. It tries to preserve your old programs, if any, but
727: it only does this the first time Taylor UUCP is installed (so that if
728: you install several versions of Taylor UUCP, you can still go back to
729: your original UUCP programs). You can retrieve the original programs by
730: typing @samp{make uninstall}.
731:
732: Simply installing the executable files is not enough, however. You must
733: also arrange for them to be used correctly.
734:
735: @menu
736: * Running uucico:: Running uucico
737: * Using UUCP for mail and news:: Using UUCP for mail and news.
738: * Trimming UUCP Log Files:: Trimming UUCP Log Files
739: @end menu
740:
741: @node Running uucico, Using UUCP for mail and news, Installation, Installation
742: @subsection Running uucico
743:
744: By default @code{uucp} and @code{uux} will automatically start up
745: @code{uucico} to call another system whenever work is queued up.
746: However, the call may fail, or there may be time restrictions which
747: prevent the call at that time (perhaps because telephone rates are high)
748: (@pxref{When to Call}). Also, a remote system may have work queued up
749: for your system, but may not be calling you for some reason (perhaps you
750: have agreed that your system should always place the call). To make
751: sure that works get transferred between the systems withing a reasonable
752: time period, you should arrange to periodically invoke @code{uucico}.
753:
754: These periodic invocations are normally caused by entries in the
755: @file{crontab} file. The exact format of @file{crontab} files, and how
756: new entries are added, varies from system to system; check your local
757: documentation (try @samp{man cron}).
758:
759: To attempt to call all systems with outstanding work, use the command
760: @samp{uucico -r1}. To attempt to call a particular system, use the
761: command @samp{uucico -s SYSTEM}.
762:
763: A common case is to want to try to call a system at a certain time, with
764: periodic retries if the call fails. A simple way to do this is to
765: create an UUCP command file, known as a @dfn{poll file}. If a poll
766: file exists for a system, then @samp{uucico -r1} will place a call to
767: it. If the call succeeds, the poll file will be deleted.
768:
769: The file can be easily created using the @samp{touch} command. The name
770: of a poll file currently depends on the type of spool directory you are
771: using, as set in @file{policy.h}. If you are using
772: @code{SPOOLDIR_TAYLOR} (the default), put something like this in your
773: @file{crontab} file:
774: @example
775: touch /usr/spool/uucp/@var{sys}/C./C.A0000
776: @end example
777: In this example @var{sys} is the system you wish to call, and
778: @samp{/usr/spool/uucp} is your UUCP spool directory.
779: If you are using @code{SPOOLDIR_HDB}, use
780: @example
781: touch /usr/spool/uucp/@var{sys}/C.@var{sys}A0000
782: @end example
783:
784: For example, I use the following crontab entries locally:
785:
786: @example
787: 45 * * * * /bin/echo /usr/lib/uucp/uucico -r1 | /bin/su uucpa
788: 40 4,10,15 * * * touch /usr/spool/uucp/uunet/C./C.A0000
789: @end example
790:
791: Every hour, at 45 minutes past, this will check if there is any work to
792: be done, and, if there is, will call the appropriate system. Also, at
793: 4:40am, 10:40am and 3:40pm this will create a poll file file for
794: @samp{uunet}, forcing the next check to call @samp{uunet}.
795:
796: @node Using UUCP for mail and news, Trimming UUCP Log Files, Running uucico, Installation
797: @subsection Using UUCP for mail and news.
798:
799: Taylor UUCP does not include a mail package. All Unix systems come with
800: some sort of mail delivery agent, typically @code{sendmail} or
801: @code{MMDF}. Source code is available for some mail delivery agents,
802: such as @code{IDA sendmail} and @code{smail}.
803:
804: Taylor UUCP also does not include a news package. The two major Unix
805: news packages are @code{C-news} and @code{INN}. Both are available in
806: source code form.
807:
808: Configuring and using mail delivery agents is a notoriously complex
809: topic, and I will not be discussing it here. Configuring news systems
810: is usually simpler, but I will not be discussing that either. I will
811: merely describe the interactions between the mail and news systems and
812: UUCP.
813:
814: A mail or news system interacts with UUCP in two ways.
815:
816: @menu
817: * Sending mail or news:: Sending mail or news via UUCP
818: * Receiving mail or news:: Receiving mail or news via UUCP
819: @end menu
820:
821: @node Sending mail or news, Receiving mail or news, Using UUCP for mail and news, Using UUCP for mail and news
822: @unnumberedsubsubsec Sending mail or news via UUCP
823:
824: When mail is to be sent from your machine to another machine via UUCP,
825: the mail delivery agent will invoke @code{uux}. It will generally run a
826: command such as @samp{uux - @var{system}!rmail}, where @var{system} is
827: the remote system to which the mail is being sent. It may pass other
828: options to @code{uux}, such as @samp{-r} or @samp{-g}.
829:
830: News also invokes @code{uux} in order to transfer articles to another
831: system. The only difference is that news will use @code{uux} to invoke
832: @code{rnews} on the remote system, rather than @code{rmail}.
833:
834: You should arrange for your mail and news systems to invoke the Taylor
835: UUCP version of @code{uux} when sending mail via UUCP. If you simply
836: replace any existing version of @code{uux} with the Taylor UUCP version,
837: this will probably happen automatically. However, if both versions
838: exist on your system, you will probably have to modify the mail and news
839: configuration files in some way.
840:
841: Actually, if both the system UUCP and Taylor UUCP are using the same
842: spool directory format, the system @code{uux} will probably work fine
843: with the Taylor @code{uucico} (the reverse is not the case: the Taylor
844: @code{uux} requires the Taylor @code{uucico}). However, data transfer
845: will be somewhat more efficient if the Taylor @code{uux} is used.
846:
847: @node Receiving mail or news, , Sending mail or news, Using UUCP for mail and news
848: @unnumberedsubsubsec Receiving mail or news via UUCP
849:
850: As noted in @ref{Sending mail or news}, mail is sent by requesting a
851: remote execution of @code{rmail}. To receive mail, then, all that is
852: necessary is for UUCP to invoke @code{rmail} itself.
853:
854: Any mail delivery agent will provide an appropriate version of
855: @code{rmail}; you must simply make sure that it is in the command path
856: used by UUCP (it almost certainly already is). The default command path
857: is set in @file{policy.h}, and it may be overridden for a particular
858: system by the @code{command-path} command (@pxref{Miscellaneous (sys)}).
859:
860: Similarly, for news UUCP must be able to invoke @code{rnews}. Any news
861: system will provide a version of @code{rnews}, and you must ensure that
862: is in a directory on the path that UUCP will search.
863:
864: @node Trimming UUCP Log Files, , Using UUCP for mail and news, Installation
865: @subsection Trimming UUCP Log Files
866:
867: You should also periodically trim the log files, as they will otherwise
868: continue to grow without limit. The names of the log files are set in
869: @file{policy.h}, and may be overridden in the configuration file
870: (@pxref{config File}). By default they are are
871: @file{/usr/spool/uucp/Log} and @file{/usr/spool/uucp/Stats}.
872:
873: You may find the @code{savelog} program in the @file{contrib} directory
874: may be of use. There is a manual page for it in @file{contrib} as well.
875:
876: @node TCP, , Installation, Overall Installation
877: @section TCP together with Taylor UUCP
878:
879: If your system has a Berkeley style socket library, or a System V style
880: TLI interface library, you can compile the code to permit making
881: connections over TCP. Specifying that a system should be reached via
882: TCP is easy, but nonobvious.
883:
884: If you are using the new style configuration files, see
885: @ref{Configuration Files}. Basically, you can just add the line
886: @samp{port type tcp} to the entry in the system configuration file. By
887: default UUCP will get the port number by looking up @samp{uucp} in
888: @file{/etc/services}; if @samp{uucp} is not found, port 540 will be
889: used. You can set the port number to use with the command @samp{port
890: service @var{xxx}}, where @var{xxx} can be either a number or a name to
891: look up in @file{/etc/services}. You can specify the address of the
892: remote host with @samp{address @var{a.b.c}}; if you don't give an
893: address, the remote system name will be used. You should give an
894: explicit chat script for the system when you use TCP; the default chat
895: script begins with a carriage return, which will not work with some UUCP
896: TCP servers.
897:
898: If you are using V2 configuration files, add a line like this to
899: @file{L.sys}:
900:
901: @example
902: @var{sys} Any TCP uucp @var{host}.@var{domain} chat-script
903: @end example
904:
905: This will make an entry for system @var{sys}, to be called at any time,
906: over TCP, using port number @samp{uucp} (as found in
907: @file{/etc/services}; this may be specified as a number), using remote
908: host @file{@var{host}.@var{domain}}, with some chat script.
909:
910: If you are using HDB configuration files, add a line like this to
911: Systems:
912:
913: @example
914: @var{sys} Any TCP - @var{host}.@var{domain} chat-script
915: @end example
916:
917: and a line like this to Devices:
918:
919: @example
920: TCP uucp - -
921: @end example
922:
923: You only need one line in Devices regardless of how many systems you
924: contact over TCP. This will make an entry for system @var{sys}, to be
925: called at any time, over TCP, using port number @samp{uucp} (as found in
926: @file{/etc/services}; this may be specified as a number), using remote
927: host @file{@var{host}.@var{domain}}, with some chat script.
928:
929: The @code{uucico} daemon can also be run as a TCP server. To use the
930: default port number, which is a reserved port, @code{uucico} must be
931: invoked by root (or it must be set user ID to root, but I don't
932: recommend doing that).
933:
934: Basically, you must define a port, either using the port file
935: (@pxref{port File}) if you are using the new configuration method or
936: with an entry in Devices if you are using HDB; there is no way to define
937: a port using V2. If you are using HDB the port must be named
938: @samp{TCP}; a line as shown above will suffice. You can then start
939: @code{uucico} as @samp{uucico -p TCP} (after the @samp{-p}, name the
940: port; in HDB it must be @samp{TCP}). This will wait for incoming
941: connections, and fork off a child for each one. Each connection will be
942: prompted with @samp{login:} and @samp{Password:}; the results will be
943: checked against the UUCP (not the system) password file
944: (@pxref{Configuration File Names}).
945:
946: Of course, you can get a similar effect by using the BSD @code{uucpd}
947: program.
948:
949: You can also have @code{inetd} start up @code{uucico} with the @samp{-l}
950: switch, which will cause it to prompt with @samp{login:} and
951: @samp{Password:} and check the results against the UUCP (not the system)
952: password file. This may be used in place of @code{uucpd}.
953:
954: @node Configuration Files, Protocols, Overall Installation, Top
955: @chapter Taylor UUCP Configuration Files
956:
957: This chapter describes the configuration files accepted by the Taylor
958: UUCP package if compiled with @code{HAVE_TAYLOR_CONFIG} defined in
959: @file{policy.h}.
960:
961: The configuration files are normally found in the directory
962: @var{newconfigdir}, which is defined by the @file{Makefile} variable
963: @file{newconfigdir}; by default @var{newconfigdir} is
964: @file{/usr/local/conf/uucp}. However, the main configuration file,
965: @file{config}, is the only one which must be in that directory, since it
966: may specify a different location for any or all of the other files. You
967: may run any of the UUCP programs with a different main configuration
968: file by using the @samp{-I} option; this can be useful when testing a
969: new configuration. When you use the @samp{-I} option the programs will
970: revoke any setuid privileges.
971:
972: @menu
973: * Configuration File Format:: Configuration file format
974: * Configuration Examples:: Examples of configuration files
975: * Time Strings:: How to write time strings
976: * Chat Scripts:: How to write chat scripts
977: * config File:: The main configuration file
978: * sys File:: The system configuration file
979: * port File:: The port configuration files
980: * dial File:: The dialer configuration files
981: * Security:: Security issues
982: @end menu
983:
984: @node Configuration File Format, Configuration Examples, Configuration Files, Configuration Files
985: @section Configuration File Format
986:
987: All the configuration files follow a simple line-oriented
988: @samp{@var{keyword} @var{value}} format. Empty lines are ignored, as
989: are leading spaces; unlike HDB, lines with leading spaces are read. The
990: first word on each line is a keyword. The rest of the line is
991: interpreted according to the keyword. Most keywords are followed by
992: numbers, boolean values or simple strings with no embedded spaces.
993:
994: The @kbd{#} character is used for comments. Everything from a @kbd{#}
995: to the end of the line is ignored unless the @kbd{#} is preceded by a
996: @kbd{\} (backslash); if the @kbd{#} is preceeded by a @kbd{\}, the
997: @kbd{\} is removed but the @kbd{#} remains in the line. This can be
998: useful for a phone number containing a @kbd{#}. To enter the sequence
999: @samp{\#}, use @samp{\\#}.
1000:
1001: The backslash character may be used to continue lines. If the last
1002: character in a line is a backslash, the backslash is removed and the
1003: line is continued by the next line. The second line is attached to the
1004: first with no intervening characters; if you want any whitespace between
1005: the end of the first line and the start of the second line, you must
1006: insert it yourself.
1007:
1008: However, the backslash is not a general quoting character. For example,
1009: you cannot use it to get an embedded space in a string argument.
1010:
1011: Everything after the keyword must be on the same line. A @var{boolean}
1012: may be specified as @kbd{y}, @kbd{Y}, @kbd{t}, or @kbd{T} for true and
1013: @kbd{n}, @kbd{N}, @kbd{f}, or @kbd{F} for false; any trailing characters
1014: are ignored, so @code{true}, @code{false}, etc., are also acceptable.
1015:
1016: @node Configuration Examples, Time Strings, Configuration File Format, Configuration Files
1017: @section Examples of Configuration Files
1018:
1019: All the configuration commands are explained in the following sections.
1020: However, I'll start by giving a few examples of configuration files.
1021: For a more complete description of any of the commands used here see the
1022: appropriate section of this chapter. There are also sample
1023: configuration files in the @file{sample} subdirectory of the
1024: distribution.
1025:
1026: @menu
1027: * config File Examples:: Examples of the main configuration file
1028: * Leaf Example:: Call a single remote site
1029: * Gateway Example:: The gateway for several local systems
1030: @end menu
1031:
1032: @node config File Examples, Leaf Example, Configuration Examples, Configuration Examples
1033: @subsection config File Examples
1034: @cindex config file examples
1035:
1036: To start with, here are some examples of uses of the main configuration
1037: file, @file{config}. For a complete description of the commands that
1038: are permitted in @file{config}, see @ref{config File}.
1039:
1040: In many cases you will not need to create a @file{config} file at all.
1041: The most common reason to create one is to give your machine a special
1042: UUCP name. Other reasons might be to change the UUCP spool directory or
1043: to permit any remote system to call in.
1044:
1045: If you have an internal network of machines, then it is likely that the
1046: internal name of your UUCP machine is not the name you want to use when
1047: calling other systems. For example, here at @file{airs.com} our
1048: mail/news gateway machine is named @file{elmer.airs.com} (it is one of
1049: several machines all named @file{@var{localname}.airs.com}). If we did
1050: not provide a @file{config} file, then our UUCP name would be
1051: @file{elmer}; however, we actually want it to be @file{airs}.
1052: Therefore, we use the following line in @file{config}:
1053:
1054: @example
1055: nodename airs
1056: @end example
1057:
1058: @cindex changing spool directory
1059: @cindex spool directory (changing)
1060: The UUCP spool directory name is set in @file{policy.h} when the code is
1061: compiled. You might at some point decide that it is appropriate to move
1062: the spool directory, perhaps to put it on a different disk partition.
1063: You would use the following commands in @file{config} to change to
1064: directories on the partition @file{/uucp}:
1065:
1066: @example
1067: spool /uucp/spool
1068: pubdir /uucp/uucppublic
1069: logfile /uucp/spool/Log
1070: debugfile /uucp/spool/Debug
1071: @end example
1072:
1073: You would then move the contents of the current spool directory to
1074: @file{/uucp/spool}. If you do this, make sure that no UUCP processes
1075: are running while you change @file{config} and move the spool directory.
1076:
1077: @cindex anonymous UUCP
1078: Suppose you wanted to permit any system to call in to your system and
1079: request files. This is generally known as @dfn{anonymous UUCP}, since
1080: the systems which call in are effectively anonymous. By default,
1081: unknown systems are not permitted to call in. To permit this you must
1082: use the @code{unknown} command in @file{config}. The @code{unknown}
1083: command is followed by any command that may appear in the system file;
1084: for full details, see @ref{sys File}.
1085:
1086: I will show two possible anonymous UUCP configurations. The first will
1087: let any system call in and download files, but will not permit them to
1088: upload files to your system.
1089:
1090: @example
1091: # No files may be transferred to this system
1092: unknown receive-request no
1093: # The public directory is /usr/spool/anonymous
1094: unknown pubdir /usr/spool/anonymous
1095: # Only files in the public directory may be sent (the default anyhow)
1096: unknown remote-send ~
1097: @end example
1098:
1099: @noindent
1100: Setting the public directory is convenient for the systems which call
1101: in. It permits to request a file by prefixing it with @file{~/}. For
1102: example, assuming your system is known as @samp{server}, then to
1103: retrieve the file @file{/usr/spool/anonymous/INDEX} a user on a remote
1104: site could just enter @samp{uucp server!~/INDEX ~}; this would transfer
1105: @file{INDEX} from @samp{server}'s public directory to the user's local
1106: public directory. Note that when using @samp{csh} or @samp{bash} the
1107: @kbd{!} and the second @kbd{~} must be quoted.
1108:
1109: The next example will permit remote systems to upload files to a special
1110: directory named @file{/usr/spool/anonymous/upload}. Permitting a remote
1111: system to upload files permits it to send work requests as well; this
1112: example is careful to prohibit commands from unknown systems.
1113:
1114: @example
1115: # No commands may be executed (the list of permitted commands is empty)
1116: unknown commands
1117: # The public directory is /usr/spool/anonymous
1118: unknown pubdir /usr/spool/anonymous
1119: # Only files in the public directory may be sent; users may not download
1120: # files from the upload directory
1121: unknown remote-send ~ !~/upload
1122: # May only upload files into /usr/spool/anonymous/upload
1123: unknown remote-receive ~/upload
1124: @end example
1125:
1126: @node Leaf Example, Gateway Example, config File Examples, Configuration Examples
1127: @subsection Leaf Example
1128:
1129: @cindex leaf site
1130: @cindex sys file example (leaf)
1131: A relatively common simple case is a @dfn{leaf site}, a system which
1132: only calls or is called by a single remote site. Here is a typical
1133: @file{sys} file that might be used in such a case. For full details on
1134: what commands can appear in the @file{sys} file, see @ref{sys File}.
1135:
1136: This is the @file{sys} file that is used at @file{airs.com}. We use a
1137: single modem to dial out to @file{uunet}. This example shows how you
1138: can specify the port and dialer information directly in the @file{sys}
1139: file for simple cases. It also shows the use of the following:
1140:
1141: @table @code
1142:
1143: @item call-login
1144: Using @code{call-login} and @code{call-password} allows the default
1145: login chat script to be used. In this case, the login name is specified
1146: in the call-out login file (@pxref{Configuration File Names}).
1147:
1148: @item call-timegrade
1149: @file{uunet} is requested to not send us news during the daytime.
1150:
1151: @item chat-fail
1152: If the modem returns @samp{BUSY} or @samp{NO CARRIER} the call is
1153: immediately aborted.
1154:
1155: @item protocol-parameter
1156: Since @file{uunet} tends to be slow, the default timeout has been
1157: increased.
1158:
1159: @end table
1160:
1161: This @file{sys} file relies on certain defaults. It will allow
1162: @file{uunet} to queue up @samp{rmail} and @samp{rnews} commands. It
1163: will allow users to request files from @file{uunet} into the UUCP public
1164: directory. It will also @file{uunet} to request files from the UUCP
1165: public directory; in fact @file{uunet} never requests files, but for
1166: additional security we could add the line @samp{request false}.
1167:
1168: @example
1169: # The following information is for uunet
1170: system uunet
1171:
1172: # The login name and password are kept in the callout password file
1173: call-login *
1174: call-password *
1175:
1176: # We can send anything at any time.
1177: time any
1178:
1179: # During the day we only accept grade `Z' or above; at other times
1180: # (not mentioned here) we accept all grades. uunet queues up news
1181: # at grade `d', which is lower than `Z'.
1182: call-timegrade Z Wk0755-2305,Su1655-2305
1183:
1184: # The phone number.
1185: phone 7389449
1186:
1187: # uunet tends to be slow, so we increase the timeout
1188: chat-timeout 120
1189:
1190: # We are using a preconfigured Telebit 2500.
1191: port type modem
1192: port device /dev/ttyd0
1193: port baud 19200
1194: port carrier true
1195: port dialer chat "" ATZ\r\d\c OK ATDT\D CONNECT
1196: port dialer chat-fail BUSY
1197: port dialer chat-fail NO\sCARRIER
1198: port dialer complete \d\d+++\d\dATH\r\c
1199: port dialer abort \d\d+++\d\dATH\r\c
1200:
1201: # Increase the timeout and the number of retries.
1202: protocol-parameter g timeout 20
1203: protocol-parameter g retries 10
1204: @end example
1205:
1206: @node Gateway Example, , Leaf Example, Configuration Examples
1207: @subsection Gateway Example
1208:
1209: @cindex gateway
1210: @cindex sys file example (gateway)
1211: Many organizations have several local machines which are connected by
1212: UUCP, and a single machine which connects to the outside world. This
1213: single machine is often referred to as a @dfn{gateway} machine.
1214:
1215: For this example I will assume a fairly simple case. It should still
1216: provide a good general example. There are three machines, @file{elmer},
1217: @file{comton} and @file{bugs}. @file{elmer} is the gateway machine for
1218: which I will show the configuration file. @file{elmer} calls out to
1219: @file{uupsi}. As an additional complication, @file{uupsi} knows
1220: @file{elmer} as @file{airs}; this will show how a machine can have one
1221: name on an internal network but a different name to the external world.
1222: @file{elmer} has two modems. It also has an TCP/IP connection to
1223: @file{uupsi}, but since that is supposed to be reserved for interactive
1224: work (it is, perhaps, only a 9600 baud SLIP line) it will only use it if
1225: the modems are not available.
1226:
1227: A network this small would normally use a single @file{sys} file.
1228: However, for pedagogical purposes I will show two separate @file{sys}
1229: files, one for the local systems and one for @file{uupsi}. This is done
1230: with the @code{sysfile} command in the @file{config} file. Here is the
1231: @file{config} file.
1232:
1233: @example
1234: # This is config
1235: # The local sys file
1236: sysfile /usr/local/lib/uucp/sys.local
1237: # The remote sys file
1238: sysfile /usr/local/lib/uucp/sys.remote
1239: @end example
1240:
1241: Using the defaults feature of the @file{sys} file can greatly simplify
1242: the listing of local systems. Here is @file{sys.local}. Note that this
1243: assumes that the local systems are trusted; they are permited to request
1244: any world readable file and to write files into any world writable
1245: directory.
1246:
1247: @example
1248: # This is sys.local
1249: # Get the login name and password to use from the call-out file
1250: call-login *
1251: call-password *
1252:
1253: # The systems must use a particular login
1254: called-login Ulocal
1255:
1256: # Permit sending any world readable file
1257: local-send /
1258: remote-send /
1259:
1260: # Permit requesting into any world writable directory
1261: local-receive /
1262: remote-receive /
1263:
1264: # Call at any time
1265: time any
1266:
1267: # Use port1, then port2
1268: port port1
1269:
1270: alternate
1271:
1272: port port2
1273:
1274: # Now define the systems themselves. Because of all the defaults we
1275: # used, there is very little to specify for the systems themselves.
1276:
1277: system comton
1278: phone 5551212
1279:
1280: system bugs
1281: phone 5552424
1282: @end example
1283:
1284: The @file{sys.remote} file describes the @file{uupsi} connection. The
1285: @code{myname} command is used to change the UUCP name to @file{airs}
1286: when talking to @file{uupsi}.
1287:
1288: @example
1289: # This is sys.remote
1290: # Define uupsi
1291: system uupsi
1292:
1293: # The login name and password are in the call-out file
1294: call-login *
1295: call-password *
1296:
1297: # We can call out at any time
1298: time any
1299:
1300: # uupsi uses a special login name
1301: called-login Uuupsi
1302:
1303: # uuspi thinks of us as `airs'
1304: myname airs
1305:
1306: # The phone number
1307: phone 5554848
1308:
1309: # We use port2 first, then port1, then TCP
1310:
1311: port port2
1312:
1313: alternate
1314:
1315: port port1
1316:
1317: alternate
1318:
1319: # We don't bother to make a special entry in the port file for TCP, we
1320: # just describe the entire port right here. We use a special chat
1321: # script over TCP because the usual one confuses some TCP servers.
1322: port type TCP
1323: address uu.psi.com
1324: chat ogin: \L word: \P
1325: @end example
1326:
1327: The ports are defined in the file @file{port} (@pxref{port File}). For
1328: this example they are both connected to the same type of 2400 baud
1329: Hayes-compatible modem.
1330:
1331: @example
1332: # This is port
1333:
1334: port port1
1335: type modem
1336: device /dev/ttyd0
1337: dialer hayes
1338: speed 2400
1339:
1340: port port2
1341: type modem
1342: device /dev/ttyd1
1343: dialer hayes
1344: speed 2400
1345: @end example
1346:
1347: Dialers are described in the @file{dial} file (@pxref{dial File}).
1348:
1349: @example
1350: # This is dial
1351:
1352: dialer hayes
1353:
1354: # The chat script used to dial the phone. \D is the phone number.
1355: chat "" ATZ\r\d\c OK ATDT\D CONNECT
1356:
1357: # If we get BUSY or NO CARRIER we abort the dial immediately
1358: chat-fail BUSY
1359: chat-fail NO\sCARRIER
1360:
1361: # When the call is over we make sure we hangup the modem.
1362: complete \d\d+++\d\dATH\r\c
1363: abort \d\d+++\d\dATH\r\c
1364: @end example
1365:
1366: @node Time Strings, Chat Scripts, Configuration Examples, Configuration Files
1367: @section Time Strings
1368: @cindex time strings
1369:
1370: Several commands use time strings to specify a range of times. This
1371: section describes how to write time strings.
1372:
1373: A time string may be a list of simple time strings separated with a
1374: vertical bar @kbd{|} or a comma @kbd{,}.
1375:
1376: Each simple time string must begin with @samp{Su}, @samp{Mo}, @samp{Tu},
1377: @samp{We}, @samp{Th}, @samp{Fr}, or @samp{Sa}, or @samp{Wk} for any
1378: weekday, or @samp{Any} for any day.
1379:
1380: Following the day may be a range of hours separated with a hyphen using
1381: 24 hour time. The range of hours may cross 0; for example
1382: @samp{2300-0700} means any time except 7 AM to 11 PM. If no time is
1383: given, calls may be made at any time on the specified day(s).
1384:
1385: The time string may also consist of the single word @samp{Never}, which
1386: does not match any time, or a single word with a name defined in a
1387: previous @code{timetable} command (@pxref{Miscellaneous (config)}).
1388:
1389: Here are a few sample time strings with an explanation of what they
1390: mean.
1391:
1392: @table @samp
1393:
1394: @item Wk2305-0855,Sa,Su2305-1655
1395:
1396: This means weekdays before 8:55 AM or after 11:05 PM, any time Saturday,
1397: or Sunday before 4:55 PM or after 11:05 PM. These are approximately the
1398: times during which night rates apply to phone calls in the U.S.A. Note
1399: that this time string uses, for example, @samp{2305} rather than
1400: @samp{2300}; this will ensure a cheap rate phone call even if the
1401: computer clock is running up to five minutes ahead of the real time.
1402:
1403: @item Wk0905-2255,Su1705-2255
1404:
1405: This means weekdays from 9:05 AM to 10:55 PM, or Sunday from 5:05 PM to
1406: 10:55 PM. This is approximately the opposite of the previous example.
1407:
1408: @item Any
1409:
1410: This means any day. Since no time is specified, it means any time on
1411: any day.
1412:
1413: @end table
1414:
1415: @node Chat Scripts, config File, Time Strings, Configuration Files
1416: @section Chat Scripts
1417: @cindex chat scripts
1418:
1419: Chat scripts are used in several different places, such as dialing out
1420: on modems or logging in to remote systems. Chat scripts are made up of
1421: pairs of strings. The program waits until it sees the first string,
1422: known as the @dfn{expect} string, and then sends out the second string,
1423: the @dfn{send} string.
1424:
1425: Each chat script is defined using a set of commands. These commands
1426: always end in a string beginning with @code{chat}, but may start with
1427: different strings. For example, in the @file{sys} file there is one set
1428: of commands beginning with @code{chat} and another set beginning with
1429: @code{called-chat}. The prefixes are only used to disambiguate
1430: different types of chat scripts, and this section ignores the prefixes
1431: when describing the commands.
1432:
1433: @table @code
1434:
1435: @item chat @var{strings}
1436: @findex chat
1437:
1438: Specify a chat script. The arguments to the @code{chat} command are
1439: pairs of strings separated by whitespace. The first string of each pair
1440: is an expect string, the second is a send string. The program will wait
1441: for the expect string to appear; when it does, the program will send the
1442: send string. If the expect string does not appear within a certain
1443: number of seconds (as set by the @code{chat-timeout} command) the chat
1444: script fails and, typically, the call is aborted. If the final expect
1445: string is seen (and the optional final send string has been sent), the
1446: chat script is successful.
1447:
1448: An expect string may contain additional subsend and subexpect strings,
1449: separated by hyphens. If the expect string is not seen, the subsend
1450: string is sent and the chat script continues by waiting for the
1451: subexpect string. This means that a hyphen may not appear in an expect
1452: string; on an ASCII system, use @samp{\055} instead.
1453:
1454: An expect string may simply be @samp{""}, meaning to skip the expect
1455: phase. Otherwise, the following escape characters may appear in expect
1456: strings:
1457:
1458: @table @samp
1459: @item \b
1460: a backspace character
1461: @item \n
1462: a newline or line feed character
1463: @item \N
1464: a null character (for HDB compatibility)
1465: @item \r
1466: a carriage return character
1467: @item \s
1468: a space character
1469: @item \t
1470: a tab character
1471: @item \\
1472: a backslash character
1473: @item \@var{ddd}
1474: character @var{ddd}, where @var{ddd} are up to three octal digits
1475: @item \x@var{ddd}
1476: character @var{ddd}, where @var{ddd} are hexadecimal digits.
1477: @end table
1478:
1479: As in C, there may be up to three octal digits following a backslash,
1480: but the hexadecimal escape sequence continues as far as possible. To
1481: follow a hexadecimal escape sequence with a hex digit, interpose a send
1482: string of @samp{""}.
1483:
1484: A send string may simply be @samp{""} to skip the send phase.
1485: Otherwise, all of the escape characters legal for expect strings may be
1486: used, and the following escape characters are also permitted:
1487:
1488: @table @samp
1489: @item EOT
1490: send an end of transmission character (@kbd{^D})
1491: @item BREAK
1492: send a break character (may not work on all systems)
1493: @item \c
1494: suppress trailing carriage return at end of send string
1495: @item \d
1496: delay sending for 1 or 2 seconds
1497: @item \e
1498: disable echo checking
1499: @item \E
1500: enable echo checking
1501: @item \K
1502: same as @samp{BREAK} (for HDB compatibility)
1503: @item \p
1504: pause sending for a fraction of a second
1505: @end table
1506:
1507: Some specific types of chat scripts also define additional escape
1508: sequences that may appear in the send string. For example, the login
1509: chat script defines @samp{\L} and @samp{\P} to send the login name and
1510: password, respectively.
1511:
1512: A carriage return will be sent at the end of each send string, unless
1513: the @kbd{\c} escape sequence appears in the string. Note that some UUCP
1514: packages use @kbd{\b} for break, but here it means backspace.
1515:
1516: Echo checking means that after writing each character the program will
1517: wait until the character is echoed. Echo checking must be turned on
1518: separately for each send string for which it is desired; it will be
1519: turned on for characters following @kbd{\E} and turned off for characters
1520: following @kbd{\e}.
1521:
1522: @item chat-timeout @var{number}
1523: @findex chat-timeout
1524:
1525: The number of seconds to wait for an expect string in the chat script
1526: before timing out and sending the next subsend or failing the chat
1527: script entirely. The default value is 10 for a login chat or 60 for
1528: any other type of chat.
1529:
1530: @item chat-fail @var{string}
1531: @findex chat-fail
1532:
1533: If the @var{string} is seen at any time during a chat script, the chat
1534: script is aborted. The string may not contain any whitespace
1535: characters; escape sequences must be used for them. Multiple
1536: @code{chat-fail} commands may appear in a single chat script. The
1537: default is to have none.
1538:
1539: This permits a chat script to be quickly aborted if an error string is
1540: seen. For example, a script used to dial out on a modem might use the
1541: command @samp{chat-fail BUSY} to stop the chat script immediately if the
1542: string @samp{BUSY} was seen.
1543:
1544: @item chat-seven-bit @var{boolean}
1545: @findex chat-seven-bit
1546:
1547: If the argument is true, all incoming characters are stripped to seven
1548: bits when being compared to the expect string. Otherwise all eight bits
1549: are used in the comparison. The default is true, because some Unix
1550: systems generate parity bits during the login prompt which must be
1551: ignored while running a chat script. This has no effect on any
1552: @code{chat-program}, which must ignore parity by itself if necessary.
1553:
1554: @item chat-program @var{strings}
1555: @findex chat-program
1556:
1557: Specify a program to run before executing the chat script. This program
1558: could run its own version of a chat script, or it could do whatever it
1559: wants. If both @code{chat-program} and @code{chat} are specified, the
1560: program is executed first followed by the chat script.
1561:
1562: The first argument to the @code{chat-program} command is the program
1563: name to run. The remaining arguments are passed to the program. The
1564: following escape sequences are recognized in the arguments:
1565:
1566: @table @kbd
1567: @item \Y
1568: port device name
1569: @item \S
1570: port speed
1571: @item \\
1572: backslash
1573: @end table
1574:
1575: Some specific uses of @code{chat-program} define additional escape
1576: sequences.
1577:
1578: Arguments other than escape sequences are passed exactly as they appear
1579: in the configuration file, except that sequences of whitespace are
1580: compressed to a single space character (this exception may be removed in
1581: the future).
1582:
1583: If the @code{chat-program} command is not used, no program is run.
1584:
1585: On Unix, the standard input and standard output of the program will be
1586: attached to the port in use. Anything the program writes to standard
1587: error will be written to the UUCP log file. No other file descriptors
1588: will be open. If the program does not exit with a status of 0, it will
1589: be assumed to have failed; this means that the dialing programs used by
1590: some versions of HDB may not be used directly, although of course a
1591: shell script could be used as an interface.
1592:
1593: The program will be run as the @code{uucp} user, and the environment
1594: will be that of the process that started @code{uucico}, so care must be
1595: taken to maintain security.
1596:
1597: No search path is used to find the program; a full path name must be
1598: given. If the program is an executable shell script, it will be passed
1599: to @file{/bin/sh} even on systems which are unable to execute shell
1600: scripts. It is also easy to invoke @file{/bin/sh} directly.
1601:
1602: @end table
1603:
1604: Here is a simple example of a chat script that might be used to reset a
1605: Hayes compatible modem.
1606:
1607: @example
1608: chat "" ATZ OK-ATZ-OK
1609: @end example
1610:
1611: The first expect string is @samp{""}, so it is ignored. The chat script
1612: then sends @samp{ATZ}. If the modem responds with @samp{OK}, the chat
1613: script finishes. If 60 seconds (the default timeout) pass before seeing
1614: @samp{OK}, the chat script sends another @samp{ATZ}. If it then sees
1615: @samp{OK}, the chat script succeeds. Otherwise, the chat script fails.
1616:
1617: For a more complex chat script example, see @ref{Logging In}.
1618:
1619: @node config File, sys File, Chat Scripts, Configuration Files
1620: @section The Main Configuration File
1621: @cindex config file
1622: @cindex main configuration file
1623: @cindex configuration file (config)
1624:
1625: The main configuration file is named @file{config}.
1626:
1627: Since all the values that may be specified in the main configuration
1628: file also have defaults, there need not be a main configuration file at
1629: all.
1630:
1631: @menu
1632: * Miscellaneous (config):: Miscellaneous config file commands
1633: * Configuration File Names:: Using different configuration files
1634: * Log File Names:: Using different log files
1635: * Debugging Levels:: Debugging levels
1636: @end menu
1637:
1638: @node Miscellaneous (config), Configuration File Names, config File, config File
1639: @subsection Miscellaneous config File Commands
1640:
1641: @table @code
1642:
1643: @item nodename @var{string}
1644: @findex nodename
1645: @itemx hostname @var{string}
1646: @findex hostname
1647: @itemx uuname @var{string}
1648: @findex uuname
1649: @cindex UUCP system name
1650: @cindex system name
1651:
1652: These keywords are equivalent. They specify the UUCP name of the local
1653: host. If there is no configuration file, an appropriate system function
1654: will be used to get the host name, if possible.
1655:
1656: @item spool @var{string}
1657: @findex spool
1658: @cindex spool directory
1659: @cindex /usr/spool/uucp
1660:
1661: Specify the spool directory. The default is from @file{policy.h}. This
1662: is where UUCP files are queued. Status files and various sorts of
1663: temporary files are also stored in this directory and subdirectories of
1664: it.
1665:
1666: @item pubdir @var{string}
1667: @findex pubdir in config file
1668: @cindex public directory
1669: @cindex uucppublic
1670: @cindex /usr/spool/uucppublic
1671:
1672: Specify the public directory. The default is from @file{policy.h}.
1673: When a file is named using a leading @kbd{~/}, it is taken from or to
1674: the public directory. Each system may use a separate public directory
1675: by using the @code{pubdir} command in the system configuration file; see
1676: @ref{Miscellaneous (sys)}.
1677:
1678: @item lockdir @var{string}
1679: @findex lockdir
1680: @cindex lock directory
1681:
1682: Specify the directory to place lock files in. The default is from
1683: @file{policy.h}; see the information in that file. Normally the lock
1684: directory should be set correctly in @file{policy.h}, and not changed
1685: here. However, changing the lock directory is sometimes useful for
1686: testing purposes.
1687:
1688: @item unknown @var{string} @dots{}
1689: @findex unknown
1690: @cindex unknown systems
1691:
1692: The @var{string} and subsequent arguments are treated as though they
1693: appeared in the system file (@pxref{sys File}). They are used to apply
1694: to any unknown systems that may call in, probably to set file transfer
1695: permissions and the like. If the @code{unknown} command is not used,
1696: unknown systems are not permitted to call in.
1697:
1698: @item max-uuxqts @var{number}
1699: @findex max-uuxqts
1700:
1701: Specify the maximum number of @code{uuxqt} processes which may run at
1702: the same time. Having several @code{uuxqt} processes running at once
1703: can significantly slow down a system, but since @code{uuxqt} is
1704: automatically started by @code{uucico}, it can happen quite easily. The
1705: default for @code{max-uuxqts} is 0, which means that there is no limit.
1706: If HDB configuration files are being read and the code was compiled
1707: without @code{HAVE_TAYLOR_CONFIG}, then if the file @file{Maxuuxqts} in
1708: the configuration directory contains a readable number it will be used as
1709: the value for @code{max-uuxqts}.
1710:
1711: @item timetable @var{string} @var{string}
1712: @findex timetable
1713:
1714: The @code{timetable} defines a timetable that may be used in
1715: subsequently appearing time strings; @ref{Time Strings}. The first
1716: string names the timetable entry; the second is a time string.
1717:
1718: The following @code{timetable} commands are predefined. The NonPeak
1719: timetable is included for compatibility. It originally described the
1720: offpeak hours of Tymnet and Telenet, but both have since changed their
1721: schedules.
1722:
1723: @example
1724: timetable Evening Wk1705-0755,Sa,Su
1725: timetable Night Wk2305-0755,Sa,Su2305-1655
1726: timetable NonPeak Wk1805-0655,Sa,Su
1727: @end example
1728:
1729: If this command does not appear, then obviously no additional timetables
1730: will be defined.
1731:
1732: @item v2-files @var{boolean}
1733: @findex v2-files
1734:
1735: If the code was compiled to be able to read V2 configuration files, a
1736: false argument to this command will prevent them from being read.
1737: This can be useful while testing. The default is true.
1738:
1739: @item hdb-files @var{boolean}
1740: @findex hdb-files
1741:
1742: If the code was compiled to be able to read HDB configuration files, a
1743: false argument to this command will prevent them from being read.
1744: This can be useful while testing. The default is true.
1745:
1746: @end table
1747:
1748: @node Configuration File Names, Log File Names, Miscellaneous (config), config File
1749: @subsection Configuration File Names
1750:
1751: @table @code
1752:
1753: @item sysfile @var{strings}
1754: @findex sysfile
1755:
1756: Specify the system file(s). The default is the file @file{sys} in the
1757: directory @var{newconfigdir}. These files hold information about other
1758: systems with which this system communicates; see @ref{sys File}.
1759: Multiple system files may be given on the line, and the @code{sysfile}
1760: command may be repeated; each system file has its own set of defaults.
1761:
1762: @item portfile @var{strings}
1763: @findex portfile
1764:
1765: Specify the port file(s). The default is the file @file{port} in the
1766: directory @var{newconfigdir}. These files describe ports which are used
1767: to call other systems and accept calls from other systems; see @ref{port
1768: File}. No port files need be named at all. Multiple port files may be
1769: given on the line, and the @code{portfile} command may be repeated.
1770:
1771: @item dialfile @var{strings}
1772: @findex dialfile
1773:
1774: Specify the dial file(s). The default is the file @file{dial} in the
1775: directory @var{newconfigdir}. These files describe dialing devices
1776: (modems); @xref{dial File}. No dial files need be named at all.
1777: Multiple dial files may be given on the line, and the @code{dialfile}
1778: command may be repeated.
1779:
1780: @item dialcodefile @var{strings}
1781: @findex dialcodefile
1782: @cindex configuration file (dialcode)
1783: @cindex dialcode file
1784: @cindex dialcode configuration file
1785:
1786: Specify the dialcode file(s). The default is the file @file{dialcode}
1787: in the directory @var{newconfigdir}. These files specify dialcodes that
1788: may be used when sending phone numbers to a modem. This permits using
1789: the same set of phone numbers in different area-codes or with different
1790: phone systems, by using dialcodes to specify the calling sequence. When
1791: a phone number goes through dialcode translation, the leading alphabetic
1792: characters are stripped off. The dialcode files are read line by line,
1793: just like any other configuration file, and when a line is found whose
1794: first word is the same as the leading characters from the phone number,
1795: the second word on the line (which would normally consist of numbers)
1796: replaces the dialcode in the phone number. No dialcode file need be
1797: used. Multiple dialcode files may be specified on the line, and the
1798: @code{dialcodefile} command may be repeated; all the dialcode files will
1799: be read in turn until a dialcode is located.
1800:
1801: @item callfile @var{strings}
1802: @findex callfile
1803: @cindex call out file
1804: @cindex call configuration file
1805: @cindex call out login name
1806: @cindex call out password
1807: @cindex configuration file (call)
1808:
1809: Specify the call out login name and password file(s). The default is
1810: the file @file{call} in the directory @var{newconfigdir}. If the call
1811: out login name or password for a system are given as @kbd{*}
1812: (@pxref{Logging In}), these files are read to get the real login name or
1813: password. Each line in the file(s) has three words: the system name,
1814: the login name, and the password. This file is only used when placing
1815: calls to remote systems; the password file described under
1816: @code{passwdfile} below is used for incoming calls. The intention of
1817: the call out file is to permit the system file to be publically
1818: readable; the call out files must obviously be kept secure. These files
1819: need not be used. Multiple call out files may be specified on the line,
1820: and the @code{callfile} command may be repeated; all the files will be
1821: read in turn until the system is found.
1822:
1823: @item passwdfile @var{strings}
1824: @findex passwdfile
1825: @cindex passwd file
1826: @cindex passwd configuration file
1827: @cindex configuration file (passwd)
1828: @cindex call in login name
1829: @cindex call in password
1830:
1831: Specify the password file(s) to use for login names when @code{uucico}
1832: is doing its own login prompting, which it does when given the
1833: @samp{-e}, @samp{-l} or @samp{-w} switches. The default is the file
1834: @file{passwd} in the directory @var{newconfigdir}. Each line in the
1835: file(s) has two words: the login name and the password (e.g. @code{Ufoo
1836: foopas}). The login name is accepted before the system name is known,
1837: so these are independent of which system is calling in; a particular
1838: login may be required for a system by using the @code{called-login}
1839: command in the system file (@pxref{Accepting a Call}). These password
1840: files are optional, although one must exist if @code{uucico} is to
1841: present its own login prompts. Multiple password files may be specified
1842: on the line, and the @code{passwdfile} command may be repeated; all the
1843: files will be read in turn until the login name is found.
1844:
1845: @end table
1846:
1847: @node Log File Names, Debugging Levels, Configuration File Names, config File
1848: @subsection Log File Names
1849:
1850: @table @code
1851:
1852: @item logfile @var{string}
1853: @findex logfile
1854: @cindex log file
1855:
1856: Name the log file. The default is from @file{policy.h}. Logging
1857: information is written to this file. If @code{HAVE_HDB_LOGGING} is
1858: defined in @file{conf.h}, then by default a separate log file is used
1859: for each system. Using this command to name a log file will cause all
1860: the systems to use it.
1861:
1862: @item statfile @var{string}
1863: @findex statfile
1864: @cindex statistics file
1865:
1866: Name the statistics file. The default is from @file{policy.h}.
1867: Statistical information about file transfers is written to this file.
1868:
1869: @item debugfile @var{string}
1870: @findex debugfile
1871: @cindex debugging file
1872:
1873: Name the file to which debugging information is written. The default is
1874: from @file{policy.h}. This command is only effective if the code has
1875: been compiled to include debugging (this is controlled by the
1876: @code{DEBUG} variable in @file{policy.h}). After the first debugging
1877: message has been written, messages written to the log file are also
1878: written to the debugging file to make it easier to keep the order of
1879: actions straight. The debugging file is different from the log file
1880: because information such as passwords can appear in it, so it must be
1881: not be publically readable.
1882:
1883: @end table
1884:
1885: @node Debugging Levels, , Log File Names, config File
1886: @subsection Debugging Levels
1887:
1888: @table @code
1889:
1890: @item debug @var{string} @dots{}
1891: @findex debug in config file
1892:
1893: Set the debugging level. This command is only effective if the code has
1894: been compiled to include debugging. The default is to have no
1895: debugging. The arguments are strings which name the types of debugging
1896: to be turned on. The following types of debugging are defined:
1897:
1898: @table @samp
1899: @item abnormal
1900: Output debugging messages for abnormal situations, such as recoverable errors.
1901: @item chat
1902: Output debugging messages for chat scripts.
1903: @item handshake
1904: Output debugging messages for the initial handshake.
1905: @item uucp-proto
1906: Output debugging messages for the UUCP session protocol.
1907: @item proto
1908: Output debugging messages for the individual link protocols.
1909: @item port
1910: Output debugging messages for actions on the communication port.
1911: @item config
1912: Output debugging messages while reading the configuration files.
1913: @item spooldir
1914: Output debugging messages for actions in the spool directory.
1915: @item execute
1916: Output debugging messages whenever another program is executed.
1917: @item incoming
1918: List all incoming data in the debugging file.
1919: @item outgoing
1920: List all outgoing data in the debugging file.
1921: @item all
1922: All of the above.
1923: @end table
1924:
1925: The debugging level may also be specified as a number. A 1 will set
1926: @samp{chat} debugging, a 2 will set both @samp{chat} and
1927: @samp{handshake} debugging, and so on down the possibilities. Currently
1928: an 11 will turn on all possible debugging, since there are 11 types of
1929: debugging messages listed above; more debugging types may be added in
1930: the future. The @code{debug} command may be used several times in the
1931: configuration file; every debugging type named will be turned on. When
1932: running any of the programs, the @samp{-x} switch (actually, for
1933: @code{uulog} it's the @samp{-X} switch) may be used to turn on
1934: debugging. The argument to the @samp{-x} switch is one of the strings
1935: listed above, or a number as described above, or a comma separated list
1936: of strings (e.g. @samp{-x chat,handshake}). The @samp{-x} switch may
1937: also appear several times on the command line, in which case all named
1938: debugging types will be turned on. The @samp{-x} debugging is in
1939: addition to any debugging specified by the @code{debug} command; there
1940: is no way to cancel debugging information. The debugging level may also
1941: be set specifically for calls to or from a specific system with the
1942: @code{debug} command in the system file (@pxref{Miscellaneous (sys)}).
1943:
1944: The debugging messages are somewhat idiosyncratic; it may be necessary
1945: to refer to the source code for additional information in some cases.
1946:
1947: @end table
1948:
1949: @node sys File, port File, config File, Configuration Files
1950: @section The System Configuration File
1951: @cindex sys file
1952: @cindex system configuration file
1953: @cindex configuration file (sys)
1954:
1955: By default there is a single system configuration, named @file{sys} in
1956: the directory @var{newconfigdir}. This may be overridden by the
1957: @code{sysfile} command in the main configuration file; see
1958: @ref{Configuration File Names}.
1959:
1960: These files describe all remote systems known to the UUCP package.
1961:
1962: @menu
1963: * Defaults and Alternates:: Using defaults and alternates
1964: * Naming the System:: Naming the system
1965: * Calling Out:: Calling out
1966: * Accepting a Call:: Accepting a call
1967: * Protocol Selection:: Protocol selection
1968: * File Transfer Control:: File transfer control
1969: * Miscellaneous (sys):: Miscellaneous sys file commands
1970: * Default sys File Values:: Default values
1971: @end menu
1972:
1973: @node Defaults and Alternates, Naming the System, sys File, sys File
1974: @subsection Defaults and Alternates
1975:
1976: The first set of commands in the file, up to the first @code{system}
1977: command, specify defaults to be used for all systems in that file. Each
1978: system file uses a different set of defaults.
1979:
1980: Subsequently, each set of commands from @code{system} up to the next
1981: @code{system} command describe a particular system. Default values may
1982: be overridden for specific systems.
1983:
1984: Each system may then have a series of alternate choices to use when
1985: calling out or calling in. The first set of commands for a particular
1986: system, up to the first @code{alternate} command, provide the first
1987: choice. Subsequently, each set of commands from @code{alternate} up to
1988: the next @code{alternate} command describe an alternate choice for
1989: calling out or calling in.
1990:
1991: When a system is called, the commands before the first @code{alternate}
1992: are used to select a phone number, port, and so forth; if the call fails
1993: for some reason, the commands between the first @code{alternate} and the
1994: second are used, and so forth. Well, not quite. Actually, each
1995: succeeding alternate will only be used if it is different in some
1996: relevant way (different phone number, different chat script, etc.). If
1997: you want to force the same alternate to be used again (to retry a phone
1998: call more than once, for example), enter the phone number (or any other
1999: relevant field) again to make it appear different.
2000:
2001: The alternates can also be used to give different permissions to an
2002: incoming call based on the login name. This will only be done if the
2003: first set of commands, before the first @code{alternate} command, uses
2004: the @code{called-login} command. The list of alternates will be
2005: searched, and the first alternate with a matching @code{called-login}
2006: command will be used. If no alternates match, the call will be
2007: rejected.
2008:
2009: The @code{alternate} command may also be used in the file-wide defaults
2010: (the set of commands before the first @code{system} command). This
2011: might be used to specify a list of ports which are available for all
2012: systems (for an example of this, see @ref{Gateway Example}) or to
2013: specify permissions based on the login name used by the remote system
2014: when it calls in. The first alternate for each system will default to
2015: the first alternate for the file-wide defaults (as modified by the
2016: commands used before the first @code{alternate} command for this
2017: system), the second alternate for each system to the second alternate
2018: for the file-wide defaults (as modified the same way), and so forth. If
2019: a system specifies more alternates than the file-wide defaults, the
2020: trailing ones will default to the last file-wide default alternate. If
2021: a system specifies fewer alternates than the file-wide defaults, the
2022: trailing file-wide default alternates will be used unmodified. The
2023: @code{default-alternates} command may be used to modify this behaviour.
2024:
2025: This can all get rather confusing, although it's easier to use than to
2026: describe concisely; the @code{uuchk} program may be used to ensure that
2027: you are getting what you want.
2028:
2029: @node Naming the System, Calling Out, Defaults and Alternates, sys File
2030: @subsection Naming the System
2031:
2032: @table @code
2033:
2034: @item system @var{string}
2035: @findex system
2036:
2037: Specify the remote system name. Subsequent commands up to the next
2038: @code{system} command refer to this system.
2039:
2040: @item alternate [@var{string}]
2041: @findex alternate
2042:
2043: Start an alternate set of commands (@pxref{Defaults and Alternates}).
2044: An optional argument may be used to name the alternate. This name will
2045: be put in the log file if the alternate is used to call the system.
2046: There is no way to name the first alternate (the commands before the
2047: first @code{alternate} command).
2048:
2049: @item default-alternates @var{boolean}
2050: @findex default-alternates
2051:
2052: If the argument is false, any remaining default alternates (from the
2053: defaults specified at the top of the current system file) will not be
2054: used. The default is true.
2055:
2056: @item alias @var{string}
2057: @findex alias
2058:
2059: Specify an alias for the current system. The alias may be used by local
2060: @code{uucp} and @code{uux} commands, as well as by the remote system
2061: (which can be convenient if a remote system changes its name). The
2062: default is to have no aliases.
2063:
2064: @item myname @var{string}
2065: @findex myname
2066:
2067: Specifies a different system name to use when calling the remote system.
2068: Also, if @code{called-login} is used and is not @samp{ANY}, then, when a
2069: system logs in with that login name, @var{string} is used as the system
2070: name. Because the local system name must be determined before the
2071: remote system has identified itself, using @code{myname} and
2072: @code{called-login} together for any system will set the local name for
2073: that login; this means that each locally used system name must have a
2074: unique login name associated with it. This allows a system to have
2075: different names for an external and an internal network. The default is
2076: to not use a special local name.
2077:
2078: @end table
2079:
2080: @node Calling Out, Accepting a Call, Naming the System, sys File
2081: @subsection Calling Out
2082:
2083: This section describes commands used when placing a call to another
2084: system.
2085:
2086: @menu
2087: * When to Call:: When to call
2088: * Placing the Call:: Placing the call
2089: * Logging In:: Logging in
2090: @end menu
2091:
2092: @node When to Call, Placing the Call, Calling Out, Calling Out
2093: @subsubsection When to Call
2094:
2095: @table @code
2096:
2097: @item time @var{string} [@var{number}]
2098: @findex time
2099:
2100: Specify when the system may be called. The first argument is a time
2101: string; see @ref{Time Strings}. The optional second argument specifies
2102: a retry time in minutes. If a call made during a time that matches the
2103: time string fails, no more calls are permitted until the retry time has
2104: passed. By default an exponentially increasing retry time is used:
2105: after each failure the next retry period is longer. A retry time
2106: specified in the @code{time} command is always a fixed amount of time.
2107:
2108: The @code{time} command may appear multiple times in a single alternate,
2109: in which case if any time string matches the system may be called. When
2110: the @code{time} command is used for a particular system, any @code{time}
2111: or @code{timegrade} commands that appeared in the system defaults are
2112: ignored.
2113:
2114: The default time string is @samp{Never}.
2115:
2116: @item timegrade @var{character} @var{string} [@var{number}]
2117: @findex timegrade
2118:
2119: The @var{character} specifies a grade. It must be a single letter or
2120: digit. The @var{string} is a time string (@pxref{Time Strings}). All
2121: jobs of grade @var{character} or higher (where @kbd{0} > @kbd{9} >
2122: @kbd{A} > @kbd{Z} > @kbd{a} > @kbd{z}) may be run at the specified time.
2123: An ordinary @code{time} command is equivalent to using @code{timegrade}
2124: with a grade of @kbd{z}, permitting all jobs. If there are no jobs of a
2125: sufficiently high grade according to the time string, the system will
2126: not be called. Giving the @samp{-s} switch to @code{uucico} to force it
2127: to call a system causes it to assume there is a job of grade @kbd{0}
2128: waiting to be run.
2129:
2130: The optional third argument specifies a retry time in minutes. See the
2131: @code{time} command, above, for more details.
2132:
2133: Note that the @code{timegrade} command serves two purposes: 1) if there
2134: is no job of sufficiently high grade the system will not be called, and
2135: 2) if the system is called anyway (because the @samp{-s} switch was
2136: given to @code{uucico}) only jobs of sufficiently high grade will be
2137: transferred. However, if the other system calls in, the
2138: @code{timegrade} commands are ignored, and jobs of any grade may be
2139: transferred (but see @code{call-timegrade} below). Also, the
2140: @code{timegrade} command will not prevent the other system from
2141: transferring any job it chooses, regardless of who placed the call.
2142:
2143: The @code{timegrade} command may appear multiple times without using
2144: @code{alternate}. When the @code{timegrade} command is used for a
2145: particular system, any @code{time} or @code{timegrade} commands that
2146: appeared in the system defaults are ignored.
2147:
2148: If this command does not appear, there are no restrictions on what grade
2149: of work may be done at what time.
2150:
2151: @item max-retries @var{number}
2152: @findex max-retries
2153:
2154: Gives the maximum number of times this system may be retried. If this
2155: many calls to the system fail, it will be called at most once a day
2156: whatever the retry time is. The default is 26.
2157:
2158: @item success-wait @var{number}
2159:
2160: A retry time, in seconds, which applies after a successful call. This
2161: can be used to put a limit on how frequently the system is called. For
2162: example, an argument of 1800 means that the system will not be called
2163: more than once every half hour. The default is 0, which means that
2164: there is no limit.
2165:
2166: @item call-timegrade @var{character} @var{string}
2167: @findex call-timegrade
2168:
2169: The @var{character} is a single character @kbd{A} to @kbd{Z}, @kbd{a} to
2170: @kbd{z}, or @kbd{0} to @kbd{9} and specifies a grade. The @var{string}
2171: is a time string as described under the @code{time} command. If a call
2172: is placed to the other system during a time which matches the time
2173: string, the remote system will be requested to only run jobs of grade
2174: @var{character} or higher. Unfortunately, there is no way to guarantee
2175: that the other system will obey the request (this UUCP package will, but
2176: there are others which will not); moreover job grades are historically
2177: somewhat arbitrary, so specifying a grade will only be meaningful if the
2178: other system cooperates in assigning grades. This grade restriction
2179: only applies when the other system is called, not when the other system
2180: calls in.
2181:
2182: The @code{call-timegrade} command may appear multiple times without
2183: using @code{alternate}. If this command does not appear, or if none of
2184: the time strings match, the remote system will be allowed to send
2185: whatever grades of work it chooses.
2186:
2187: @end table
2188:
2189: @node Placing the Call, Logging In, When to Call, Calling Out
2190: @subsubsection Placing the Call
2191:
2192: @table @code
2193:
2194: @item baud @var{number}
2195: @findex baud in sys file
2196: @itemx speed @var{number}
2197: @findex speed in sys file
2198:
2199: Specify the speed (the term @dfn{baud} is technically incorrect, but
2200: widely understood) at which to call the system. This will try all
2201: available ports with that baud rate until an unlocked port is found.
2202: The ports are defined in the port file. If both @code{baud} and
2203: @code{port} commands appear, both are used when selecting a port. To
2204: allow calls at more than one baud rate, the @code{alternate} command
2205: must be used (@pxref{Defaults and Alternates}). If this command does
2206: not appear, there is no default; the baud rate may be specified in the
2207: port file, but if it is not then the natural baud rate of the port will
2208: be used (whatever that means on the system). Specifying an explicit
2209: baud rate of 0 will request the natural baud rate of the port,
2210: overriding any default baud rate from the defaults at the top of the
2211: file.
2212:
2213: @item port @var{string}
2214: @findex port in sys file
2215:
2216: Name a particular port or type of port to use when calling the system.
2217: The information for this port is obtained from the port file. If this
2218: command does not appear, there is no default; a port must somehow be
2219: specified in order to call out (it may be specified implicitly using the
2220: @code{baud} command or explicitly using the next version of
2221: @code{port}). There may be many ports with the same name; each will be
2222: tried in turn until an unlocked one is found which matches the desired
2223: baud rate.
2224:
2225: @item port @var{string} @dots{}
2226:
2227: If more than one string follows the @code{port} command, the strings are
2228: treated as a command that might appear in the port file (@pxref{port
2229: File}). If a port is named (by using a single string following
2230: @code{port}) these commands are ignored; their purpose is to permit
2231: defining the port completely in the system file rather than always
2232: requiring entries in two different files. In order to call out, a port
2233: must be specified using some version of the @code{port} command, or by
2234: using the @code{baud} command to select ports from the port file.
2235:
2236: @item phone @var{string}
2237: @findex phone
2238: @itemx address @var{string}
2239: @findex address
2240:
2241: Give a phone number to call (when using a modem port) or a remote host
2242: to contact (when using a TCP or TLI port). The commands @code{phone}
2243: and @code{address} are equivalent; the duplication is intended to
2244: provide a mnemonic choice depending on the type of port in use.
2245:
2246: When used with a modem port, an @kbd{=} character in the phone number
2247: means to wait for a secondary dial tone (although only some modems
2248: support this); a @kbd{-} character means to pause while dialing for 1
2249: second (again, only some modems support this). If the system has more
2250: than one phone number, each one must appear in a different alternate.
2251: The @code{phone} command must appear in order to call out on a modem;
2252: there is no default.
2253:
2254: When used with a TCP port, the string names the host to contact. It may
2255: be a domain name or a numeric Internet address. If no address is
2256: specified, the system name is used.
2257:
2258: When used with a TLI port, the string is treated as though it were an
2259: expect string in a chat script, allowing the use of escape characters
2260: (@pxref{Chat Scripts}). The @code{dialer-sequence} command in the port
2261: file may override this address (@pxref{port File}).
2262:
2263: When used with a port that not a modem or TCP or TLI, this command is
2264: ignored.
2265:
2266: @end table
2267:
2268: @node Logging In, , Placing the Call, Calling Out
2269: @subsubsection Logging In
2270: @table @code
2271:
2272: @item chat @var{strings}
2273: @findex chat in sys file
2274: @item chat-timeout @var{number}
2275: @findex chat-timeout in sys file
2276: @item chat-fail @var{string}
2277: @findex chat-fail in sys file
2278: @item chat-seven-bit @var{boolean}
2279: @findex chat-seven-bit in sys file
2280: @item chat-program @var{strings}
2281: @findex chat-program in sys file
2282:
2283: These commands describe a chat script to use when logging on to a remote
2284: system. Chat scripts are explained in @ref{Chat Scripts}.
2285:
2286: Two additional escape sequences may be used in send strings.
2287:
2288: @table @samp
2289: @item \L
2290: Send the login name, as set by the @code{call-login} command.
2291: @item \P
2292: Send the password, as set by the @code{call-password} command.
2293: @end table
2294:
2295: Three additional escape sequences may be used with the
2296: @code{chat-program} command. These are @samp{\L} and @samp{\P}, which
2297: become the login name and password, respectively, and @samp{\Z}, which
2298: becomes the name of the system of being called.
2299:
2300: The default chat script is:
2301:
2302: @example
2303: chat "" \r\c ogin:-BREAK-ogin:-BREAK-ogin: \L word: \P
2304: @end example
2305:
2306: This will send a carriage return (the @kbd{\c} suppresses the additional
2307: trailing carriage return that would otherwise be sent) and waits for the
2308: string @samp{ogin:} (which would be the last part of the @samp{login:}
2309: prompt supplied by a Unix system). If it doesn't see @samp{ogin:}, it
2310: sends a break and waits for @samp{ogin:} again. If it still doesn't see
2311: @samp{ogin:}, it sends another break and waits for @samp{ogin:} again.
2312: If it still doesn't see @samp{ogin:}, the chat script aborts and hangs
2313: up the phone. If it does see @samp{ogin:} at some point, it sends the
2314: login name (as specified by the @code{call-login} command) followed by a
2315: carriage return (since all send strings are followed by a carriage
2316: return unless @kbd{\c} is used) and waits for the string @samp{word:}
2317: (which would be the last part of the @samp{Password:} prompt supplied by
2318: a Unix system). If it sees @samp{word:}, it sends the password and a
2319: carriage return, completing the chat script. The program will then
2320: enter the handshake phase of the UUCP protocol.
2321:
2322: This chat script will work for most systems, so you will only be
2323: required to use the @code{call-login} and @code{call-password} commands.
2324: In fact, in the file-wide defaults you could set defaults of
2325: @samp{call-login *} and @samp{call-password *}; you would then just have
2326: to make an entry for each system in the call-out login file.
2327:
2328: Some systems seem to flush input after the @samp{login:} prompt, so they
2329: may need a version of this chat script with a @kbd{\d} before the
2330: @kbd{\L}. When using UUCP over TCP, some servers will not be handle the
2331: initial carriage return sent by this chat script; in this case you may
2332: have to specify the simple chat script @samp{ogin: \L word: \P}.
2333:
2334: @item call-login @var{string}
2335: @findex call-login
2336:
2337: Specify the login name to send with @kbd{\L} in the chat script. If the
2338: string is @samp{*} (e.g. @samp{call-login *}) the login name will be
2339: fetched from the call out login name and password file
2340: (@pxref{Configuration File Names}). There is no default.
2341:
2342: @item call-password @var{string}
2343: @findex call-password
2344:
2345: Specify the password to send with @kbd{\P} in the chat script. If the
2346: string is @samp{*} (e.g. @samp{call-password *}) the password will be
2347: fetched from the call-out login name and password file
2348: (@pxref{Configuration File Names}). There is no default.
2349:
2350: @end table
2351:
2352: @node Accepting a Call, Protocol Selection, Calling Out, sys File
2353: @subsection Accepting a Call
2354:
2355: @table @code
2356:
2357: @item called-login @var{strings}
2358: @findex called-login
2359:
2360: The first @var{string} specifies the login name that the system must use
2361: when calling in. If it is @samp{ANY} (e.g. @samp{called-login ANY}) any
2362: login name may be used; this is useful to override a file-wide default
2363: and to indicate that future alternates may have different login names.
2364: Case is significant. The default value is @samp{ANY}.
2365:
2366: Different alternates (@pxref{Defaults and Alternates}) may use different
2367: @code{called-login} commands, in which case the login name will be used
2368: to select which alternate is in effect; this will only work if the first
2369: alternate (before the first @code{alternate} command) uses the
2370: @code{called-login} command.
2371:
2372: Additional strings may be specified after the login name; they are a
2373: list of which systems are permitted to use this login name. If this
2374: feature is used, then normally the login name will only be given in a
2375: single @code{called-login} command. Only systems which appear on the
2376: list, or which use an explicit @code{called-login} command, will be
2377: permitted to use that login name. If the same login name is used more
2378: than once with a list of systems, all the lists are concatenated
2379: together. This feature permits you to restrict a login name to a
2380: particular set of systems without requiring you to use the
2381: @code{called-login} command for every single system; you can achieve a
2382: similar effect by using a different system file for each permitted login
2383: name with an appropriate @code{called-login} command in the file-wide
2384: defaults.
2385:
2386: @item callback @var{boolean}
2387: @findex callback
2388:
2389: If @var{boolean} is true, then when the remote system calls
2390: @code{uucico} will hang up the connection and prepare to call it back.
2391: The default is false.
2392:
2393: @item called-chat @var{strings}
2394: @findex called-chat
2395: @item called-chat-timeout @var{number}
2396: @findex called-chat-timeout
2397: @item called-chat-fail @var{string}
2398: @findex called-chat-fail
2399: @item called-chat-seven-bit @var{boolean}
2400: @findex called-chat-seven-bit
2401: @item called-chat-program @var{strings}
2402: @findex called-chat-program
2403:
2404: These commands may be used to define a chat script (@pxref{Chat
2405: Scripts}) that is run whenever the local system is called by the system
2406: being defined. The chat script defined by the @code{chat} command
2407: (@pxref{Logging In}), on the other hand, is used when the remote system
2408: is called. This called chat script might be used to set special modem
2409: parameters that are appropriate to a particular system. It is run after
2410: protocol negotiation is complete, but before the protocol has been
2411: started. See @ref{Logging In} for additional escape sequence which may
2412: be used besides those defined for all chat scripts. There is no default
2413: called chat script. If the called chat script fails, the incoming call
2414: will be aborted.
2415:
2416: @end table
2417:
2418: @node Protocol Selection, File Transfer Control, Accepting a Call, sys File
2419: @subsection Protocol Selection
2420:
2421: @table @code
2422:
2423: @item protocol @var{string}
2424: @findex protocol in sys file
2425:
2426: Specifies which protocols to use for the other system, and in which
2427: order to use them. This would not normally be used. For example,
2428: @samp{protocol tfg}.
2429:
2430: The default depends on the characteristics of the port and the dialer,
2431: as specified by the @code{seven-bit} and @code{reliable} commands. If
2432: neither the port nor the dialer use either of these commands, the
2433: default is to assume an eight-bit reliable connection. The commands
2434: @samp{seven-bit true} or @samp{reliable false} might be used in either
2435: the port or the dialer to change this. Each protocol has particular
2436: requirements that must be met before it will be considered during
2437: negotiation with the remote side.
2438:
2439: The @samp{t} and @samp{e} protocols are intended for use over TCP or
2440: some other communication path with end to end reliability, as they do no
2441: checking of the data at all. They will only be considered on a TCP port
2442: which is both reliable and eight bit.
2443:
2444: The @samp{i} protocol is a bidirectional protocol. It requires an
2445: eight-bit connection. It will run over a half-duplex link, such as
2446: Telebit modems in PEP mode, but for efficient use of such a connection
2447: you must use the @code{half-duplex} command (@pxref{port File}).
2448:
2449: The @samp{g} protocol is robust, but requires an eight-bit connection.
2450:
2451: The @samp{G} protocol is the System V Release 4 version of the @samp{g}
2452: protocol.
2453:
2454: The @samp{a} protocol is a Zmodem like protocol, contributed by Doug
2455: Evans. It requires an eight-bit connection, but unlike the @samp{g} or
2456: @samp{i} protocol it will work if certain control characters may not be
2457: transmitted.
2458:
2459: The @samp{j} protocol is a variant of the @samp{i} protocol which can
2460: avoid certain control characters. The set of characters it avoids can
2461: be set by a parameter. While it technically does not require an eight
2462: bit connection (it could be configured to avoid all characters with the
2463: high bit set) it would be very inefficient to use it over one. It is
2464: useful over a eight-bit connection that will not transmit certain
2465: control characters.
2466:
2467: The @samp{f} protocol is intended for use with X.25 connections; it
2468: checksums each file as a whole, so any error causes the entire file to
2469: be retransmitted. It requires a reliable connection, but only uses
2470: seven-bit transmissions. It is a streaming protocol, so, while it can
2471: be used on a serial port, the port must be completely reliable and flow
2472: controlled; many aren't.
2473:
2474: The protocols will be considered in the order shown above. This means
2475: that if neither the @code{seven-bit} nor the @code{reliable} command are
2476: used, the @samp{t} protocol will be used over a TCP connection and the
2477: @samp{i} protocol will be used over any other type of connection
2478: (subject, of course, to what is supported by the remote system; it may
2479: be assumed that all systems support the @samp{g} protocol).
2480:
2481: Note that currently specifying both @samp{seven-bit true} and
2482: @samp{reliable false} will not match any protocol. If this occurs
2483: through a combination of port and dialer specifications, you will have
2484: to use the @code{protocol} command for the system or no protocol will be
2485: selected at all (the only reasonable choice would be @samp{protocol f}).
2486:
2487: A protocol list may also be specified for a port (@pxref{port File}),
2488: but if there is a list for the system the list for the port is ignored.
2489:
2490: @item protocol-parameter @var{character} @var{string} @dots{}
2491: @findex protocol-parameter in sys file
2492:
2493: @var{character} is a single character specifying a protocol. The
2494: remaining strings are a command specific to that protocol which will be
2495: executed if that protocol is used. A typical command is something like
2496: @samp{window 7}. The particular commands are protocol specific.
2497:
2498: The @samp{i} protocol supports the following commands, all of which take
2499: numeric arguments:
2500:
2501: @table @code
2502: @item window
2503: The window size to request the remote system to use. This must be
2504: between 1 and 31 inclusive. The default is 16.
2505: @item packet-size
2506: The packet size to request the remote system to use. This must be
2507: between 1 and 4095 inclusive. The default is 1024.
2508: @item remote-window
2509: If this is between 1 and 31 inclusive, the window size requested by the
2510: remote system is ignored and this is used instead. The default is 0,
2511: which means that the remote system's request is honored.
2512: @item remote-packet-size
2513: If this is between 1 and 4095 inclusive, the packet size requested by
2514: the remote system is ignored and this is used instead. The default is
2515: 0, which means that the remote system's request is honored.
2516: @item sync-timeout
2517: The length of time, in seconds, to wait for a SYNC packet from the remote
2518: system. SYNC packets are exchanged when the protocol is started. The
2519: default is 10.
2520: @item sync-retries
2521: The number of times to retry sending a SYNC packet before giving up.
2522: The default is 6.
2523: @item timeout
2524: The length of time, in seconds, to wait for an incoming packet before
2525: sending a negative acknowledgement. The default is 10.
2526: @item retries
2527: The number of times to retry sending a packet or a negative
2528: acknowledgement before giving up and closing the connection. The
2529: default is 6.
2530: @item errors
2531: The maximum number of errors to permit before closing the connection.
2532: The default is 100.
2533: @item error-decay
2534: The rate at which to ignore errors. Each time this many packets are
2535: received, the error count is decreased by one, so that a long connection
2536: with an occasional error will not exceed the limit set by @code{errors}.
2537: The default is 10.
2538: @end table
2539:
2540: The @samp{g} and @samp{G} protocols support the following commands, all
2541: of which take numeric arguments, except @code{short-packets} which takes
2542: a boolean argument:
2543:
2544: @table @code
2545: @item window
2546: The window size to request the remote system to use. This must be
2547: between 1 and 7 inclusive. The default is 7.
2548: @item packet-size
2549: The packet size to request the remote system to use. This must be a
2550: power of 2 between 32 and 4096 inclusive. The default is 64, which is
2551: the only packet size supported by many older UUCP packages. Some UUCP
2552: packages will even dump core if a larger packet size is requested.
2553: @item startup-retries
2554: The number of times to retry the initialization sequence. The default
2555: is 8.
2556: @item init-retries
2557: The number of times to retry one phase of the initialization sequence
2558: (there are three phases). The default is 4.
2559: @item init-timeout
2560: The timeout in seconds for one phase of the initialization sequence. The
2561: default is 10.
2562: @item retries
2563: The number of times to retry sending either a data packet or a request
2564: for the next packet. The default is 6.
2565: @item timeout
2566: The timeout in seconds when waiting for either a data packet or an
2567: acknowledgement. The default is 10.
2568: @item garbage
2569: The number of unrecognized bytes to permit before dropping the
2570: connection. This must be larger than the packet size. The default is
2571: 10000.
2572: @item errors
2573: The number of errors (malformed packets, out of order packets, bad
2574: checksums, or packets rejected by the remote system) to permit before
2575: dropping the connection. The default is 100.
2576: @item error-decay
2577: The rate at which to ignore errors. Each time this many packets are
2578: received, the error count is decreased by one, so that a long connection
2579: with an occasional error will not exceed the limit set by @code{errors}.
2580: The default is 10.
2581: @item remote-window
2582: If this is between 1 and 7 inclusive, the window size requested by the
2583: remote system is ignored and this is used instead. This can be useful
2584: when dealing with some poor UUCP packages. The default is 0, which
2585: means that the remote system's request is honored.
2586: @item remote-packet-size
2587: If this is between 32 and 4096 inclusive the packet size requested by
2588: the remote system is ignored and this is used instead. There is
2589: probably no good reason to use this. The default is 0, which means that
2590: the remote system's request is honored.
2591: @item short-packets
2592: If this is true, then the code will optimize by sending shorter packets
2593: when there is less data to send. This confuses some UUCP packages, such
2594: as System V Release 4 (when using the @samp{G} protocol) and Waffle;
2595: when connecting to such a package, this parameter must be set to false.
2596: The default is true for the @samp{g} protocol and false for the @samp{G}
2597: protocol.
2598: @end table
2599:
2600: The @samp{a} protocol is a Zmodem like protocol contributed by Doug
2601: Evans. It supports the following commands, all of which take numeric
2602: arguments except for @code{escape-control}, which takes a boolean
2603: argument:
2604:
2605: @table @code
2606: @item timeout
2607: Number of seconds to wait for a packet to arrive. The default is 10.
2608: @item retries
2609: The number of times to retry sending a packet. The default is 10.
2610: @item startup-retries
2611: The number of times to retry sending the initialization packet. The
2612: default is 4.
2613: @item garbage
2614: The number of garbage characters to accept before closing the
2615: connection. The default is 2400.
2616: @item send-window
2617: The number of characters that may be sent before waiting for an
2618: acknowledgement. The default is 1024.
2619: @item escape-control
2620: Whether to escape control characters. If this is true, the protocol may
2621: be used over a connection which does not transmit certain control
2622: characters, such as @code{XON} or @code{XOFF}. The connection must
2623: still transmit eight bit characters other than control characters. The
2624: default is false.
2625: @end table
2626:
2627: The @samp{j} protocol can be used over an eight bit connection that will
2628: not transmit certain control characters. It accepts the same protocol
2629: parameters that the @samp{i} protocol accepts, as well as one more:
2630:
2631: @table @code
2632: @item avoid
2633: A list of characters to avoid. This is a string which is interpreted as
2634: an escape sequence (@pxref{Chat Scripts}). The protocol does not have a
2635: way to avoid printable ASCII characters (byte values from 32 to 126,
2636: inclusive); only ASCII control characters and eight-bit characters may
2637: be avoided. The default value is @samp{\021\023}; these are the
2638: characters @code{XON} and @code{XOFF} which many connections use for
2639: flow control. If the package is configured to use @code{HAVE_BSD_TTY},
2640: then on some versions of Unix you may have to avoid @samp{\377} as well,
2641: due to the way some implementations of the BSD terminal driver handle
2642: signals.
2643: @end table
2644:
2645: The @samp{f} protocol is intended for use with error-correcting modems
2646: only; it checksums each file as a whole, so any error causes the entire
2647: file to be retransmitted. It supports the following commands, both of
2648: which take numeric arguments:
2649:
2650: @table @code
2651: @item timeout
2652: The timeout in seconds before giving up. The default is 120.
2653: @item retries
2654: How many times to retry sending a file. The default is 2.
2655: @end table
2656:
2657: The @samp{t} and @samp{e} protocols are intended for use over TCP or
2658: some other communication path with end to end reliability, as they do no
2659: checking of the data at all. They both support a single command, which
2660: takes a numeric argument:
2661:
2662: @table @code
2663: @item timeout
2664: The timeout in seconds before giving up. The default is 120.
2665: @end table
2666:
2667: The protocol parameters are reset to their default values after each
2668: call.
2669:
2670: @end table
2671:
2672: @node File Transfer Control, Miscellaneous (sys), Protocol Selection, sys File
2673: @subsection File Transfer Control
2674:
2675: @table @code
2676:
2677: @item send-request @var{boolean}
2678: @findex send-request
2679:
2680: The @var{boolean} determines whether the remote system is permitted to
2681: request files from the local system. The default is yes.
2682:
2683: @item receive-request @var{boolean}
2684: @findex receive-request
2685:
2686: The @var{boolean} determines whether the remote system is permitted to
2687: send files to the local system. The default is yes.
2688:
2689: @item request @var{boolean}
2690: @findex request
2691:
2692: A shorthand command, equivalent to specifying both @samp{send-request
2693: @var{boolean}} and @samp{receive-request @var{boolean}}.
2694:
2695: @item call-transfer @var{boolean}
2696: @findex call-transfer
2697:
2698: The @var{boolean} is checked when the local system places the call. It
2699: determines whether the local system may do file transfers queued up for
2700: the remote system. The default is yes.
2701:
2702: @item called-transfer @var{boolean}
2703: @findex called-transfer
2704:
2705: The @var{boolean} is checked when the remote system calls in. It
2706: determines whether the local system may do file transfers queued up for
2707: the remote system. The default is yes.
2708:
2709: @item transfer @var{boolean}
2710: @findex transfer
2711:
2712: Equivalent to specifying both @samp{call-transfer @var{boolean}}
2713: @samp{called-transfer @var{boolean}}.
2714:
2715: @item call-local-size @var{number} @var{string}
2716: @findex call-local-size
2717:
2718: The @var{string} is a time string (@pxref{Time Strings}). The
2719: @var{number} is the size in bytes of the largest file that should be
2720: transferred at a time matching the time string if the local system
2721: placed the call and the request was made by the local system. This
2722: command may appear multiple times in a single alternate. If this
2723: command does not appear, or if none of the time strings match, there are
2724: no size restrictions.
2725:
2726: With all the size control commands, the size of a file from the remote
2727: system (as opposed to a file from the local system) will only be checked
2728: if the other system is running this package; other UUCP packages will
2729: not understand a maximum size request, nor will they inform this package
2730: of the size of remote files.
2731:
2732: @item call-remote-size @var{number} @var{string}
2733: @findex call-remote-size
2734:
2735: Specify the size in bytes of the largest file that should be
2736: transferred at a given time by remote request when the local system
2737: placed the call. This command may appear multiple times in a single
2738: alternate. If this command does not appear, there are no size
2739: restrictions.
2740:
2741: @item called-local-size @var{number} @var{string}
2742: @findex called-local-size
2743:
2744: Specify the size in bytes of the largest file that should be transferred
2745: at a given time by local request when the remote system placed the call.
2746: This command may appear multiple times in a single alternate. If this
2747: command does not appear, there are no size restrictions.
2748:
2749: @item called-remote-size @var{number} @var{string}
2750: @findex called-remote-size
2751:
2752: Specify the size in bytes of the largest file that should be transferred
2753: at a given time by remote request when the remote system placed the
2754: call. This command may appear multiple times in a single alternate. If
2755: this command does not appear, there are no size restrictions.
2756:
2757: @item local-send @var{strings}
2758: @findex local-send
2759:
2760: Specifies that files in the directories named by the @var{strings} may
2761: be sent to the remote system when requested locally (using @code{uucp}
2762: or @code{uux}). The directories in the list should be separated by
2763: whitespace. A @kbd{~} may be used for the public directory. On a Unix
2764: system, this is typically @file{/usr/spool/uucppublic}; the public
2765: directory may be set with the @code{pubdir} command. Here is an example
2766: of @code{local-send}:
2767:
2768: @example
2769: local-send ~ /usr/spool/ftp/pub
2770: @end example
2771:
2772: Listing a directory allows all files within the directory and all
2773: subdirectories to be sent. Directories may be excluded by preceding
2774: them with an exclamation point. For example:
2775:
2776: @example
2777: local-send /usr/ftp !/usr/ftp/private ~
2778: @end example
2779:
2780: @noindent
2781: means that all files in @file{/usr/ftp} or the public directory may be
2782: sent, except those files in @file{/usr/ftp/private}. The list of
2783: directories is read from left to right, and the last directory to apply
2784: takes effect; this means that directories should be listed from top
2785: down. The default is the root directory (i.e., any file at all may be
2786: sent by local request).
2787:
2788: @item remote-send @var{strings}
2789: @findex remote-send
2790:
2791: Specifies that files in the named directories may be sent to the remote
2792: system when requested by the remote system. The default is @kbd{~}.
2793:
2794: @item local-receive @var{strings}
2795: @findex local-receive
2796:
2797: Specifies that files may be received into the named directories when
2798: requested by a local user. The default is @kbd{~}.
2799:
2800: @item remote-receive @var{strings}
2801: @findex remote-receive
2802:
2803: Specifies that files may be received into the named directories when
2804: requested by the remote system. The default is @kbd{~}. On Unix, the
2805: remote system may only request that files be received into directories
2806: that are writeable by the world, regardless of how this is set.
2807:
2808: @item forward-to @var{strings}
2809: @findex forward-to
2810:
2811: Specifies a list of systems to which files may be forwarded. The remote
2812: system may forward files through the local system on to any of the
2813: systems in this list. The string @samp{ANY} may be used to permit
2814: forwarding to any system. The default is to not permit forwarding to
2815: other systems. Note that if the remote system is permitted to execute
2816: the @code{uucp} command, it effectively has the ability to forward to
2817: any system.
2818:
2819: @item forward-from @var{strings}
2820: @findex forward-from
2821:
2822: Specifies a list of systems from which files may be forwarded. The
2823: remote system may request files via the local system from any of the
2824: systems in this list. The string @samp{ANY} may be used to permit
2825: forwarding to any system. The default is to not permit forwarding from
2826: other systems. Note that if a remote system is permitted to execute the
2827: @code{uucp} command, it effectively has the ability to request files
2828: from any system.
2829:
2830: @item forward @var{strings}
2831: @findex forward
2832:
2833: Equivalent to specifying both @samp{forward-to @var{strings}} and
2834: @samp{forward-from @var{strings}}. This would normally be used rather
2835: than either of the more specific commands.
2836:
2837: @end table
2838:
2839: @node Miscellaneous (sys), Default sys File Values, File Transfer Control, sys File
2840: @subsection Miscellaneous sys File Commands
2841:
2842: @table @code
2843:
2844: @item sequence @var{boolean}
2845: @findex sequence
2846:
2847: If @var{boolean} is true, then conversation sequencing is automatically
2848: used for the remote system, so that if somebody manages to spoof as the
2849: remote system, it will be detected the next time the remote system
2850: actually calls. This is false by default.
2851:
2852: @item command-path @var{string}
2853: @findex command-path
2854:
2855: Specifies the path (a list of whitespace separated directories) to be
2856: searched to locate commands to execute. This is only used for commands
2857: requested by @code{uux}, not for chat programs. The default is from
2858: @file{policy.h}.
2859:
2860: @item commands @var{strings}
2861: @findex commands
2862:
2863: The list of commands which the remote system is permitted to execute
2864: locally. For example: @samp{commands rnews rmail}. If the value is
2865: @samp{ALL} (case significant), all commands may be executed. The
2866: default is @samp{rnews rmail}.
2867:
2868: @item free-space @var{number}
2869: @findex free-space
2870:
2871: Specify the minimum amount of file system space (in bytes) to leave free
2872: after receiving a file. If the incoming file will not fit, it will be
2873: rejected. This initial rejection will only work when talking to another
2874: instance of this package, since older UUCP packages do not provide the
2875: file size of incoming files. Also, while a file is being received,
2876: @code{uucico} will periodically check the amount of free space. If it
2877: drops below the amount given by the @code{free-space} command, the file
2878: transfer will be aborted. The default amount of space to leave free is
2879: from @file{policy.h}. This file space checking may not work on all
2880: systems.
2881:
2882: @item pubdir @var{string}
2883: @findex pubdir in sys file
2884:
2885: Specifies the public directory that is used when @kbd{~} is specifed in
2886: a file transfer or a list of directories. This essentially overrides
2887: the public directory specified in the main configuration file for this
2888: system only. The default is the public directory specified in the main
2889: configuration file (which defaults to a value from @file{policy.h}).
2890:
2891: @item debug @var{string} @dots{}
2892: @findex debug in sys file
2893:
2894: Set additional debugging for calls to or from the system. This may be
2895: used to debug a connection with a specific system. It is particularly
2896: useful when debugging incoming calls, since debugging information will
2897: be generated whenever the call comes in. See the @code{debug} command
2898: in the main configuration file (@pxref{Debugging Levels}) for more
2899: details. The debugging information specified here is in addition to
2900: that specified in the main configuration file or on the command line.
2901:
2902: @item max-remote-debug @var{string} @dots{}
2903: @findex max-remote-debug
2904:
2905: When the system calls in, it may request that the debugging level be set
2906: to a certain value. This command may be used to put a limit on the
2907: debugging level which the system may request, to avoid filling up the
2908: disk with debugging information. Only the debugging types named in the
2909: @code{max-remote-debug} command may be turned on by the remote system.
2910: To prohibit any debugging, use @samp{max-remote-debug none}. The
2911: default is @samp{abnormal,chat,handshake}; to turn off these default
2912: entries, you must use @samp{max-remote-debug none} followed by other
2913: @code{max-remote-debug} commands specifying the settings you want.
2914:
2915: @end table
2916:
2917: @node Default sys File Values, , Miscellaneous (sys), sys File
2918: @subsection Default sys File Values
2919:
2920: The following are used as default values for all systems; they can be
2921: considered as appearing before the start of the file.
2922:
2923: @example
2924: time Never
2925: chat "" \r\c ogin:-BREAK-ogin:-BREAK-ogin: \L word: \P
2926: chat-timeout 10
2927: callback n
2928: sequence n
2929: request y
2930: transfer y
2931: local-send /
2932: remote-send ~
2933: local-receive ~
2934: remove-receive ~
2935: command-path [ from @file{policy.h} ]
2936: commands rnews rmail
2937: max-remote-debug abnormal,chat,handshake
2938: @end example
2939:
2940: @node port File, dial File, sys File, Configuration Files
2941: @section The Port Configuration File
2942: @cindex port file
2943: @cindex port configuration file
2944: @cindex configuration file (port)
2945:
2946: The port files may be used to name and describe ports. Any commands in
2947: the file before the first @code{port} command specify defaults for all
2948: ports in the file. All commands after a @code{port} command up to the
2949: next @code{port} command then describe that port. There are different
2950: types of ports; each type supports its own set of commands. Each
2951: command indicates which types of ports support it. There may be many
2952: ports with the same name; if a system requests a port by name then each
2953: port with that name will be tried until an unlocked one is found.
2954:
2955: @table @code
2956:
2957: @item port @var{string}
2958: @findex port in port file
2959:
2960: Introduces and names a port.
2961:
2962: @item type @var{string}
2963: @findex type
2964:
2965: Define the type of port. The default is @samp{modem}. If this command
2966: appears, it must immediately follow the @code{port} command. The type defines
2967: what commands are subsequently allowed. Currently the types are:
2968:
2969: @table @samp
2970: @item modem
2971: For a modem hookup.
2972: @item stdin
2973: For a connection through standard input and standard output, as when
2974: @code{uucico} is run as a login shell.
2975: @item direct
2976: For a direct connection to another system.
2977: @item tcp
2978: For a connection using TCP.
2979: @item tli
2980: For a connection using TLI.
2981: @end table
2982:
2983: @item protocol @var{string}
2984: @findex protocol in port file
2985:
2986: Specify a list of protocols to use for this port. This is just like the
2987: corresponding command for a system (@pxref{Protocol Selection}). A
2988: protocol list for a system takes precedence over a list for a port.
2989:
2990: @item protocol-parameter @var{character} @var{strings} [ any type ]
2991: @findex protocol-parameter in port file
2992:
2993: The same command as the @code{protocol-parameter} command used for
2994: systems (@pxref{Protocol Selection}). This one takes precedence.
2995:
2996: @item seven-bit @var{boolean} [ any type ]
2997: @findex seven-bit in port file
2998:
2999: This is only used during protocol negotiation; if the argument is true,
3000: it forces the selection of a protocol which works across a seven-bit
3001: link. It does not prevent eight bit characters from being transmitted.
3002: The default is false.
3003:
3004: @item reliable @var{boolean} [ any type ]
3005: @findex reliable in port file
3006:
3007: This is only used during protocol negotiation; if the argument is
3008: false, it forces the selection of a protocol which works across
3009: an unreliable communication link. The default is true. It would
3010: be more common to specify this for a dialer rather than a port.
3011:
3012: @item half-duplex @var{boolean} [ any type ]
3013: @findex half-duplex in port file
3014:
3015: If the argument is true, it means that the port only supports
3016: half-duplex connections. This only affects bidirectional protocols, and
3017: causes them to not do bidirectional transfers.
3018:
3019: @item device @var{string} [ modem, direct and tli only ]
3020: @findex device
3021:
3022: Names the device associated with this port. If the device is not named,
3023: the port name is taken as the device. Device names are system
3024: dependent. On Unix, a modem or direct connection might be something
3025: like @file{/dev/ttyd0}; a TLI port might be @file{/dev/inet/tcp}.
3026:
3027: @item baud @var{number} [ modem and direct only ]
3028: @findex baud in port file
3029: @itemx speed @var{number} [modem and direct only ]
3030: @findex speed in port file
3031:
3032: The speed this port runs at. If a system specifies a speed but no port
3033: name, then all ports which match the speed will be tried in order. If
3034: the speed is not specified here and is not specified by the system, the
3035: natural speed of the port will be used by default.
3036:
3037: @item baud-range @var{number} @var{number} [ modem only ]
3038: @findex baud-range
3039: @itemx speed-range @var{number} @var{number} [ modem only ]
3040: @findex speed-range
3041:
3042: Specify a range of speeds this port can run at. The first number is the
3043: minimum speed, the second number is the maximum speed. These numbers
3044: will be used when matching a system which specifies a desired speed.
3045: The simple @code{speed} (or @code{baud}) command is still used to
3046: determine the speed to run at if the system does not specify a speed.
3047: For example, the command @samp{speed-range 300 19200} means that the
3048: port will match any system which uses a speed from 300 to 19200 baud
3049: (and will use the speed specified by the system); this could be combined
3050: with @samp{speed 2400}, which means that when this port is used with a
3051: system that does not specify a speed, the port will be used at 2400
3052: baud.
3053:
3054: @item carrier @var{boolean} [ modem only ]
3055: @findex carrier in port file
3056:
3057: The argument indicates whether the port supports carrier. If it does
3058: not, carrier will never be required on this port, regardless of what the
3059: modem chat script indicates. The default is true.
3060:
3061: @item dial-device @var{string} [ modem only ]
3062: @findex dial-device
3063:
3064: Dialing instructions should be output to the named device, rather than
3065: to the normal port device. The default is to output to the normal port
3066: device.
3067:
3068: @item dialer @var{string} [ modem only ]
3069: @findex dialer in port file
3070:
3071: Name a dialer to use. The information is looked up in the dialer file.
3072: There is no default. Some sort of dialer information must be specified
3073: to call out on a modem.
3074:
3075: @item dialer @var{string} @dots{} [ modem only ]
3076:
3077: Execute a dialer command. If a dialer is named (by using the first form
3078: of this command, described just above), these commands are ignored.
3079: They may be used to specify dialer information directly in simple
3080: situations without needing to go to a separate file. There is no
3081: default. Some sort of dialer information must be specified to call out
3082: on a modem.
3083:
3084: @item dialer-sequence @var{strings} [ modem or tli only ]
3085: @findex dialer-sequence
3086:
3087: Name a sequence of dialers and tokens (phone numbers) to use. The first
3088: argument names a dialer, and the second argument names a token. The
3089: third argument names another dialer, and so on. If there are an odd
3090: number of arguments, the phone number specified with a @code{phone}
3091: command in the system file is used as the final token. The token is
3092: what is used for @kbd{\D} or @kbd{\T} in the dialer chat script. If the
3093: token in this string is @kbd{\D}, the system phone number will be used;
3094: if it is @kbd{\T}, the system phone number will be used after undergoing
3095: dialcodes translation. A missing final token is taken as @kbd{\D}.
3096:
3097: This command currently does not work if @code{dial-device} is specified;
3098: to handle this correctly will require a more systematic notion of chat
3099: scripts. Moreover, only the @code{complete} and @code{abort} chat
3100: scripts from the first dialer specified are used, and only the protocol
3101: parameters from the first dialer are used.
3102:
3103: This command basically lets you specify a sequence of chat scripts to
3104: use. For example, the first dialer might get you to a local network and
3105: the second dialer might describe how to select a machine from the local
3106: network. This lets you break your dialing sequence into simple modules,
3107: and may make it easier to share dialer entries between machines.
3108:
3109: When this command is used with a TLI port, then if the first dialer is
3110: @samp{TLI} or @samp{TLIS} the first token is used as the address to
3111: connect to. If the first dialer is something else, or if there is no
3112: token, the address given by the @code{address} command is used
3113: (@pxref{Placing the Call}). Escape sequences in the address are
3114: expanded as they are for chat script expect strings (@pxref{Chat
3115: Scripts}). The different between @samp{TLI} and @samp{TLIS} is that the
3116: latter implies the command @samp{stream true}. These contortions are
3117: all for HDB compatibility. Any subsequent dialers are treated as they
3118: are for a modem.
3119:
3120: @item lockname @var{string} [ modem and direct only ]
3121: @findex lockname
3122:
3123: Give the name to use when locking this port. On Unix, this is the name
3124: of the file that will be created in the lock directory. It is used as
3125: is, so on Unix it should generally start with @samp{LCK..}. For
3126: example, if a single port were named both @file{/dev/ttycu0} and
3127: @file{/dev/tty0} (perhaps with different characteristics keyed on the
3128: minor device number), then the command @code{lockname LCK..ttycu0} could
3129: be used to force the latter to use the same lock file name as the
3130: former.
3131:
3132: @item service @var{string} [ tcp only ]
3133: @findex service
3134:
3135: Name the TCP port number to use. This may be a number. If not, it will
3136: be looked up in @file{/etc/services}. If this is not specified, the
3137: string @samp{uucp} is looked up in @file{/etc/services}. If it is not
3138: found, port number 540 (the standard UUCP-over-TCP port number) will be
3139: used.
3140:
3141: @item push @var{strings} [ tli only ]
3142: @findex push
3143:
3144: Give a list of modules to push on to the TLI stream.
3145:
3146: @item stream @var{boolean} [ tli only ]
3147: @findex stream
3148:
3149: If this is true, and the @code{push} command was not used, the
3150: @samp{tirdwr} module is pushed on to the TLI stream.
3151:
3152: @item server-address @var{string} [ tli only ]
3153:
3154: Give the address to use when running as a TLI server. Escape sequences
3155: in the address are expanded as they are for chat script expect strings
3156: (@pxref{Chat Scripts}).
3157:
3158: @end table
3159:
3160: @node dial File, Security, port File, Configuration Files
3161: @section The Dialer Configuration File
3162: @cindex dial file
3163: @cindex dialer configuration file
3164: @cindex configuration file (dial)
3165:
3166: The dialer configuration files define dialers. Any commands in the file
3167: before the first @code{dialer} command specify defaults for all the
3168: dialers in the file. All commands after a @code{dialer} command up to
3169: the next @code{dialer} command are associated with the named dialer.
3170:
3171: @table @code
3172:
3173: @item dialer @var{string}
3174: @findex dialer in dial file
3175:
3176: Introduces and names a dialer.
3177:
3178: @item chat @var{strings}
3179: @findex chat in dial file
3180: @item chat-timeout @var{number}
3181: @findex chat-timeout in dial file
3182: @item chat-fail @var{string}
3183: @findex chat-fail in dial file
3184: @item chat-seven-bit @var{boolean}
3185: @findex chat-seven-bit in dial file
3186: @item chat-program @var{strings}
3187: @findex chat-program in dial file
3188:
3189: Specify a chat script to be used to dial the phone. See @ref{Chat
3190: Scripts} for full details on chat scripts.
3191:
3192: Taylor UUCP will sleep for one second between attempts to dial out on a
3193: modem. If your modem requires a longer wait period, you must start your
3194: chat script with delays (@samp{\d} in a send string).
3195:
3196: The chat script will be read from and sent to the port specified by the
3197: @code{dial-device} command for the port, if there is one.
3198:
3199: The following escape addition escape sequences may appear in send
3200: strings:
3201:
3202: @table @kbd
3203: @item \D
3204: send phone number without dialcode translation
3205: @item \T
3206: send phone number with dialcode translation
3207: @item \M
3208: do not require carrier
3209: @item \m
3210: require carrier (fail if not present)
3211: @end table
3212:
3213: See the description of the dialcodes file (@pxref{Configuration File
3214: Names}) for a description of dialcode translation. If the port does not
3215: support carrier (as set by the @code{carrier} command in the port file)
3216: @kbd{\M} and @kbd{\m} are ignored. If both the port and the dialer
3217: support carrier (as set by the @code{carrier} command in the port file
3218: and the @code{carrier} command in the dialer file), then every chat
3219: script implicitly begins with @kbd{\M} and ends with @kbd{\m}. There is
3220: no default chat script for dialers.
3221:
3222: The following additional escape sequences may be used in
3223: @code{chat-program}:
3224:
3225: @table @kbd
3226: @item \D
3227: phone number without dialcode translation
3228: @item \T
3229: phone number with dialcode translation
3230: @end table
3231:
3232: If the program changes the port in any way (e.g., sets parity) the
3233: changes will be preserved during protocol negotiation, but once the
3234: protocol is selected it will change the port settings.
3235:
3236: @item dialtone @var{string}
3237: @findex dialtone
3238:
3239: A string to output when dialing the phone number which causes the modem
3240: to wait for a secondary dial tone. This is used to translate the
3241: @kbd{=} character in a phone number. The default is a comma.
3242:
3243: @item pause @var{string}
3244: @findex pause
3245:
3246: A string to output when dialing the phone number which causes the modem
3247: to wait for 1 second. This is used to translate the @kbd{-} character
3248: in a phone number. The default is a comma.
3249:
3250: @item carrier @var{boolean}
3251: @findex carrier in dial file
3252:
3253: If the argument is true, the dialer supports the modem carrier signal.
3254: After the phone number is dialed, @code{uucico} will require that
3255: carrier be on. One some systems, it will be able to wait for it. If
3256: the argument is false, carrier will not be required. The default is
3257: true.
3258:
3259: @item carrier-wait @var{number}
3260: @findex carrier-wait
3261:
3262: If the port is supposed to wait for carrier, this may be used to
3263: indicate how many seconds to wait. The default is 60 seconds. Only
3264: some systems support waiting for carrier.
3265:
3266: @item dtr-toggle @var{boolean} @var{boolean}
3267: @findex dtr-toggle
3268:
3269: If the first argument is true, then DTR is toggled before using
3270: the modem. This is only supported on some systems and some ports. The
3271: second @var{boolean} need not be present; if it is, and it is
3272: true, the program will sleep for 1 second after toggling DTR.
3273: The default is not to toggle DTR.
3274:
3275: @item complete-chat @var{strings}
3276: @findex complete-chat
3277: @item complete-chat-timeout @var{number}
3278: @findex complete-chat-timeout
3279: @item complete-chat-fail @var{string}
3280: @findex complete-chat-fail
3281: @item complete-chat-seven-bit @var{boolean}
3282: @findex complete-chat-seven-bit
3283: @item complete-chat-program @var{strings}
3284: @findex complete-chat-program
3285:
3286: These commands define a chat script (@pxref{Chat Scripts}) which is run
3287: when a call is finished normally. This allows the modem to be reset.
3288: There is no default. No additional escape sequences may be used.
3289:
3290: @item complete @var{string}
3291: @findex complete
3292:
3293: This is a simple use of @code{complete-chat}. It is equivalent to
3294: @code{complete-chat "" @var{string}}; this has the effect of sending
3295: @var{string} to the modem when a call finishes normally.
3296:
3297: @item abort-chat @var{strings}
3298: @findex abort-chat
3299: @item abort-chat-timeout @var{number}
3300: @findex abort-chat-timeout
3301: @item abort-chat-fail @var{string}
3302: @findex abort-chat-fail
3303: @item abort-chat-seven-bit @var{boolean}
3304: @findex abort-chat-seven-bit
3305: @item abort-chat-program @var{strings}
3306: @findex abort-chat-program
3307:
3308: These commands define a chat script (@pxref{Chat Scripts}) to be run
3309: when a call is aborted. They may be used to interrupt and reset the
3310: modem. There is no default. No additional escape sequences may be
3311: used.
3312:
3313: @item abort @var{string}
3314: @findex abort
3315:
3316: This is a simple use of @code{abort-chat}. It is equivalent to
3317: @code{abort-chat "" @var{string}}; this has the effect of sending
3318: @var{string} to the modem when a call is aborted.
3319:
3320: @item protocol-parameter @var{character} @var{strings}
3321: @findex protocol-parameter in dial file
3322:
3323: Set protocol parameters, just like the @code{protocol-parameter} command
3324: in the system configuration file or the port configuration file; see
3325: @ref{Protocol Selection}. These parameters take precedence, then those
3326: for the port, then those for the system.
3327:
3328: @item seven-bit @var{boolean}
3329: @findex seven-bit in dial file
3330:
3331: This is only used during protocol negotiation; if it is true, it
3332: forces selection of a protocol which works across a seven-bit link. It
3333: does not prevent eight bit characters from being transmitted. The
3334: default is false. It would be more common to specify this for a
3335: port than for a dialer.
3336:
3337: @item reliable @var{boolean}
3338: @findex reliable in dial file
3339:
3340: This is only used during protocol negotiation; if it is false, it
3341: forces selection of a protocol which works across an unreliable
3342: communication link. The default is true.
3343:
3344: @item half-duplex @var{boolean} [ any type ]
3345: @findex half-duplex in dial file
3346:
3347: If the argument is true, it means that the dialer only supports
3348: half-duplex connections. This only affects bidirectional protocols, and
3349: causes them to not do bidirectional transfers.
3350:
3351: @end table
3352:
3353: @node Security, , dial File, Configuration Files
3354: @section Security
3355:
3356: This discussion of UUCP security applies only to Unix. It is a bit
3357: cursory; suggestions for improvement are solicited.
3358:
3359: UUCP is traditionally not very secure. Taylor UUCP addresses some
3360: security issues, but is still far from being a secure system.
3361:
3362: If security is very important to you, then you should not permit any
3363: external access to your computer, including UUCP. Any opening to the
3364: outside world is a potential security risk.
3365:
3366: By default Taylor UUCP provides few mechanisms to secure local users of
3367: the system from each other. You can allow increased security by putting
3368: the owner of the UUCP programs (normally @code{uucp}) into a separate
3369: group; the use of this is explained in the following paragraphs, which
3370: refer to this separate group as @code{uucp-group}.
3371:
3372: When the @code{uucp} program is invoked to copy a file to a remote
3373: system, it will by default copy the file into the UUCP spool directory.
3374: When the @code{uux} program is used, the @samp{-C} switch must be used
3375: to copy the file into the UUCP spool directory. In any case, once the
3376: file has been copied into the spool directory, other local users will
3377: not be able to access it.
3378:
3379: When a file is requested from a remote system, UUCP will only permit it
3380: to be placed in a directory which is writable by the requesting user.
3381: The directory must also be writable by UUCP. A local user can create a
3382: directory with a group of @code{uucp-group} and set the mode to permit
3383: group write access. This will allow the file be requested without
3384: permitting it to be viewed by any other user.
3385:
3386: There is no provision for security for @code{uucp} requests (as opposed
3387: to @code{uux} requests) made by a user on a remote system. A file sent
3388: over by a remote request may only be placed in a directory which is
3389: world writable, and the file will be world readable and writable. This
3390: will permit any local user to destroy or replace the contents of the
3391: file. A file requested by a remote system must be world readable, and
3392: the directory it is in must be world readable. Any local user will be
3393: able to examine, although not necessarily modify, the file before it is
3394: sent.
3395:
3396: There are some security holes and race conditions that apply to the
3397: above discussion which I will not elaborate on. They are not hidden
3398: from anybody who reads the source code, but they are somewhat technical
3399: and difficult (though scarcely impossible) to exploit. Suffice it to
3400: say that even under the best of conditions UUCP is not completely
3401: secure.
3402:
3403: For many sites, security from remote sites is a more important
3404: consideration. Fortunately, Taylor UUCP does provide some support in
3405: this area.
3406:
3407: The greatest security is provided by always dialing out to the other
3408: site. This prevents anybody from pretending to be the other site. Of
3409: course, only one side of the connection can do this.
3410:
3411: If remote dialins must be permitted, then it is best if the dialin line
3412: is used only for UUCP. If this is the case, then you should create a
3413: call-in password file (@pxref{Configuration File Names}) and let
3414: @code{uucico} do its own login prompting. For example, to let remote
3415: sites log in on a port named @samp{entry} in the port file (@pxref{port
3416: File}) you might invoke @samp{uucico -p entry}. This would cause
3417: @code{uucico} to enter an endless loop of login prompts and daemon
3418: executions. The advantage of this approach is that even if remote users
3419: break into the system by guessing or learning the password, they will
3420: only be able to do whatever @code{uucico} permits them to do. They will
3421: not be able to start a shell on your system.
3422:
3423: If remote users can dial in and log on to your system, then you have a
3424: security hazard more serious than that posed by UUCP. But then, you
3425: probably knew that already.
3426:
3427: Once your system has connected with the remote UUCP, there is a fair
3428: amount of control you can exercise. You can use the @code{remote-send}
3429: and @code{remote-receive} commands to control the directories the remote
3430: UUCP can access. You can use the @code{request} command to prevent the
3431: remote UUCP from making any requests of your system at all; however, if
3432: you do this it will not even be able to send you mail or news. If you
3433: do permit remote requests, you should be careful to restrict what
3434: commands may be executed at the remote system's request. The default is
3435: @code{rmail} and @code{rnews}, which will suffice for most systems.
3436:
3437: If different remote systems call in and they must be granted different
3438: privileges (perhaps some systems are within the same organization and
3439: some are not) then the @code{called-login} command should be used for
3440: each system to require that they different login names. Otherwise it
3441: would be simple for a remote system to use the @code{myname} command and
3442: pretend to be a different system. The @code{sequence} command can be
3443: used to detect when one system pretended to be another, but since the
3444: sequence numbers must be reset manually after a failed handshake this
3445: can sometimes be more trouble than it's worth.
3446:
3447: @node Protocols, Hacking, Configuration Files, Top
3448: @chapter UUCP protocol internals
3449:
3450: This chapter describes how the various UUCP protocols work, and
3451: discusses some other internal UUCP issues.
3452:
3453: This chapter is quite technical. You do not need to understand it, or
3454: even read it, in order to use Taylor UUCP. It is intended for people
3455: who are interested in how UUCP code works.
3456:
3457: This chapter is also, unfortunately, somewhat out of date, although I
3458: believe that is incomplete rather than inaccurate. I post this
3459: information to the newsgroups @samp{comp.mail.uucp} and
3460: @samp{news.answers} each month; if you want to write code based on this
3461: information, please get the most recent copy.
3462:
3463: Most of the discussion covers the protocols used by all UUCP packages,
3464: not just Taylor UUCP. Any information specific to Taylor UUCP is
3465: indicated as such. There are some pointers to the actual functions in
3466: the Taylor UUCP source code, for those who are extremely interested in
3467: actual UUCP implementation.
3468:
3469: @menu
3470: * Grades:: UUCP grades
3471: * Lock Files:: UUCP lock file format
3472: * UUCP Protocol:: The common UUCP protocol
3473: * g Protocol:: The UUCP @samp{g} protocol
3474: * f Protocol:: The UUCP @samp{f} protocol
3475: * t Protocol:: The UUCP @samp{t} protocol
3476: * e Protocol:: The UUCP @samp{e} protocol
3477: * x Protocol:: The UUCP @samp{x} protocol
3478: * d Protocol:: The UUCP @samp{d} protocol
3479: * Capital G Protocol:: The UUCP @samp{G} protocol
3480: * Documentation References:: Documentation references
3481: @end menu
3482:
3483: @node Grades, Lock Files, Protocols, Protocols
3484: @section UUCP Grades
3485: @cindex grades
3486:
3487: Modern UUCP packages support grades for each command. The grades
3488: generally range from @samp{A} (the highest) to @samp{Z} followed by
3489: @samp{a} to @samp{z}. Taylor UUCP also supports @samp{0} to @samp{9}
3490: before @samp{A}. Some UUCP packages may permit any ASCII character as a
3491: grade.
3492:
3493: On Unix, these grades are encoded in the name of the command file. A
3494: command file name generally has the form
3495:
3496: @example
3497: C.nnnngssss
3498: @end example
3499:
3500: @noindent
3501: where @var{nnnn} is the remote system name for which the command is
3502: queued, @var{g} is a single character grade, and @var{ssss} is a four
3503: character sequence number. For example, a command file created for the
3504: system @file{airs} at grade @samp{Z} might be named
3505:
3506: @example
3507: C.airsZ2551
3508: @end example
3509:
3510: The remote system name will be truncated to seven characters, to ensure
3511: that the command file name will fit in the 14 character file name limit
3512: of the traditional Unix file system. UUCP packages which have no other
3513: means of distinguishing which command files are intended for which
3514: systems thus require all @emph{systems they connect to} to have names
3515: that are unique in the first seven characters. Some UUCP packages use a
3516: variant of this format which truncates the system name to six
3517: characters. HDB uses a different spool directory format, which allows
3518: up to fourteen characters to be used for each system name. The Taylor
3519: UUCP spool directory format is configurable. The new Taylor spool
3520: directory format permits system names to be as long as file names; the
3521: maximum length of a file name depends on the particular Unix file system
3522: being used.
3523:
3524: The sequence number in the command file name may be a decimal integer,
3525: or it may be a hexadecimal integer, or it may contain any alphanumeric
3526: character. Different UUCP packages are different.
3527:
3528: Taylor UUCP creates command files in the function
3529: @code{zsysdep_spool_commands}. The file name is constructed by the
3530: function @code{zsfile_name}, which knows about all the different types
3531: of spool directories supported by Taylor UUCP. The Taylor UUCP sequence
3532: number can contain any alphanumeric character; the next sequence number
3533: is determined by the function @code{fscmd_seq}.
3534:
3535: I do not know how command grades are handled in non-Unix UUCP
3536: packages.
3537:
3538: Modern UUCP packages allow you to restrict file transfer by grade
3539: depending on the time of day. Typically this is done with a line in
3540: the @file{Systems} (or @file{L.sys}) file like this:
3541:
3542: @example
3543: airs Any/Z,Any2305-0855 ...
3544: @end example
3545:
3546: This allows only grades @samp{Z} and above to be transferred at any
3547: time. Lower grades may only be transferred at night. I believe that
3548: this grade restriction applies to local commands as well as to remote
3549: commands, but I am not sure. It may only apply if the UUCP package
3550: places the call, not if it is called by the remote system. Taylor UUCP
3551: can use the @code{timegrade} and @code{call-timegrade} commands
3552: (@pxref{When to Call}) to achieve the same effect (and supports the
3553: above format when reading @file{Systems} or @file{L.sys}).
3554:
3555: This sort of grade restriction is most useful if you know what grades
3556: are being used at the remote site. The default grades used depend on
3557: the UUCP package. Generally @code{uucp} and @code{uux} have different
3558: defaults. A particular grade can be specified with the @samp{-g} option
3559: to @code{uucp} or @code{uux}. For example, to request execution of
3560: rnews on airs with grade @samp{d}, you might use something like
3561:
3562: @example
3563: uux -gd - airs!rnews <article
3564: @end example
3565:
3566: @samp{uunet} queues up mail at grade @samp{Z} and news at grade
3567: @samp{d}. The example above would allow mail to be received at any
3568: time, but would only permit news to be transferred at night.
3569:
3570: @node Lock Files, UUCP Protocol, Grades, Protocols
3571: @section UUCP Lock File Format
3572: @cindex lock files
3573:
3574: This discussion applies only to Unix. I have no idea how UUCP locks
3575: ports on other systems.
3576:
3577: UUCP creates files to lock serial ports and systems. On most (if not
3578: all) systems, these same lock files are also used by cu to coordinate
3579: access to serial ports. On some systems getty also uses these lock
3580: files.
3581:
3582: The lock file normally contains the process ID of the locking process.
3583: This makes it easy to determine whether a lock is still valid. The
3584: algorithm is to create a temporary file and then link it to the name
3585: that must be locked. If the link fails because a file with that name
3586: already exists, the existing file is read to get the process ID. If the
3587: process still exists, the lock attempt fails. Otherwise the lock file
3588: is deleted and the locking algorithm is retried.
3589:
3590: Older UUCP packages put the lock files in the main UUCP spool
3591: directory, /usr/spool/uucp. HDB UUCP generally puts the lock files in
3592: a directory of their own, usually /usr/spool/locks or /etc/locks.
3593:
3594: The original UUCP lock file format encoded the process ID as a four byte
3595: binary number. The order of the bytes was host-dependent. HDB UUCP
3596: stores the process ID as a ten byte ASCII decimal number, with a
3597: trailing newline. For example, if process 1570 holds a lock file, it
3598: would contain the eleven characters space, space, space, space, space,
3599: space, one, five, seven, zero, newline. Some versions of UUCP add a
3600: second line indicating which program created the lock (uucp, cu, or
3601: getty). I have also seen a third type of UUCP lock file which did not
3602: contain the process ID at all.
3603:
3604: The name of the lock file is generally "LCK.." followed by the base name
3605: of the device. For example, to lock /dev/ttyd0 the file LCK..ttyd0
3606: would be created. There are various exceptions. On SCO Unix, the lock
3607: file name is always forced to lower case even if the device name has
3608: upper case letters. System V Release 4 UUCP forms the lock file name
3609: using the major and minor device numbers rather than the device name
3610: (this is pretty sensible if you think about it).
3611:
3612: Taylor UUCP can be configured to use various different types of locking.
3613: The actual locking code is in the function @code{fsdo_lock}.
3614:
3615: @node UUCP Protocol, g Protocol, Lock Files, Protocols
3616: @section The Common UUCP Protocol
3617: @cindex UUCP protocol
3618: @cindex handshake
3619: @cindex protocol (UUCP)
3620:
3621: The UUCP protocol is a conversation between two UUCP packages. A UUCP
3622: conversation consists of three parts: an initial handshake, a series
3623: of file transfer requests, and a final handshake.
3624:
3625: Before the initial handshake, the caller will usually have logged in the
3626: called machine and somehow started the UUCP package there. On Unix this
3627: is normally done by setting the shell of the login name used to
3628: @file{uucico}.
3629:
3630: @menu
3631: * Initial Handshake:: Initial handshake
3632: * File Requests:: File requests
3633: * Final Handshake:: Final handshake
3634: @end menu
3635:
3636: @node Initial Handshake, File Requests, UUCP Protocol, UUCP Protocol
3637: @subsection Initial Handshake
3638:
3639: All messages in the initial handshake begin with a @samp{^P} (a byte
3640: with the octal value \020) and end with a null byte (\000).
3641:
3642: Taylor UUCP implements the initial handshake for the calling machine in
3643: @code{fdo_call}, and for the called machine in @code{faccept_call}.
3644:
3645: The initial handshake goes as follows. It is begun by the called
3646: machine.
3647:
3648: @table @asis
3649:
3650: @item called: @samp{\020Shere=@var{hostname}\000}
3651: The @var{hostname} is the UUCP name of the called machine. Older UUCP
3652: packages do not output it, and simply send @samp{\020Shere\000}.
3653:
3654: @item caller: @samp{\020S@var{hostname} @var{options}\000}
3655: The @var{hostname} is the UUCP name of the calling machine. The
3656: following @var{options} may appear (or there may be none):
3657:
3658: @table @samp
3659:
3660: @item -Q@var{seq}
3661: Report sequence number for this conversation. The sequence number is
3662: stored at both sites, and incremented after each call. If there is a
3663: sequence number mismatch, something has gone wrong (somebody may have
3664: broken security by pretending to be one of the machines) and the call is
3665: denied. If the sequence number changes on one of the machines, perhaps
3666: because of an attempted breakin or because a disk backup was restored,
3667: the sequence numbers on the two machines must be reconciled manually.
3668:
3669: @item -x@var{level}
3670: Requests the called system to set its debugging level to the specified
3671: value. This is not supported by all systems. Taylor UUCP currently
3672: never generates this switch. When it sees it, it restricts the value
3673: according to @code{max-remote-debug} (@pxref{Miscellaneous (sys)}).
3674:
3675: @item -p@var{grade}
3676: @itemx -vgrade=@var{grade}
3677: Requests the called system to only transfer files of the specified grade
3678: or higher. This is not supported by all systems. Some systems support
3679: @samp{-p}, some support @samp{-vgrade=}. Taylor UUCP supports both.
3680:
3681: @item -R
3682: Indicates that the calling UUCP understands how to restart failed file
3683: transmissions. Supported only by System V Release 4 UUCP.
3684:
3685: @item -U@var{limit}
3686: Reports the @code{ulimit} value of the calling UUCP. The limit is
3687: specified as a base 16 number in C notation (e.g., @samp{-U0x1000000}).
3688: This number is the number of 512 byte blocks in the largest file which
3689: the calling UUCP can create. The called UUCP may not transfer a file
3690: larger than this. Supported by System V Release 4 UUCP. Taylor UUCP
3691: understands this option, but never generates it.
3692:
3693: @item -N
3694: Indicates that the calling UUCP understands the Taylor UUCP size
3695: limiting extensions. Supported only by Taylor UUCP.
3696:
3697: @end table
3698:
3699: @item called: @samp{\020ROK\000}
3700: There are actually several possible responses.
3701:
3702: @table @samp
3703:
3704: @item ROK
3705: The calling UUCP is acceptable, and the handshake proceeds to the
3706: protocol negotiation. Some options may also appear; see below.
3707:
3708: @item ROKN
3709: The calling UUCP is acceptable, it specified @samp{-N}, and the called
3710: UUCP also understands the Taylor UUCP size limiting extensions.
3711: Supported only by Taylor UUCP.
3712:
3713: @item RLCK
3714: The called UUCP already has a lock for the calling UUCP, which normally
3715: indicates the two machines are already communicating.
3716:
3717: @item RCB
3718: The called UUCP will call back. This may be used to avoid impostors.
3719: Note that only one machine out of each pair should call back, or no
3720: conversation will ever begin.
3721:
3722: @item RBADSEQ
3723: The call sequence number is wrong (see the @samp{-Q} discussion above).
3724:
3725: @item RLOGIN
3726: The calling UUCP is using the wrong login name.
3727:
3728: @item RYou are unknown to me
3729: The calling UUCP is not known to the called UUCP, and the called UUCP
3730: does not permit connections from unknown systems.
3731:
3732: @end table
3733:
3734: If the response is @samp{ROK}, the following options are supported by
3735: System V Release 4 UUCP.
3736:
3737: @table @samp
3738:
3739: @item -R
3740: The called UUCP knows how to restart failed file transmissions.
3741:
3742: @item -U@var{limit}
3743: Reports the ulimit value of the called UUCP. The limit is specified as
3744: a base 16 number in C notation. This number is the number of 512 byte
3745: blocks in the largest file which the called UUCP can create. The
3746: calling UUCP may not send a file larger than this.
3747:
3748: @item -x@var{level}
3749: I'm told that this is sometimes sent by SVR4 UUCP, but I'm not sure
3750: exactly what it means. It may request the calling UUCP to set its
3751: debugging level to the specified value.
3752:
3753: @end table
3754:
3755: If the response is not @samp{ROK} (or @samp{ROKN}) both sides hang up
3756: the phone, abandoning the call.
3757:
3758: @item called: @samp{\020P@var{protocols}\000}
3759: The @kbd{P} is a literal character. Note that the called UUCP outputs
3760: two strings in a row. The @var{protocols} string is a list of UUCP
3761: protocols supported by the caller. Each UUCP protocol has a single
3762: character name. For example, the called UUCP might send
3763: @samp{\020Pgf\000}.
3764:
3765: @item caller: @samp{\020U@var{protocol}\000}
3766: The @kbd{U} is a literal character. The calling UUCP selects which
3767: @var{protocol} to use out of the protocols offered by the called UUCP.
3768: If there are no mutually supported protocols, the calling UUCP sends
3769: @samp{\020UN\000} and both sides hang up the phone. Otherwise the
3770: calling UUCP sends something like @samp{\020Ug\000}.
3771:
3772: @end table
3773:
3774: Most UUCP packages will consider each locally supported protocol in turn
3775: and select the first one supported by the called UUCP. With some
3776: versions of HDB UUCP, this can be modified by giving a list of protocols
3777: after the device name in the Devices file or the @file{Systems} file.
3778: Taylor UUCP provides the @code{protocol} command which may be used
3779: either for a system (@pxref{Protocol Selection}) or a port (@pxref{port
3780: File}).
3781:
3782: After the protocol has been selected and the initial handshake has been
3783: completed, both sides turn on the selected protocol. For some protocols
3784: (notably @samp{g}) a further handshake is done at this point.
3785:
3786: Each protocol supports a method for sending a command to the remote
3787: system. This method is used to transmit a series of commands between
3788: the two UUCP packages. At all times, one package is the master and the
3789: other is the slave. Initially, the calling UUCP is the master.
3790:
3791: If a protocol error occurs during the exchange of commands, both sides
3792: move immediately to the final handshake.
3793:
3794: @node File Requests, Final Handshake, Initial Handshake, UUCP Protocol
3795: @subsection File Requests
3796:
3797: The master will send one of four commands: @samp{S}, @samp{R}, @samp{X}
3798: or @samp{H}.
3799:
3800: Any file name referred to below is either an absolute pathname beginning
3801: with @samp{/}, a public directory pathname beginning with @samp{~/}, a
3802: pathname relative to a user's home directory beginning with
3803: @samp{~@var{user}/}, or a spool directory file name. File names in the
3804: spool directory are not pathnames, but instead are converted to
3805: pathnames within the spool directory by UUCP. They always begin with
3806: @samp{C.} (for a command file created by @code{uucp} or @code{uux}),
3807: @samp{D.} (for a data file created by @code{uucp}, @code{uux} or by an
3808: execution, or received from another system for an execution), or
3809: @samp{X.} (for an execution file created by @code{uux} or received from
3810: another system).
3811:
3812: Taylor UUCP chooses which request to send next in the function
3813: @code{fuucp}. This is also where Taylor UUCP processes incoming
3814: commands from the remote system.
3815:
3816: @menu
3817: * S Request:: S request
3818: * R Request:: R request
3819: * X Request:: X request
3820: * H Request:: H request
3821: @end menu
3822:
3823: @node S Request, R Request, File Requests, File Requests
3824: @subsubsection S Request
3825:
3826: master: @samp{S @var{from} @var{to} @var{user} -@var{options} @var{temp}
3827: @var{mode} @var{notify} @var{size}}
3828:
3829: The @samp{S} and the @samp{-} are literal characters. This is a request
3830: by the master to send a file to the slave. Taylor UUCP handles the
3831: @samp{S} request in the file @file{send.c}.
3832:
3833: @table @var
3834:
3835: @item from
3836: The name of the file to send. If the @samp{C} option does not appear in
3837: @var{options}, the master will actually open and send this file.
3838: Otherwise the file has been copied to the spool directory, where it is
3839: named @var{temp}. The slave ignores this field unless @var{to} is a
3840: directory, in which case the basename of @var{from} will be used as the
3841: file name. If @var{from} is a spool directory filename, it must be a
3842: data file created for or by an execution, and must begin with @samp{D.}.
3843:
3844: @item to
3845: The name to give the file on the slave. If this field names a directory
3846: the file is placed within that directory with the basename of
3847: @var{from}. A name ending in @samp{/} is taken to be a directory even
3848: if one does not already exist with that name. If @var{to} begins with
3849: @samp{X.}, an execution file will be created on the slave. Otherwise,
3850: if @var{to} begins with @samp{D.} it names a data file to be used by
3851: some execution file. Otherwise, @var{to} should not be in the spool
3852: directory.
3853:
3854: @item user
3855: The name of the user who requested the transfer.
3856:
3857: @item options
3858: A list of options to control the transfer. The following options are
3859: defined (all options are single characters):
3860:
3861: @table @samp
3862:
3863: @item C
3864: The file has been copied to the spool directory (the master should use
3865: @var{temp} rather than @var{from}).
3866:
3867: @item c
3868: The file has not been copied to the spool directory (this is the
3869: default).
3870:
3871: @item d
3872: The slave should create directories as necessary (this is the default).
3873:
3874: @item f
3875: The slave should not create directories if necessary, but should fail
3876: the transfer instead.
3877:
3878: @item m
3879: The master should send mail to @var{user} when the transfer is complete.
3880:
3881: @item n
3882: The slave should send mail to @var{notify} when the transfer is
3883: complete.
3884:
3885: @end table
3886:
3887: @item temp
3888: If the @samp{C} option appears in @var{options}, this names the file to
3889: be sent. Otherwise if @var{from} is in the spool directory, @var{temp}
3890: is the same as @var{from}. Otherwise @var{temp} is a dummy string,
3891: normally @samp{D.0}. After the transfer has been succesfully completed,
3892: the master will delete the file @var{temp}.
3893:
3894: @item mode
3895: This is an octal number giving the mode of the file on the master. If
3896: the file is not in the spool directory, the slave will always create it
3897: with mode 0666, except that if (@var{mode} & 0111) is not zero (the file
3898: is executable), the slave will create the file with mode 0777. If the
3899: file is in the spool directory, some UUCP packages will use the
3900: algorithm above and some will always create the file with mode 0600
3901: (Taylor UUCP does the latter).
3902:
3903: @item notify
3904: This field is only used if the @samp{n} option appears in @var{options}.
3905: Otherwise, it may not appear, or it may be the string @samp{dummy}, or
3906: it may simply be a pair of double quotes. If the @samp{n} option is
3907: specified, then when the transfer is successfully completed the slave
3908: will send mail to @var{notify}, which must be a legal mailing address on
3909: the slave.
3910:
3911: @item size
3912: This field is only present when doing size negotiation, either with
3913: Taylor UUCP or SVR4 UUCP. It is the size of the file in bytes. SVR4
3914: UUCP sends the size in base 16 as 0x@dots{} while Taylor UUCP sends the
3915: size as a decimal integer (a later version of Taylor UUCP will probably
3916: change to the SVR4 behaviour).
3917:
3918: @end table
3919:
3920: The slave then responds with an S command response.
3921:
3922: @table @samp
3923:
3924: @item SY @var{start}
3925: The slave is willing to accept the file, and file transfer begins. The
3926: @var{start} field will only be present when using SVR4 file restart. It
3927: specifies the byte offset into the file at which to start sending. If
3928: this is a new file, @var{start} will be 0x0.
3929:
3930: @item SN2
3931: The slave denies permission to transfer the file. This can mean that
3932: the destination directory may not be accessed, or that no requests are
3933: permitted. It implies that the file transfer will never succeed.
3934:
3935: @item SN4
3936: The slave is unable to create the necessary temporary file. This
3937: implies that the file transfer might succeed later.
3938:
3939: @item SN6
3940: This is only used by Taylor UUCP size negotiation. It means that the
3941: slave considers the file too large to transfer at the moment, but it may
3942: be possible to transfer it at some other time.
3943:
3944: @item SN7
3945: This is only used by Taylor UUCP size negotiation. It means that the
3946: slave considers the file too large to ever transfer.
3947:
3948: @end table
3949:
3950: If the slave responds with @samp{SY}, a file transfer begins. When the
3951: file transfer is complete, the slave sends a @samp{C} command response.
3952: Taylor UUCP generates this confirmation in @code{fprecfile_confirm} and
3953: checks it in @code{fpsendfile_confirm}.
3954:
3955: @table @samp
3956:
3957: @item CY
3958: The file transfer was successful.
3959:
3960: @item CN5
3961: The temporary file could not be moved into the final location. This
3962: implies that the file transfer will never succeed.
3963:
3964: @end table
3965:
3966: After the @samp{C} command response has been received (in the @samp{SY}
3967: case) or immediately (in an @samp{SN} case) the master will send another
3968: command.
3969:
3970: @node R Request, X Request, S Request, File Requests
3971: @subsubsection R Request
3972:
3973: master: @samp{R @var{from} @var{to} @var{user} -@var{options}
3974: @var{size}}
3975:
3976: The @samp{R} and the @samp{-} are literal characters. This is a request
3977: by the master to receive a file from the slave. I do not know how SVR4
3978: UUCP implements file transfer restart in this case. Taylor UUCP
3979: implements the @samp{R} request in the file @file{rec.c}.
3980:
3981: @table @var
3982:
3983: @item from
3984: This is the name of the file on the slave which the master wishes to
3985: receive. It must not be in the spool directory, and it may not contain
3986: any wildcards.
3987:
3988: @item to
3989: This is the name of the file to create on the master. I do not believe
3990: that it can be a directory. It may only be in the spool directory if
3991: this file is being requested to support an execution either on the
3992: master or on some system other than the slave.
3993:
3994: @item user
3995: The name of the user who requested the transfer.
3996:
3997: @item options
3998: A list of options to control the transfer. The following options are
3999: defined (all options are single characters):
4000:
4001: @table @samp
4002:
4003: @item d
4004: The master should create directories as necessary (this is the default).
4005:
4006: @item f
4007: The master should not create directories if necessary, but should fail
4008: the transfer instead.
4009:
4010: @item m
4011: The master should send mail to @var{user} when the transfer is complete.
4012:
4013: @end table
4014:
4015: @item size
4016: This only appears if Taylor UUCP size negotiation is being used. It
4017: specifies the largest file which the master is prepared to accept (when
4018: using SVR4 UUCP, this was specified in the @samp{-U} option during the
4019: initial handshake).
4020:
4021: @end table
4022:
4023: The slave then responds with an @samp{R} command response.
4024:
4025: @table @samp
4026:
4027: @item RY @var{mode}
4028: The slave is willing to send the file, and file transfer begins.
4029: @var{mode} is the octal mode of the file on the slave. The master uses
4030: this to set the mode of the file on the master's system just as the
4031: slave does the @var{mode} argument in the send command (@pxref{S
4032: Request}).
4033:
4034: @item RN2
4035: The slave is not willing to send the file, either because it is not
4036: permitted or because the file does not exist. This implies that the
4037: file request will never succeed.
4038:
4039: @item RN6
4040: This is only used by Taylor UUCP size negotiation. It means that the
4041: file is too large to send, either because of the size limit specifies by
4042: the master or because the slave considers it too large. The file
4043: transfer might succeed later, or it might not (this will be cleared up
4044: in a later release of Taylor UUCP).
4045:
4046: @end table
4047:
4048: If the slave responds with @samp{RY}, a file transfer begins. When the
4049: file transfer is complete, the master sends a @samp{C} command. The
4050: slave pretty much ignores this, although it may log it. Taylor UUCP
4051: sends this confirmation in @code{fprecfile_confirm} and checks it in
4052: @code{fpsendfile_confirm}.
4053:
4054: @table @samp
4055:
4056: @item CY
4057: The file transfer was successful.
4058:
4059: @item CN5
4060: The temporary file could not be moved into the final
4061: location.
4062:
4063: @end table
4064:
4065: After the @samp{C} command response has been sent (in the @samp{RY}
4066: case) or immediately (in an @samp{RN} case) the master will send another
4067: command.
4068:
4069: @node X Request, H Request, R Request, File Requests
4070: @subsubsection X Request
4071:
4072: master: @samp{X @var{from} @var{to} @var{user} -@var{options}}
4073:
4074: The @samp{X} and the @samp{-} are literal characters. This is a request
4075: by the master to, in essence, execute @code{uucp} on the slave. The
4076: slave should execute @samp{uucp @var{from} @var{to}}. Taylor UUCP
4077: handles the @samp{X} request in the file @file{xcmd.c}.
4078:
4079: @table @var
4080:
4081: @item from
4082: This is the name of the file or files on the slave which the master
4083: wishes to transfer. Any wildcards are expanded on the slave. If the
4084: master is requesting that the files be transferred to itself, the
4085: request would normally contain wildcard characters, since otherwise an
4086: @samp{R} command would suffice. The master can also use this command to
4087: request that the slave transfer files to a third system.
4088:
4089: @item to
4090: This is the name of the file or directory to which the files should be
4091: transferred. This will normally use a UUCP name. For example, if the
4092: master wishes to receive the files itself, it would use
4093: @file{@var{master}!@var{path}}.
4094:
4095: @item user
4096: The name of the user who requested the transfer.
4097:
4098: @item options
4099: A list of options to control the transfer. It is not clear which, if
4100: any, options are supported by most UUCP packages. Taylor UUCP ignores
4101: the options field.
4102:
4103: @end table
4104:
4105: The slave then responds with an X command response.
4106:
4107: @table @samp
4108:
4109: @item XY
4110: The request was accepted, and the appropriate file transfer commands
4111: have been queued up for later processing.
4112:
4113: @item XN
4114: The request was denied. No particular reason is given.
4115:
4116: @end table
4117:
4118: In either case, the master will then send another command.
4119:
4120: @node H Request, , X Request, File Requests
4121: @subsubsection H Request
4122:
4123: master: @samp{H}
4124:
4125: This is used by the master to hang up the connection. The slave will
4126: respond with an @samp{H} command response.
4127:
4128: @table @samp
4129:
4130: @item HY
4131: The slave agrees to hang up the connection. In this case the master
4132: sends another @samp{HY} command. In some UUCP packages, including
4133: Taylor UUCP, the slave will then send a third @samp{HY} command. At
4134: this point the protocol is shut down, and the final handshake is begun.
4135:
4136: @item HN
4137: The slave does not agree to hang up. In this case the master and the
4138: slave exchange roles. The next command will be sent by the former
4139: slave, which is the new master. The roles may be reversed several times
4140: during a single connection.
4141:
4142: @end table
4143:
4144: @node Final Handshake, , File Requests, UUCP Protocol
4145: @subsection Final Handshake
4146:
4147: After the protocol has been shut down, the final handshake is
4148: performed. This handshake has no real purpose, and some UUCP packages
4149: simply drop the connection rather than do it (in fact, some will drop
4150: the connection immediately after both sides agree to hangup, without
4151: even closing down the protocol).
4152:
4153: @table @asis
4154:
4155: @item caller: @samp{\020OOOOOO\000}
4156:
4157: @item called: @samp{\020OOOOOOO\000}
4158:
4159: @end table
4160:
4161: That is, the calling UUCP sends six letter O's and the called UUCP
4162: replies with seven letter O's. Some UUCP packages always send six O's.
4163:
4164: @node g Protocol, f Protocol, UUCP Protocol, Protocols
4165: @section The UUCP @samp{g} Protocol
4166: @cindex g protocol
4167: @cindex protocol (g)
4168:
4169: The @samp{g} protocol is a packet based flow controlled error correcting
4170: protocol that requires an eight bit clear connection. It is the
4171: original UUCP protocol, and is supported by all UUCP implementations.
4172: Many implementations of it are only able to support small window and
4173: packet sizes, specifically a window size of 3 and a packet size of 64
4174: bytes, but the protocol itself can support up to a window size of 7 and
4175: a packet size of 4096 bytes. Complaints about the inefficiency of the
4176: @samp{g} protocol generally refer to specific implementations, rather
4177: than the correctly implemented protocol.
4178:
4179: The @samp{g} protocol was originally designed for general packet drivers,
4180: and thus contains some features that are not used by UUCP, including
4181: an alternate data channel and the ability to renegotiate packet and
4182: window sizes during the communication session.
4183:
4184: The @samp{g} protocol is spoofed by many Telebit modems. When spoofing is
4185: in effect, each Telebit modem uses the @samp{g} protocol to communicate
4186: with the attached computer, but the data between the modems is sent
4187: using a Telebit proprietary error correcting protocol. This allows
4188: for very high throughput over the Telebit connection, which, because
4189: it is half-duplex, would not normally be able to handle the @samp{g}
4190: protocol very well at all.
4191:
4192: This discussion of the @samp{g} protocol explains how it works, but does
4193: not discuss useful error handling techniques. Some discussion of this
4194: can be found in Jamie E. Hanrahan's paper (@pxref{Documentation
4195: References}). A detailed examination of the source code would also be
4196: profitable.
4197:
4198: The Taylor UUCP code to handle the @samp{g} protocol is in the file
4199: @file{protg.c}. There are a number of functions; the most important
4200: ones are @code{fgstart}, @code{fgsend_control}, @code{fgsenddata}, and
4201: @code{fgprocess_data}.
4202:
4203: All @samp{g} protocol communication is done with packets. Each packet
4204: begins with a six byte header. Control packets consist only of the
4205: header. Data packets contain additional data.
4206:
4207: The header is as follows:
4208:
4209: @table @asis
4210:
4211: @item @samp{\020}
4212: Every packet begins with a @samp{^P}.
4213:
4214: @item @var{k} (1 <= @var{k} <= 9)
4215: @ifinfo
4216: The @var{k} value is always 9 for a control packet. For a data packet,
4217: the @var{k} value indicates how must data follows the six byte header.
4218: The amount of data is 2 ** (@var{k} + 4), where ** indicates
4219: exponentiation. Thus a @var{k} value of 1 means 32 data bytes and a
4220: @var{k} value of 8 means 4096 data bytes. The @var{k} value for a data
4221: packet must be between 1 and 8 inclusive.
4222: @end ifinfo
4223: @iftex
4224: The @var{k} value is always 9 for a control packet. For a data packet,
4225: the @var{k} value indicates how must data follows the six byte header.
4226: The amount of data is @math{2^{@var{k} + 4}}. Thus a @var{k} value of 1
4227: means 32 data bytes and a @var{k} value of 8 means 4096 data bytes. The
4228: @var{k} value for a data packet must be between 1 and 8 inclusive.
4229: @end iftex
4230:
4231: @item checksum low byte
4232: @itemx checksum high byte
4233: The checksum value is described below.
4234:
4235: @item control byte
4236: The control packet indicates the type of packet, and is described below.
4237:
4238: @item xor byte
4239: This byte is the xor of @var{k}, the checksum low byte, the checksum
4240: high byte and the control byte (i.e. the second, third, fourth and fifth
4241: header bytes). It is used to ensure that the header data is valid.
4242:
4243: @end table
4244:
4245: The control byte in the header is composed of three bit fields, referred
4246: to here as @var{tt} (two bits), @var{xxx} (three bits) and @var{yyy}
4247: (three bits). The complete byte is @var{ttxxxyyy}, or (@var{tt} << 6) +
4248: (@var{xxx} << 3) + @var{yyy}.
4249:
4250: The @var{tt} field takes on the following values:
4251:
4252: @table @asis
4253:
4254: @item 0
4255: This is a control packet. In this case the @var{k} byte in the header
4256: must be 9. The @var{xxx} field indicates the type of control packet;
4257: the types are described below.
4258:
4259: @item 1
4260: This is an alternate data channel packet. This is not used by UUCP.
4261:
4262: @item 2
4263: This is a data packet, and the entire contents of the attached data
4264: field (whose length is given by the @var{k} byte in the header) are
4265: valid. The @var{xxx} and @var{yyy} fields are described below.
4266:
4267: @item 3
4268: This is a short data packet. Let the length of the data field (as given
4269: by the @var{k} byte in the header) be @code{l}. Let the first byte in
4270: the data field be @code{b1}. If @code{b1} is less than 128 (if the most
4271: significant bit of @code{b1} is 0), then there are @code{l - b1} valid
4272: bytes of data in the data field, beginning with the second byte. If
4273: @code{b1 >= 128}, let @code{b2} be the second byte in the data field.
4274: Then there are @code{l - ((b1 & 0x7f) + (b2 << 7))} valid bytes of data
4275: in the data field, beginning with the third byte. In all cases @code{l}
4276: bytes of data are sent (and all data bytes participate in the checksum
4277: calculation) but some of the trailing bytes may be dropped by the
4278: receiver. The @var{xxx} and @var{yyy} fields are described below.
4279:
4280: @end table
4281:
4282: In a data packet (short or not) the @var{xxx} field gives the sequence
4283: number of the packet. Thus sequence numbers can range from 0 to 7,
4284: inclusive. The @var{yyy} field gives the sequence number of the last
4285: correctly received packet.
4286:
4287: Each communication direction uses a window which indicates how many
4288: unacknowledged packets may be transmitted before waiting for an
4289: acknowledgement. The window may range from 1 to 7 packets, and may be
4290: different in each direction. For example, if the window is 3 and the
4291: last packet acknowledged was packet number 6, packet numbers 7, 0 and 1
4292: may be sent but the sender must wait for an acknowledgement before
4293: sending packet number 2. This acknowledgement could come as the
4294: @var{yyy} field of a data packet or as the @var{yyy} field of a
4295: @code{RJ} or @code{RR} control packet (described below).
4296:
4297: Each packet must be transmitted in order (the sender may not skip
4298: sequence numbers). Each packet must be acknowledged, and each packet
4299: must be acknowledged in order.
4300:
4301: In a control packet, the @var{xxx} field takes on the following values:
4302:
4303: @table @asis
4304:
4305: @item 1 @code{CLOSE}
4306: The connection should be closed immediately. This is typically sent
4307: when one side has seen too many errors and wants to give up. It is also
4308: sent when shutting down the protocol. If an unexpected @code{CLOSE}
4309: packet is received, a @code{CLOSE} packet should be sent in reply and
4310: the @samp{g} protocol should halt, causing UUCP to enter the final
4311: handshake.
4312:
4313: @item 2 @code{RJ} or @code{NAK}
4314: The last packet was not received correctly. The @var{yyy} field
4315: contains the sequence number of the last correctly received packet.
4316:
4317: @item 3 @code{SRJ}
4318: Selective reject. The @var{yyy} field contains the sequence number of a
4319: packet that was not received correctly, and should be retransmitted.
4320: This is not used by UUCP, and most implementations will not recognize
4321: it. Taylor UUCP will recognize it but not generate it.
4322:
4323: @item 4 @code{RR} or @code{ACK}
4324: Packet acknowledgement. The @var{yyy} field contains the sequence
4325: number of the last correctly received packet.
4326:
4327: @item 5 @code{INITC}
4328: Third initialization packet. The @var{yyy} field contains the maximum
4329: window size to use.
4330:
4331: @item 6 @code{INITB}
4332: @ifinfo
4333: Second initialization packet. The @var{yyy} field contains the packet
4334: size to use. It requests a size of 2 ** (@var{yyy} + 5). Note that
4335: this is not the same coding used for the @var{k} byte in the packet
4336: header (it is 1 less). Some UUCP implementations can handle any packet
4337: size up to that specified; some can only handled exactly the size
4338: specified. Taylor UUCP will always accept any packet size.
4339: @end ifinfo
4340: @iftex
4341: Second initialization packet. The @var{yyy} field contains the packet
4342: size to use. It requests a size of @math{2^{@var{yyy}+5}}. Note that
4343: this is not the same coding used for the @var{k} byte in the packet
4344: header (it is 1 less). Some UUCP implementations can handle any packet
4345: size up to that specified; some can only handled exactly the size
4346: specified. Taylor UUCP will always accept any packet size.
4347: @end iftex
4348:
4349: @item 7 @code{INITA}
4350: First initialization packet. The @var{yyy} field contains the maximum
4351: window size to use.
4352:
4353: @end table
4354:
4355: To compute the checksum, call the control byte (the fifth byte in the
4356: header) @code{c}.
4357:
4358: The checksum of a control packet is simply @code{0xaaaa - c}.
4359:
4360: The checksum of a data packet is @code{0xaaaa - (@var{check} ^ c)}
4361: (@code{^} denotes exclusive or, as in C), and @code{@var{check}} is the
4362: result of the following routine run on the contents of the data field
4363: (every byte in the data field participates in the checksum, even for a
4364: short data packet). Below is the routine used by Taylor UUCP; it is a
4365: slightly modified version of a routine which John Gilmore patched from
4366: G.L. Chesson's original paper. The @code{z} argument points to the
4367: data and the @code{c} argument indicates how much data there is.
4368:
4369: @example
4370: int
4371: igchecksum (z, c)
4372: register const char *z;
4373: register int c;
4374: @{
4375: register unsigned int ichk1, ichk2;
4376:
4377: ichk1 = 0xffff;
4378: ichk2 = 0;
4379:
4380: do
4381: @{
4382: register unsigned int b;
4383:
4384: /* Rotate ichk1 left. */
4385: if ((ichk1 & 0x8000) == 0)
4386: ichk1 <<= 1;
4387: else
4388: @{
4389: ichk1 <<= 1;
4390: ++ichk1;
4391: @}
4392:
4393: /* Add the next character to ichk1. */
4394: b = *z++ & 0xff;
4395: ichk1 += b;
4396:
4397: /* Add ichk1 xor the character position in the buffer
4398: counting from the back to ichk2. */
4399: ichk2 += ichk1 ^ c;
4400:
4401: /* If the character was zero, or adding it to ichk1
4402: caused an overflow, xor ichk2 to ichk1. */
4403: if (b == 0 || (ichk1 & 0xffff) < b)
4404: ichk1 ^= ichk2;
4405: @}
4406: while (--c > 0);
4407:
4408: return ichk1 & 0xffff;
4409: @}
4410: @end example
4411:
4412: When the @samp{g} protocol is started, the calling UUCP sends an INITA
4413: control packet with the window size it wishes the called UUCP to use.
4414: The called UUCP responds with an INITA packet with the window size it
4415: wishes the calling UUCP to use. Pairs of INITB and INITC packets are
4416: then similarly exchanged. When these exchanges are completed, the
4417: protocol is considered to have been started. The window size is sent
4418: twice, with both the INITA and the INITC packets.
4419:
4420: When a UUCP package transmits a command, it sends one or more data
4421: packets. All the data packets will normally be complete, although some
4422: UUCP packages may send the last one as a short packet. The command
4423: string is sent with a trailing null byte, to let the receiving package
4424: know when the command is finished. Some UUCP packages require the last
4425: byte of the last packet sent to be null, even if the command ends
4426: earlier in the packet. Some packages may require all the trailing bytes
4427: in the last packet to be null, but I have not confirmed this.
4428:
4429: When a UUCP package sends a file, it will send a sequence of data
4430: packets. The end of the file is signalled by a short data packet
4431: containing zero valid bytes (it will normally be preceeded by a short
4432: data packet containing the last few bytes in the file).
4433:
4434: Note that the sequence numbers cover the entire communication session,
4435: including both command and file data.
4436:
4437: When the protocol is shut down, each UUCP package sends a @code{CLOSE}
4438: control packet.
4439:
4440: @node f Protocol, t Protocol, g Protocol, Protocols
4441: @section The UUCP @samp{f} Protocol
4442: @cindex f protocol
4443: @cindex protocol (f)
4444:
4445: The @samp{f} protocol is a seven bit protocol which checksums an entire
4446: file at a time. It only uses the characters between \040 and \176
4447: (ASCII space and @samp{~}) inclusive as well as the carriage return
4448: character. It can be very efficient for transferring text only data,
4449: but it is very inefficient at transferring eight bit data (such as
4450: compressed news). It is not flow controlled, and the checksum is fairly
4451: insecure over large files, so using it over a serial connection requires
4452: handshaking (@code{XON}/@code{XOFF} can be used) and error correcting
4453: modems. Some people think it should not be used even under those
4454: circumstances.
4455:
4456: I believe the @samp{f} protocol originated in BSD versions of UUCP. It was
4457: originally intended for transmission over X.25 PAD links.
4458:
4459: The Taylor UUCP code for the @samp{f} protocol is in @file{protf.c}.
4460:
4461: The @samp{f} protocol has no startup or finish protocol. However, both
4462: sides typically sleep for a couple of seconds before starting up,
4463: because they switch the terminal into @code{XON}/@code{XOFF} mode and
4464: want to allow the changes to settle before beginning transmission.
4465:
4466: When a UUCP package transmits a command, it simply sends a string
4467: terminated by a carriage return.
4468:
4469: When a UUCP package transmits a file, each byte b of the file is
4470: translated according to the following table:
4471:
4472: @example
4473: 0 <= b <= 037: 0172, b + 0100 (0100 to 0137)
4474: 040 <= b <= 0171: b ( 040 to 0171)
4475: 0172 <= b <= 0177: 0173, b - 0100 ( 072 to 077)
4476: 0200 <= b <= 0237: 0174, b - 0100 (0100 to 0137)
4477: 0240 <= b <= 0371: 0175, b - 0200 ( 040 to 0171)
4478: 0372 <= b <= 0377: 0176, b - 0300 ( 072 to 077)
4479: @end example
4480:
4481: That is, a byte between \040 and \171 inclusive is transmitted as is,
4482: and all other bytes are prefixed and modified as shown.
4483:
4484: When all the file data is sent, a seven byte sequence is sent: two bytes
4485: of \176 followed by four ASCII bytes of the checksum as printed in base
4486: 16 followed by a carriage return. For example, if the checksum was
4487: 0x1234, this would be sent: "\176\1761234\r".
4488:
4489: The checksum is initialized to 0xffff. For each byte that is sent it is
4490: modified as follows (where @code{b} is the byte before it has been
4491: transformed as described above):
4492:
4493: @example
4494: /* Rotate the checksum left. */
4495: if ((ichk & 0x8000) == 0)
4496: ichk <<= 1;
4497: else
4498: @{
4499: ichk <<= 1;
4500: ++ichk;
4501: @}
4502:
4503: /* Add the next byte into the checksum. */
4504: ichk += b;
4505: @end example
4506:
4507: When the receiving UUCP sees the checksum, it compares it against its
4508: own calculated checksum and replies with a single character followed
4509: by a carriage return.
4510:
4511: @table @samp
4512:
4513: @item G
4514: The file was received correctly.
4515:
4516: @item R
4517: The checksum did not match, and the file should be resent from the
4518: beginning.
4519:
4520: @item Q
4521: The checksum did not match, but too many retries have occurred and the
4522: communication session should be abandoned.
4523:
4524: @end table
4525:
4526: The sending UUCP checks the returned character and acts accordingly.
4527:
4528: @node t Protocol, e Protocol, f Protocol, Protocols
4529: @section The UUCP @samp{t} Protocol
4530: @cindex t protocol
4531: @cindex protocol (t)
4532:
4533: The @samp{t} protocol is intended for TCP links. It does no error
4534: checking or flow control, and requires an eight bit clear channel.
4535:
4536: I believe the @samp{t} protocol originated in BSD versions of UUCP.
4537:
4538: The Taylor UUCP code for the @samp{t} protocol is in @file{prott.c}.
4539:
4540: When a UUCP package transmits a command, it first gets the length of the
4541: command string, @var{c}. It then sends ((@var{c} / 512) + 1) * 512
4542: bytes (the smallest multiple of 512 which can hold @var{c} bytes plus a
4543: null byte) consisting of the command string itself followed by trailing
4544: null bytes.
4545:
4546: When a UUCP package sends a file, it sends it in blocks. Each block
4547: contains at most 1024 bytes of data. Each block consists of four bytes
4548: containing the amount of data in binary (most significant byte first,
4549: the same format as used by the Unix function @code{htonl}) followed by
4550: that amount of data. The end of the file is signalled by a block
4551: containing zero bytes of data.
4552:
4553: @node e Protocol, x Protocol, t Protocol, Protocols
4554: @section The UUCP @samp{e} Protocol
4555: @cindex e protocol
4556: @cindex protocol (e)
4557:
4558: The @samp{e} protocol is similar to the @samp{t} protocol. It does no
4559: flow control or error checking and is intended for use over TCP.
4560:
4561: The @samp{e} protocol originated in versions of HDB UUCP.
4562:
4563: The Taylor UUCP code for the @samp{e} protocol is in @file{prote.c}.
4564:
4565: When a UUCP package transmits a command, it simply sends the command as
4566: an ASCII string terminated by a null byte.
4567:
4568: When a UUCP package transmits a file, it sends the complete size of the
4569: file as an ASCII decimal number. The ASCII string is padded out to 20
4570: bytes with null bytes (i.e., if the file is 1000 bytes long, it sends
4571: @samp{1000\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0}). It then sends the entire
4572: file.
4573:
4574: @node x Protocol, d Protocol, e Protocol, Protocols
4575: @section The UUCP @samp{x} Protocol
4576:
4577: I believe that the @samp{x} protocol was intended for use over X.25
4578: virtual circuits. It relies on a write of zero bytes being read as zero
4579: bytes without stopping communication. I have heard that it does not
4580: work correctly. If someone would care to fill this in more, I would be
4581: grateful. Taylor UUCP does not implement the @samp{x} protocol.
4582:
4583: @node d Protocol, Capital G Protocol, x Protocol, Protocols
4584: @section The UUCP @samp{d} Protocol
4585:
4586: This is apparently used for DataKit connections, and relies on a write
4587: of zero bytes being read as zero bytes, much as the @samp{x} protocol
4588: does. I don't really know anything else about it. Taylor UUCP does not
4589: implement the @samp{d} protocol.
4590:
4591: @node Capital G Protocol, Documentation References, d Protocol, Protocols
4592: @section The UUCP @samp{G} Protocol
4593:
4594: The @samp{G} protocol is apparently simply the @samp{g} protocol, except
4595: that it is known to support all possible window and packet sizes. It
4596: was introduced by SVR4 UUCP; the SVR4 implementation of the @samp{g}
4597: protocol is apparently fixed at a packet size of 64 and a window size of
4598: 7. Taylor UUCP does not recognize the @samp{G} protocol. It does
4599: support all window and packet sizes for the @samp{g} protocol.
4600:
4601: @node Documentation References, , Capital G Protocol, Protocols
4602: @section Documentation References
4603:
4604: I took a lot of the information from Jamie E. Hanrahan's paper in the
4605: Fall 1990 DECUS Symposium, and from Managing UUCP and Usenet by Tim
4606: O'Reilly and Grace Todino (with contributions by several other people).
4607: The latter includes most of the former, and is published by O'Reilly &
4608: Associates, Inc.
4609:
4610: Some information is originally due to a Usenet article by Chuck Wegrzyn.
4611: The information on the @samp{g} protocol comes partially from a paper by
4612: G.L. Chesson of Bell Laboratories, partially from Jamie E. Hanrahan's
4613: paper, and partially from source code by John Gilmore. The information
4614: on the @samp{f} protocol comes from the source code by Piet Berteema.
4615: The information on the @samp{t} protocol comes from the source code by
4616: Rick Adams. The information on the @samp{e} protocol comes from a
4617: Usenet article by Matthias Urlichs.
4618:
4619: @node Hacking, Acknowledgements, Protocols, Top
4620: @chapter Hacking Taylor UUCP
4621:
4622: This chapter provides the briefest of guides to the Taylor UUCP source
4623: code itself.
4624:
4625: @menu
4626: * System Dependence:: System Dependence
4627: * Naming Conventions:: Naming Conventions
4628: * Patches:: Patches
4629: @end menu
4630:
4631: @node System Dependence, Naming Conventions, Hacking, Hacking
4632: @section System Dependence
4633:
4634: The code is carefully segregated into a system independent portion and a
4635: system dependent portion. The system dependent code is in the
4636: @file{unix} subdirectory, and also in the files @file{tcp.c},
4637: @file{tli.c} and @file{sysh.unx} (also known as @file{sysdep.h}).
4638:
4639: With the right configuration parameters, the system independent code
4640: calls only ANSI C functions. Some of the less common ANSI C functions
4641: are also provided in the @file{lib} directory. The replacement function
4642: @code{strtol} in @file{lib/strtol.c} assumes that the characters @kbd{A}
4643: to @kbd{F} and @kbd{a} to @kbd{f} appear in strictly sequential order.
4644: The function @code{igradecmp} in @file{uuconf/grdcmp.c} assumes that the
4645: upper and lower case letters appear in order. Both assumptions are true
4646: for ASCII and EBCDIC, but neither is guaranteed by ANSI C. Disregarding
4647: these caveats, I believe that the system independent portion of the code
4648: is strictly conforming.
4649:
4650: That's not too exciting, since all the work is done in the system
4651: dependent code. I think that this code can conform to POSIX 1003.1,
4652: given the right compilation parameters. I'm a bit less certain about
4653: this, though.
4654:
4655: The code is in use on a 16 bit segmented system with no function
4656: prototypes, so I'm certain that all casts to long and pointers are done
4657: when necessary.
4658:
4659: @node Naming Conventions, Patches, System Dependence, Hacking
4660: @section Naming Conventions
4661:
4662: I use a modified Hungarian naming convention for my variables and
4663: functions. As with all naming conventions, the code is rather opaque if
4664: you are not familiar with it, but becomes clear and easy to use with
4665: time.
4666:
4667: The first character indicates the type of the variable (or function
4668: return value). Sometimes additional characters are used. I use the
4669: following type prefixes:
4670:
4671: @table @samp
4672: @item a
4673: array; the next character is the type of an element
4674: @item b
4675: byte or character
4676: @item c
4677: count of something
4678: @item e
4679: stdio FILE *
4680: @item f
4681: boolean
4682: @item i
4683: generic integer
4684: @item l
4685: double
4686: @item o
4687: file descriptor (as returned by open, creat, etc.)
4688: @item p
4689: generic pointer
4690: @item q
4691: pointer to structure
4692: @item s
4693: structure
4694: @item u
4695: void (function return values only)
4696: @item z
4697: character string
4698: @end table
4699:
4700: A generic pointer ('p') is sometimes a @code{void *}, sometimes a
4701: function pointer in which case the prefix is pf, and sometimes a pointer
4702: to another type, in which case the next character is the type to which
4703: it points (pf is overloaded).
4704:
4705: An array of strings (@code{char *[]}) would be named @code{az} (array of
4706: string). If this array were passed to a function, the function
4707: parameter would be named @code{paz} (pointer to array of string).
4708:
4709: Note that the variable name prefixes do not necessarily indicate the
4710: type of the variable. For example, a variable prefixed with i may be
4711: int, long or short. Similarly, a variable prefixed with b may be a char
4712: or an int; for example, the return value of getchar would be caught in
4713: an int variable prefixed with b.
4714:
4715: For a non-local variable (extern or file static), the first character
4716: after the type prefix is capitalized.
4717:
4718: Most static variables and functions use another letter after the type
4719: prefix to indicate which module they come from. This is to help
4720: distinguish different names in the debugger. For example, all static
4721: functions in @file{protg.c}, the @samp{g} protocol source code, use a
4722: module prefix of @samp{g}. This isn't too useful, as a number of
4723: modules use a module prefix of @samp{s}.
4724:
4725: @node Patches, , Naming Conventions, Hacking
4726: @section Patches
4727:
4728: I am always grateful for any patches sent in. Much of the flexibility
4729: and portability of the code is due to other people. Please do not
4730: hesitate to send me any changes you have found necessary or useful.
4731:
4732: When sending a patch, please send the output of the Unix @code{diff}
4733: program invoked with the @samp{-c} option (if you have the GNU version
4734: of @code{diff}, use the @samp{-p} option). Always invoke @code{diff}
4735: with the original file first and the modified file second.
4736:
4737: If your @code{diff} does not support @samp{-c} (or you don't have
4738: @code{diff}), send a complete copy of the modified file (if you have
4739: just changed a single function, you can just send the new version of the
4740: function). In particular, please do not send @code{diff} output without
4741: the @samp{-c} option, as it is useless.
4742:
4743: If you have made a number of changes, it is very convenient for me if
4744: you send each change as a separate mail message. Sometimes I will think
4745: that one change is useful but another one is not. If they are in
4746: different messages it is much easier for me to apply one but not the
4747: other.
4748:
4749: I rarely apply the patches directly. Instead I work my way through the
4750: hunks and apply each one separately. This ensures that the naming
4751: remains consistent, and that I understand all the code.
4752:
4753: If you can not follow all these rules, then don't. But if you do, it
4754: makes it more likely that I will incorporate your changes. I am not
4755: paid for my UUCP work, and my available time is unfortunately very
4756: restricted. The package is important to me, and I do what I can, but I
4757: can not do all that I would like, much less all that everybody else
4758: would like.
4759:
4760: Finally, please do not be offended if I do not reply to messages for
4761: some time, even a few weeks. I am often behind on my mail, and if I
4762: think your message deserves a considered reply I will often put it aside
4763: until I have time to deal with it.
4764:
4765: @node Acknowledgements, Index (concepts), Hacking, Top
4766: @chapter Acknowledgements
4767:
4768: This is a list of people who gave help or suggestions while I was
4769: working on the Taylor UUCP project. Appearance on this list does not
4770: constitute endorsement of the program, particularly since some of the
4771: comments were criticisms. I've probably left some people off, and I
4772: apologize for any oversight; it does not mean your contribution was
4773: unappreciated.
4774:
4775: @ifinfo
4776: First of all, I would like to thank the people at Infinity Development
4777: Systems (formerly AIRS, which lives on in the domain name, at least for
4778: now) for permitting me to use their computers and @file{uunet} access.
4779: I would also like to thank Richard Stallman @code{<rms@@gnu.ai.mit.edu>}
4780: for founding the Free Software Foundation and John Gilmore
4781: @code{<gnu@@cygnus.com>} for writing the initial version of gnuucp which
4782: was a direct inspiration for this somewhat larger project. Chip
4783: Salzenberg @code{<chip@@tct.com>} has contributed many patches.
4784: Franc,ois Pinard @code{<pinard@@iro.umontreal.ca>} tirelessly tested the
4785: code and suggested many improvements. He also put together the initial
4786: version of this document. Doug Evans contributed the zmodem protocol.
4787: Finally, Verbus M. Counts @code{<verbus@@westmark.com>} and Centel
4788: Federal Systems, Inc. deserve special thanks, since they actually paid
4789: me money to port this code to System III.
4790: @end ifinfo
4791: @iftex
4792: First of all, I would like to thank the people at Infinity Development
4793: Systems (formerly AIRS, which lives on in the domain name, at least for
4794: now) for permitting me to use their computers and @file{uunet} access.
4795: I would also like to thank Richard Stallman @code{<rms@@gnu.ai.mit.edu>}
4796: for founding the Free Software Foundation and John Gilmore
4797: @code{<gnu@@cygnus.com>} for writing the initial version of gnuucp which
4798: was a direct inspiration for this somewhat larger project. Chip
4799: Salzenberg @code{<chip@@tct.com>} has contributed many patches.
4800: @tex
4801: Fran\c cois Pinard
4802: @end tex
4803: @code{<pinard@@iro.umontreal.ca>} tirelessly tested the code and
4804: suggested many improvements. He also put together the initial version
4805: of this document. Doug Evans contributed the zmodem protocol. Finally,
4806: Verbus M. Counts @code{<verbus@@westmark.com>} and Centel Federal
4807: Systems, Inc. deserve special thanks, since they actually paid me money
4808: to port this code to System III.
4809: @end iftex
4810:
4811: In alphabetical order:
4812:
4813: @example
4814: "Earle F. Ake - SAIC" @code{<ake@@Dayton.SAIC.COM>}
4815: @code{mra@@searchtech.com} (Michael Almond)
4816: @code{cambler@@zeus.calpoly.edu} (Christopher J. Ambler)
4817: Brian W. Antoine @code{<briana@@tau-ceti.isc-br.com>}
4818: @code{jantypas@@soft21.s21.com} (John Antypas)
4819: @code{nba@@sysware.DK} (Niels Baggesen)
4820: @code{uunet!hotmomma!sdb} (Scott Ballantyne)
4821: Zacharias Beckman @code{<zac@@dolphin.com>}
4822: @code{mike@@mbsun.ann-arbor.mi.us} (Mike Bernson)
4823: @code{bob@@usixth.sublink.org} (Roberto Biancardi)
4824: @code{statsci!scott@@coco.ms.washington.edu} (Scott Blachowicz)
4825: @code{bag%wood2.cs.kiev.ua@@relay.ussr.eu.net} (Andrey G Blochintsev)
4826: Gregory Bond @code{<gnb@@bby.com.au>}
4827: Marc Boucher @code{<marc@@CAM.ORG>}
4828: @code{dean@@coplex.com} (Dean Brooks)
4829: @code{dave@@dlb.com} (Dave Buck)
4830: @code{gordon@@sneaky.lonestar.org} (Gordon Burditt)
4831: @code{mib@@gnu.ai.mit.edu} (Michael I Bushnell)
4832: Brian Campbell @code{<brianc@@quantum.on.ca>}
4833: Andrew A. Chernov @code{<ache@@astral.msk.su>}
4834: @code{mafc!frank@@bach.helios.de} (Frank Conrad)
4835: Ed Carp @code{<erc@@apple.com>}
4836: @code{verbus@@westmark.westmark.com} (Verbus M. Counts)
4837: @code{cbmvax!snark.thyrsus.com!cowan} (John Cowan)
4838: Bob Cunningham @code{<bob@@soest.hawaii.edu>}
4839: @code{hubert@@arakis.fdn.org} (Hubert Delahaye)
4840: @code{denny@@dakota.alisa.com} (Bob Denny)
4841: @code{ssd@@nevets.oau.org} (Steven S. Dick)
4842: @code{gert@@greenie.gold.sub.org} (Gert Doering)
4843: Hans-Dieter Doll @code{<hd2@@Insel.DE>}
4844: Andrew Evans @code{<andrew@@airs.com>}
4845: @code{dje@@cygnus.com} (Doug Evans)
4846: Marc Evans @code{<marc@@synergytics.com>}
4847: @code{kksys!kegworks!lfahnoe@@cs.umn.edu} (Larry Fahnoe)
4848: @code{fenner@@jazz.psu.edu} (Bill Fenner)
4849: "David J. Fiander" @code{<golem!david@@news.lsuc.on.ca>}
4850: Thomas Fischer @code{<batman@@olorin.dark.sub.org>}
4851: @code{erik@@eab.retix.com} (Erik Forsberg)
4852: Lele Gaifax @code{<piggy@@idea.sublink.org>}
4853: @code{Peter.Galbavy@@micromuse.co.uk}
4854: @code{hunter@@phoenix.pub.uu.oz.au} (James Gardiner [hunter])
4855: Terry Gardner @code{<cphpcom!tjg01>}
4856: @code{ol@@infopro.spb.su} (Oleg Girko)
4857: @code{jimmy@@tokyo07.info.com} (Jim Gottlieb)
4858: @code{ryan@@cs.umb.edu} (Daniel R. Guilderson)
4859: @code{greg@@gagme.chi.il.us} (Gregory Gulik)
4860: Richard H. Gumpertz @code{<rhg@@cps.com>}
4861: Michael Haberler @code{<mah@@parrot.prv.univie.ac.at>}
4862: @code{jh@@moon.nbn.com} (John Harkin)
4863: @code{guy@@auspex.auspex.com} (Guy Harris)
4864: Petri Helenius @code{<pete@@fidata.fi>}
4865: Bob Hemedinger @code{<bob@@dalek.mwc.com>}
4866: Andrew Herbert @code{<andrew@@werple.pub.uu.oz.au>}
4867: Peter Honeyman @code{<honey@@citi.umich.edu>}
4868: @code{pmcgw!personal-media.co.jp!ishikawa} (Chiaki Ishikawa)
4869: @code{bei@@dogface.austin.tx.us} (Bob Izenberg)
4870: Rob Janssen @code{<cmgit!rob@@relay.nluug.nl>}
4871: @code{harvee!esj} (Eric S Johansson)
4872: Alan Judge @code{<aj@@dec4ie.IEunet.ie>}
4873: @code{chris@@cj_net.in-berlin.de} (Christof Junge)
4874: @code{tron@@Veritas.COM} (Ronald S. Karr)
4875: Brendan Kehoe @code{<brendan@@cs.widener.edu>}
4876: @code{kersing@@nlmug.nl.mugnet.org} (Jac Kersing)
4877: @code{rob@@pact.nl} (Rob Kurver)
4878: @code{kent@@sparky.IMD.Sterling.COM} (Kent Landfield)
4879: @code{lebaron@@inrs-telecom.uquebec.ca} (Gregory LeBaron)
4880: @code{karl@@sugar.NeoSoft.Com} (Karl Lehenbauer)
4881: @code{merlyn@@digibd.com} (Merlyn LeRoy)
4882: @code{clewis@@ferret.ocunix.on.ca} (Chris Lewis)
4883: @code{gdonl@@ssi1.com} (Don Lewis)
4884: @code{libove@@libove.det.dec.com} (Jay Vassos-Libove)
4885: @code{bruce%blilly@@Broadcast.Sony.COM} (Bruce Lilly)
4886: Ted Lindgreen @code{<tlindgreen@@encore.nl>}
4887: @code{andrew@@cubetech.com} (Andrew Loewenstern)
4888: "Arne Ludwig" @code{<arne@@rrzbu.hanse.de>}
4889: Matthew Lyle @code{<matt@@mips.mitek.com>}
4890: @code{djm@@eng.umd.edu} (David J. MacKenzie)
4891: John R MacMillan @code{<chance!john@@sq.sq.com>}
4892: Giles D Malet @code{<shrdlu!gdm@@provar.kwnet.on.ca>}
4893: @code{mem@@mv.MV.COM} (Mark E. Mallett)
4894: @code{pepe@@dit.upm.es} (Jose A. Manas)
4895: @code{martelli@@cadlab.sublink.org} (Alex Martelli)
4896: Yanek Martinson @code{<yanek@@mthvax.cs.miami.edu>}
4897: @code{jm@@aristote.univ-paris8.fr} (Jean Mehat)
4898: @code{les@@chinet.chi.il.us} (Leslie Mikesell)
4899: @code{mmitchel@@digi.lonestar.org} (Mitch Mitchell)
4900: @code{rmohr@@infoac.rmi.de} (Rupert Mohr)
4901: @code{ianm@@icsbelf.co.uk} (Ian Moran)
4902: @code{brian@@ilinx.wimsey.bc.ca} (Brian J. Murrell)
4903: @code{service@@infohh.rmi.de} (Dirk Musstopf)
4904: @code{lyndon@@cs.athabascau.ca} (Lyndon Nerenberg)
4905: @code{rolf@@saans.north.de} (Rolf Nerstheimer)
4906: @code{tom@@smart.bo.open.de} (Thomas Neumann)
4907: @code{mnichols@@pacesetter.com}
4908: @code{nolan@@helios.unl.edu} (Michael Nolan)
4909: david nugent @code{<david@@csource.oz.au>}
4910: Petri Ojala @code{<ojala@@funet.fi>}
4911: @code{abekas!dragoman!mikep@@decwrl.dec.com} (Mike Park)
4912: Tim Peiffer @code{peiffer@@cs.umn.edu}
4913: @code{don@@blkhole.resun.com} (Don Phillips)
4914: "Mark Pizzolato 415-369-9366" @code{<mark@@infocomm.com>}
4915: @code{dplatt@@ntg.com} (Dave Platt)
4916: @code{eldorado@@tharr.UUCP} (Mark Powell)
4917: Mark Powell @code{<mark@@inet-uk.co.uk>}
4918: @code{pozar@@kumr.lns.com} (Tim Pozar)
4919: @code{putsch@@uicc.com} (Jeff Putsch)
4920: Jarmo Raiha @code{<jarmo@@ksvltd.FI>}
4921: Scott Reynolds @code{<scott@@clmqt.marquette.Mi.US>}
4922: @code{mcr@@Sandelman.OCUnix.On.Ca} (Michael Richardson)
4923: @code{arnold@@cc.gatech.edu} (Arnold Robbins)
4924: @code{ross@@sun490.fdu.edu} (Jeff Ross)
4925: Aleksey P. Rudnev @code{<alex@@kiae.su>}
4926: "Heiko W.Rupp" @code{<hwr@@pilhuhn.ka.sub.org>}
4927: @code{wolfgang@@wsrcc.com} (Wolfgang S. Rupprecht)
4928: @code{tbr@@tfic.bc.ca} (Tom Rushworth)
4929: @code{rsalz@@bbn.com} (Rich Salz)
4930: @code{sojurn!mike@@hobbes.cert.sei.cmu.edu} (Mike Sangrey)
4931: Nickolay Saukh @code{<nms@@ussr.EU.net>}
4932: Eric Schnoebelen @code{<eric@@cirr.com>}
4933: @code{scott@@geom.umn.edu}
4934: Igor V. Semenyuk @code{<iga@@argrd0.argonaut.su>}
4935: @code{uunet!gold.sub.org!root} (Christian Seyb)
4936: @code{s4mjs!mjs@@nirvo.nirvonics.com} (M. J. Shannon Jr.)
4937: @code{peter@@ficc.ferranti.com} (Peter da Silva)
4938: @code{frumious!pat} (Patrick Smith)
4939: @code{roscom!monty@@bu.edu} (Monty Solomon)
4940: Harlan Stenn @code{<harlan@@mumps.pfcs.com>}
4941: Ralf Stephan @code{<ralf@@ark.abg.sub.org>}
4942: @code{chs@@antic.apu.fi} (Hannu Strang)
4943: @code{ralf@@reswi.ruhr.de} (Ralf E. Stranzenbach)
4944: Shigeya Suzuki @code{<shigeya@@dink.foretune.co.jp>}
4945: @code{swiers@@plains.NoDak.edu}
4946: Oleg Tabarovsky @code{<olg@@olghome.pccentre.msk.su>}
4947: John Theus @code{<john@@theus.rain.com>}
4948: Karsten Thygesen @code{<karthy@@dannug.dk>}
4949: Graham Toal @code{<gtoal@@pizzabox.demon.co.uk>}
4950: @code{rmtodd@@servalan.servalan.com} (Richard Todd)
4951: Len Tower @code{<tower-prep@@ai.mit.edu>}
4952: Mark Towfiq @code{<justice!towfiq@@Eingedi.Newton.MA.US>}
4953: @code{mju@@mudos.ann-arbor.mi.us} (Marc Unangst)
4954: Tomi Vainio @code{<tomppa@@fidata.fi>}
4955: @code{vogel@@omega.ssw.de} (Andreas Vogel)
4956: @code{jv@@mh.nl} (Johan Vromans)
4957: @code{steve@@nshore.org} (Stephen J. Walick)
4958: @code{gerben@@rna.indiv.nluug.nl} (Gerben Wierda)
4959: @code{frnkmth!twwells.com!bill} (T. William Wells)
4960: Peter Wemm @code{<Peter_Wemm@@zeus.dialix.oz.au>}
4961: @code{mauxci!eci386!woods@@apple.com} (Greg A. Woods)
4962: Michael Yu.Yaroslavtsev @code{<mike@@yaranga.ipmce.su>}
4963: @code{jon@@console.ais.org} (Jon Zeeff)
4964: Matthias Zepf @code{<agnus@@amylnd.stgt.sub.org>}
4965: Eric Ziegast @code{<uunet!ziegast>}
4966: @end example
4967:
4968: @node Index (concepts), Index (configuration file), Acknowledgements, Top
4969: @unnumbered Concept Index
4970:
4971: @printindex cp
4972:
4973: @node Index (configuration file), , Index (concepts), Top
4974: @unnumbered Configuration File Index
4975:
4976: @printindex fn
4977:
4978: @contents
4979: @bye
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.