aboutsummaryrefslogtreecommitdiffstats
path: root/gnu/libexec/uucp
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/libexec/uucp')
-rw-r--r--gnu/libexec/uucp/ChangeLog1669
-rw-r--r--gnu/libexec/uucp/Makefile.inc4
-rw-r--r--gnu/libexec/uucp/NEWS119
-rw-r--r--gnu/libexec/uucp/README107
-rw-r--r--gnu/libexec/uucp/TODO265
-rw-r--r--gnu/libexec/uucp/VERSION2
-rw-r--r--gnu/libexec/uucp/common_sources/chat.c61
-rw-r--r--gnu/libexec/uucp/common_sources/config.h (renamed from gnu/libexec/uucp/common_sources/conf.h)92
-rw-r--r--gnu/libexec/uucp/common_sources/conn.c251
-rw-r--r--gnu/libexec/uucp/common_sources/conn.h25
-rw-r--r--gnu/libexec/uucp/common_sources/copy.c4
-rw-r--r--gnu/libexec/uucp/common_sources/cu.h2
-rw-r--r--gnu/libexec/uucp/common_sources/log.c226
-rw-r--r--gnu/libexec/uucp/common_sources/policy.h205
-rw-r--r--gnu/libexec/uucp/common_sources/prot.c10
-rw-r--r--gnu/libexec/uucp/common_sources/prot.h7
-rw-r--r--gnu/libexec/uucp/common_sources/sysdep.h50
-rw-r--r--gnu/libexec/uucp/common_sources/system.h87
-rw-r--r--gnu/libexec/uucp/common_sources/tcp.c53
-rw-r--r--gnu/libexec/uucp/common_sources/tli.c116
-rw-r--r--gnu/libexec/uucp/common_sources/trans.h24
-rw-r--r--gnu/libexec/uucp/common_sources/util.c50
-rw-r--r--gnu/libexec/uucp/common_sources/uuconf.h60
-rw-r--r--gnu/libexec/uucp/common_sources/uucp.h37
-rw-r--r--gnu/libexec/uucp/common_sources/uudefs.h25
-rw-r--r--gnu/libexec/uucp/contrib/Makefile.uurt36
-rw-r--r--gnu/libexec/uucp/contrib/README44
-rw-r--r--gnu/libexec/uucp/contrib/README-UURATE17
-rw-r--r--gnu/libexec/uucp/contrib/amiga.c43
-rw-r--r--gnu/libexec/uucp/contrib/dialHDB.c187
-rw-r--r--gnu/libexec/uucp/contrib/uucomp.shar552
-rw-r--r--gnu/libexec/uucp/contrib/uudemon.shar82
-rw-r--r--gnu/libexec/uucp/contrib/uupoll.shar2696
-rw-r--r--gnu/libexec/uucp/contrib/uurate.c2237
-rw-r--r--gnu/libexec/uucp/contrib/uurate.man257
-rwxr-xr-xgnu/libexec/uucp/contrib/uureroute.perl91
-rw-r--r--gnu/libexec/uucp/contrib/uusnap.c2
-rw-r--r--gnu/libexec/uucp/contrib/uutraf35
-rwxr-xr-xgnu/libexec/uucp/contrib/uuxconv50
-rw-r--r--gnu/libexec/uucp/contrib/xchat.c109
-rw-r--r--gnu/libexec/uucp/contrib/xchat.man14
-rw-r--r--gnu/libexec/uucp/cu/Makefile4
-rw-r--r--gnu/libexec/uucp/cu/cu.165
-rw-r--r--gnu/libexec/uucp/cu/cu.c157
-rw-r--r--gnu/libexec/uucp/doc/uucp.texi4036
-rw-r--r--gnu/libexec/uucp/libunix/MANIFEST5
-rw-r--r--gnu/libexec/uucp/libunix/Makefile21
-rw-r--r--gnu/libexec/uucp/libunix/app3.c5
-rw-r--r--gnu/libexec/uucp/libunix/app4.c5
-rw-r--r--gnu/libexec/uucp/libunix/cohtty.c21
-rw-r--r--gnu/libexec/uucp/libunix/corrup.c33
-rw-r--r--gnu/libexec/uucp/libunix/cusub.c64
-rw-r--r--gnu/libexec/uucp/libunix/cwd.c7
-rw-r--r--gnu/libexec/uucp/libunix/detach.c10
-rw-r--r--gnu/libexec/uucp/libunix/dirent.c2
-rw-r--r--gnu/libexec/uucp/libunix/dup2.c2
-rw-r--r--gnu/libexec/uucp/libunix/epopen.c4
-rw-r--r--gnu/libexec/uucp/libunix/filnam.c6
-rw-r--r--gnu/libexec/uucp/libunix/fsusg.c128
-rw-r--r--gnu/libexec/uucp/libunix/ftw.c12
-rw-r--r--gnu/libexec/uucp/libunix/indir.c2
-rw-r--r--gnu/libexec/uucp/libunix/init.c28
-rw-r--r--gnu/libexec/uucp/libunix/iswait.c2
-rw-r--r--gnu/libexec/uucp/libunix/jobid.c2
-rw-r--r--gnu/libexec/uucp/libunix/lcksys.c39
-rw-r--r--gnu/libexec/uucp/libunix/locfil.c12
-rw-r--r--gnu/libexec/uucp/libunix/lock.c279
-rw-r--r--gnu/libexec/uucp/libunix/loctim.c4
-rw-r--r--gnu/libexec/uucp/libunix/mail.c52
-rw-r--r--gnu/libexec/uucp/libunix/mkdir.c2
-rw-r--r--gnu/libexec/uucp/libunix/mkdirs.c20
-rw-r--r--gnu/libexec/uucp/libunix/move.c24
-rw-r--r--gnu/libexec/uucp/libunix/opensr.c24
-rw-r--r--gnu/libexec/uucp/libunix/pause.c10
-rw-r--r--gnu/libexec/uucp/libunix/picksb.c14
-rw-r--r--gnu/libexec/uucp/libunix/pipe.c294
-rw-r--r--gnu/libexec/uucp/libunix/priv.c24
-rw-r--r--gnu/libexec/uucp/libunix/proctm.c6
-rw-r--r--gnu/libexec/uucp/libunix/recep.c12
-rw-r--r--gnu/libexec/uucp/libunix/run.c52
-rw-r--r--gnu/libexec/uucp/libunix/seq.c4
-rw-r--r--gnu/libexec/uucp/libunix/serial.c666
-rw-r--r--gnu/libexec/uucp/libunix/signal.c2
-rw-r--r--gnu/libexec/uucp/libunix/sindir.c5
-rw-r--r--gnu/libexec/uucp/libunix/sleep.c12
-rw-r--r--gnu/libexec/uucp/libunix/spawn.c55
-rw-r--r--gnu/libexec/uucp/libunix/splcmd.c44
-rw-r--r--gnu/libexec/uucp/libunix/spool.c43
-rw-r--r--gnu/libexec/uucp/libunix/srmdir.c6
-rw-r--r--gnu/libexec/uucp/libunix/statsb.c126
-rw-r--r--gnu/libexec/uucp/libunix/status.c6
-rw-r--r--gnu/libexec/uucp/libunix/strerr.c2
-rw-r--r--gnu/libexec/uucp/libunix/tmpfil.c5
-rw-r--r--gnu/libexec/uucp/libunix/uacces.c2
-rw-r--r--gnu/libexec/uucp/libunix/ufopen.c2
-rw-r--r--gnu/libexec/uucp/libunix/walk.c5
-rw-r--r--gnu/libexec/uucp/libunix/wldcrd.c7
-rw-r--r--gnu/libexec/uucp/libunix/work.c92
-rw-r--r--gnu/libexec/uucp/libunix/xqtfil.c11
-rw-r--r--gnu/libexec/uucp/libunix/xqtsub.c32
-rw-r--r--gnu/libexec/uucp/libuuconf/MANIFEST1
-rw-r--r--gnu/libexec/uucp/libuuconf/Makefile26
-rw-r--r--gnu/libexec/uucp/libuuconf/README4
-rw-r--r--gnu/libexec/uucp/libuuconf/addblk.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/addstr.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/allblk.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/alloc.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/alloc.h2
-rw-r--r--gnu/libexec/uucp/libuuconf/base.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/bool.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/callin.c118
-rw-r--r--gnu/libexec/uucp/libuuconf/calout.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/chatc.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/cmdarg.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/cmdfil.c9
-rw-r--r--gnu/libexec/uucp/libuuconf/cmdlin.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/debfil.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/deblev.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/diacod.c6
-rw-r--r--gnu/libexec/uucp/libuuconf/dial.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/diasub.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/dnams.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/errno.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/errstr.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/filnam.c6
-rw-r--r--gnu/libexec/uucp/libuuconf/freblk.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/fredia.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/free.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/freprt.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/fresys.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/grdcmp.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/hdial.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/hdnams.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/hinit.c8
-rw-r--r--gnu/libexec/uucp/libuuconf/hlocnm.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/hport.c46
-rw-r--r--gnu/libexec/uucp/libuuconf/hrmunk.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/hsinfo.c17
-rw-r--r--gnu/libexec/uucp/libuuconf/hsnams.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/hsys.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/hunk.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/iniglb.c7
-rw-r--r--gnu/libexec/uucp/libuuconf/init.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/int.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/lckdir.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/lineno.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/llocnm.c15
-rw-r--r--gnu/libexec/uucp/libuuconf/local.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/locnm.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/logfil.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/maxuxq.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/mrgblk.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/paramc.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/port.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/prtsub.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/pubdir.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/rdlocs.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/rdperm.c36
-rw-r--r--gnu/libexec/uucp/libuuconf/reliab.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/remunk.c19
-rw-r--r--gnu/libexec/uucp/libuuconf/runuxq.c77
-rw-r--r--gnu/libexec/uucp/libuuconf/sinfo.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/snams.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/split.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/spool.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/stafil.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/syshdr.h38
-rw-r--r--gnu/libexec/uucp/libuuconf/syssub.c71
-rw-r--r--gnu/libexec/uucp/libuuconf/tcalou.c16
-rw-r--r--gnu/libexec/uucp/libuuconf/tdial.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/tdialc.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/tdnams.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/tgcmp.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/thread.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/time.c9
-rw-r--r--gnu/libexec/uucp/libuuconf/tinit.c123
-rw-r--r--gnu/libexec/uucp/libuuconf/tlocnm.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/tport.c12
-rw-r--r--gnu/libexec/uucp/libuuconf/tportc.c78
-rw-r--r--gnu/libexec/uucp/libuuconf/tsinfo.c30
-rw-r--r--gnu/libexec/uucp/libuuconf/tsnams.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/tsys.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/tval.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/ugtlin.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/unk.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/uucnfi.h12
-rw-r--r--gnu/libexec/uucp/libuuconf/val.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/vinit.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/vport.c9
-rw-r--r--gnu/libexec/uucp/libuuconf/vsinfo.c16
-rw-r--r--gnu/libexec/uucp/libuuconf/vsnams.c4
-rw-r--r--gnu/libexec/uucp/libuuconf/vsys.c4
-rw-r--r--gnu/libexec/uucp/libuucp/MANIFEST1
-rw-r--r--gnu/libexec/uucp/libuucp/Makefile7
-rw-r--r--gnu/libexec/uucp/libuucp/buffer.c24
-rw-r--r--gnu/libexec/uucp/libuucp/debug.c10
-rw-r--r--gnu/libexec/uucp/libuucp/getlin.c2
-rw-r--r--gnu/libexec/uucp/libuucp/parse.c20
-rw-r--r--gnu/libexec/uucp/libuucp/status.c18
-rw-r--r--gnu/libexec/uucp/libuucp/strtou.c21
-rw-r--r--gnu/libexec/uucp/sample/Makefile6
-rw-r--r--gnu/libexec/uucp/sample/call.sample (renamed from gnu/libexec/uucp/sample/call)0
-rw-r--r--gnu/libexec/uucp/sample/config.sample (renamed from gnu/libexec/uucp/sample/config)0
-rw-r--r--gnu/libexec/uucp/sample/dial.sample (renamed from gnu/libexec/uucp/sample/dial)6
-rw-r--r--gnu/libexec/uucp/sample/dialcode.sample (renamed from gnu/libexec/uucp/sample/dialcode)0
-rw-r--r--gnu/libexec/uucp/sample/passwd.sample (renamed from gnu/libexec/uucp/sample/passwd)0
-rw-r--r--gnu/libexec/uucp/sample/port.sample (renamed from gnu/libexec/uucp/sample/port)0
-rw-r--r--gnu/libexec/uucp/sample/sys1.sample (renamed from gnu/libexec/uucp/sample/sys1)0
-rw-r--r--gnu/libexec/uucp/sample/sys2.sample (renamed from gnu/libexec/uucp/sample/sys2)0
-rw-r--r--gnu/libexec/uucp/tstuu.c25
-rw-r--r--gnu/libexec/uucp/uuchk/Makefile4
-rw-r--r--gnu/libexec/uucp/uuchk/uuchk.c149
-rw-r--r--gnu/libexec/uucp/uucico/Makefile6
-rw-r--r--gnu/libexec/uucp/uucico/prote.c4
-rw-r--r--gnu/libexec/uucp/uucico/protf.c14
-rw-r--r--gnu/libexec/uucp/uucico/protg.c83
-rw-r--r--gnu/libexec/uucp/uucico/proti.c261
-rw-r--r--gnu/libexec/uucp/uucico/protj.c7
-rw-r--r--gnu/libexec/uucp/uucico/prott.c7
-rw-r--r--gnu/libexec/uucp/uucico/protz.c4
-rw-r--r--gnu/libexec/uucp/uucico/rec.c238
-rw-r--r--gnu/libexec/uucp/uucico/send.c271
-rw-r--r--gnu/libexec/uucp/uucico/time.c10
-rw-r--r--gnu/libexec/uucp/uucico/trans.c118
-rw-r--r--gnu/libexec/uucp/uucico/uucico.8176
-rw-r--r--gnu/libexec/uucp/uucico/uucico.c762
-rw-r--r--gnu/libexec/uucp/uucico/xcmd.c31
-rw-r--r--gnu/libexec/uucp/uuconv/Makefile4
-rw-r--r--gnu/libexec/uucp/uuconv/uuconv.c130
-rw-r--r--gnu/libexec/uucp/uucp/Makefile4
-rw-r--r--gnu/libexec/uucp/uucp/uucp.155
-rw-r--r--gnu/libexec/uucp/uucp/uucp.c186
-rw-r--r--gnu/libexec/uucp/uulog/uulog.c132
-rw-r--r--gnu/libexec/uucp/uuname/uuname.c88
-rw-r--r--gnu/libexec/uucp/uupick/uupick.c81
-rw-r--r--gnu/libexec/uucp/uusched/uusched.in6
-rw-r--r--gnu/libexec/uucp/uustat/uustat.1404
-rw-r--r--gnu/libexec/uucp/uustat/uustat.c395
-rw-r--r--gnu/libexec/uucp/uuto/uuto.in6
-rw-r--r--gnu/libexec/uucp/uux/Makefile4
-rw-r--r--gnu/libexec/uucp/uux/uux.197
-rw-r--r--gnu/libexec/uucp/uux/uux.c295
-rw-r--r--gnu/libexec/uucp/uuxqt/Makefile7
-rw-r--r--gnu/libexec/uucp/uuxqt/uuxqt.837
-rw-r--r--gnu/libexec/uucp/uuxqt/uuxqt.c292
245 files changed, 18438 insertions, 3760 deletions
diff --git a/gnu/libexec/uucp/ChangeLog b/gnu/libexec/uucp/ChangeLog
index 48a52b75a285..82353fff56a3 100644
--- a/gnu/libexec/uucp/ChangeLog
+++ b/gnu/libexec/uucp/ChangeLog
@@ -1,25 +1,1260 @@
-Sat Feb 13 15:57:30 1993 Ian Lance Taylor (ian@comton.airs.com)
+Thu May 5 23:15:11 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Released version 1.05.
+
+ * Makefile.in (doc-dist): Put uucp.ps in uucp-doc-$(VERSION).
+
+Sun May 1 23:41:49 1994 Ian Lance Taylor (ian@airs.com)
+
+ * uuchk.c (ikshow_port): Show reliability information.
+ (ukshow_dialer): Likewise.
+ (ukshow_reliable): New function.
+
+Sat Apr 16 22:28:10 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Andrew A. Chernov: uucico.c (main): Pass 'z' to getopt.
+ (uhelp): Mention -z aka --try-next.
+
+ * log.c (ustats): Report failed transfers when HAVE_HDB_LOGGING.
+
+Wed Apr 13 23:07:20 1994 Ian Lance Taylor (ian@airs.com)
+
+ * prot.c (fsend_data): If no room in receive buffer, just write
+ the data out, don't call fconn_io.
+
+Tue Apr 12 21:55:32 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Spider Boardman: unix/serial.c (fsysdep_modem_end_dial): Set
+ terminal characteristics of reopened port.
+
+Sun Apr 10 18:05:34 1994 Ian Lance Taylor (ian@airs.com)
+
+ * send.c (flocal_send_fail): Always call fsysdep_did_work.
+ (flocal_send_await_reply): Don't call flocal_send_fail if we are
+ going to call fsend_exec_file_init. Only call
+ fsend_exec_file_init if fnever is TRUE. Pass fnever to
+ flocal_send_cancelled using the qinfo->fsent flag.
+ (flocal_send_cancelled): Only call fsend_exec_file_init if
+ qinfo->fsent is TRUE.
+
+ * unix/statsb.c (fsysdep_lock_status): If HAVE_QNX_LOCKFILES,
+ initialize painid to NULL.
+
+Tue Apr 5 23:09:00 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Released version gamma 1.05.
+
+ * Makefile.in (VERSION): Changed to gamma1.05.
+
+ * uucico.c (fcall): Return TRUE if -C was used and no call was
+ made because there was no work.
+
+Mon Apr 4 20:29:30 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Chris Lewis: unix/serial.c: Include <sys/ioctl.h> if
+ HAVE_TXADDCD. Check for HAVE_TXADDCD rather than ifdef TXADDCD or
+ TXDELCD.
+
+ * configure.in: Check for TXADDCD in <sys/ioctl.h>.
+ * config.h.in (HAVE_TXADDCD): New configuration macro.
+
+Sun Apr 3 14:05:30 1994 Ian Lance Taylor (ian@airs.com)
+
+ * send.c (flocal_send_request): Queue stransfer structure up
+ before sending any command or data, because sending data may cause
+ data to be received for this stransfer, and we must be prepared to
+ handle it correctly.
+ (fremote_rec_reply): Likewise.
+ * rec.c (flocal_rec_send_request, fremote_send_reply): Likewise.
+ (fremote_send_fail_send): Likewise.
+ * xcmd.c (flocal_xcmd_request): Likewise.
+
+ * Chris Lewis: unix/serial.c (fsserial_hardflow): Add support for
+ AIX TXADDCD and 3b1 CTSCD.
+
+Sat Apr 2 00:04:30 1994 Ian Lance Taylor (ian@airs.com)
+
+ * policy.h (USE_TRADITIONAL_STATUS): Permit this to be defined.
+ * lib/status.c: Control initialization of azStatus based on
+ USE_TRADITIONAL_STATUS rather than SPOOLDIR_HDB || SPOOLDIR_SVR4.
+
+Fri Apr 1 23:52:09 1994 Ian Lance Taylor (ian@airs.com)
+
+ * log.c (ulog): When using HAVE_HDB_LOGGING, force the program
+ name to lower case when using it as a file name.
+
+ * send.c (flocal_send_await_reply): Correct code to really not
+ decrement number of channels to one.
+ * rec.c (flocal_rec_await_reply): Likewise.
+
+Wed Mar 30 22:57:30 1994 Ian Lance Taylor (ian@airs.com)
+
+ * lib/buffer.c (ubuffree): Change ioff from size_t to int to avoid
+ HP/UX compiler bug.
+
+ * configure.in: Make sure that <utime.h> defines struct utimbuf
+ before assuming that it is present.
+
+Tue Mar 29 23:00:15 1994 Ian Lance Taylor (ian@airs.com)
+
+ * uuconf/filnam.c: Use UUCONF_CONST, not const, to match
+ declaration in uuconf.h.
+
+Mon Mar 28 20:06:00 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Andrew A. Chernov: policy.h: For several macros, add commented
+ out values appropriate for some free BSD distributions.
+ * Makefile.in: Likewise.
+
+ * uucico.c (icallin_cmp): Use pointer, not void *.
+ * uuconf/callin.c (struct sinfo, uuconf_callin): Likewise.
+
+ * Chris Lewis: uuconv.c (fvperm_string_cmp, fvperm_array_cmp): AIX
+ 3.2.5 cc can't handle conditional expressions in if conditions.
+
+Sun Mar 27 15:04:27 1994 Ian Lance Taylor (ian@airs.com)
+
+ * send.c (flocal_send_fail): Don't assume that qtrans is not NULL.
+
+ * Jeff Ross, Stephen J. Walick: Makefile.in (uusched): Substitute
+ for @SBINDIR@, not @BINDIR@.
+
+ * configure.in: Make sure that <dirent.h> defines struct dirent
+ before assuming that it is present.
+
+ * Benoit Grange: unix/detach.c (usysdep_detach): Correct type of
+ HAVE_BSD_SETPGRP for HAVE_BSD_PGRP.
+
+Sat Mar 26 12:59:36 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Andrew A. Chernov: uucico.c (asLongopts): Add --try-next as
+ synonym for -z.
+ (main): If -z, call fcall with ftrynext as TRUE.
+ (fcall): Add ftrynext argument. If ftrynext is TRUE, try the next
+ alternate if a call fails.
+
+Fri Mar 25 22:37:51 1994 Ian Lance Taylor (ian@airs.com)
+
+ * lib/parse.c (fparse_cmd): If we get a decimal 666 or 777 for the
+ mode, turn it into an octal 0666 or 0777.
+
+ * send.c (flocal_send_fail): Accept qdaemon argument rather than
+ qsys. Changed all callers. If we are going to send an execution
+ file, don't call fsysdep_did_work.
+
+ * protg.c (fgstart): Say ``sending'' and ``receiving'' instead of
+ ``remote'' and ``local'' in log message.
+ * proti.c (fijstart): Likewise.
+
+Thu Mar 24 22:40:49 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Gert Doering: uuchk.c (ikshow_port): Don't use qtli for a TCP
+ port.
+
+ * Makefile.in (uusched, uuto): Fix typo in sed command.
+
+ * unix/mail.c (fsysdep_mail): Add casts to avoid warnings.
+ * uuconf/runuxq.c (uuconf_runuuxqt): Likewise.
+
+ * Emmanuel Mogenet: unix/pipe.c (fspipe_dial): Make consistently
+ static.
+
+ * unix/serial.c (fsserial_open): Only strip /dev/ from the start
+ of a device name, rather than dropping everything before the last
+ slash.
+
+ * sysh.unx (ftw): Change stat argument to not be const pointer.
+ * unix/ftw.c (ftw_dir, ftw): Change stat argument to func argument
+ to not be const pointer.
+ * unix/srmdir.c (isremove_dir): Change stat argument to not be
+ const pointer.
+ * unix/walk.c (iswalk_dir): Likewise.
+
+Wed Mar 23 20:02:26 1994 Ian Lance Taylor (ian@airs.com)
+
+ * conn.c (fconn_break): Remove incorrect indirection of function
+ pointer.
+
+ * unix/mkdirs.c (fsysdep_make_dirs): Some systems can return
+ EACCES, not EEXIST, when a directory exists.
+
+ * configure.in: Fix STAT_STATFS2_FSIZE test.
+ * configure: Regenerated.
+
+Tue Mar 22 01:32:21 1994 Ian Lance Taylor (ian@airs.com)
+
+ * uucico.c (main): Skip a leading dash in argv[0] which is
+ probably the result of being invoked by the Unix login program.
+
+ * configure.in: Check for sys/time.h.
+ * config.h.in (HAVE_SYS_TIME_H): Define.
+
+ * unix/serial.c (fsysdep_modem_begin_dial): Correct type of q for
+ qsysdep.
+
+ * uux.c (main): Check for zXnames being NULL.
+
+Sat Mar 19 14:07:31 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Released version beta 1.05.
+
+ * Makefile.in (uucp.info): Use -o argument to force info files to
+ be created in objdir.
+ (doc-dist): Get README-DOC from $(srcdir).
+
+ * lib/debug.c (iDebug, azDebug_names, idebug_parse): Only compile
+ if DEBUG > 1.
+
+Mon Feb 14 22:46:49 1994 Ian Lance Taylor (ian@airs.com)
+
+ * lib/strtou.c: New file, for strtoul.
+ * lib/MANIFEST: List strtou.c.
+ * configure.in: Check for strtoul, add strtou.o to LIBOBJS if not
+ there.
+ * config.h.in (HAVE_STRTOUL): Define.
+ * uucp.h (strtoul): Declare.
+
+Mon Jan 31 20:17:30 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Makefile.in, lib/Makefile.in, unix/Makefile.in,
+ uuconf/Makefile.in: Use $(CFLAGS) after all other flags.
+
+Sun Jan 30 14:34:51 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Makefile.in (clean, distclean, dist, doc-dist): Remove .tar.gz
+ file, not .tar.Z one.
+ (dist, doc-dist): Use gzip --best, not compress.
+
+ * Makefile.in (VERSION): Set to beta1.05.
+
+ * cu.c, uuchk.c, uucico.c, uuconv.c, uucp.c, uulog.c, uuname.c,
+ uupick.c, uustat.c, uux.c, uuxqt.c: Updated copyright date.
+
+ * conn.c (fconn_init): Added third argument: type of standard
+ input port.
+ * conn.h (fconn_init): Updated declaration.
+ * uucico.c (asLongopts): Added --stdin, synonym for -i.
+ (main): Accept -i TLI to set standard input to be of type TLI.
+ Pass appropriate additional argument to fconn_init.
+ (uhelp): Updated.
+ (fconn_call, iuport_lock): Changed all calls to fconn_init.
+ * cu.c: Changed all calls to fconn_init.
+ * prot.c, protj.c: Include uuconf.h before conn.h.
+ * Makefile.in (prot.o, protj.o): Updated.
+
+ * unix/serial.c (fsysdep_conn_read): Permit up to two EWOULDBLOCK
+ error returns from read before quitting.
+
+Sat Jan 22 16:48:41 1994 Ian Lance Taylor (ian@airs.com)
+
+ * uuconf/hinit.c: Don't treat lines with leading whitespace as
+ comments in Sysfiles.
+
+ * log.c: Don't require ANSI C to use vfprintf, just require
+ stdarg.h and prototypes. Required for Alpha cc support.
+
+ * configure.in: Check for prototype support. Check for stdarg.h.
+ When looking for socket and t_open check for "-lsocket -lnsl"
+ after plain "-lnsl".
+ * config.h.in (HAVE_PROTOTYPES, HAVE_STDARG_H): New macros.
+ * uucp.h: Demand that an ANSI C compiler support prototypes. If
+ HAVE_PROTOTYPES is 1 for Classic C, defined P(x) to be x.
+
+ * configure: Upgraded to autoconf 1.7.
+
+ * protg.c (fgstart): Ensure that window size is reasonable.
+
+ * protg.c (fvstart): Change default packet size from 512 to 1024.
+
+ * trans.h (struct sdaemon): Added zconfig, irunuuxqt, and
+ cxfiles_received fields.
+ (fspawn_uuxqt): Declare.
+ * uucico.c (fcall, flogin_prompt, faccept_call): Added zconfig and
+ fuuxqt arguments; changed all callers.
+ (main): Use fspawn_uuxqt to invoke uuxqt, and only do it if
+ uuconf_runuuxqt returns UUCONF_RUNUUXQT_ONCE.
+ (fcall, faccept_call): Initialize new struct sdaemon fields.
+ Spawn uuxqt if uuconf_runuuxqt returned UUCONF_RUNUUXQT_PERCALL or
+ if it returned a positive number and execution files have arrived
+ since the last time uuxqt was spawned.
+ (fspawn_uuxqt): New function.
+ * rec.c (frec_file_end): Spawn uuxqt if enough execution files
+ have been received.
+
+ * uuconf.h (UUCONF_RUNUUXQT_NEVER, UUCONF_RUNUUXQT_ONCE,
+ UUCONF_RUNUUXQT_PERCALL): New #define constants.
+ (uuconf_runuuxqt): Declare.
+ * uuconf/runuxq.c: New file.
+ * uuconf/uucnfi.h (struct sprocess); Added zrunuuxqt field.
+ * uuconf/tinit.c (asCmds): Added "run-uuxqt".
+ * uuconf/iniglb.c (_uuconf_iinit_global): Initialize zrunuuxqt
+ field.
+ * uuconf/MANIFEST, uuconf/Makefile.in: Handle runuxq.c.
+
+ * system.h (fsysdep_run): Added ffork argument.
+ * unix/run.c (fsysdep_run): Added ffork argument.
+ * uucico.c (main), uux.c (main), uucp.c (main): Changed calls to
+ fsysdep_run to pass ffork argument as FALSE.
+
+Fri Jan 14 19:40:20 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Chip Salzenberg: unix/splcmd.c (zsysdep_spool_commands): More
+ fitting value for size of abtempfile.
+
+Mon Jan 10 22:46:52 1994 Ian Lance Taylor (ian@airs.com)
+
+ * unix/recep.c (fsysdep_remember_reception): Create directory with
+ mode of 0755, not 0777.
+
+Mon Jan 3 20:34:35 1994 Ian Lance Taylor (ian@airs.com)
+
+ * protg.c (fgprocess_data): Don't believe the ACK of an out of
+ order packet.
+
+ * uucico.c (asProtocols): Added 'v'.
+ * prot.h (fvstart): Declare.
+ * protg.c (fvstart): New function.
+
+Sun Jan 2 15:34:12 1994 Ian Lance Taylor (ian@airs.com)
+
+ * uucico.c (main), uucp.c (main), uux.c (main): Pass -I argument
+ to invoked program.
+
+ * uustat.c (JOB_REJUVENATE): Define.
+ (asLongopts): Add "rejuvenate-all".
+ (main, ususage): Handle -R.
+ (fsworkfile_show, fsexecutions): Handle JOB_REJUVENATE.
+ * system.h (fsysdep_touch_file): Declare.
+ * unix/statsb.c (issettime): Rename from ussettime.
+ (fsysdep_touch_file): Create.
+
+ * Jim Avera: system.h: (INIT_NOCLOSE): Define.
+ * unix/init.c (usysdep_initialize): If INIT_NOCLOSE is set, don't
+ close all open descriptors.
+
+ * Allen Delaney: tli.c: Don't declare t_alloc if we have
+ <tiuser.h>, since it can cause conflicts.
+
+ * configure.in: Call AC_CONST.
+ * config.h.in: Added #undef const for configure to comment out.
+ * uucp.h: Don't undefine const here.
+
+ * Spider Boardman: uucico.c (main): Correct error message.
+ uux.c (main), uucp.c (main): Call uucico with -C option.
+
+ * tstuu.c (uprepare_test): Don't put the obsolete pty command into
+ the port file.
+
+ * spawn.c (ixsspawn): Set close-on-exec flag for both ends of
+ new pipe.
+
+ * Andrew A. Chernov: unix/serial.c (ICLEAR_IFLAG): Clear IMAXBEL
+ if it is defined.
+ (ICLEAR_LFLAG): Clear PENDIN if it is defined.
+
+ * send.c (flocal_send_file_init): If stat fails, discard the
+ command and save the temporary file.
+ (flocal_send_fail): Cleaned up zsysdep_save_temp_file call.
+
+Thu Dec 23 00:55:22 1993 Ian Lance Taylor (ian@airs.com)
+
+ * Martin Tomes: spawn.c (ixsspawn): On ISC, call __setostype
+ before execve.
+
+Wed Dec 22 00:06:25 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uuconf/tport.c (ipunknown): Set UUCONF_CMDTABRET_EXIT if an
+ error is found.
+
+ * uucico.c (asLongopts): Add --login as a synonym for -u.
+ (main): Permit a privileged user to use -u to set the login name
+ rather than always using zsysdep_login_name ().
+ (flogin_prompt): Accept login name as an argument. If non-null,
+ use it rather than prompting for one.
+ (uhelp): Document new --login option.
+ * uucico.8: Document new --login option.
+ * unix/priv.c: New file, containing fsysdep_privileged.
+ * unix/statsb.c (fsysdep_privileged): Moved to priv.c.
+ * unix/MANIFEST, unix/Makefile.in: Support new priv.c file.
+
+ * uuchk.c (ikshow_port): Print a note when using the port name as
+ a device name.
+
+Tue Dec 21 00:01:40 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uucico.c (fcall): Ignore status file times in the future when
+ deciding whether a retry is permitted.
+
+ * detach.c (usysdep_detach): If it forks, output a debugging
+ message with the old and new process IDs.
+
+ * Scott Ballantyne: unix/spawn.c (ixsspawn): If fkeepuid is TRUE,
+ try to set the real user and group ID to the effective user and
+ group ID. This will not work on System V derived systems, but
+ should do no harm.
+ * unix/xqtsub.c (fsysdep_execute): Pass fkeepuid as TRUE to
+ ixsspawn.
+ * unix/epopen.c (espopen): Likewise.
+
+ * uucico.c (faccept_call): Use correct default for
+ max-remote-debug.
+
+ * uuconf/tportc.c (ipdialer): Don't core dump if the port name is
+ NULL, as it is for the default port.
+
+ * unix/xqtsub.c (fsysdep_xqt_check_file): Do not permit the name
+ ``..'', or strings starting with ``../''.
+
+ * proti.c (fijstart): Send a fourth byte in the SYNC packet with
+ the number of channels.
+ (fiprocess_packet): If a SYNC packet has a fourth byte, use it to
+ set the number of channels.
+
+ * rec.c (flocal_rec_await_reply): Handle RN9 (no channels
+ available on remote).
+ * send.c (flocal_send_await_reply): Handle SN9 (no channels
+ available on remote).
+
+ * trans.h (struct sdaemon): Added cchans field.
+ * uucico.c (fcall, fdo_call, faccept_call): Initialize cchans.
+ * trans.c (utchanalc, fcheck_queue, floop): Use qdaemon->cchans,
+ not qdaemon->qproto->cchans.
+ * send.c (flocal_send_request, flocal_send_await_reply): Likewise.
+ * rec.c (fremote_send_fail): Likewise.
+
+Sun Dec 19 19:44:31 1993 Ian Lance Taylor (ian@airs.com)
+
+ * proti.c (cIack_frequency): New static variable.
+ (asIproto_params): New protocol parameter ack-frequency.
+ (fijstart): If cIack_frequency is not set, set it to half the
+ window size.
+ (fishutdown): Clear cIack_frequency.
+ (fiprocess_data): Use cIack_frequency to determine when to send an
+ acknowledgement, rather than always sending one at half the window
+ size.
+
+ * uuconf/cmdfil.c (uuconf_cmd_file): Free zline.
+
+ * uuconf/callin.c (uuconf_callin): Treat colon as a field
+ delimiter, for Unix /etc/passwd support.
+
+ * unix/xqtsub.c (zsysdep_find_command): If file named with
+ absolute path does not exist, give a reasonable error message.
+
+ * uuconf/rdperm.c (ihadd_norw): Ignore use of empty string with
+ NOREAD or NOWRITE, rather than denying everything.
+
+ * Chip Salzenberg: uulog.c (main): Set zluser correctly under
+ HAVE_HDB_LOGGING.
+
+ * Chip Salzenberg: protz.c (izrecv_hdr): Use %lx, not %x.
+
+Sun Dec 12 19:24:35 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uucp.c (uccopy): Null terminate name of forwarding system.
+
+Mon Nov 22 21:12:41 1993 Ian Lance Taylor (ian@airs.com)
+
+ * unix/tmpfil.c: Include "uudefs.h".
+ * unix/Makefile.in: Changed accordingly.
+
+ * log.c (zstpcpy): New function.
+ (ulog): Output to log file with a single call to fprintf.
+
+ * uucp.c (uccopy): Clarified "not permitted to send" error.
+
+ * log.c (ulog): If debugging is on, output all log messages to
+ debugging file.
+
+ * uucico.c (fdo_call): Changed "Bad initialization string" error
+ message.
+
+ * unix/lock.c (fsdo_lock): Print date a stale lock was last
+ modified.
+
+ * uucico.c (uaccept_call_cleanup): Call ulog_system (NULL).
+
+Sun Nov 21 17:04:27 1993 Ian Lance Taylor (ian@airs.com)
+
+ * Joe Wells: policy.h: Added new parameter LOG_DEVICE_PREFIX.
+ * unix/serial.c (fsserial_open): Use it.
+
+ * Makefile.in: Always use CFLAGS as well as LDFLAGS when linking.
+
+ * Joe Wells: policy.h: Added new parameter QNX_LOG_NODE_ID.
+ * log.c (ulog): Log the QNX node ID if QNX_LOG_NODE_ID is set.
+
+ * Joe Wells: unix/serial.c: Support QNX dev_info function for
+ serial port locking.
+
+ * Joe Wells: unix/fsusg.c: Support QNX disk_space function.
+ * unix/Makefile.in: fsusg.o now depends upon uudefs.h.
+
+ * Joe Wells: policy.h: Changed PS_PROGRAM default for __QNX__.
+ Added HAVE_QNX_LOCKFILES. Rearranged LOCKFILE defines to permit
+ some default selections.
+ * sysh.unx: Removed LOCKFILES sanity check.
+ * unix/lock.c (fsdo_lock, fsqnx_stale), unix/serial.c
+ (fsserial_lockfile), unix/statsb.c (fsysdep_lock_status): Added
+ support for HAVE_QNX_LOCKFILES.
+
+ * configure.in, config.h.in, policy.h: Moved MAIL_PROGRAM to
+ policy.h. Added MAIL_PROGRAM_TO_BODY and
+ MAIL_PROGRAM_SUBJECT_BODY.
+ * unix/mail.c: Updated accordingly.
+
+ * uucico.c (main): Don't make -p imply -e.
+ (uhelp): Modified accordingly.
+ * uucico.8: Modified accordingly.
+
+Mon Nov 1 21:34:36 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uucico.c (main): Call fconn_close and fconn_open rather than
+ calling fconn_reset.
+ * conn.h (struct sconncmds): Removed pfreset field.
+ (fconn_reset): Removed declaration.
+ * conn.c (fconn_reset): Removed.
+ * tcp.c (ftcp_reset): Removed.
+ (ftcp_open): Save pid in ssysdep_conn information.
+ (ftcp_close): If pid has changed, return FALSE.
+ * tli.c (ftli_reset): Removed.
+ (ftli_open): Save pid in ssysdep_conn information.
+ (ftli_close): If pid has changed, return FALSE.
+ * unix/pipe.c (fspipe_close): Replaced with fspipe_reset body.
+ (fspipe_reset): Removed.
+ (fspipe_dial): Call fspipe_close, not fspipe_reset.
+ * unix/serial.c (fsserial_reset, fsstdin_reset): Removed.
+ (fsysdep_modem_begin_dial): Hangup terminal here, rather than
+ calling fconn_reset.
+
+ * send.c (fremote_rec_reply): If we want to request hangup, send
+ an M after the mode.
+ * rec.c (flocal_rec_await_reply): If there an M after the mode,
+ the remote is requesting a hangup.
+
+Sun Oct 31 23:43:40 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uux.c (zXnames): New static variable to hold list of file names
+ being sent.
+ (uxadd_name): Function to add a new name.
+ (main, uxadd_send_file): Call uxadd_name.
+ (main): Include zXnames in log message.
+
+Mon Oct 18 00:23:27 1993 Ian Lance Taylor (ian@airs.com)
+
+ * proti.c (fijstart): Ensure that packet size and window size are
+ reasonable; restrict window size to 16.
+
+ * proti.c (iIforced_remote_winsize): Removed, along with all
+ references.
+ (asIproto_params): Removed "remote-window".
+
+Sun Oct 17 22:15:14 1993 Ian Lance Taylor (ian@airs.com)
+
+ * Mark Delany: protg.c (cGremote_duprrs): New static variable.
+ (fgstart): Initialize it.
+ (fgshutdown): Count rejects as cGremote_duprrs + cGremote_rejects.
+ (fgprocess_data): If cGremote_rejects is non-zero, don't treat
+ duplicate RR as reject. Count duplicate RR's in cGremote_duprrs,
+ not cGremote_rejects.
+
+ * Mark Delany: unix/serial.c (fsdouble_chat, fsysdep_conn_chat):
+ After running a chat program, reread the terminal characteristics.
+
+Wed Oct 13 20:46:46 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uucico.c (fdo_call): Fix typo.
+
+Thu Oct 7 22:28:45 1993 Ian Lance Taylor (ian@airs.com)
+
+ * unix/app3.c (zsappend3), unix/app4.c (zsappend4), unix/ftw.c
+ (ftw), unix/sindir.c (zsysdep_in_dir): Don't duplicate '/'
+ character for root directory.
+
+ * send.c (flocal_send_await_reply): If an SN comes in while the
+ file is being sent, seek to the end rather than setting fsendfile
+ to FALSE.
+ (flocal_send_cancelled): Don't send an empty packet.
+ * trans.c (utransfree): Set e field to EFILECLOSED when debugging.
+ (floop): Check for file send cancelled at top of loop, not middle.
+
+ * uucp.h (ffileseekend): Define.
+
+Wed Oct 6 00:51:08 1993 Ian Lance Taylor (ian@airs.com)
+
+ * proti.c (fisenddata, fiprocess_packet): Report channel numbers
+ in debugging messages.
+
+Tue Oct 5 00:00:33 1993 Ian Lance Taylor (ian@airs.com)
+
+ * unix/statsb.c (fsysdep_lock_status): Only report the status of a
+ particular job once, no matter how many lock files it has.
+
+ * uustat.c (fsnotify): Added itime argument. Changed all callers.
+ Report time job was queued in mail message.
+
+ * unix/cusub.c (fsysdep_terminal_raw): For TERMIO and TERMIOS,
+ clear IXON, IXOFF and IXANY (TERMIO only) in c_iflag.
+
+ * Lele Gaifax: log.c (ustats): Report device name.
+
+ * log.c (ulog): Use zsysdep_base_name of zProgram.
+
+ * uuxqt.c (main): Accept local system name and unknown system
+ names for -s argument. zsysdep_get_xqt may return an alias.
+
+Wed Sep 29 00:13:39 1993 Ian Lance Taylor (ian@airs.com)
+
+ * proti.c (fiprocess_packet): If sending an ACK for a NAK, don't
+ also send a packet.
+
+ * unix/serial.c (fsysdep_modem_end_dial): If TIOCWONLINE is not
+ defined, reopen the port to wait for carrier.
+
+ * policy.h: Use __ultrix__ as well as ultrix in check for
+ HAVE_STRIP_BUG.
+
+Tue Sep 28 22:25:05 1993 Ian Lance Taylor (ian@airs.com)
+
+ * Marcel Waldvogel: uuchk.c (ukshow): Don't die if the call out
+ file can not be opened.
+
+Sun Sep 19 00:16:01 1993 Ian Lance Taylor (ian@airs.com)
+
+ * Jason Molenda: policy.h (HAVE_SEQUENT_LOCKFILES): New
+ configuration parameter.
+ * sysh.unx, unix/serial.c: Implement it.
+
+ * uulog.c (main): Ignore any errors when trying to canonicalize
+ the system name.
+
+ * Marcel Waldvogel: uucico.c (faccept_call): If the calling system
+ is already locked, and we are using sequence numbers for it,
+ increment the local sequence number to keep in synch.
+
+ * unix/sleep.c (usysdep_sleep): If usysdep_pause is accurate, use
+ it. Otherwise call sleep, but always for at least two seconds.
+ * chat.c (fcsend): Call usysdep_sleep with 1, not 2.
+
+ * unix/pause.c: Correct USE_SELECT_TIMER to HAVE_SELECT.
+
+ * unix/serial.c (fsmodem_open): Only turn on hardware flow control
+ for an incoming connection.
+ (fsmodem_carrier): Turn on hardware flow control after turning on
+ carrier. Turn off hardware flow control before turning off
+ carrier.
+
+ * uuxqt.c (uqdo_xqt_file): Use known system name, not system name
+ from execution file, unless the former is a prefix of the latter.
+
+Sat Sep 18 16:53:41 1993 Ian Lance Taylor (ian@airs.com)
+
+ * policy.h: Add HAVE_ENCRYPTED_PASSWORDS configuration parameter.
+ * callin.c: Change interface to use a passed in comparison
+ function.
+ * uuconf.h: Change declaration of uuconf_callin.
+ * uucico.c (flogin_prompt): Change call to uuconf_callin.
+ (icallin_cmp): New function. Handle HAVE_ENCRYPTED_PASSWORDS.
+
+ * Hans-Dieter Doll: chat.c (fchat): Permit \W at the end of an
+ expect string to specify a timeout.
+
+ * util.c (zremove_local_sys): New function.
+ * uudefs.h: Declare zremove_local_sys.
+ * uucp.c (main): Read local system information. Ignore local
+ system name in front of arguments.
+ * uux.c (main): Ignore local system name in front of arguments.
+
+ * configure.in: Call AC_HAVE_POUNDBANG, AC_STAT_MACROS_BROKEN,
+ AC_TIME_WITH_SYS_TIME, AC_STRUCT_TM. Call AC_SUBST(POUNDBANG).
+ Remove HAVE_SYS_TIME_AND_TIME_H check. Rework disk space
+ configuration to actually check for the functions. Check for
+ function dev_info. Don't confuse HAVE_FTW_H and HAVE_FTW (from
+ Joe Wells).
+ * config.h.in (STAT_MACROS_BROKEN, TM_IN_SYS_TIME, STAT_DUSTAT,
+ STAT_DISK_SPACE, HAVE_DEV_INFO): New macros set by configure.
+ (TIME_WITH_SYS_TIME): Renamed from HAVE_SYS_TIME_AND_TIME_H.
+ * Makefile.in (POUNDBANG): Set to @POUNDBANG@.
+ (uusched, uuto): If POUNDBANG = no, turn #!/bin/sh into :.
+ (config.status): Use config.status --recheck.
+ (configure): Chdir to $(srcdir) before running autoconf.
+ * sysh.unx: If STAT_MACROS_BROKEN, undefine S_ISDIR.
+ * log.c, time.c, uustat.c, unix/loctim.c: If TM_IN_SYS_TIME,
+ include <sys/time.h>, not <time.h>.
+ * tstuu.c, unix/pause.c, unix/proctm.c, unix/serial.c: Rename
+ HAVE_SYS_TIME_AND_TIME_H to TIME_WITH_SYS_TIME.
+ * fsusg.c: Check STAT_DUSTAT, not _AIX and _I386.
+
+ * config.h.in: Renamed from conf.h.in.
+ * MANIFEST, configure.in, Makefile.in, lib/Makefile.in,
+ unix/Makefile.in, uuconf/Makefile.in, uucp.h: conf.h renamed to
+ config.h.
+
+Fri Sep 17 00:36:16 1993 Ian Lance Taylor (ian@airs.com)
+
+ * Joe Wells: policy.h: If __QNX__, default to HAVE_POSIX_TERMIOS.
+
+ * Joe Wells: Makefile.in (FORCE): Add dummy command to work around
+ QNX make bug.
+
+ * Makefile.in, lib/Makefile.in, unix/Makefile.in,
+ uuconf/Makefile.in: Add .PHONY declaration for appropriate
+ commands.
+
+ * Joe Wells: Makefile.in (install): Create $(man1dir) and
+ $(man8dir) if necessary.
+ (install-info): Create $(infodir) if necessary.
+
+ * Joe Wells: sysh.unx (bsgrade): Declare as returning int rather
+ than char, since it can return a negative number.
+ * unix/work.c (bsgrade): Define as returning int.
+
+ * Joe Wells: unix/lock.c (fsdo_lock), unix/statsb.c
+ (fsysdep_lock_status): Use pid_t rather than int for variables
+ that hold pid's. Cast to long when using printf.
+
+ * Joe Wells: uucico.c (fcall): Fix test for 24 hour check when too
+ many retries.
+
+ * Joe Wells: uucico.c (fcall), unix/opensr.c
+ (esysdep_open_receive), unix/recep.c (fsysdep_already received):
+ Cast values in multiplication to determine seconds per day or per
+ week to long, because result is larger than 16 bits.
+
+ * Joe Wells: uuconv.c: Add return 0 after exit to avoid warnings.
+
+Thu Sep 16 23:53:58 1993 Ian Lance Taylor (ian@airs.com)
+
+ * Joe Wells: configure.in: Set AR from environment, defaulting to
+ ar, and substitute it in Makefiles.
+ * Makefile.in: Set AR to @AR@. Pass it down in MDEFINES.
+ * lib/Makefile.in, unix/Makefile.in, uuconf/Makefile.in: Set AR to
+ @AR@. Use $(AR) instead of ar. Use rc instead of qc (POSIX.2
+ does not define q).
+
+Wed Sep 15 00:47:33 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uuconf/callin.c (uuconf_callin): Take an additional argument: a
+ function to call to transform the login name and password. This
+ is a hack to avoid requiring escape sequence handling in uuconf.
+ * uucico.c (flogin_prompt): Pass cescape to uuconf_callin. This
+ is an incompatible change.
+ * uuconf.h (uuconf_callin): Update declaration.
+ * tstuu.c (uprepare_test): Use \s in password in Call1 and Pass2.
+
+ * chat.c (fcsend, fcprogram): Expand escape sequences in callout
+ login names and passwords. This is an incompatible change.
+
+ * Joe Wells: uustat.c (fsnotify): Add missing break statement.
+
+ * Mark Eichin: tstuu.c (main): Add some sleeps in the children to
+ make the tests more robust on Linux.
+
+ * uulog.c (ulhelp): Clean up general usage message: don't show -F
+ for HDB_LOGGING, don't show -x for non HDB_LOGGING. Remove
+ mention of numeric debugging levels.
+ * uustat.c (ushelp): Remove mention of numeric debugging levels.
+
+ * unix/serial.c (ICLEAR_CFLAG): Removed CLOCAL.
+ (enum tclocal_setting): New enum.
+ (fsserial_lock): Don't call TIOCSCTTY.
+ (fsserial_open): Changed flocal argument to tlocal. Use it to
+ determine initial CLOCAL setting for TERMIO and TERMIOS. Don't
+ call TIOCSCTTY until after setting the terminal state.
+ (fsstdin_open): Call fsserial_open with IGNORE_CLOCAL.
+ (fsmodem_open): Call fsserial_open with SET_CLOCAL if calling out,
+ CLEAR_CLOCAL if waiting for an incoming call.
+ (fsdirect_open): Call with SET_CLOCAL or CLEAR_CLOCAL depending
+ upon fcarrier setting.
+ * uuconf.h (struct uuconf_direct_port): Added fcarrier field.
+ * uuconf/tportc.c (asPdirect_cmds): Added ``carrier'' command.
+ (_uuconf_iport_cmd): Initialize direct fcarrier field to FALSE.
+ * uuconf/hport.c (uuconf_hdb_find_port), uuconf/vport.c
+ (uuconf_v2_find_port): Set direct fcarrier field to FALSE.
+ * uuchk.c (ikshow_port): Print direct port carrier field.
+ * uuconv.c (uvwrite_taylor_port): Likewise.
+
+ * uustat.c (main, fsquery, fsquery_systems, fsquery_show): Support
+ -o, -y, -s and -S in conjunction with -q.
+
+Tue Sep 14 00:51:50 1993 Ian Lance Taylor (ian@airs.com)
+
+ * log.c (ulog): If we can't open the log file, print an error on
+ stderr.
+
+ * configure.in, conf.h.in: Adjusted for autoconf 1.5.
+
+Sun Sep 12 15:52:29 1993 Ian Lance Taylor (ian@airs.com)
+
+ * unix/serial.c (fsserial_open): Add flocal argument. Changed all
+ callers. Pass it as TRUE when dialing out on a modem. This is
+ supposedly required on 386bsd.
+
+ * conn.c (fconn_dial_sequence): New function.
+ (fmodem_dial): Use fconn_dial_sequence. Call fsysdep_modem_begin
+ only once, before entire sequence, and fsysdep_modem_end only
+ once, after entire sequence. Don't call fcdo_dial.
+ (fcdo_dial): Removed.
+ * conn.h: Declare fconn_dial_sequence.
+ * uucico.c (fconn_call): Don't free dialer if fconn_dial fails.
+ * uuconf.h (struct uuconf_tcp_port): Add pzdialer field.
+ * tcp.c (ftcp_dial): Pass new pzdialer field to
+ fconn_dial_sequence.
+ * tli.c (ftli_dial): Pass pzdialer to fconn_dial_sequence.
+ * uuconf/hport.c (uuconf_hdb_find_port): Add trailing dialer
+ sequence to pzdialer field for TCP port.
+ * uuconf/tportc.c (asPtcp): Add ``dialer-sequence'' command.
+ (_uuconf_iport_cmd): Initialize pzdialer for TCP port.
+ * uuconf/vsinfo.c (_uuconf_iv2_system_internal): Initialize
+ pzdialer for TCP port.
+ * uuchk.c (ikshow_port): Print TCP pzdialer field.
+ * uuconv.c (uvwrite_taylor_port, ivwrite_hdb_port): Output TCP
+ pzdialer field.
+
+Sat Sep 11 16:30:17 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uulog.c, uuname.c (main): Pass INIT_NOCHDIR to
+ usysdep_initialize.
+
+ * uucp.1, uustat.1, uux.1, uuxqt.8: Remove uses of nonportable .EX
+ and .EE macros.
+
+ * uuxqt.c (asQcmds, iqout, iqfile, iqrequestor, iquser): Remove
+ restrictions on number of arguments to commands in execution file,
+ since is there is such a range of buggy UUCP implementations out
+ there.
+
+ * sysh.unx (CORRUPTDIR): Define.
+ * unix/corrup.c: New file for new zsysdep_save_corrupt_file
+ function to save a file in CORRUPTDIR.
+ * unix/Makefile.in, unix/MANIFEST: Add corrup.
+ * system.h: Add declaration of zsysdep_save_corrupt_file.
+ * uuxqt.c (uqdo_xqt_file): If execution file has a syntax error,
+ save it using zsysdep_save_corrupt_file and notify OWNER.
+
+ * uuconf/hsinfo.c (_uuconf_ihdb_system_internal), vsinfo.c
+ (_uuconf_iv2_system_internal): Treat a specified time/grade as
+ both a timegrade and a call-timegrade.
+
+ * rec.c (frec_file_end): If the received file can not be moved to
+ the final location, and there is enough disk space, keep the file,
+ mentioned the saved name in the error message, and send mail to
+ OWNER about it. If the hand created execution file can not be
+ moved, delete it.
+ * unix/move.c (fsysdep_move_file): Don't delete the original file
+ if the move fails.
+ * unix/splcmd.c (zsysdep_spool_commands): Remove the temporary
+ file if the move fails.
+
+Wed Sep 1 23:29:30 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uuconf/tinit.c (itdebug, _uuconf_idebug_cmd): New functions.
+ (asCmds): Call itdebug for "debug", to accept spaces between
+ options as well as commas.
+ * uuconf/tsinfo.c (iidebug): New function.
+ (asIcmds): Call iidebug for "debug".
+ * uuconf/uucnfi.h: Added prototype for _uuconf_idebug_cmd.
+
+Tue Aug 31 00:09:33 1993 Ian Lance Taylor (ian@airs.com)
+
+ * send.c (flocal_send_file_init): Don't set flocal if job was
+ requested by a remote user.
+ (flocal_send_fail, flocal_send_open_file): Don't save temporary
+ file in .Preserve if job was requested by a remote user.
+
+ * unix/wldcrd.c (fsysdep_wildcard_start): Don't free zcmd until
+ after calling espopen.
+
+ * lib/buffer.c (ubuffree): Added debugging code controlled by
+ DEBUG_BUFFER macro.
+
+Sun Aug 29 13:33:21 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uuconf/tcalou.c: Permit empty password in call file.
+
+ * unix/work.c (COMMANDS_PER_SCAN): New macro.
+ (fsysdep_get_work_init): Get at most COMMANDS_PER_SCAN new command
+ files, to avoid timeouts while reading a large directory.
+
+ * rec.c (fremote_send_file_init): Initialize crestart.
+
+ * uux.c (main): Changed special handling of single "-" argument to
+ call getopt multiple times.
+
+ * D.J. James: protg.c (fgsendcmd, fgsenddata), prott.c
+ (ftsendcmd): Avoid passing 0 to bzero to avoid SunOS bug.
+
+ * protf.c (ffprocess_data): Some systems seem to send characters
+ with parity, so strip the parity bit from incoming bytes.
+
+ * Kenji Rikitake: uucp.h: Changed order of header files to avoid
+ gcc stddef.h vs. sys/stdtypes.h problem on SunOS 4.1.
+
+ * Alexander Lehmann: configure.in: Correct misspelling of
+ HAVE_GETWD.
+
+ * John Hood: unix/filnam.c (ZCHARS): Get the alphabet right.
+
+ * Gabor Kiss: tcp.c (ftcp_dial): Use all gethostbyname info before
+ calling getservbyname.
+
+Thu Aug 26 23:15:33 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uux.c, uuxqt.c: Added long options.
+
+ * uucp.c: Added v to getopt_long argument, print help and version
+ info to stderr.
+
+ * unix/splcmd.c (zsysdep_spool_commands): Create command file via
+ temporary file, so that the command file is created atomically.
+ * unix/spool.c (zscmd_file): Accept files starting with "TMP".
+
+Sun Jul 25 14:50:41 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uupick.c, uustat.c: Added long options.
+
+Mon Jul 19 22:06:19 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uucico.c, uuconv.c, uucp.c, uulog.c, uuname.c: Added long
+ options.
+ * uucico.c (main, fcall): Made -c option not print the ``No work''
+ log message.
+ * uuname.c (main): Call ulog_uuconf rather than unuuconf_error.
+
+Sun Jul 11 14:29:39 1993 Ian Lance Taylor (ian@airs.com)
+
+ * cu.c, uuchk.c: Added long options.
+
+ * uudefs.h, log.c (zProgram): Renamed from abProgram.
+ * cu.c, uucico.c, uucp.c, uulog.c, uuname.c, uupick.c, uustat.c,
+ uux.c, uuxqt.c (main): Initialize zProgram from argv[0].
+
+ * Bob Hemedinger: unix/cohtty.c (fscoherent_disable_tty): Almost
+ always return TRUE.
+ * unix/serial.c (fsserial_lockfile): Skip "LCK.." in string passed
+ to lockttyexist and fscoherent_disable_tty.
+ * uucico.c (main): If __COHERENT__ is defined, change the meaning
+ of -c for backward compatibility with old Coherent UUCP.
+
+ * David Nugent: uucico.c (main): Added -C option to only call
+ system named by -s or -S if there is work.
+
+ * uuconf/syssub.c (_uuconf_isystem_default): Merge in default
+ protocol parameters so that setting parameters for one protocol
+ does not lose the default settings for other protocols.
+
+ * unix/lcksys.c (zssys_lock_name): New function.
+ (fsysdep_lock_system, fsysdep_unlock_system): Use it.
+
+ * John Plate: uuchk.c (ukshow): Call ukshow_size with the right
+ arguments in the called remote case.
+
+ * uuconf/remunk.c (uuconf_remote_unknown): use the remote.unknown
+ shell script if HDB_CONFIG and no ``unknown'' commands appeared in
+ the config file.
+
+ * Jim Brownfield: uuconf/vsinfo.c (_uuconf_iv2_system_internal):
+ Accept continuation lines in L.sys.
+
+ * Marc Evans: unix/serial.c (fsysdep_conn_write, fsysdep_conn_io):
+ Add casts to t_snd calls to avoid warnings.
+
+ * Julian Stacey: uuchk.c (main): If no information found, say so.
+
+ * Ju"rgen Fluk: uulog.c (main): Better error messages for HDB.
+
+ * uucico.c (zget_typed_line): If last string ended in \r, ignore
+ leading \n.
+
+ * Mark E. Mallett: uuconf/time.c (asTdays): Add "none".
+
+ * uuconf/hsinfo.c (_uuconf_ihdb_system_internal): Report line
+ numbers for syntax errors.
+
+Sat Jul 10 10:28:03 1993 Ian Lance Taylor (ian@airs.com)
+
+ Initial hardware flow control support from Peter Wemm:
+ * uuconf.h (struct uuconf_modem_port, struct uuconf_direct_port):
+ New field uuconf_fhardflow in each structure.
+ * unix/serial.c (fsserial_hardflow): New routine. Initially
+ supports SunOS and SCO Unix.
+ (fsmodem_open, fsdirect_open): Turn on hardware flow control if
+ supported by the port.
+ (fsserial_set): If CRTFSL is set, don't send XON/XOFF characters.
+ * uuconf/hport.c (uuconf_hdb_find_port), uuconf/tportc.c
+ (_uuconf_iport_cmd), uuconf/vport.c (uuconf_v2_find_port):
+ Initialize uuconf_fhardflow field to TRUE.
+ * uuconf/tportc.c (struct asPmodem_cmds, struct asPdirect_cmds):
+ Added "hardflow" command.
+ * uuchk.c (ikshow_port): Report whether hardware flow control is
+ available.
+ * uuconv.c (uvwrite_taylor_port): Write out hardware flow control
+ information.
+
+ * Peter Wemm: protg.c (fgstart), proti.c (fijstart): Report local
+ packet and window size as well as remote.
+ * rec.c (fremote_send_file_init), send.c (flocal_send_open_file,
+ fremote_rec_reply): Report number of bytes being sent or received,
+ and restart point if any.
+
+ * Peter Wemm: trans.h (struct sdaemon): New fields csent and
+ creceived.
+ * uucico.c (fcall, faccept_call): Initialize csent and creceived.
+ (fdo_call, faccept_call): Report on number of file bytes
+ transferred and bytes per second.
+ * rec.c (frec_file_end): Record number of bytes received.
+ * send.c (fsend_wait_confirm): Record numbers of bytes sent.
+ * trans.c (ufailed): Record number of bytes sent or received.
+
+ * Peter Wemm: uusched.in, uuto.in: Use #!/bin/sh rather than :.
+ Use exec when invoking program.
+
+ * uulog.c (main): Don't die if we can't canonicalize the -s
+ argument.
+
+ * unix/cusub.c (uscu_child): Force the descriptor into blocking
+ mode.
+
+ Port type pipe support contributed by Marc Boucher:
+ * unix/pipe.c: New file. Support routines for pipes.
+ * unix/MANIFEST, unix/Makefile.in: Adjusted for new file pipe.c.
+ * uuconf.h (enum uuconf_porttype): Added UUCONF_PORTTYPE_PIPE.
+ (struct uuconf_pipe_port): New structure.
+ (struct uuconf_port): Added uuconf_pipe_port to union.
+ * sysh.unx (struct ssysdep_conn): Add fields ord, owr and ipid,
+ rename istdout_flags to iwr_flags.
+ (fsdouble_{read, write, chat}): New prototypes.
+ * conn.h: Prototype for fsysdep_pipe_init.
+ * unix/serial.c: Renamed fsstdin_{read, write, chat} to
+ fsdouble_{read, write, chat}. Made them non-static. Changed them
+ to use ord and owr fields rather than 0 and 1.
+ (fsserial_init, fsstdin_open): Initialize ord and owr fields.
+ (fsstdin_close, fsblock, fsstdin_reset, fsysdep_conn_io,
+ fsstdin_break, fsstdin_set): Use ord and owr fields rather than 0
+ and 1.
+ * uuconf/tportc.c (asPtype_names): Added "pipe".
+ (asPpipe_cmds, CPIPE_CMDS): New array of pipe commands.
+ (CCMDS, _uuconf_iport_cmd): Adjusted accordingly.
+ * tcp.c (fsysdep_tcp_init), tli.c (fsysdep_tli_init): Initialize
+ new ord and owr fields.
+ * conn.c (fconn_init): Call fsysdep_pipe_init for
+ UUCONF_PORTTYPE_PIPE.
+ * unix/cusub.c (zsport_line, uscu_child, fsysdep_shell): Handle
+ UUCONF_PORTTYPE_PIPE.
+ * uuchk.c (ikshow_port): Report on port type pipe.
+ * uuconv.c (uvwrite_taylor_port): Write out port type pipe.
+
+ * Marc Boucher: cu.c: (main, ucuabort): Use new variable
+ fCuconnprinted to avoid printing ZDISMSG if ZCONNMSG has not been
+ printed.
+ (main): Call fsysdep_port_access only after we have locked the
+ port, to get a better error message on systems with shared lines.
+
+ * Marc Boucher: policy.h (HAVE_FULLDUPLEX_PIPES): New macro.
+ * unix/spawn.c (ixspawn): Use it.
+
+ * Marc Boucher: uucico.c (uusage): Added lines for -c and -D.
+
+ * uuconf/time.c (_uuconf_itime_parse): Add casts to avoid a
+ compiler warning.
+
+ * uustat.c (fsworkfile_show): Don't report non-existent send
+ files.
+
+ * lib/parse.c (fparse_cmd): Accept any base for the mode argument,
+ rather than always using 8. Depend upon the leading zero to
+ indicate base 8. Accomodates UFGATE 1.03.
+
+Wed Jun 30 00:27:27 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uudefs.h (struct scmd): Changed bdummy field to bgrade.
+ * trans.c (fqueue_send): Sort sends by whether they are a command
+ and then by grade.
+ * unix/work.c (asSwork_files): Renamed from azSwork_files, made
+ array of struct ssfilename rather than char *.
+ (struct ssfile): Added bgrade field.
+ (iswork_cmp, fsysdep_get_work_init, usysdep_get_work_freed):
+ Changed accordingly.
+ (fsysdep_get_work): Set qcmd->bgrade.
+ * uucp.c (uccopy), uux.c (main, uxadd_send_file), uuxqt.c
+ (uqdo_xqt_file), xcmd.c (fremote_xcmd_init), lib/parse.c
+ (fparse_cmd): Initialize bgrade field of scmd structure.
+
+Sun Jun 27 23:21:33 1993 Ian Lance Taylor (ian@airs.com)
+
+ * send.c (flocal_send_await_reply, flocal_send_cancelled): If the
+ first D. file being sent for a faked E command fails, send the
+ second one anyhow.
+
+Sun Jun 6 23:07:33 1993 Ian Lance Taylor (ian@airs.com)
+
+ * proti.c (fiprocess_data): If we get a packet we sent a NAK for,
+ forget that sent NAKs for all preceding packets.
+ (fiprocess_packet): If we get a NAK for the packet we are about to
+ send, and all our packets have been acknowledged, send an ACK.
+
+Thu Jun 3 20:54:55 1993 Ian Lance Taylor (ian@airs.com)
+
+ * prot.h (struct sprotocol): Added frestart field.
+ * uucico.c (asProtocols): Initialize frestart field.
+ * system.h, unix/opensr.c (zsysdep_receive_temp): Added frestart
+ argument to zsysdep_receive_temp.
+ * rec.c (flocal_rec_send_request, fremote_send_file_init,
+ frec_file_end): Pass frestart argument to zsysdep_receive_temp.
+ * unix/opensr.c (esysdep_open_receive): Permit pcrestart argument
+ to be NULL.
+ * rec.c (flocal_rec_await_reply, fremote_send_file_init): Pass
+ pcrestart argument to esysdep_open_receive as NULL if file
+ tranfers can not be restarted.
+
+ * lib/status.c (azStatus): Uwe Doering: If SPOOLDIR_HDB or
+ SPOOLDIR_SVR4, use the same strings they use.
+ * unix/status.c (aiMapstatus): Uwe Doering: Swap 4 and 20.
+
+ * unix/serial.c (fsserial_open): Uwe Doering: Set VTIME to 1.
+
+ * uucico.c (faccept_call, uaccept_call_cleanup): Uwe Doering: Free
+ and unlock evertyhing after any return from faccept_call.
+ (main): Don't need to unlock after faccept_call here any more.
+
+ * proti.c (fiprocess_data): Added additional debugging
+ information.
+
+Sat May 15 13:55:21 1993 Ian Lance Taylor (ian@airs.com)
+
+ * protg.c (fgprocess_data): Don't treat a duplicate RR as an RJ if
+ we are retransmitting packets. If we are treating a duplicate RR
+ as an RJ, don't also treat it as an acknowledgement.
+
+ * unix/serial.c (fsysdep_conn_io): Typo in debugging message.
+
+Tue May 4 00:03:32 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uux.c (main): Andreas Raab: Move aboptions out of local block
+ since a pointer to it escapes the scope.
+
+ * unix/mkdirs.c: W Christopher Martin: Just try to make the
+ directories, and ignore EEXIST errors, rather than first checking
+ whether the directory exists.
+
+ * send.c (flocal_send_request): Chip Salzenberg: Double check that
+ the file still exists before sending the S command.
+
+ * uucico.c (zget_uucp_cmd, zget_typed_line), trans.c (fgot_data):
+ Matthew Geier: Avoid doing memcpy (z, NULL, 0).
+
+Mon May 3 22:52:46 1993 Ian Lance Taylor (ian@airs.com)
+
+ * system.h, unix/locfil.c, unix/cwd.c, unix/picksb.c: Johan
+ Vromans: Added pfbadname argument to zsysdep_local_file,
+ zsysdep_local_file_cwd, zsysdep_uupick_local_file.
+ * Changed all callers.
+ * send.c (fremote_rec_file_init), rec.c (fremote_send_file_init):
+ If remote system gives bad name, return an error rather than
+ aborting the connection.
+ * uuxqt.c (uqdo_xqt_file): If bad file name, abort execution
+ rather than try again later.
+ * uupick.c (main): If bad file name, permit new command rather
+ than exiting.
+
+ * lib/debug.c: Stephan Niemz: Accept whitespace separated
+ debugging types.
+
+ * unix/detach.c: Always use setsid if it is available.
+
+Sun May 2 13:23:33 1993 Ian Lance Taylor (ian@airs.com)
+
+ * unix/spool.c (zsfind_file): Fix handling of execution file
+ names for systems to work with any possible execution file name.
+
+ * send.c (flocal_send_open_file): Subtract starting position from
+ number of bytes passed to pffile.
+
+ * uuconf/rdperm.c: Syd Weinstein: Don't skip lines in Permissions
+ with leading whitespace.
+
+ * uuconf/vsinfo.c: Gero Kuhlmann: Set default retry time
+ correctly.
+
+ * unix/lock.c (fsdo_lock): Andrew Vignaux: Handle readonly lock
+ files correctly.
+
+ * send.c (flocal_send_fail, flocal_send_await_reply): James Van
+ Artsdalen: Clarify error messages relating to execution files.
+
+ * log.c (ustats): Avoid overflow in bytes/sec calculation.
+
+Sat May 1 17:40:14 1993 Ian Lance Taylor (ian@airs.com)
+
+ * trans.c (ftadd_cmd): Don't treat junk at end of command as a
+ size if the remote system doesn't support sizes.
+
+ * uucico.c (faccept_call): Turn on the protocol before reading the
+ queue, in case there are lots of command files.
+
+ * unix/cusub.c: Julian Stacey: If SIGUSR2 is not defined, use
+ SIGURG instead.
+
+ * uuconf/syshdr.unx (MAKE_ABSOLUTE): New macro.
+ * uuconf/tinit.c (itaddfile): Renamed from itadd. Use
+ MAKE_ABSOLUTE to force absolute pathnames to configuration files.
+
+ * conn.c (fconn_close): Steve M. Robbins: Ignore any SIGHUP
+ received after closing the connection.
+
+ * cu.c (main): Frank Conrad: When an alternate fails, move on to
+ the next one.
+
+ * uucico.c (faccept_call): Alexei K. Yushin: Supposedly some
+ UUCP's send UgG rather than just Ug.
+
+ * unix/serial.c (fsserial_lockfile): Bob Hemedinger: Fix error
+ message in HAVE_COHERENT_LOCKFILES case.
+
+ * unix/mkdir.c: Andy Fyfe: Pass fkeepuid as TRUE to ixsspawn.
+
+ * unix/strerr.c: Undefine strerror in case there is a macro
+ definition which configure did not pick up.
+
+ * configure.in: Andy Fyfe: AT&T 3b1 has sys/mount.h but not
+ statfs.
+
+ * uudir.c: Andy Fyfe: Include uucp.h.
+
+ * unix/fsusg.c: Andy Fyfe: Typos in (untested) STAT_USTAT case.
+
+ * unix/filnam.c: Eric Lee Green: Avoid generating filenames that
+ only differ in case, to make life easier for bad filesystems.
+
+ * uuconf/llocnm.c: Brian J. Murrell: Don't read HDB files if
+ ``hdb-files no'' given.
+
+Sat Mar 20 16:10:20 1993 Ian Lance Taylor (ian@airs.com)
+
+ * uudefs.h (eSendfile, eRecfile): Deleted obsolete declarations.
+
+Sat Feb 13 15:57:30 1993 Ian Lance Taylor (ian@airs.com)
* Released version 1.04.
* unix/detach.c: Andrew A. Chernov: Don't check return of setsid.
-Sun Jan 31 01:45:56 1993 Ian Lance Taylor (ian@comton.airs.com)
+Sun Jan 31 01:45:56 1993 Ian Lance Taylor (ian@airs.com)
* cu.c (main): Pass "cu" to uuconf_init.
* protz.c (fzprocess): Restore ZPAD char before calling getinsync.
-Sat Jan 30 22:19:26 1993 Ian Lance Taylor (ian@comton.airs.com)
+Sat Jan 30 22:19:26 1993 Ian Lance Taylor (ian@airs.com)
* Makefile.in (doc-dist): New target.
-Wed Jan 27 22:55:26 1993 Ian Lance Taylor (ian@comton.airs.com)
+Wed Jan 27 22:55:26 1993 Ian Lance Taylor (ian@airs.com)
* protg.c (fgstart): Set iGremote_segsize when using
remote-packet-size.
-Tue Jan 26 01:01:34 1993 Ian Lance Taylor (ian@comton.airs.com)
+Tue Jan 26 01:01:34 1993 Ian Lance Taylor (ian@airs.com)
* proti.c (fiprocess_data): always send an ACK after receiving
half a window, rather than sometimes resending a packet. Half a
@@ -28,7 +1263,7 @@ Tue Jan 26 01:01:34 1993 Ian Lance Taylor (ian@comton.airs.com)
* tstuu.c (main, cread, fsend): rewrote communication routines to
avoid deadlock.
-Sun Jan 24 01:02:47 1993 Ian Lance Taylor (ian@comton.airs.com)
+Sun Jan 24 01:02:47 1993 Ian Lance Taylor (ian@airs.com)
* trans.c (ufailed): don't report statistics if no bytes
transferred.
@@ -36,27 +1271,27 @@ Sun Jan 24 01:02:47 1993 Ian Lance Taylor (ian@comton.airs.com)
* Makefile.in (install): simplified somewhat.
(dist): distribute the sample directory.
-Sat Jan 23 19:47:12 1993 Ian Lance Taylor (ian@comton.airs.com)
+Sat Jan 23 19:47:12 1993 Ian Lance Taylor (ian@airs.com)
* configure.in, conf.h.in, tli.c: Karl Swarz: check for and use
<sys/tli.h>.
-Fri Jan 22 00:09:37 1993 Ian Lance Taylor (ian@comton.airs.com)
+Fri Jan 22 00:09:37 1993 Ian Lance Taylor (ian@airs.com)
* send.c (flocal_send_request): Alan Judge: don't send C in option
string when faking an E command as an S command.
-Thu Jan 21 00:09:31 1993 Ian Lance Taylor (ian@comton.airs.com)
+Thu Jan 21 00:09:31 1993 Ian Lance Taylor (ian@airs.com)
* uux.c (main): don't use E command if forwarding.
-Wed Jan 20 00:22:38 1993 Ian Lance Taylor (ian@comton.airs.com)
+Wed Jan 20 00:22:38 1993 Ian Lance Taylor (ian@airs.com)
* send.c (fsend_exec_file_init), rec.c (frec_file_end), uux.c
(main): Chip Salzenberg: always put the C line last in an
execution file, to support Fredmail.
-Tue Jan 19 00:09:43 1993 Ian Lance Taylor (ian@comton.airs.com)
+Tue Jan 19 00:09:43 1993 Ian Lance Taylor (ian@airs.com)
* trans.h, trans.c (ftcharge, floop, fgot_data): rewrote timing
code.
@@ -65,7 +1300,7 @@ Tue Jan 19 00:09:43 1993 Ian Lance Taylor (ian@comton.airs.com)
(fqueue_local, fqueue_remote, fqueue_send, fqueue_receive): added
boolean return value and qdaemon argument.
-Mon Jan 18 00:01:46 1993 Ian Lance Taylor (ian@comton.airs.com)
+Mon Jan 18 00:01:46 1993 Ian Lance Taylor (ian@airs.com)
* uucico.c (fdo_call, faccept_call): Ted Lindgreen, Chip
Salzenberg: wait for remote hangup string before hanging up.
@@ -73,7 +1308,7 @@ Mon Jan 18 00:01:46 1993 Ian Lance Taylor (ian@comton.airs.com)
* proti.c (fiprocess_data, fiprocess_packet): stop scanning input
buffer after a CLOSE packet.
-Sat Jan 16 22:44:28 1993 Ian Lance Taylor (ian@comton.airs.com)
+Sat Jan 16 22:44:28 1993 Ian Lance Taylor (ian@airs.com)
* system.h, uucico.c (main), uuxqt.c (main), unix/init.c: Ted
Lindgreen: eliminated INIT_DAEMON.
@@ -88,7 +1323,7 @@ Sat Jan 16 22:44:28 1993 Ian Lance Taylor (ian@comton.airs.com)
* policy.h, unix/pause.c: Gregory Gulik: added HAVE_HUNDREDTHS_NAP
configuration parameter.
-Wed Jan 6 21:06:45 1993 Ian Lance Taylor (ian@comton.airs.com)
+Wed Jan 6 21:06:45 1993 Ian Lance Taylor (ian@airs.com)
* unix/serial.c (fsserial_lockfile): create HDB lock files when
using HAVE_COHERENT_LOCKING.
@@ -98,11 +1333,11 @@ Wed Jan 6 21:06:45 1993 Ian Lance Taylor (ian@comton.airs.com)
* unix/cusub.c (fsysdep_terminal_raw): Andrew A. Chernov: if
POSIX_TERMIOS, turn of IEXTEN flag.
-Sat Jan 2 23:19:27 1993 Ian Lance Taylor (ian@comton.airs.com)
+Sat Jan 2 23:19:27 1993 Ian Lance Taylor (ian@airs.com)
* protg.c (fgprocess_data): treat a duplicate RR as an RJ.
-Fri Jan 1 11:17:30 1993 Ian Lance Taylor (ian@comton.airs.com)
+Fri Jan 1 11:17:30 1993 Ian Lance Taylor (ian@airs.com)
* policy.h, unix/proctm.c: Steven S. Dick: use sysconf
(_SC_CLK_TCK) for TIMES_TICK if possible.
@@ -113,7 +1348,7 @@ Fri Jan 1 11:17:30 1993 Ian Lance Taylor (ian@comton.airs.com)
unix/run.c: Karsten Thygesen: removed ffork argument from
fsysdep_run.
-Wed Dec 30 00:21:55 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Dec 30 00:21:55 1992 Ian Lance Taylor (ian@airs.com)
* unix/link.c: Andrey G Blochintsev: don't fail just because
destination directories do not exist.
@@ -123,12 +1358,12 @@ Wed Dec 30 00:21:55 1992 Ian Lance Taylor (ian@comton.airs.com)
* protz.c: Chip Salzenberg: reformatted to 80 columns.
-Tue Dec 29 23:50:52 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Dec 29 23:50:52 1992 Ian Lance Taylor (ian@airs.com)
* uuconv.c (uvwrite_time): scott@geom.umn.edu: handle midnight
more correctly.
-Fri Dec 18 00:49:16 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Dec 18 00:49:16 1992 Ian Lance Taylor (ian@airs.com)
* system.h, uucp.c (uccopy), uux.c (main), cu.c (icuput, icutake),
unix/ufopen.c (esysdep_user_fopen): Doug Evans: open files used
@@ -136,7 +1371,7 @@ Fri Dec 18 00:49:16 1992 Ian Lance Taylor (ian@comton.airs.com)
privileges of uucp. Added frd and fbinary arguments to
esysdep_user_fopen.
-Thu Dec 17 00:04:53 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Dec 17 00:04:53 1992 Ian Lance Taylor (ian@airs.com)
* unix/picksb.c (zsysdep_uupick): Peter Wemm: allocation error.
@@ -150,14 +1385,14 @@ Thu Dec 17 00:04:53 1992 Ian Lance Taylor (ian@comton.airs.com)
(fsend_await_confirm), rec.c (frec_file_end): Peter Wemm: added
fmaster argument to ustats, used only in HDB_LOGGING.
-Wed Dec 16 23:35:51 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Dec 16 23:35:51 1992 Ian Lance Taylor (ian@airs.com)
* uustat.c (main): Marc Unangst: forgot to call strtol for -y.
* policy.h, sysh.unx: Brian J. Murrell: yet another configuration
parameter: HAVE_BROKEN_SETREUID.
-Tue Dec 15 00:13:04 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Dec 15 00:13:04 1992 Ian Lance Taylor (ian@airs.com)
* uuconv.c (uvwrite_taylor_system): mnichols@pacesetter.com: use
command-path rather than path.
@@ -181,18 +1416,18 @@ Tue Dec 15 00:13:04 1992 Ian Lance Taylor (ian@comton.airs.com)
FREE_SPACE_DELTA bytes, and abort the file transfer if disk space
gets too low.
-Wed Dec 2 00:24:12 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Dec 2 00:24:12 1992 Ian Lance Taylor (ian@airs.com)
* policy.h, unix/serial.c (fsserial_set): Frank Conrad: added
HAVE_PARITY_BUG parameter for the Sony NEWS.
-Mon Nov 30 00:06:59 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Nov 30 00:06:59 1992 Ian Lance Taylor (ian@airs.com)
* lib/spool.c (fspool_file): Andrew Chernov: accept any
alphanumeric character in the name, because it could be a grade
from another system.
-Sun Nov 29 22:36:47 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Nov 29 22:36:47 1992 Ian Lance Taylor (ian@airs.com)
* lib/buffer.c (ubuffree): scott@geom.umn.edu, Richard Gumpertz:
use a temporary variable to hold the offsetof result.
@@ -212,14 +1447,14 @@ Sun Nov 29 22:36:47 1992 Ian Lance Taylor (ian@comton.airs.com)
* rec.c (fremote_send_reply): do file restart correctly for E
commands.
-Sun Nov 22 15:09:43 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Nov 22 15:09:43 1992 Ian Lance Taylor (ian@airs.com)
* protz.c: Chip Salzenberg: always do bitwise operations on
unsigned values.
* getopt.h: Chip Salzenberg: don't rely on __STDC__.
-Thu Nov 19 00:13:46 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Nov 19 00:13:46 1992 Ian Lance Taylor (ian@airs.com)
* uuconf/freblk.c: Niels Baggesen: loop over the right list.
@@ -227,7 +1462,7 @@ Thu Nov 19 00:13:46 1992 Ian Lance Taylor (ian@comton.airs.com)
take an argument and default to showing 10 current lines.
(ulusage): added new options and missing old ones.
-Wed Nov 18 22:26:36 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Nov 18 22:26:36 1992 Ian Lance Taylor (ian@airs.com)
* rec.c (frec_file_end): Andrey G Blochintsev: call
fsysdep_remember_reception as soon as the file has been moved to
@@ -239,7 +1474,7 @@ Wed Nov 18 22:26:36 1992 Ian Lance Taylor (ian@comton.airs.com)
* unix/tmpfil.c (ZDIGS): don't use '.', since we use it to
separate parts of the file name.
-Sun Nov 15 15:31:49 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Nov 15 15:31:49 1992 Ian Lance Taylor (ian@airs.com)
* uustat.c (fsquery_show, csunits_show): Marc Unangst, Chip
Salzenberg: line up uustat -q output.
@@ -282,7 +1517,7 @@ Sun Nov 15 15:31:49 1992 Ian Lance Taylor (ian@comton.airs.com)
* configure.in: Brian Campbell: check for /usr/bin/mailx.
-Sat Nov 14 11:11:04 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Nov 14 11:11:04 1992 Ian Lance Taylor (ian@airs.com)
* uuconf/hlocnm.c (uuconf_hdb_login_localname): Christian Seyb:
check for _uuconf_unset as well as NULL.
@@ -294,7 +1529,7 @@ Sat Nov 14 11:11:04 1992 Ian Lance Taylor (ian@comton.airs.com)
and made _uuconf_unset char * to avoid possible alignment
problems.
-Tue Nov 10 00:16:35 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Nov 10 00:16:35 1992 Ian Lance Taylor (ian@airs.com)
* trans.h, uucico.c (fcall, faccept_call), trans.c (uclear_queue,
floop): Stephen J. Walick: move clean up from end of floop into
@@ -305,13 +1540,13 @@ Tue Nov 10 00:16:35 1992 Ian Lance Taylor (ian@comton.airs.com)
location for HAVE_SVR4_LOCKFILES.
(fsserial_init): Doug Evans: null terminate the device name.
-Sun Nov 8 10:58:59 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Nov 8 10:58:59 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (fcall, faccept_call): Stephen J. Walick: call
usysdep_get_work_free here.
trans.c (floop): don't call usysdep_get_work free here.
-Sun Nov 1 17:05:07 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Nov 1 17:05:07 1992 Ian Lance Taylor (ian@airs.com)
* Released gamma version 1.04.
@@ -326,7 +1561,7 @@ Sun Nov 1 17:05:07 1992 Ian Lance Taylor (ian@comton.airs.com)
* policy.h, unix/cohtty.c: Bob Hemedinger: finish Coherent style
locking.
-Wed Oct 28 00:20:15 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Oct 28 00:20:15 1992 Ian Lance Taylor (ian@airs.com)
* tstuu.c: Ralf Stephan: check HAVE_POLL_H and HAVE_STROPTS_H.
@@ -338,7 +1573,7 @@ Wed Oct 28 00:20:15 1992 Ian Lance Taylor (ian@comton.airs.com)
requested position.
uucp.c, uux.c, uuxqt.c, xcmd.c: initialize ipos field.
-Sun Oct 25 10:39:23 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Oct 25 10:39:23 1992 Ian Lance Taylor (ian@airs.com)
* unix/serial.c (fsysdep_conn_write, fsysdep_conn_io): T. William
Wells: take special care to ensure we don't write after SIGHUP.
@@ -350,7 +1585,7 @@ Sun Oct 25 10:39:23 1992 Ian Lance Taylor (ian@comton.airs.com)
* unix/cusub.c (uscu_child): Igor V. Semenyuk: accept a 0 return
from read until we have read some data at some point.
-Thu Oct 22 10:38:32 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Oct 22 10:38:32 1992 Ian Lance Taylor (ian@airs.com)
* proti.c: various tweaks for bad connections.
@@ -363,7 +1598,7 @@ Thu Oct 22 10:38:32 1992 Ian Lance Taylor (ian@comton.airs.com)
* uuxqt.c (uqdo_xqt_file): Bob Hemedinger: don't take address of
array.
-Wed Oct 21 00:05:31 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Oct 21 00:05:31 1992 Ian Lance Taylor (ian@airs.com)
* uustat.c (fsnotify): Gert Doering: if the file appears to be
binary, don't include it in any mail message.
@@ -391,7 +1626,7 @@ Wed Oct 21 00:05:31 1992 Ian Lance Taylor (ian@comton.airs.com)
* uucico.c (fdo_call, faccept_call): Hans-Dieter Doll: avoid
overflow when turning ulimit value into bytes.
-Tue Oct 20 23:12:26 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Oct 20 23:12:26 1992 Ian Lance Taylor (ian@airs.com)
* serial.c (fsmodem_carrier): Hans-Dieter Doll: use IS68K LNOMDM
bit if available.
@@ -403,7 +1638,7 @@ Tue Oct 20 23:12:26 1992 Ian Lance Taylor (ian@comton.airs.com)
* unix/run.c: Peter Wemm: pass fsetuid as TRUE to ixsspawn.
-Sun Oct 18 13:58:17 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Oct 18 13:58:17 1992 Ian Lance Taylor (ian@airs.com)
* policy.h, unix/serial.c (fsmodem_close): Stephen J. Walick:
added HAVE_RESET_BUG for SCO Xenix.
@@ -413,18 +1648,18 @@ Sun Oct 18 13:58:17 1992 Ian Lance Taylor (ian@comton.airs.com)
* unix/ufopen.c: Igor V. Semenyuk: handle unsigned uid_t.
-Sat Oct 17 11:00:30 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Oct 17 11:00:30 1992 Ian Lance Taylor (ian@airs.com)
* conf.h.in, configure.in, uucp.h, unix/serial.c
(fsserial_lockfile), lib/MANIFEST: eliminated strlwr.
-Fri Oct 16 01:10:56 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Oct 16 01:10:56 1992 Ian Lance Taylor (ian@airs.com)
* Igor V. Semenyuk: uuchk.c (ukshow): print max-remote-debug
correctly.
lib/debug.c (idebug_parse): accept DEBUG_NONE.
-Thu Oct 15 00:49:58 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Oct 15 00:49:58 1992 Ian Lance Taylor (ian@airs.com)
* unix/cusub.c (fsysdep_terminal_puts): don't modify zalc before
freeing it up.
@@ -432,7 +1667,7 @@ Thu Oct 15 00:49:58 1992 Ian Lance Taylor (ian@comton.airs.com)
* protg.c (fgcheck_errors, fggot_ack, fgprocess_data): Mark E.
Mallett: better handling of error decay.
-Wed Oct 14 22:09:20 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Oct 14 22:09:20 1992 Ian Lance Taylor (ian@airs.com)
* unix/lock.c: Tomi Vainio: make sure SEEK_SET is defined.
@@ -445,12 +1680,12 @@ Wed Oct 14 22:09:20 1992 Ian Lance Taylor (ian@comton.airs.com)
lib/debug.c, unix/portnm.c, uuconf/int.c, uuconf/llocnm.c,
uuconf/time.c: cast more arguments to eliminate more warnings.
-Tue Oct 13 00:25:03 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Oct 13 00:25:03 1992 Ian Lance Taylor (ian@airs.com)
* prot.h, proti.c (fistart, fijstart), protj.c, uucico.c, tstuu.c
(uprepare_test), Makefile.in, MANIFEST: added 'j' protocol.
-Sun Oct 11 23:45:20 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Oct 11 23:45:20 1992 Ian Lance Taylor (ian@airs.com)
* policy.h, unix/serial.c (fsserial_set): added HAVE_STRIP_BUG to
policy.h to get around stupid Ultrix bug.
@@ -459,16 +1694,16 @@ Sun Oct 11 23:45:20 1992 Ian Lance Taylor (ian@comton.airs.com)
HAVE_BSD_TTY, keep tchars and ltchars in the sterminal structure,
and in fsserial_open disable all interrupt characters.
-Sat Oct 10 01:18:31 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Oct 10 01:18:31 1992 Ian Lance Taylor (ian@airs.com)
* uuconf/tinit.c (itunknown): Gert Doering: don't save "unknown"
with the other arguments.
-Fri Oct 9 00:56:43 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Oct 9 00:56:43 1992 Ian Lance Taylor (ian@airs.com)
* unix/lock.c: check for running process before doing kill.
-Thu Oct 8 00:20:12 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Oct 8 00:20:12 1992 Ian Lance Taylor (ian@airs.com)
* chat.c, protf.c, send.c, rec.c, unix/locfil.c: Stephen J.
Walick: cast arguments to strtol and strcspn to avoid warnings.
@@ -485,7 +1720,7 @@ Thu Oct 8 00:20:12 1992 Ian Lance Taylor (ian@comton.airs.com)
* unix/spool.c (zsfind_file): Matthias Zepf: fixed typos for
SPOOLDIR_BSD*.
-Wed Oct 7 00:03:08 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Oct 7 00:03:08 1992 Ian Lance Taylor (ian@airs.com)
* uuname.c (main): Marc Boucher: reverse sense of -a, and do not
display aliases by default.
@@ -495,7 +1730,7 @@ Wed Oct 7 00:03:08 1992 Ian Lance Taylor (ian@comton.airs.com)
* tstuu.c (main): Marc Boucher: add support for STREAMS ptys.
-Tue Oct 6 23:16:15 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Oct 6 23:16:15 1992 Ian Lance Taylor (ian@airs.com)
* policy.h: Marc Boucher: improve comments to describe SVR4.
@@ -506,7 +1741,7 @@ Tue Oct 6 23:16:15 1992 Ian Lance Taylor (ian@comton.airs.com)
* uuname.c (main): Andreas Vogel: usysdep_exit (TRUE) rather than
usysdep_exit (EXIT_SUCCESS).
-Mon Oct 5 22:59:51 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Oct 5 22:59:51 1992 Ian Lance Taylor (ian@airs.com)
* sysh.unx, unix/serial.c (fsserial_init): Marc Boucher: avoid
freeing unallocated string.
@@ -518,7 +1753,7 @@ Mon Oct 5 22:59:51 1992 Ian Lance Taylor (ian@comton.airs.com)
(fcudo_cmd, fcudo_subcmd, uculist_fns, icuunrecogfn): T. William
Wells: give reasonable error messages.
-Sun Oct 4 00:03:10 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Oct 4 00:03:10 1992 Ian Lance Taylor (ian@airs.com)
* */Makefile.in: T. William Wells: use ar qc rather than ar rc.
@@ -566,7 +1801,7 @@ Sun Oct 4 00:03:10 1992 Ian Lance Taylor (ian@comton.airs.com)
argument to zsfile_to_jobid, and pbgrade argument to
zsjobid_to_file.
-Sat Oct 3 11:03:13 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Oct 3 11:03:13 1992 Ian Lance Taylor (ian@airs.com)
* MANIFEST, Makefile.in, lib/MANIFEST, lib/Makefile.in,
lib/parse.c: moved parse.c from main directory to lib.
@@ -590,7 +1825,7 @@ Sat Oct 3 11:03:13 1992 Ian Lance Taylor (ian@comton.airs.com)
* uuconf/cmdarg.c: check first character to avoid calls to
strcmp or strcasecmp.
-Thu Oct 1 23:44:24 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Oct 1 23:44:24 1992 Ian Lance Taylor (ian@airs.com)
* trans.h, uucico.c (fdo_call, faccept_call), parse.c
(fparse_cmd), send.c (flocal_send_request): Gert Doering: SVR4
@@ -600,7 +1835,7 @@ Thu Oct 1 23:44:24 1992 Ian Lance Taylor (ian@comton.airs.com)
* tstuu.c (main, uprepare_test): added -n switch to not destroy
existing configuration files.
-Fri Sep 25 00:16:35 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Sep 25 00:16:35 1992 Ian Lance Taylor (ian@airs.com)
* protg.c (fgsenddata): T. William Wells: clear bytes correctly so
that resending a packet doesn't get a completely incorrect size.
@@ -608,14 +1843,14 @@ Fri Sep 25 00:16:35 1992 Ian Lance Taylor (ian@comton.airs.com)
* send.c (usadd_exec_line): Stephen J. Walick: don't send trailing
spaces on the created execute file, because it confuses Waffle.
-Thu Sep 24 00:25:18 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Sep 24 00:25:18 1992 Ian Lance Taylor (ian@airs.com)
* unix/jobid.c (zsjobid_to_file): Franc,ois Pinard: if the job ID
is too short, return NULL rather than dumping core.
unix/statsb.c (fskill_or_rejuv, isysdep_work_time): handle a NULL
return from zsjobid_to_file.
-Mon Sep 21 09:01:02 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Sep 21 09:01:02 1992 Ian Lance Taylor (ian@airs.com)
* uuconf/init.c, uuconf/syssub.c: Lele Gaifax: moved
declaration of _uuconf_unset from syssub.c to addstr.c because
@@ -627,11 +1862,11 @@ Mon Sep 21 09:01:02 1992 Ian Lance Taylor (ian@comton.airs.com)
* lib/Makefile.in, unix/Makefile.in: Lele Gaifax: bug in clean
target.
-Thu Sep 17 01:01:13 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Sep 17 01:01:13 1992 Ian Lance Taylor (ian@airs.com)
* Released beta version 1.04.
-Wed Sep 16 01:02:55 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Sep 16 01:02:55 1992 Ian Lance Taylor (ian@airs.com)
* uux.c (main): null terminate the options list for an 'E'
command.
@@ -655,14 +1890,14 @@ Wed Sep 16 01:02:55 1992 Ian Lance Taylor (ian@comton.airs.com)
lib/Makefile.in: use -I flags to permit compilation in a separate
directory. Set up clean targets per GNU standards.
-Tue Sep 15 00:07:09 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Sep 15 00:07:09 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (zget_uucp_cmd): can't set size_t variable to -1.
* Makefile.in (install): don't install info files. Added new
targets info and install-info.
-Mon Sep 14 13:19:42 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Sep 14 13:19:42 1992 Ian Lance Taylor (ian@airs.com)
* uuxqt.c (main): Gregory Bond: canonicalize the system name given
by the -s argument.
@@ -685,7 +1920,7 @@ Mon Sep 14 13:19:42 1992 Ian Lance Taylor (ian@comton.airs.com)
fsysdep_unlock_uuxqt_dir, fsysdep_move_uuxqt_files): use .Xqtdir
for first uuxqt execution, not .Xqtdir0000.
-Sun Sep 13 11:51:22 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Sep 13 11:51:22 1992 Ian Lance Taylor (ian@airs.com)
* trans.h, uucico.c (fdo_call, faccept_call), send.c
(flocal_send_request), rec.c (flocal_rec_send_request) parse.c
@@ -716,7 +1951,7 @@ Sun Sep 13 11:51:22 1992 Ian Lance Taylor (ian@comton.airs.com)
minutes. Honor CYM from the remote system. Send CYM if we have
something to do.
-Sat Sep 12 15:47:52 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Sep 12 15:47:52 1992 Ian Lance Taylor (ian@airs.com)
* Makefile.in: use $(MAKE) instead of make for recursive calls.
@@ -724,7 +1959,7 @@ Sat Sep 12 15:47:52 1992 Ian Lance Taylor (ian@comton.airs.com)
unix/MANIFEST, unix/Makefile.in: added esysdep_user_open to open a
file with user permissions.
-Fri Sep 11 00:27:32 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Sep 11 00:27:32 1992 Ian Lance Taylor (ian@airs.com)
* uudefs.h, copy.c: added fcopy_open_file.
@@ -732,7 +1967,7 @@ Fri Sep 11 00:27:32 1992 Ian Lance Taylor (ian@comton.airs.com)
* configure.in, conf.h.in: check for setreuid.
-Tue Sep 8 00:11:10 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Sep 8 00:11:10 1992 Ian Lance Taylor (ian@airs.com)
* protf.c (ffsendcmd), prott.c (ftsendcmd): eliminate calls to
alloca.
@@ -743,7 +1978,7 @@ Tue Sep 8 00:11:10 1992 Ian Lance Taylor (ian@comton.airs.com)
lib/Makefile.in, lib/MANIFEST: added getopt_long, and changed all
calls to getopt to call getopt_long instead.
-Mon Sep 7 22:26:51 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Sep 7 22:26:51 1992 Ian Lance Taylor (ian@airs.com)
* getopt.h, lib/getopt.c, lib/Makefile.in: bring getopt up to
glibc 1.04; call malloc instead of alloca in exchange.
@@ -755,7 +1990,7 @@ Mon Sep 7 22:26:51 1992 Ian Lance Taylor (ian@comton.airs.com)
* cu.c, unix/cusub.c: various minor improvements.
-Sun Sep 6 20:25:20 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Sep 6 20:25:20 1992 Ian Lance Taylor (ian@airs.com)
* uux.c (uxcopy_stdin): use getchar rather than fread to avoid
SVR4 bug.
@@ -766,12 +2001,12 @@ Sun Sep 6 20:25:20 1992 Ian Lance Taylor (ian@comton.airs.com)
* protg.c (fgsend_control): Niels Baggesen: report sending an RJ
when DEBUG_ABNORMAL.
-Tue Aug 25 00:07:20 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Aug 25 00:07:20 1992 Ian Lance Taylor (ian@airs.com)
* uuconf/time.c: Zacharias Beckman: let user defined time tables
override the defaults.
-Mon Aug 24 00:25:23 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Aug 24 00:25:23 1992 Ian Lance Taylor (ian@airs.com)
* system.h, uuxqt.c (uqdo_xqt_file), unix/xqtsub.c
(zsysdep_xqt_local_file): Jarmo Raiha: expand ~name in uuxqt.c.
@@ -803,7 +2038,7 @@ Mon Aug 24 00:25:23 1992 Ian Lance Taylor (ian@comton.airs.com)
* unix/serial.c: Brian Campbell: check for B57600, B76800 and
B115200 in baud rate table.
-Sun Aug 23 13:05:28 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Aug 23 13:05:28 1992 Ian Lance Taylor (ian@airs.com)
* chat.c (fcsend), tstuu.c (uchild): Chip Salzenberg: call sleep
(2) instead of sleep (1). Hopefully this won't break any chat
@@ -844,7 +2079,7 @@ Sun Aug 23 13:05:28 1992 Ian Lance Taylor (ian@comton.airs.com)
when closing a modem connection. Also, retry if we time out when
setting MIN.
-Sat Aug 22 22:31:34 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Aug 22 22:31:34 1992 Ian Lance Taylor (ian@airs.com)
* uuconf/time.c: Stephen Walick: don't require a comma between
time strings, since HDB doesn't seem to.
@@ -871,14 +2106,14 @@ Sat Aug 22 22:31:34 1992 Ian Lance Taylor (ian@comton.airs.com)
unix/xqtfil.c: Brian J. Murrell and Don Phillips: added
SPOOLDIR_SVR4.
-Thu Aug 20 00:06:32 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Aug 20 00:06:32 1992 Ian Lance Taylor (ian@airs.com)
* sysh.unx: Chiaki Ishikawa: some systems define some but not all
of the S_ file mode bits.
* uuchk.c (ikshow_port): Chiaki Ishikawa: display lockname.
-Wed Aug 19 22:41:39 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Aug 19 22:41:39 1992 Ian Lance Taylor (ian@airs.com)
* log.c (ustats): Scott Blachowicz: avoid overflow when reporting
bytes per second.
@@ -896,29 +2131,29 @@ Wed Aug 19 22:41:39 1992 Ian Lance Taylor (ian@comton.airs.com)
ack. Added new SN8 rejection, meaning that the file has already
been received.
-Sat Aug 15 11:50:32 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Aug 15 11:50:32 1992 Ian Lance Taylor (ian@airs.com)
* uuconf/time.c (itadd_span): Don Lewis: fixed bug if later span
overlapped two or more earlier spans.
-Thu Aug 13 00:19:50 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Aug 13 00:19:50 1992 Ian Lance Taylor (ian@airs.com)
* system.h, rec.c (fremote_send_file_init, fremote_send_reply),
uucico.c (fdo_call, faccept_call), uucp.c (main), uux.c (main),
unix/opensr.c (zsysdep_receive_temp, esysdep_open_receive):
implemented file restart.
-Wed Aug 12 23:32:05 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Aug 12 23:32:05 1992 Ian Lance Taylor (ian@airs.com)
* proti.c (fiprocess_data): ensure that the first argument to
fgot_data is always > 0 if the second argument is > 0.
-Mon Aug 10 22:43:40 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Aug 10 22:43:40 1992 Ian Lance Taylor (ian@airs.com)
* trans.c (floop, ustats_failed): handle half-duplex connections
and failed calls correctly.
-Sun Aug 9 17:56:32 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Aug 9 17:56:32 1992 Ian Lance Taylor (ian@airs.com)
* proti.c (firesend, fisenddata, ficheck_errors): made several
changes to improve performance on a lossy line: can now shrink
@@ -934,7 +2169,7 @@ Sun Aug 9 17:56:32 1992 Ian Lance Taylor (ian@comton.airs.com)
* MANIFEST, Makefile.in, prot.h, uucico.c, protz.c, trans.c: Doug
Evans: added Doug Evans's zmodem implementation as protocol 'a'.
-Wed Aug 5 22:28:14 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Aug 5 22:28:14 1992 Ian Lance Taylor (ian@airs.com)
* policy.h, uuconf.h, uucico.c (fcall), uuconf/tsinfo.c,
uuconf/hsinfo.c, uuconf/syssub.c: added "max-retries" command for
@@ -947,7 +2182,7 @@ Wed Aug 5 22:28:14 1992 Ian Lance Taylor (ian@comton.airs.com)
protocol entry point, changed handshake successful message to
display it.
-Tue Aug 4 00:04:31 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Aug 4 00:04:31 1992 Ian Lance Taylor (ian@airs.com)
* prot.h, uucico.c, protg.c (fbiggstart, cGshort_packets): Chip
Salzenberg: added support for 'G' protocol. Added "short-packets"
@@ -960,7 +2195,7 @@ Tue Aug 4 00:04:31 1992 Ian Lance Taylor (ian@comton.airs.com)
* unix/spawn.c: don't close the file descriptor after dupping it.
-Sun Aug 2 23:04:18 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Aug 2 23:04:18 1992 Ian Lance Taylor (ian@airs.com)
* trans.c (fremote_hangup_reply): don't hangup if a file transfer
is in progress.
@@ -968,7 +2203,7 @@ Sun Aug 2 23:04:18 1992 Ian Lance Taylor (ian@comton.airs.com)
* send.c (flocal_send_cancelled): don't pass a NULL buffer to
pfsenddata.
-Sun Jul 26 13:28:27 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Jul 26 13:28:27 1992 Ian Lance Taylor (ian@airs.com)
* unix/work.c (fsysdep_get_work_init): return TRUE if there is no
work directory.
@@ -991,7 +2226,7 @@ Sun Jul 26 13:28:27 1992 Ian Lance Taylor (ian@comton.airs.com)
memmove, avoiding the SCO bug and making the 'g' protocol slightly
more efficient.
-Sat Jul 25 14:20:30 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Jul 25 14:20:30 1992 Ian Lance Taylor (ian@airs.com)
* uucp.h, uudefs.h, many other files: broke part of uucp.h out
into uudefs.h, stopped including uuconf.h in uucp.h, fixed up .c
@@ -1016,7 +2251,7 @@ Sat Jul 25 14:20:30 1992 Ian Lance Taylor (ian@comton.airs.com)
lib/escape.c. Made all connections on Unix use the same
system dependent structure.
-Tue Jul 21 22:08:10 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Jul 21 22:08:10 1992 Ian Lance Taylor (ian@airs.com)
* uucp.h, trans.h, uucico.c (fdo_call, faccept_call), uuxqt.c
(uqdo_xqt_file), uucp.c (main), uux.c (main), uustat.c
@@ -1028,7 +2263,7 @@ Tue Jul 21 22:08:10 1992 Ian Lance Taylor (ian@comton.airs.com)
added E request to send file executions which only require reading
from standard input.
-Sat Jul 18 20:22:50 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Jul 18 20:22:50 1992 Ian Lance Taylor (ian@airs.com)
* proti.c, Makefile.in, MANIFEST, prot.h, system.h, trans.h,
uucico.c, prote.c, protf.c, protg.c, prott.c, trans.c, send.c,
@@ -1037,31 +2272,31 @@ Sat Jul 18 20:22:50 1992 Ian Lance Taylor (ian@comton.airs.com)
points. Cleaned up send and receive state machines. Removed
pfgone argument from esysdep_open_send.
-Fri Jul 17 09:41:05 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Jul 17 09:41:05 1992 Ian Lance Taylor (ian@airs.com)
* uuxqt.c (uqdo_xqt_file): only report base name of execution
file, not full name.
-Thu Jul 16 00:45:06 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Jul 16 00:45:06 1992 Ian Lance Taylor (ian@airs.com)
* lib/crc.c: unroll the loop a bit.
* configure.in, conf.h.in, unix/init.c: updated to autoconf 0.120.
-Wed Jul 15 14:45:32 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Jul 15 14:45:32 1992 Ian Lance Taylor (ian@airs.com)
* uuconf.h, uuconv.c, uuconf/uucnfi.h, uuconf/reliab.c,
uuconf/tportc.c, uuconf/tdialc.c, uuconf/diasub.c, uuconf/hport.c,
uuconf/prtsub.c, uuconf/vsinfo.c: added UUCONF_RELIABLE_FULLDUPLEX
and "half-duplex" command for ports and dialers.
-Mon Jul 13 16:53:04 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Jul 13 16:53:04 1992 Ian Lance Taylor (ian@airs.com)
* prot.h, lib/crc.c, lib/Makefile.in, lib/MANIFEST: added icrc
function to compute 32 bit CRC (from Gary S. Brown, via Doug
Evans).
-Sun Jul 12 21:40:15 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Jul 12 21:40:15 1992 Ian Lance Taylor (ian@airs.com)
* uuconv.c (uvwrite_time): Chris Lewis: don't output two commas in
a row.
@@ -1069,7 +2304,7 @@ Sun Jul 12 21:40:15 1992 Ian Lance Taylor (ian@comton.airs.com)
* uuconv.c (uvwrite_taylor_system, uvwrite_taylor_port): Chris
Lewis: generate command "protocol", not "protocols".
-Sat Jul 11 17:09:09 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Jul 11 17:09:09 1992 Ian Lance Taylor (ian@airs.com)
* xcmd.c (fremote_xcmd_init): Chris Lewis: use qdaemon->puuconf,
since puuconf is not defined.
@@ -1083,7 +2318,7 @@ Sat Jul 11 17:09:09 1992 Ian Lance Taylor (ian@comton.airs.com)
* uuconf/freblk.c, uuconf/free.c: Chris Lewis: don't define as
void when ! UUCONF_ANSI_C.
-Thu Jul 9 09:17:55 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Jul 9 09:17:55 1992 Ian Lance Taylor (ian@airs.com)
* prot.h, uucico.c (fdo_call, faccept_call), prote.c (festart),
protf.c (ffstart), protg.c (fgstart), prott.c (ftstart): no need
@@ -1092,7 +2327,7 @@ Thu Jul 9 09:17:55 1992 Ian Lance Taylor (ian@comton.airs.com)
* protf.c (ffawait_ack, ffawait_cksum): don't try to resend if we
don't have a file.
-Wed Jul 8 14:28:23 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Jul 8 14:28:23 1992 Ian Lance Taylor (ian@airs.com)
* unix/srmdir.c (fsysdep_rmdir), unix/walk.c (usysdep_walk_tree):
cast to char * to avoid warning.
@@ -1119,7 +2354,7 @@ Wed Jul 8 14:28:23 1992 Ian Lance Taylor (ian@comton.airs.com)
of jobs to do, and support connections. Added new files trans.h,
trans.c, send.c, rec.c, xcmd.c, and removed old file file.c.
-Mon Jun 29 15:14:15 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Jun 29 15:14:15 1992 Ian Lance Taylor (ian@airs.com)
* Makefile.in: Stephen J. Walick: copy uustat.1 to
uustat.$(manext), not uucp.($manext). Also try to create
@@ -1128,11 +2363,11 @@ Mon Jun 29 15:14:15 1992 Ian Lance Taylor (ian@comton.airs.com)
* chat.c (fcsend, fcprogram): check for NULL return from
uuconf_callout.
-Thu Jun 18 22:37:28 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Jun 18 22:37:28 1992 Ian Lance Taylor (ian@airs.com)
* configure.in, Makefile.in: updated to autoconf 0.118.
-Wed Jun 17 14:22:11 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Jun 17 14:22:11 1992 Ian Lance Taylor (ian@airs.com)
* unix/serial.c (fsserial_init): add /dev if necessary to device
as well as to port name.
@@ -1142,12 +2377,12 @@ Wed Jun 17 14:22:11 1992 Ian Lance Taylor (ian@comton.airs.com)
* cu.c (main), uucp.c (main), uux.c (main), uuxqt.c (main): don't
call zsysdep_localname until we've called usysdep_initialize.
-Tue Jun 16 17:42:50 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Jun 16 17:42:50 1992 Ian Lance Taylor (ian@airs.com)
* unix/signal.c (usset_signal): set SA_INTERRUPT to force system
calls to be interrupted on SunOS.
-Mon Jun 15 15:10:24 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Jun 15 15:10:24 1992 Ian Lance Taylor (ian@airs.com)
* everything: integrated uuconf library. Split out lib and unix
libraries. Made many changes, including defaults for port and
@@ -1155,19 +2390,19 @@ Mon Jun 15 15:10:24 1992 Ian Lance Taylor (ian@comton.airs.com)
handling of HDB Permissions, new zbufalc routines to manage
strings on the heap. Incorporated uuconv.
-Wed Jun 10 23:51:03 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Jun 10 23:51:03 1992 Ian Lance Taylor (ian@airs.com)
* uuconf.h, uuconf/Makefile.in, uuconf/locnm.c, uuconf/llocnm.c,
uuconf/hlocnm.c, uuconf/tlocnm.c: renamed uuconf_localname to
uuconf_login_localname and added new uuconf_localname which
doesn't need to read system information.
-Tue Jun 9 14:19:20 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Jun 9 14:19:20 1992 Ian Lance Taylor (ian@airs.com)
* uuconf.h, uuconf/Makefile.in, uuconf/local.c: wrote
uuconf_system_local.
-Mon Jun 8 14:14:30 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Jun 8 14:14:30 1992 Ian Lance Taylor (ian@airs.com)
* policy.h: changed description of LOCKDIR, which now need not
always be defined.
@@ -1176,7 +2411,7 @@ Mon Jun 8 14:14:30 1992 Ian Lance Taylor (ian@comton.airs.com)
uuconf/tinit.c, uuconf/Makefile.in: added uuconf_lockdir, and
``lockdir'' command to config.
-Sat Jun 6 22:07:58 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Jun 6 22:07:58 1992 Ian Lance Taylor (ian@airs.com)
* configure.in: updated to autoconf 0.115, added code to set
LIBOBJS.
@@ -1185,13 +2420,13 @@ Sat Jun 6 22:07:58 1992 Ian Lance Taylor (ian@comton.airs.com)
routines now in lib/, changed to include regular UUCP header
files.
-Fri Jun 5 15:31:29 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Jun 5 15:31:29 1992 Ian Lance Taylor (ian@airs.com)
* uuconf.h, uuconf/uucnfi.h, uuconf/syssub.c, uuconf/uuconv.c:
always set zpubdir for every system, changed uuconf_zpubdir to
const char *.
-Wed Jun 3 15:15:32 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Jun 3 15:15:32 1992 Ian Lance Taylor (ian@airs.com)
* uuconf.h, uuconf/Makefile.in, uuconf/deblev.c, uuconf/maxuxq.c,
uuconf/pubdir.c, uuconf/spool.c: wrote uuconf_debuglevel,
@@ -1201,12 +2436,12 @@ Wed Jun 3 15:15:32 1992 Ian Lance Taylor (ian@comton.airs.com)
* uuconf/tportc.c: default TCP ports to being fully reliable.
-Mon Jun 1 17:03:22 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Jun 1 17:03:22 1992 Ian Lance Taylor (ian@airs.com)
* uuconf.h, uuconf/prtsub.c: removed uuconf_psysdep from
uuconf_port.
-Sun May 31 00:07:40 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun May 31 00:07:40 1992 Ian Lance Taylor (ian@airs.com)
* uuconf.h, uuconf/Makefile.in, uuconf/diacod.c: wrote
uuconf_dialcode.
@@ -1224,7 +2459,7 @@ Sun May 31 00:07:40 1992 Ian Lance Taylor (ian@comton.airs.com)
* uuconf.h, uuconf/Makefile.in, uuconf/val.c, uuconf/tval.c: wrote
uuconf_validate, uuconf_taylor_validate.
-Sat May 30 12:37:02 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat May 30 12:37:02 1992 Ian Lance Taylor (ian@airs.com)
* system.h, sys1.unx: changed zsysdep_local_name to
zsysdep_localname, and made it fatal out rather than return NULL.
@@ -1246,12 +2481,12 @@ Sat May 30 12:37:02 1992 Ian Lance Taylor (ian@comton.airs.com)
* configure.in, conf.h.in: check for <stddef.h>.
-Fri May 29 00:03:05 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri May 29 00:03:05 1992 Ian Lance Taylor (ian@airs.com)
* sysinf.c (ztranslate_system): Jac Kersing: must xstrdup the
argument, since it points to a buffer that will be reused.
-Thu May 28 12:42:20 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu May 28 12:42:20 1992 Ian Lance Taylor (ian@airs.com)
* sys3.unx (zsysdep_real_file_name): Ted Lindgreen: check return
value of zstilde_expand.
@@ -1303,13 +2538,13 @@ Thu May 28 12:42:20 1992 Ian Lance Taylor (ian@comton.airs.com)
* configure.in, conf.h.in, sysh.unx, sys1.unx: John Theus: use
sv_onstack instead of sv_flags in the sigvec structure on 4.2BSD.
-Wed May 27 23:23:39 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed May 27 23:23:39 1992 Ian Lance Taylor (ian@airs.com)
* policy.h, sys2.unx (fsysdep_modem_no_carrier): Scott Reynolds:
added HAVE_CLOCAL_BUG compilation parameter to work around
problems on some serial ports.
-Tue May 26 15:50:17 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue May 26 15:50:17 1992 Ian Lance Taylor (ian@airs.com)
* uustat.c, uustat.1: added a bunch of options to support uuclean:
-e, -i, -K, -M, -N, -W, -Q.
@@ -1317,13 +2552,13 @@ Tue May 26 15:50:17 1992 Ian Lance Taylor (ian@comton.airs.com)
* system.h, sys7.unx (fsysdep_privileged, fskill_or_rejuv): added
fsysdep_privileged function.
-Thu May 21 13:30:21 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu May 21 13:30:21 1992 Ian Lance Taylor (ian@airs.com)
* uuxqt.c (uqdo_xqt_file): processing of execution file has to be
case significant; this will change handling of "n" flag, which was
not correctly handled before.
-Wed May 20 14:22:12 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed May 20 14:22:12 1992 Ian Lance Taylor (ian@airs.com)
* sys1.unx (usysdep_detach): close the statistics file when
detaching.
@@ -1361,7 +2596,7 @@ Wed May 20 14:22:12 1992 Ian Lance Taylor (ian@comton.airs.com)
(usysdep_walk_tree, isdir, ftw, do_ftw): added -R option to uucp
to recursively copy directories.
-Tue May 19 18:29:32 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue May 19 18:29:32 1992 Ian Lance Taylor (ian@airs.com)
* sys3.unx: changed zsysdep_in_dir to always append the filename
to the directory, even if the directory did not already exist.
@@ -1369,25 +2604,25 @@ Tue May 19 18:29:32 1992 Ian Lance Taylor (ian@comton.airs.com)
* sysh.unx, sys1.unx, sys3.unx, sys4.unx, sys5.unx: renamed
fsdirectory_exists to fsysdep_directory.
-Mon May 18 14:49:35 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon May 18 14:49:35 1992 Ian Lance Taylor (ian@airs.com)
* system.h, uucp.c (main), sys6.unx (zsysdep_uuto): added -t
option to uucp to emulate uuto, wrote zsysdep_uuto to do Unix
dependent destination translation for uuto, added -p option to
uucp as synonym for -C for uuto compatibility.
-Sun May 17 22:04:09 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun May 17 22:04:09 1992 Ian Lance Taylor (ian@airs.com)
* protg.c (fgexchange_init): permit a second INITB to override the
segment size given in the first INITB.
-Tue May 5 16:03:22 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue May 5 16:03:22 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (main, fdo_call), uucico.8: Chip Salzenberg: added -c
option to uucico to not warn if invoked when the system may not be
called.
-Tue Apr 28 15:05:01 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Apr 28 15:05:01 1992 Ian Lance Taylor (ian@airs.com)
* sysh.unx, sys2.unx (fsserial_open, fsblock): preserve file
status flags.
@@ -1395,7 +2630,7 @@ Tue Apr 28 15:05:01 1992 Ian Lance Taylor (ian@comton.airs.com)
* protg.c (fgwait_for_packet): Heiko Rupp: only send RJ packet if
there are no unacknowledged packets.
-Mon Apr 27 18:56:42 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Apr 27 18:56:42 1992 Ian Lance Taylor (ian@airs.com)
* system.h: added several routines for cu.
@@ -1404,7 +2639,7 @@ Mon Apr 27 18:56:42 1992 Ian Lance Taylor (ian@comton.airs.com)
* uux.c (main): Jose Manas: dumb bug when checking against
calloc_args.
-Fri Apr 24 20:32:06 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Apr 24 20:32:06 1992 Ian Lance Taylor (ian@airs.com)
* sys1.unx: changed HAVE_LONG_NAMES to HAVE_LONG_FILENAMES for new
version of autoconf.
@@ -1423,7 +2658,7 @@ Fri Apr 24 20:32:06 1992 Ian Lance Taylor (ian@comton.airs.com)
* sys2.unx: get the right versions of major and minor.
-Wed Apr 22 11:19:11 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Apr 22 11:19:11 1992 Ian Lance Taylor (ian@airs.com)
* protg.c (fgsenddata, fggot_ack): Michael Haberler: the slow
start after error code was essentially shrinking the window size.
@@ -1440,7 +2675,7 @@ Wed Apr 22 11:19:11 1992 Ian Lance Taylor (ian@comton.airs.com)
(uv2_read_systems): Michael Richardson: don't core dump if no chat
script.
-Tue Apr 21 00:19:47 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Apr 21 00:19:47 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (faccept_call): Chris Lewis: a successful call in
should clear the number of retries.
@@ -1454,24 +2689,24 @@ Tue Apr 21 00:19:47 1992 Ian Lance Taylor (ian@comton.airs.com)
parity generation, input parity checking, and XON/XOFF
handshaking, all to support cu.
-Mon Apr 20 11:47:23 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Apr 20 11:47:23 1992 Ian Lance Taylor (ian@airs.com)
* port.h, uucico.c (fdo_call), port.c (fport_dial, fmodem_dial),
tcp.c (ftcp_dial): added separate zphone argument to fport_dial to
support cu.
-Thu Apr 16 01:15:42 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Apr 16 01:15:42 1992 Ian Lance Taylor (ian@airs.com)
* bnu.c (ubadd_perm, ubadd_perm_alternate): Chris Lewis: handle a
combination of Permissions entries which specify just LOGNAME with
entries that specify both MACHINE and LOGNAME.
-Wed Apr 15 16:11:48 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Apr 15 16:11:48 1992 Ian Lance Taylor (ian@airs.com)
* sys1.unx (usysdep_initialize, zsysdep_login_name): John Theus:
don't die if can't get login name, unless it's really needed.
-Tue Apr 14 12:39:18 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Apr 14 12:39:18 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (main, fcall): Petri Helenius: must relock system after
detaching from terminal when trying different alternates.
@@ -1505,18 +2740,18 @@ Tue Apr 14 12:39:18 1992 Ian Lance Taylor (ian@comton.airs.com)
* uucp.texi: Harlan Stenn: correct case of references.
-Tue Apr 7 01:02:17 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Apr 7 01:02:17 1992 Ian Lance Taylor (ian@airs.com)
* Released version 1.03.
-Mon Apr 6 15:49:08 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Apr 6 15:49:08 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (faccept_call): Marc Boucher: set *pqsys to NULL.
* bnu.c (ubnu_read_systems, fbnu_find_port): Erik Forsberg:
support multiple character modem classes.
-Fri Apr 3 00:37:25 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Apr 3 00:37:25 1992 Ian Lance Taylor (ian@airs.com)
* sys2.unx: Petri Helenius: only clear known bits in termio or
termios structure; didn't change HAVE_BSD_TTY handling--maybe next
@@ -1529,14 +2764,14 @@ Fri Apr 3 00:37:25 1992 Ian Lance Taylor (ian@comton.airs.com)
* sys1.unx, chat.c: minor cleanups for gcc 2.1.
-Thu Apr 2 17:51:36 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Apr 2 17:51:36 1992 Ian Lance Taylor (ian@airs.com)
* tstuu.c: conditionally declare times.
* uucp.h, prot.c, sysinf.c, prtinf.c: added gcc 2.0 format
checking to ulog, and fixed a few problems it discovered.
-Wed Apr 1 16:21:08 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Apr 1 16:21:08 1992 Ian Lance Taylor (ian@airs.com)
* sys3.unx (esysdep_open_receive): David J. MacKenzie: some
USG_STATFS systems use 512 as the block size of f_bfree, despite
@@ -1564,7 +2799,7 @@ Wed Apr 1 16:21:08 1992 Ian Lance Taylor (ian@comton.airs.com)
* uucico.8, uuxqt.8, uucp.1, uux.1: updated -x switch, cleaned up
a bit.
-Tue Mar 31 14:40:06 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Mar 31 14:40:06 1992 Ian Lance Taylor (ian@airs.com)
* sys1.unx (usysdep_initialize): use $PWD to get the current
working directory if it's defined and correct.
@@ -1579,7 +2814,7 @@ Tue Mar 31 14:40:06 1992 Ian Lance Taylor (ian@comton.airs.com)
* protg.c (fgsenddata): Niels Baggesen: packet to retransmit did
not get reset correctly.
-Mon Mar 30 10:03:28 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Mar 30 10:03:28 1992 Ian Lance Taylor (ian@airs.com)
* tcp.c (ftcp_reset): Petri Helenius: TCP server never started
uuxqt, because it exited in ftcp_reset.
@@ -1590,7 +2825,7 @@ Mon Mar 30 10:03:28 1992 Ian Lance Taylor (ian@comton.airs.com)
* sys3.unx (esysdep_open_receive): Niels Baggesen: USG statfs has
an f_bsize field.
-Sun Mar 29 23:04:20 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Mar 29 23:04:20 1992 Ian Lance Taylor (ian@airs.com)
* uucp.h, sysinf.c, prot.c, prote.c, protf.c, protg.c, prott.c:
Niels Baggesen: added new debugging types abnormal and uucp-proto.
@@ -1604,7 +2839,7 @@ Sun Mar 29 23:04:20 1992 Ian Lance Taylor (ian@comton.airs.com)
fsserial_io): always block and unblock the read and write
descriptors together.
-Sat Mar 28 14:40:50 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Mar 28 14:40:50 1992 Ian Lance Taylor (ian@airs.com)
* uustat.c: allow multiple systems and users to be specified at
once; likewise for kills and rejuvenates. Allow old and young to
@@ -1640,7 +2875,7 @@ Sat Mar 28 14:40:50 1992 Ian Lance Taylor (ian@comton.airs.com)
* uucico.c (fuucp), log.c (ulog, ustats, ustats_close): close log
and statistics file every time master and slave switch roles.
-Fri Mar 27 00:31:23 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Mar 27 00:31:23 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (fdo_call): Mark Mallett: minor cleanup.
@@ -1674,29 +2909,29 @@ Fri Mar 27 00:31:23 1992 Ian Lance Taylor (ian@comton.airs.com)
* Makefile.in, configure.in: David J. MacKenzie: various cleanups.
Changed default newconfigdir definition. Supported compilation in
a different directory. Used symbolic links if available. Changed
- default infordir definition per Franc,ois Pinard.
+ default infodir definition per Franc,ois Pinard.
* policy.h: David J. MacKenzie: various cleanups.
-Thu Mar 26 12:17:41 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Mar 26 12:17:41 1992 Ian Lance Taylor (ian@airs.com)
* sys3.unx: reduced race condition in fsdo_lock.
* sys1.unx: Gerben Wierda: various cleanups. Also don't set
sa_flags to SV_INTERRUPT per Chip Salzenberg.
-Wed Mar 25 22:20:24 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Mar 25 22:20:24 1992 Ian Lance Taylor (ian@airs.com)
* configure.in: Overhauled for readability and functionality as
suggested by T. William Wells and others. Added bug checks,
including for SCO memmove and ftime.
-Tue Mar 24 12:18:56 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Mar 24 12:18:56 1992 Ian Lance Taylor (ian@airs.com)
* sysinf.c (uiread_systems): fixed handling of alternates in
file-wide defaults.
-Wed Mar 18 01:01:25 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Mar 18 01:01:25 1992 Ian Lance Taylor (ian@airs.com)
* config.c (tprocess_one_cmd): handle CMDTABTYPE_FULLSTRING
correctly if there are no arguments.
@@ -1706,7 +2941,7 @@ Wed Mar 18 01:01:25 1992 Ian Lance Taylor (ian@comton.airs.com)
* sys1.unx (usysdep_detach): open the controlling terminal in non
delay mode since it might be a modem.
-Tue Mar 17 00:01:53 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Mar 17 00:01:53 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (fdo_call, faccept_call): T. William Wells: set current
time in status file when call completes.
@@ -1718,7 +2953,7 @@ Tue Mar 17 00:01:53 1992 Ian Lance Taylor (ian@comton.airs.com)
* sys2.unx (fsserial_lock, fsserial_open): don't block when
opening the write descriptor.
-Mon Mar 16 00:14:43 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Mar 16 00:14:43 1992 Ian Lance Taylor (ian@airs.com)
* system.h, uuxqt.c (uqdo_xqt_file), sys5.unx (fsysdep_execute):
pass command to fsysdep_execute as first element of argument
@@ -1771,7 +3006,7 @@ Mon Mar 16 00:14:43 1992 Ian Lance Taylor (ian@comton.airs.com)
maximum file transfer size; accept and ignore SVR4 -R flag meaning
that the system supports file restart.
-Sun Mar 15 00:21:56 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Mar 15 00:21:56 1992 Ian Lance Taylor (ian@airs.com)
* sysinf.c (titime, titimegrade): permit a retry time to be
specified as an optional additional argument.
@@ -1798,7 +3033,7 @@ Sun Mar 15 00:21:56 1992 Ian Lance Taylor (ian@comton.airs.com)
* bnu.c (fbnu_find_port): Scott Ballantyne: accept "Any" as a
Device speed.
-Sat Mar 14 20:52:11 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Mar 14 20:52:11 1992 Ian Lance Taylor (ian@airs.com)
* uucp.h, system.h, sysh.unx, uucico.c (main, zget_typed_line),
uuxqt.c (main), uucp.c (main), uux.c (main, uxcopy_stdin), tcp.c
@@ -1817,7 +3052,7 @@ Sat Mar 14 20:52:11 1992 Ian Lance Taylor (ian@comton.airs.com)
tstuu.c (uchild): added function isspawn, espopen and iswait and
channeled all execs of new processes and waits through them.
-Fri Mar 13 18:00:04 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Mar 13 18:00:04 1992 Ian Lance Taylor (ian@airs.com)
* sysinf.c (uset_system_defaults): Chip Salzenberg: changed
default login script timeout to 10 seconds.
@@ -1828,7 +3063,7 @@ Fri Mar 13 18:00:04 1992 Ian Lance Taylor (ian@comton.airs.com)
freport argument to freceive_data, and change all old calls to
pass it in as FALSE.
-Thu Mar 12 14:49:59 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Mar 12 14:49:59 1992 Ian Lance Taylor (ian@airs.com)
* uucp.h: added a padding byte to scmd structure, since at least
one compiler needs it.
@@ -1850,7 +3085,7 @@ Thu Mar 12 14:49:59 1992 Ian Lance Taylor (ian@comton.airs.com)
The debugging types are additive. Many source files changed.
Inspired by Michael Richardson, Johan Vromans and Peter da Silva.
-Wed Mar 11 12:01:03 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Mar 11 12:01:03 1992 Ian Lance Taylor (ian@airs.com)
* policy.h, uuxqt.c (uqdo_xqt_file): Chip Salzenberg: support
Internet mail addresses in uuxqt replies (added configuration
@@ -1872,7 +3107,7 @@ Wed Mar 11 12:01:03 1992 Ian Lance Taylor (ian@comton.airs.com)
Jon Zeef: if a temporary failure occurs, retry the execution
later.
-Tue Mar 10 12:40:30 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Mar 10 12:40:30 1992 Ian Lance Taylor (ian@airs.com)
* sysh.unx, sys1.unx (isfork), sys2.unx, sys5.unx, tcp.c:
Franc,ois Pinard: retry fork several times before giving up.
@@ -1908,7 +3143,7 @@ Tue Mar 10 12:40:30 1992 Ian Lance Taylor (ian@comton.airs.com)
parameter HAVE_TERMIOS_AND_SYS_IOCTL_H accordingly; handle it in
sysh.unx.
-Mon Mar 9 00:06:12 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Mar 9 00:06:12 1992 Ian Lance Taylor (ian@airs.com)
* sys2.unx (fsserial_close): Franc,ois Pinard: sleep for a second
after closing the serial port to give it a chance to settle.
@@ -1940,7 +3175,7 @@ Mon Mar 9 00:06:12 1992 Ian Lance Taylor (ian@comton.airs.com)
this status type is not used (if an attempt is made to call the
system, the status is left unchanged).
-Sun Mar 8 11:41:45 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Mar 8 11:41:45 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (main, flogin_prompt, faccept_call): Ted Lindgreen: if
we were asked to call a single system, or if a single system
@@ -1959,7 +3194,7 @@ Sun Mar 8 11:41:45 1992 Ian Lance Taylor (ian@comton.airs.com)
report the port name and (for incoming calls) the login name in
the log file.
-Sat Mar 7 10:00:47 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Mar 7 10:00:47 1992 Ian Lance Taylor (ian@airs.com)
* port.h, prtinf.c, sys2.unx (fsserial_lockfile, fsserial_lock):
Peter da Silva: added ``lockname'' command to ports to permit
@@ -1981,7 +3216,7 @@ Sat Mar 7 10:00:47 1992 Ian Lance Taylor (ian@comton.airs.com)
* prot.h: never included more than once.
-Fri Mar 6 21:53:28 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Mar 6 21:53:28 1992 Ian Lance Taylor (ian@airs.com)
* uucp.h: Eric Ziegast: some systems don't define EXIT_SUCCESS or
EXIT_FAILURE in stdlib.h.
@@ -1993,7 +3228,7 @@ Fri Mar 6 21:53:28 1992 Ian Lance Taylor (ian@comton.airs.com)
incorrect maximum possible transfer size. Added new file
uutime.h.
-Wed Mar 4 10:06:13 1992 Ian Lance Taylor (ian@comton.airs.com)
+Wed Mar 4 10:06:13 1992 Ian Lance Taylor (ian@airs.com)
* sys2.unx (fsserial_lockfile, fsserial_lock, fsysdep_modem_open,
fsysdep_direct_open, fsysdep_modem_close, fsysdep_direct_close):
@@ -2014,7 +3249,7 @@ Wed Mar 4 10:06:13 1992 Ian Lance Taylor (ian@comton.airs.com)
* uucico.c (zget_uucp_cmd): Michael Haberler: some systems send \n
after Shere, rather than a null byte.
-Tue Mar 3 01:03:22 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Mar 3 01:03:22 1992 Ian Lance Taylor (ian@airs.com)
* uuxqt.c (main, uqdo_xqt_file): permit local executions, don't
get grade out of system dependent file name.
@@ -2060,7 +3295,7 @@ Tue Mar 3 01:03:22 1992 Ian Lance Taylor (ian@comton.airs.com)
with V2 or BNU configuration files, don't complain if the
HAVE_TAYLOR_CONFIG files are missing.
-Mon Mar 2 10:21:36 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Mar 2 10:21:36 1992 Ian Lance Taylor (ian@airs.com)
* sys2.unx (fsserial_read): T. William Wells: don't arbitrarily
extend read timeout.
@@ -2068,14 +3303,14 @@ Mon Mar 2 10:21:36 1992 Ian Lance Taylor (ian@comton.airs.com)
* uux.c (main): check iSignal before entering fread, since the
user may have hit ^C earlier in the program.
-Sun Mar 1 23:39:33 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Mar 1 23:39:33 1992 Ian Lance Taylor (ian@airs.com)
* policy.h, uucp.h, sysh.unx, sys2.unx (fsserial_lock,
fsysdep_modem_close, fsysdep_direct_close), util.c (strlwr),
configure.in: Marc Unangst: added HAVE_SCO_LOCKFILES configuration
parameter to force lock file names to lower case.
-Fri Feb 28 00:07:12 1992 Ian Lance Taylor (ian@comton.airs.com)
+Fri Feb 28 00:07:12 1992 Ian Lance Taylor (ian@airs.com)
* system.h, uucico.c (faccept_call, fdo_xcmd), uuxqt.c
(uqdo_xqt_file), uux.c (main), uucp.c (main, ucspool_cmds),
@@ -2107,7 +3342,7 @@ Fri Feb 28 00:07:12 1992 Ian Lance Taylor (ian@comton.airs.com)
setjmp. Also TIOCNOTTY sets the process group to 0, so we don't
have to fork before calling it.
-Thu Feb 27 00:08:09 1992 Ian Lance Taylor (ian@comton.airs.com)
+Thu Feb 27 00:08:09 1992 Ian Lance Taylor (ian@airs.com)
* sys1.unx, sys6.unx, sys7.unx: added some extern definitions.
@@ -2132,7 +3367,7 @@ Thu Feb 27 00:08:09 1992 Ian Lance Taylor (ian@comton.airs.com)
checked at various points, notably in the port routines and in the
main loops in uucico and uuxqt.
-Tue Feb 25 10:59:23 1992 Ian Lance Taylor (ian@comton.airs.com)
+Tue Feb 25 10:59:23 1992 Ian Lance Taylor (ian@airs.com)
* protg.c (fgwait_for_packet): Bob Denny: reset the count of
timeouts only when data is recognized, so that we aren't fooled by
@@ -2141,7 +3376,7 @@ Tue Feb 25 10:59:23 1992 Ian Lance Taylor (ian@comton.airs.com)
* sys5.unx (zsysdep_get_xqt): Bob Denny: don't warn if opendir
gets ENOENT. I think POSIX requires ENOTDIR, but what can you do?
-Mon Feb 24 14:37:10 1992 Ian Lance Taylor (ian@comton.airs.com)
+Mon Feb 24 14:37:10 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (main, uusage): don't treat an extra argument as a port
name.
@@ -2169,7 +3404,7 @@ Mon Feb 24 14:37:10 1992 Ian Lance Taylor (ian@comton.airs.com)
* uucp.h: John Theus: if we don't have vprintf, ulog is defined
without an ellipsis, so don't declare it with one.
-Sun Feb 23 14:45:53 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sun Feb 23 14:45:53 1992 Ian Lance Taylor (ian@airs.com)
* uucp.h, system.h, bnu.c (ubnu_read_systems), config.c
(fin_directory_list), sys1.unx (fsysdep_in_directory), sys5.unx
@@ -2192,7 +3427,7 @@ Sun Feb 23 14:45:53 1992 Ian Lance Taylor (ian@comton.airs.com)
zcalled_remote_receive fields to ssysteminfo structure for this,
and handled them in all the appropriate places.
-Sat Feb 22 22:30:59 1992 Ian Lance Taylor (ian@comton.airs.com)
+Sat Feb 22 22:30:59 1992 Ian Lance Taylor (ian@airs.com)
* Complete overhaul of configuration to use automatic shell
script. Eliminated conf.h, now generated by configure. Renamed
@@ -2200,12 +3435,12 @@ Sat Feb 22 22:30:59 1992 Ian Lance Taylor (ian@comton.airs.com)
decisions and other choices which can not be made automatically.
Many changes to many source files, none having to do with code.
-Thu Feb 20 17:57:55 1992 Ian Lance Taylor (ian at comton.airs.com)
+Thu Feb 20 17:57:55 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (fdo_call): Chip Salzenberg: some systems truncate the
Shere= machine name to 7 characters.
-Wed Feb 19 14:36:31 1992 Ian Lance Taylor (ian at comton.airs.com)
+Wed Feb 19 14:36:31 1992 Ian Lance Taylor (ian@airs.com)
* sys7.unx (fskill_or_rejuv): make sure that only the submitter or
the superuser is permitted to cancel (or rejuvenate) a request.
@@ -2223,12 +3458,12 @@ Wed Feb 19 14:36:31 1992 Ian Lance Taylor (ian at comton.airs.com)
to take a time returned by isysdep_time rather than always use the
current time. Changed the calls as appropriate.
-Tue Feb 18 14:03:19 1992 Ian Lance Taylor (ian at comton.airs.com)
+Tue Feb 18 14:03:19 1992 Ian Lance Taylor (ian@airs.com)
* uuxqt.c (main): pass fdaemon argument correctly to
usysdep_initialize.
-Mon Feb 17 17:09:16 1992 Ian Lance Taylor (ian at comton.airs.com)
+Mon Feb 17 17:09:16 1992 Ian Lance Taylor (ian@airs.com)
* uuxqt.c (uqdo_xqt_file): T. William Wells: make sure sh uses
absolute path of command, rather than relying on PATH.
@@ -2242,7 +3477,7 @@ Mon Feb 17 17:09:16 1992 Ian Lance Taylor (ian at comton.airs.com)
* sys2.unx (fsrun_chat): Bob Denny: log chat program messages as
LOG_NORMAL, not LOG_ERROR.
-Fri Feb 14 00:17:57 1992 Ian Lance Taylor (ian at comton.airs.com)
+Fri Feb 14 00:17:57 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (ucatch), uuxqt.c (uqcatch): Neils Baggesen: under
HAVE_BNU_LOGGING, don't lose the system name when dieing.
@@ -2260,7 +3495,7 @@ Fri Feb 14 00:17:57 1992 Ian Lance Taylor (ian at comton.airs.com)
* uucp.c (main): Niels Baggesen: abtname must be copied into
memory, or it will be overwritten by the next file to be copied.
-Sun Feb 9 00:12:58 1992 Ian Lance Taylor (ian at comton.airs.com)
+Sun Feb 9 00:12:58 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (fuucp), prot.c (fsend_file, freceive_file): Bob Denny:
call fmail_transfer before calling fsysdep_did_work, because the
@@ -2272,7 +3507,7 @@ Sun Feb 9 00:12:58 1992 Ian Lance Taylor (ian at comton.airs.com)
suid program uudir which sets its uid to uucp and invokes
/bin/mkdir. Added rules to create uudir to Makefile.
-Sat Feb 8 14:25:50 1992 Ian Lance Taylor (ian at comton.airs.com)
+Sat Feb 8 14:25:50 1992 Ian Lance Taylor (ian@airs.com)
* sysh.unx, sys1.unx (opendir, readdir, closedir), sys4.unx,
sys5.unx: added HAVE_OLD_DIRECTORIES configuration parameter to
@@ -2321,7 +3556,7 @@ Sat Feb 8 14:25:50 1992 Ian Lance Taylor (ian at comton.airs.com)
related variables by macro defining them to gnu_*. This avoids
conflicts with system header files and system libraries.
-Fri Feb 7 12:08:42 1992 Ian Lance Taylor (ian at comton.airs.com)
+Fri Feb 7 12:08:42 1992 Ian Lance Taylor (ian@airs.com)
* everything: added HAVE_STRING_H and HAVE_STRINGS_H. Removed
include of <string.h> in every source file and put it in uucp.h.
@@ -2331,7 +3566,7 @@ Fri Feb 7 12:08:42 1992 Ian Lance Taylor (ian at comton.airs.com)
* uucico.c (fcall): Bob Denny: retry time not reached is not
really an error, so just make a normal log entry for it.
-Sun Feb 2 01:38:47 1992 Ian Lance Taylor (ian at comton.airs.com)
+Sun Feb 2 01:38:47 1992 Ian Lance Taylor (ian@airs.com)
* uucp.c (main): Get the file name for the destination of a local
copy using zsysdep_real_file_name rather than zsysdep_in_dir,
@@ -2350,7 +3585,7 @@ Sun Feb 2 01:38:47 1992 Ian Lance Taylor (ian at comton.airs.com)
be separated by more than just a single space if they are read
from a V2 or BNU configuration file.
-Fri Jan 31 19:51:57 1992 Ian Lance Taylor (ian at comton.airs.com)
+Fri Jan 31 19:51:57 1992 Ian Lance Taylor (ian@airs.com)
* protg.c: Chip Salzenberg: change default window size to 7.
@@ -2360,12 +3595,12 @@ Fri Jan 31 19:51:57 1992 Ian Lance Taylor (ian at comton.airs.com)
* log.c (ulog): Michael Nolan: if SIGABRT is not defined, just
call abort.
-Thu Jan 30 18:19:33 1992 Ian Lance Taylor (ian at comton.airs.com)
+Thu Jan 30 18:19:33 1992 Ian Lance Taylor (ian@airs.com)
* bnu.c (ubadd_perm): Michael Nolan: debugging check was done
wrong for entry with LOGNAME but no MACHINE.
-Wed Jan 29 13:28:59 1992 Ian Lance Taylor (ian at comton.airs.com)
+Wed Jan 29 13:28:59 1992 Ian Lance Taylor (ian@airs.com)
* uucico.c (zget_uucp_cmd): Patrick Smith: only wait a short time
for the hangup string.
@@ -2373,7 +3608,7 @@ Wed Jan 29 13:28:59 1992 Ian Lance Taylor (ian at comton.airs.com)
* sys4.unx (iswork_cmp): Patrick Smith: fixed casts to not cast
away const.
-Tue Jan 28 11:06:34 1992 Ian Lance Taylor (ian at comton.airs.com)
+Tue Jan 28 11:06:34 1992 Ian Lance Taylor (ian@airs.com)
* sys1.unx, sys3.unx, tstuu.c: Jay Vassos-Libove: removed some
declarations of system functions that conflict with system header
@@ -2384,7 +3619,7 @@ Tue Jan 28 11:06:34 1992 Ian Lance Taylor (ian at comton.airs.com)
* protg.c (fgsendcmd): the previous patch wasn't really correct.
-Mon Jan 27 22:30:47 1992 Ian Lance Taylor (ian at comton.airs.com)
+Mon Jan 27 22:30:47 1992 Ian Lance Taylor (ian@airs.com)
* log.c (ustats): Marty Shannon: don't report a failed transfer
under USE_BNU_LOGGING.
@@ -2403,7 +3638,7 @@ Mon Jan 27 22:30:47 1992 Ian Lance Taylor (ian at comton.airs.com)
end of command which was exactly a power of two in length
correctly.
-Tue Jan 21 14:37:10 1992 Ian Lance Taylor (ian at comton.airs.com)
+Tue Jan 21 14:37:10 1992 Ian Lance Taylor (ian@airs.com)
* Released version 1.02.
@@ -2411,7 +3646,7 @@ Tue Jan 21 14:37:10 1992 Ian Lance Taylor (ian at comton.airs.com)
zcone_system), sys1.unx (fsysdep_run): Chip Salzenberg: have uucp
and uux start up uucico -s system rather than uucico -r1.
-Mon Jan 20 11:45:38 1992 Ian Lance Taylor (ian at comton.airs.com)
+Mon Jan 20 11:45:38 1992 Ian Lance Taylor (ian@airs.com)
* sys1.unx (fsysdep_make_dirs): don't try to create a directory
with no name.
@@ -2427,7 +3662,7 @@ Mon Jan 20 11:45:38 1992 Ian Lance Taylor (ian at comton.airs.com)
the .Status file if it's the wrong time to call, and upon
receiving a call.
-Sun Jan 19 13:29:23 1992 Ian Lance Taylor (ian at comton.airs.com)
+Sun Jan 19 13:29:23 1992 Ian Lance Taylor (ian@airs.com)
* protg.c (fgsendcmd, fgsenddata): Dave Platt: if the remote UUCP
accepts packets larger than 64 bytes, assume it can handle
@@ -2443,7 +3678,7 @@ Sun Jan 19 13:29:23 1992 Ian Lance Taylor (ian at comton.airs.com)
* conf.h, uucp.h, util.c (bsearch): added HAVE_BSEARCH
configuration parameter.
-Sat Jan 18 17:45:28 1992 Ian Lance Taylor (ian at comton.airs.com)
+Sat Jan 18 17:45:28 1992 Ian Lance Taylor (ian@airs.com)
* tstuu.c (utransfer): Mike Park: don't sleep when the input
buffer is full; it's too slow.
@@ -2463,7 +3698,7 @@ Sat Jan 18 17:45:28 1992 Ian Lance Taylor (ian at comton.airs.com)
permanently and does not remove file if request fails only
temporarily.
-Thu Jan 16 11:33:08 1992 Ian Lance Taylor (ian at comton.airs.com)
+Thu Jan 16 11:33:08 1992 Ian Lance Taylor (ian@airs.com)
* protg.c (fgsendcmd, fgsenddata): zero out unused bytes in short
packets.
@@ -2484,7 +3719,7 @@ Thu Jan 16 11:33:08 1992 Ian Lance Taylor (ian at comton.airs.com)
* sys2.unx, tstuu.c: Mike Park: ioctl is sometimes declared
varadic, so we can't declare it.
-Wed Jan 15 02:03:43 1992 Ian Lance Taylor (ian at comton.airs.com)
+Wed Jan 15 02:03:43 1992 Ian Lance Taylor (ian@airs.com)
* sys1.unx: put \n at end of fsysdep_run error message.
@@ -2520,7 +3755,7 @@ Wed Jan 15 02:03:43 1992 Ian Lance Taylor (ian at comton.airs.com)
configuration files are looked up using NEWCONFIGLIB. Old style
configuration files are looked up using OLDCONFIGLIB.
-Mon Jan 13 00:35:43 1992 Ian Lance Taylor (ian at comton.airs.com)
+Mon Jan 13 00:35:43 1992 Ian Lance Taylor (ian@airs.com)
* sys3.unx: David Nugent: don't declare chmod, since it may be
prototyped to take an argument that is smaller than an int.
@@ -2566,7 +3801,7 @@ Mon Jan 13 00:35:43 1992 Ian Lance Taylor (ian at comton.airs.com)
* sysinf.c (tisystem): Mike Park: ulog was being passed the wrong
number of arguments.
-Sun Jan 12 14:32:47 1992 Ian Lance Taylor (ian at comton.airs.com)
+Sun Jan 12 14:32:47 1992 Ian Lance Taylor (ian@airs.com)
* Eliminated CONFIG, INSTALL and THANKS. They are now included in
uucp.texi. Changed README and MANIFEST accordingly. Added
@@ -2580,7 +3815,7 @@ Sun Jan 12 14:32:47 1992 Ian Lance Taylor (ian at comton.airs.com)
* log.c (ulog): allocate enough bytes to name file if
HAVE_BNU_LOGGING is in use but zLogfile has no %s.
-Sat Jan 11 12:11:56 1992 Ian Lance Taylor (ian at comton.airs.com)
+Sat Jan 11 12:11:56 1992 Ian Lance Taylor (ian@airs.com)
* Makefile: changed to correspond to GNU standards, according to
standards.text of 24 Nov 91.
@@ -2597,7 +3832,7 @@ Sat Jan 11 12:11:56 1992 Ian Lance Taylor (ian at comton.airs.com)
structure to avoid bug in AIX compiler which causes it to fail to
recognize an address constant containing the -> operator.
-Tue Jan 7 10:22:43 1992 Ian Lance Taylor (ian at comton.airs.com)
+Tue Jan 7 10:22:43 1992 Ian Lance Taylor (ian@airs.com)
* Released beta 1.02.
@@ -2608,7 +3843,7 @@ Tue Jan 7 10:22:43 1992 Ian Lance Taylor (ian at comton.airs.com)
* sysinf.c (tadd_proto_param): Niels Baggesen: allocate number of
protocol parameters based on *pc, not sIhold.cproto_params.
-Sat Jan 4 16:42:21 1992 Ian Lance Taylor (ian at comton.airs.com)
+Sat Jan 4 16:42:21 1992 Ian Lance Taylor (ian@airs.com)
* log.c (ulog): tweaked HAVE_V2_LOGGING slightly.
@@ -2639,7 +3874,7 @@ Sat Jan 4 16:42:21 1992 Ian Lance Taylor (ian at comton.airs.com)
option ALLOW_FILENAME_ARGUMENTS to permit arguments that look like
filenames, to allow undoing the patch I just made.
-Fri Jan 3 00:44:59 1992 Ian Lance Taylor (ian at comton.airs.com)
+Fri Jan 3 00:44:59 1992 Ian Lance Taylor (ian@airs.com)
* system.h, uuxqt.c (uqdo_xqt_file), sys5.unx
(fsysdep_xqt_check_file): David J. Fiander: make sure that if an
@@ -2648,12 +3883,12 @@ Fri Jan 3 00:44:59 1992 Ian Lance Taylor (ian at comton.airs.com)
* sys3.unx (fsdo_lock): remove temporary file if link fails in
fsdo_lock.
-Thu Jan 2 00:01:53 1992 Ian Lance Taylor (ian at comton.airs.com)
+Thu Jan 2 00:01:53 1992 Ian Lance Taylor (ian@airs.com)
* protg.c (fgstart, fgshutdown, fgprocess_data): count remote
rejections separately from resent packets when counting errors.
-Tue Dec 31 14:31:38 1991 Ian Lance Taylor (ian at comton.airs.com)
+Tue Dec 31 14:31:38 1991 Ian Lance Taylor (ian@airs.com)
* protg.c (fgstart): Franc,ois Pinard: forgot to initialize
cGdelayed_packets.
@@ -2666,13 +3901,13 @@ Tue Dec 31 14:31:38 1991 Ian Lance Taylor (ian at comton.airs.com)
sent; fixed bug in freceive_data which caused to ask for the wrong
number of bytes when the buffer was empty.
-Mon Dec 30 23:16:48 1991 Ian Lance Taylor (ian at comton.airs.com)
+Mon Dec 30 23:16:48 1991 Ian Lance Taylor (ian@airs.com)
* sys2.unx (fsserial_open): Chip Salzenberg: don't turn on IXON
and IXOFF initially; after all, the initialization packets might
contain an XOFF character.
-Sun Dec 29 00:00:42 1991 Ian Lance Taylor (ian at comton.airs.com)
+Sun Dec 29 00:00:42 1991 Ian Lance Taylor (ian@airs.com)
* uucp.h, prot.c (fploop): John Theus: check for EOF before
reading from file to work around bug in Tektronix library.
@@ -2686,7 +3921,7 @@ Sun Dec 29 00:00:42 1991 Ian Lance Taylor (ian at comton.airs.com)
* log.c (zldate_and_time): wasn't allocating enough buffer space.
-Sat Dec 28 01:09:58 1991 Ian Lance Taylor (ian at comton.airs.com)
+Sat Dec 28 01:09:58 1991 Ian Lance Taylor (ian@airs.com)
* uuxqt.c (uqdo_xqt_file): forgot to initialize zmail.
@@ -2719,7 +3954,7 @@ Sat Dec 28 01:09:58 1991 Ian Lance Taylor (ian at comton.airs.com)
* conf.h, uucp.h, util.c, getopt.c, tstuu.c: added HAVE_STRCHR and
HAVE_INDEX to conf.h.
-Fri Dec 27 01:00:41 1991 Ian Lance Taylor (ian at comton.airs.com)
+Fri Dec 27 01:00:41 1991 Ian Lance Taylor (ian@airs.com)
* uucico.c (fuucp): set fmasterdone correctly when running as a
slave.
@@ -2740,18 +3975,18 @@ Fri Dec 27 01:00:41 1991 Ian Lance Taylor (ian at comton.airs.com)
parameter ``errors'' to set maximum number of errors permitted.
Also made fgprocess_data only reply once per batch of data.
-Thu Dec 26 17:54:54 1991 Ian Lance Taylor (ian at comton.airs.com)
+Thu Dec 26 17:54:54 1991 Ian Lance Taylor (ian@airs.com)
* tcp.c (ftcp_dial, itcp_port_number): Monty Solomon: cast
arguments to avoid prototype errors on NeXT.
-Mon Dec 23 00:16:19 1991 Ian Lance Taylor (ian at comton.airs.com)
+Mon Dec 23 00:16:19 1991 Ian Lance Taylor (ian@airs.com)
* uucp.h, sysinf.c, uucico.c (main, flogin_prompt, faccept_call),
uuchk.c (main): David Nugent: allow debugging level to be set for
a specific system.
-Sun Dec 22 15:51:10 1991 Ian Lance Taylor (ian at comton.airs.com)
+Sun Dec 22 15:51:10 1991 Ian Lance Taylor (ian@airs.com)
* conf.h, uucp.c, sysh.unx, tcp.c, sys1.unx, sys2.unx, sys3.unx,
sys5.unx, sys6.unx, tstuu.c: Monty Solomon: added HAVE_UNISTD_H to
@@ -2769,7 +4004,7 @@ Sun Dec 22 15:51:10 1991 Ian Lance Taylor (ian at comton.airs.com)
* uucp.h: Monty Solomon: removed prototypes for strcasecmp and
strncasecmp from uucp.h, since they may be in string.h.
-Sat Dec 21 16:04:58 1991 Ian Lance Taylor (ian at comton.airs.com)
+Sat Dec 21 16:04:58 1991 Ian Lance Taylor (ian@airs.com)
* uucp.h, uucico.c (ucatch), prot.c (fpsendfile_confirm,
fprecfile_confirm, ustats_failed), file.c (fsent_file,
@@ -2795,7 +4030,7 @@ Sat Dec 21 16:04:58 1991 Ian Lance Taylor (ian at comton.airs.com)
* sys1.unx (fsysdep_run): use the real program name from abProgram
in the error messages in fsysdep_run.
-Thu Dec 19 19:02:28 1991 Ian Lance Taylor (ian at comton.airs.com)
+Thu Dec 19 19:02:28 1991 Ian Lance Taylor (ian@airs.com)
* uucico.c (fdo_call, faccept_call): Terry Gardner: put the length
of the conversation in the ``Call complete'' log file message.
@@ -2829,7 +4064,7 @@ Thu Dec 19 19:02:28 1991 Ian Lance Taylor (ian at comton.airs.com)
optimized the protocol to wait for up to seven characters at a
time rather than just one.
-Wed Dec 18 00:12:42 1991 Ian Lance Taylor (ian at comton.airs.com)
+Wed Dec 18 00:12:42 1991 Ian Lance Taylor (ian@airs.com)
* sysh.unx, sys2.unx, tstuu.c: Terry Gardner: added
USE_FOR_UNBLOCKED configuration parameter to support systems that
@@ -2852,7 +4087,7 @@ Wed Dec 18 00:12:42 1991 Ian Lance Taylor (ian at comton.airs.com)
-l option to uucico to prompt for the login name and password once
and then exit.
-Tue Dec 17 00:24:41 1991 Ian Lance Taylor (ian at comton.airs.com)
+Tue Dec 17 00:24:41 1991 Ian Lance Taylor (ian@airs.com)
* uucp.h, uucico.c, uuxqt.c, uux.c, uucp.c, config.c
(uread_config), log.c (ulog): eliminated ulog_program and added
@@ -2894,7 +4129,7 @@ Tue Dec 17 00:24:41 1991 Ian Lance Taylor (ian at comton.airs.com)
when a serial port is opened. This will clear out a
NO\sCARRIER string left by a previous dropped connection.
-Mon Dec 16 11:26:17 1991 Ian Lance Taylor (ian at comton.airs.com)
+Mon Dec 16 11:26:17 1991 Ian Lance Taylor (ian@airs.com)
* uucico.c (main), uuxqt.c (main), tstuu.c (main, uchild): David
Nugent: ignore SIGHUP in uucico and uuxqt, so that they are
@@ -2905,7 +4140,7 @@ Mon Dec 16 11:26:17 1991 Ian Lance Taylor (ian at comton.airs.com)
fbnu_read_dialer_info): Mike Bernson: ignore lines that begin with
whitespace, fix compilation error.
-Sat Dec 14 20:59:10 1991 Ian Lance Taylor (ian at comton.airs.com)
+Sat Dec 14 20:59:10 1991 Ian Lance Taylor (ian@airs.com)
* sys2.unx (fsserial_open): don't turn on ISTRIP initially.
@@ -2932,12 +4167,12 @@ Sat Dec 14 20:59:10 1991 Ian Lance Taylor (ian at comton.airs.com)
processing files just because opendir failed on one; it could just
be because we don't have read permission.
-Fri Dec 13 17:43:52 1991 Ian Lance Taylor (ian at comton.airs.com)
+Fri Dec 13 17:43:52 1991 Ian Lance Taylor (ian@airs.com)
* config.c (uprocesscmds): don't continually allocate and free the
array of arguments.
-Thu Dec 12 12:46:01 1991 Ian Lance Taylor (ian at comton.airs.com)
+Thu Dec 12 12:46:01 1991 Ian Lance Taylor (ian@airs.com)
* prot.c (fgetcmd): Franc,ois Pinard: don't bother to give an
error if the final HY doesn't come in; apparently the MtXinu UUCP
@@ -2962,7 +4197,7 @@ Thu Dec 12 12:46:01 1991 Ian Lance Taylor (ian at comton.airs.com)
GID as well as the UID, in case anybody wants to run this as a
setgid package.
-Wed Dec 11 10:03:22 1991 Ian Lance Taylor (ian at comton.airs.com)
+Wed Dec 11 10:03:22 1991 Ian Lance Taylor (ian@airs.com)
* conf.h, uucp.h, util.c (strtol): Mark Powell: added my own
version of strtol to util.c, for systems which lack it.
@@ -2972,7 +4207,7 @@ Wed Dec 11 10:03:22 1991 Ian Lance Taylor (ian at comton.airs.com)
already seen; otherwise the other side may assume we've already
seen them while we're looking for them.
-Tue Dec 10 15:42:41 1991 Ian Lance Taylor (ian at comton.airs.com)
+Tue Dec 10 15:42:41 1991 Ian Lance Taylor (ian@airs.com)
* conf.h, sysh.unx, log.c (ulog, ustats), tstuu.c (uprepare_test):
Arne Ludwig: merged in Arne Ludwig's patches to support V2 and BNU
@@ -2994,7 +4229,7 @@ Tue Dec 10 15:42:41 1991 Ian Lance Taylor (ian at comton.airs.com)
file.c to log.c in preparation for supporting BNU log file
routines.
-Mon Dec 9 12:00:52 1991 Ian Lance Taylor (ian at comton.airs.com)
+Mon Dec 9 12:00:52 1991 Ian Lance Taylor (ian@airs.com)
* bnu.c (ubnu_read_systems): Arne Ludwig: the device entry for a
system can be followed by a comma and a list of protocols.
@@ -3017,7 +4252,7 @@ Mon Dec 9 12:00:52 1991 Ian Lance Taylor (ian at comton.airs.com)
* config.c (uprocesscmds): Richard Todd: don't warn if the special
"#" command is unrecognized.
-Sat Dec 7 13:05:40 1991 Ian Lance Taylor (ian at comton.airs.com)
+Sat Dec 7 13:05:40 1991 Ian Lance Taylor (ian@airs.com)
* config.c (uprocesscmds): Franc,ois Pinard: don't limit the
number of arguments to a command!
@@ -3025,7 +4260,7 @@ Sat Dec 7 13:05:40 1991 Ian Lance Taylor (ian at comton.airs.com)
* chat.c (fchat): handle a chat script which consists only of a
single string.
-Fri Dec 6 16:11:29 1991 Ian Lance Taylor (ian at comton.airs.com)
+Fri Dec 6 16:11:29 1991 Ian Lance Taylor (ian@airs.com)
* sys5.unx (fsysdep_execute): David J. Fiander: if execve fails
with ENOEXEC, try using /bin/sh with a quoted argument.
@@ -3050,7 +4285,7 @@ Fri Dec 6 16:11:29 1991 Ian Lance Taylor (ian at comton.airs.com)
return a negative number, since the callers don't know how to deal
with that.
-Mon Dec 2 16:26:16 1991 Ian Lance Taylor (ian at comton.airs.com)
+Mon Dec 2 16:26:16 1991 Ian Lance Taylor (ian@airs.com)
* bnu.c (ubnu_read_systems): Dave Buck: time strings with grades
were parsed in an endless loop!
@@ -3065,7 +4300,7 @@ Mon Dec 2 16:26:16 1991 Ian Lance Taylor (ian at comton.airs.com)
the ``protocol-parameter'' command didn't work for ports or
dialers.
-Sun Dec 1 09:46:12 1991 Ian Lance Taylor (ian at comton.airs.com)
+Sun Dec 1 09:46:12 1991 Ian Lance Taylor (ian@airs.com)
* tstuu.c: don't use the fd_set typedef at all.
@@ -3079,7 +4314,7 @@ Sun Dec 1 09:46:12 1991 Ian Lance Taylor (ian at comton.airs.com)
* uuchk.c (fkshow_port): Bob Izenberg: report dialer/token pairs
correctly.
-Sat Nov 30 17:40:00 1991 Ian Lance Taylor (ian at comton.airs.com)
+Sat Nov 30 17:40:00 1991 Ian Lance Taylor (ian@airs.com)
* tstuu.c: Bob Izenberg: copied over conditional definitions of
EAGAIN and EWOULDBLOCK from sys2.unx.
@@ -3123,7 +4358,7 @@ Sat Nov 30 17:40:00 1991 Ian Lance Taylor (ian at comton.airs.com)
auto array abpubdir, since old cc didn't permit initialization of
auto aggregates.
-Mon Nov 25 20:56:39 1991 Ian Lance Taylor (ian at comton.airs.com)
+Mon Nov 25 20:56:39 1991 Ian Lance Taylor (ian@airs.com)
* tstuu.c: Bob Denny: add definitions for FD_SET, FD_ZERO and
FD_ISSET.
@@ -3141,12 +4376,12 @@ Mon Nov 25 20:56:39 1991 Ian Lance Taylor (ian at comton.airs.com)
(fv2_find_port): Marty Shannon: the ireliable field of ports
and dialers was not getting initialized.
-Sun Nov 24 15:06:37 1991 Ian Lance Taylor (ian at comton.airs.com)
+Sun Nov 24 15:06:37 1991 Ian Lance Taylor (ian@airs.com)
* tcp.c (itcp_port_number): Michael Haberler: wasn't calling
htons if passed a numeric string.
-Sat Nov 23 13:43:52 1991 Ian Lance Taylor (ian at comton.airs.com)
+Sat Nov 23 13:43:52 1991 Ian Lance Taylor (ian@airs.com)
* Released version 1.01 to alt.sources and uunet
diff --git a/gnu/libexec/uucp/Makefile.inc b/gnu/libexec/uucp/Makefile.inc
index b9bac708a1ab..a40e0a35300b 100644
--- a/gnu/libexec/uucp/Makefile.inc
+++ b/gnu/libexec/uucp/Makefile.inc
@@ -16,9 +16,9 @@ LIBUUCP= $(.CURDIR)/../libuucp/obj/libuucp.a
LIBUUCP= $(.CURDIR)/../libuucp/libuucp.a
.endif
-VERSION= 1.04
+VERSION= 1.05
owner= uucp
-group= wheel
+group= uucp
bindir= /usr/bin
sbindir= /usr/libexec/uucp
diff --git a/gnu/libexec/uucp/NEWS b/gnu/libexec/uucp/NEWS
new file mode 100644
index 000000000000..65360d57fa8e
--- /dev/null
+++ b/gnu/libexec/uucp/NEWS
@@ -0,0 +1,119 @@
+Changes in version 1.05:
+
+ As usual, many bugs were fixed.
+
+ Support was added for the UUPC/extended 'v' protocol.
+
+ Initial hardware flow control support was added, contributed by
+ Peter Wemm.
+
+ A new port type, ``pipe'', was added; this sends data to a program
+ such as rlogin, and was contributed by Marc Boucher.
+
+ The programs all now accept long option names with a leading --.
+ They all support --help and --version.
+
+ uuxqt now saves execution files it can not parse in
+ $(SPOOLDIR)/.Corrupt.
+
+ If a received file can not be moved to the final location, and
+ there is enough disk space, it is kept in the spool directory.
+
+ A run-uuxqt command was added to config, to permit specifying when
+ uuxqt should be run.
+
+ The 'i' protocol has a new ack-frequency protocol parameter. The
+ remote-window protocol parameter was removed, as it did not work
+ correctly.
+
+ Chat scripts now permit /W in an expect string to set the timeout.
+
+ TCP ports now support the ``dialer-sequence'' command.
+
+ Direct ports now support the ``carrier'' command.
+
+ Some support was added to read UUCP passwords from /etc/passwd,
+ and to use encrypted passwords.
+
+ uucico now accepts a -C argument to only call a system named by -S
+ or -s if there is work for it.
+
+ uucico accepts a -i TLI argument to use TLI I/O calls on standard
+ input.
+
+ uucico accepts a -u argument to set the user name.
+
+ uucico accepts a -z argument to try the next alternate if a call
+ fails.
+
+ uustat accepts a -R argument to rejuvenate each listed job.
+
+ Mailer configuration was moved from configure checking to
+ policy.h.
+
+ Support was added for QNX, contributed by Joe Wells.
+
+Changes in version 1.04:
+
+IMPORTANT: the default when talking to another version of 1.04 is to
+use the new bidirectional 'i' protocol. If you are using a
+half-duplex modem, such as a Telebit T2500, you will want to either
+mark the port as half-duplex with the ``half-duplex'' command, or
+force use of the 'g' protocol by using the ``protocol'' command in the
+sys or port file or by adding ``,g'' after the port name in the
+Systems or L.sys or Devices file.
+
+ As usual, many bugs were fixed.
+
+ Bidirectional transfers are supported with the new 'i' protocol;
+ it requires an eight-bit clear datapath.
+
+ New programs: uusched, cu, uuto and uupick.
+
+ The 'G' protocol and a new Zmodem protocol were added.
+
+ A number of uustat options were added to support uuclean, and a
+ sample uuclean shell script was added to the contrib directory.
+ The uustat output formats were changed slightly.
+
+ A protocol extension eliminates transfer of the command file for
+ simple commands, such as rmail or rnews, when talking to another
+ version of 1.04.
+
+ Some TLI support was added.
+
+ UUCP forwarding was added, along with the ``forward-to'',
+ ``forward-from'' and ``forward'' commands.
+
+ If a file transfer fails in the middle, the retry will now start
+ from where it left off. The implementation is compatible with
+ SVR4.
+
+ The work queue is checked every 10 minutes during a conversation;
+ if there is new work and a bidirectional protocol is not in use,
+ the receiving uucico requests the sender to transfer control.
+
+ The amount of free disk space is checked periodically as a file is
+ received, and if it drops too low the call is aborted.
+
+ The UUCP configuration file reading routines were moved into a
+ standalone library, uuconf. All known bugs in V2 and HDB
+ configuration file reading were fixed.
+
+ The ``half-duplex'' command was added for the port and dialer
+ files.
+
+ The ``max-retries'', ``success-wait'', ``send-request'' and
+ ``receive-request'' commands were added for the sys file. The
+ ``call-request'' and ``called-request'' commands were eliminated
+ (they did not work correctly anyhow).
+
+ \d in chat scripts now calls sleep (2) rather than sleep (1), so
+ it will sleep longer (on some systems sleep(1) may delay much less
+ than one second).
+
+ SPOOLDIR_SVR4 was added for SVR4 style spool directories.
+
+ Defaults are now permitted in the port and dialer files.
+
+ The ALIAS field is supported in the HDB Permissions file.
diff --git a/gnu/libexec/uucp/README b/gnu/libexec/uucp/README
index bfcd46c3f2ae..8d69444fd62f 100644
--- a/gnu/libexec/uucp/README
+++ b/gnu/libexec/uucp/README
@@ -1,8 +1,8 @@
-This is the README file for version 1.04 of the Taylor UUCP package.
+This is the README file for version 1.05 of the Taylor UUCP package.
It was written by Ian Lance Taylor. I can be reached at ian@airs.com,
-or, equivalently, uunet!cygint!airs!ian, or c/o Cygnus Support, 4th
-Floor, Building 200, 1 Kendall Square, Cambridge MA, 02139, USA.
+or, equivalently, uunet!cygint!airs!ian, or c/o Cygnus Support,
+Building 200, 1 Kendall Square, Cambridge MA, 02139, USA.
There is a mailing list for discussion of the package. To join (or
get off) the list, send mail to taylor-uucp-request@gnu.ai.mit.edu.
@@ -11,6 +11,10 @@ joining the list, make sure you include the address at which you want
to receive mail in the body of your message. To send a message to the
list, send it to taylor-uucp@gnu.ai.mit.edu.
+Jeff Ross has volunteered to maintain patches for UUCP releases. They
+may be obtained via anonymous FTP from ftp.fdu.edu, in the directory
+pub/taylor-uucp.
+
This package is covered by the Gnu Public License. See the file
COPYING for details. If you would like to do something with this
package that you feel is reasonable but you feel is prohibited by the
@@ -25,8 +29,7 @@ uupick, and cu, as well as uuchk (a program to check configuration
files), uuconv (a program to convert from one type of configuration
file to another) and tstuu (a test harness for the package).
-The Free Software Foundation plans to make this their standard UUCP
-package.
+This is the standard UUCP package of the Free Software Foundation.
The package currently supports the 'f', 'g' (in all window and packet
sizes), 'G', 't' and 'e' protocols, as well a Zmodem protocol and two
@@ -77,80 +80,13 @@ If you start using this package, I suggest that you join the mailing
list (see above) to keep up to date on patches and new versions. I am
also open to suggestions for improvements and modifications.
-CHANGES SINCE 1.03
-
-For a complete list, see ChangeLog.
-
-IMPORTANT: the default when talking to another version of 1.04 is to
-use the new bidirectional 'i' protocol. If you are using a
-half-duplex modem, such as a Telebit T2500, you will want to either
-mark the port as half-duplex with the ``half-duplex'' command, or
-force use of the 'g' protocol by using the ``protocol'' command in the
-sys or port file or by adding ``,g'' after the port name in the
-Systems or L.sys or Devices file.
-
- As usual, many bugs were fixed.
-
- Bidirectional transfers are supported with the new 'i' protocol;
- it requires an eight-bit clear datapath.
-
- New programs: uusched, cu, uuto and uupick.
-
- The 'G' protocol and a new Zmodem protocol were added.
-
- A number of uustat options were added to support uuclean, and a
- sample uuclean shell script was added to the contrib directory.
- The uustat output formats were changed slightly.
-
- A protocol extension eliminates transfer of the command file for
- simple commands, such as rmail or rnews, when talking to another
- version of 1.04.
-
- Some TLI support was added.
-
- UUCP forwarding was added, along with the ``forward-to'',
- ``forward-from'' and ``forward'' commands.
-
- If a file transfer fails in the middle, the retry will now start
- from where it left off. The implementation is compatible with
- SVR4.
-
- The work queue is checked every 10 minutes during a conversation;
- if there is new work and a bidirectional protocol is not in use,
- the receiving uucico requests the sender to transfer control.
-
- The amount of free disk space is checked periodically as a file is
- received, and if it drops too low the call is aborted.
-
- The UUCP configuration file reading routines were moved into a
- standalone library, uuconf. All known bugs in V2 and HDB
- configuration file reading were fixed.
-
- The ``half-duplex'' command was added for the port and dialer
- files.
-
- The ``max-retries'', ``success-wait'', ``send-request'' and
- ``receive-request'' commands were added for the sys file. The
- ``call-request'' and ``called-request'' commands were eliminated
- (they did not work correctly anyhow).
-
- \d in chat scripts now calls sleep (2) rather than sleep (1), so
- it will sleep longer (on some systems sleep(1) may delay much less
- than one second).
-
- SPOOLDIR_SVR4 was added for SVR4 style spool directories.
-
- Defaults are now permitted in the port and dialer files.
-
- The ALIAS field is supported in the HDB Permissions file.
-
DOCUMENTATION
The documentation is in the file uucp.texi, which is a Texinfo file.
Texinfo is a format used by the Free Software Foundation. You can
print the documentation using TeX in combination with the file
texinfo.tex. DVI, PostScript and info versions of the documentation
-are available in a separate package, uucp-doc-1.04.tar.Z.
+are available in a separate package, uucp-doc-1.05.tar.gz.
See the TODO file for things which should be done. Please feel free
to do them, although you may want to check with me first. Send me
@@ -174,7 +110,7 @@ The compilation instructions are in uucp.texi. Here is a summary.
what is available on your system, so if your system is at all
unusual you will need to pass in $CC and $LIBS correctly.
- The configure script will create conf.h from conf.h.in and
+ The configure script will create config.h from config.h.in and
Makefile from Makefile.in. It will also create config.status,
which is a shell script which actually creates the files. Please
report any configuration problems, so that they can be fixed in
@@ -195,7 +131,23 @@ The compilation instructions are in uucp.texi. Here is a summary.
use -posix, instead I run gcc with -D_POSIX_SOURCE, and add
-lcposix to LIBS.
- Examine conf.h and Makefile to make sure they're right.
+ On some versions of BSDI there is a bug in the shell which causes
+ the default value for CFLAGS to be set incorrectly. If ``echo
+ ${CFLAGS--g}'' echoes ``g'' rather than ``-g'', then you must set
+ CFLAGS in the environment before running configure. There is a
+ patch available from BSDI for this bug. (From David Vrona).
+
+ On AIX 3.2.5, and possibly other versions, cc -E does not work,
+ reporting ``Option NOROCONST is not valid.'' Test this before
+ running configure by doing something like
+ touch /tmp/foo.c
+ cc -E /tmp/foo.c
+ This may give a warning about the file being empty, but it should
+ not give the ``Option NOROCONST'' warning. The workaround is to
+ remove the ",noroconst" entry from the "options" clause in the
+ "cc" stanza in /etc/xlc.cfg. (From Chris Lewis).
+
+ Examine config.h and Makefile to make sure they're right.
Edit policy.h for your local system.
@@ -204,4 +156,7 @@ The compilation instructions are in uucp.texi. Here is a summary.
Use ``uuchk'' to check configuration files. You can use
``uuconv'' to convert between configuration file formats.
- Type ``make install'' to install.
+ Type ``make install'' to install. Note that by default the
+ programs are compiled with debugging information, and they are not
+ stripped when they are installed. Read the man page for strip for
+ more information.
diff --git a/gnu/libexec/uucp/TODO b/gnu/libexec/uucp/TODO
index a1cc643ab52f..a0e96bfdc8cc 100644
--- a/gnu/libexec/uucp/TODO
+++ b/gnu/libexec/uucp/TODO
@@ -92,11 +92,6 @@ UUCP protocols to do file transfers. This would allow ftp work to be
done late at night, and allow neighbors of cooperative Internet sites
to use UUCP forwarding for anonymous FTP.
-31.
-
-David Nugent: add a -C option to uucico to only call the system if
-there is work to do.
-
32.
It would be nice if uucico could sleep until a line was available.
@@ -194,11 +189,6 @@ expect strings.
Use POSIX fcntl locks when possible instead of creating a lock file.
-130.
-
-Chip Salzenberg: BSD lets you override the timeout for a particular
-expect string by using a trailing ~.
-
138.
T. William Wells: BNU apparently uses a file named A.whatever to hold
@@ -323,20 +313,6 @@ system and command locks, and do any other type of file.
Scott Blachowicz: provide some sort of include mechanism for the
configuration files.
-162.
-
-Chris Lewis: add uuxqtpolicy command, probably in config, supporting
-the following values which determine when uuxqt should be run:
- - never (let cron or something else worry about it)
- - perinvocation (when uucico exits for good - current behaviour)
- - persite (when uucico terminates a conversation - HDBish)
- - periodic (per 5 or 10 incoming X. files - BSDish)
- - perturnaround?
-
-163.
-
-Sort jobs in the send queue by size. Pretty easy.
-
164.
Ed Carp: preserve files if uuxqt execution fails.
@@ -349,11 +325,6 @@ Marc Sheldon: use exit codes from <sysexits.h> in uux and uucp.
Chip Salzenberg: allow chat failure strings to specify a retry time.
-167.
-
-Gregory Bond: allow a dialer sequence for a TCP port, so you can make
-a TCP connection to a modem and then dial out.
-
168.
Jose A. Manas: allow a maximum connect time, after which we try to
@@ -421,14 +392,6 @@ number''.
Don Phillips: should there be some way to restrict of grade of
transfers even when the other system places the call?
-179.
-
-Nickolay Saukh: add something to chat scripts to specify the timeout
-for an expect string, e.g. AT\c OK\W3 to wait for 3 seconds. Except
-that perhaps the unit should not be seconds. Berkeley apparently uses
-~number, not \W number, but I don't see any reason to prevent use of
-the ~ character in an expect string.
-
180.
Nickolay Saukh: if we have received a partial file, request the remote
@@ -451,12 +414,6 @@ statement.
Optionally check for interrupts in fcopy_file, since it can take a
long time to copy a file named in a uucp request.
-184.
-
-Ian Moran: if an attempt is made to a copy a file to a directory which
-denies write permission, perhaps the file should be saved somewhere.
-It must be saved in a private location, though.
-
185.
A syntax error in a command received from the remote system should not
@@ -536,11 +493,6 @@ to do, and then try again later. This would require a protocol
extension. I don't know if it's worth it. The code should be checked
to see how well it handles a disk full situation.
-196.
-
-For real adjustability, provide some mechanism for picking the lead
-characters to use for the shell scripts, between : and #!.
-
197.
Try alternate IP addresses if there are any.
@@ -571,3 +523,220 @@ Bill Foote: have uuchk check whether a system is defined more than
once.
203.
+
+Eric Ziegast: allow specification of the minimum grade to receive, as
+well as the maximum grade. Probably sending a second character after
+the -pM argument would work fine.
+
+204.
+
+Tom Rushworth: perhaps there should be some program which can be used
+to retrieve the current spool directory. Perhaps on option on uustat.
+
+207.
+
+James B. O'Connor: use additional messages in the status file when
+placing a call, such as Dialing, Chatting, and the like. Slightly
+less efficient.
+
+208.
+
+When checking whether a file may be received into a directory, perhaps
+uucico should check using the real user ID rather than insisting that
+the directory be world writable. This should be a policy.h parameter.
+This would enable sites which use different uids for each incoming
+UUCP login to have better control over security.
+
+209.
+
+Jon Vos: add an alias command for ports.
+
+210.
+
+Joe Wells: I'd like to have a way so that if the dial chat fails due
+to "NO CARRIER", in addition to this log message:
+
+ ERROR: Chat script failed: Got "NO\sCARRIER"
+
+I would get another log message right next to it that would look like
+this:
+
+ ERROR: Chat script failed: 5 "RRING" strings seen
+
+Ian: I doubt this is worth implementing in uucico, but it might make
+sense for an external, or otherwise more independent and controllable,
+chat program.
+
+211.
+
+Joe Wells: In some cases it would be nice to be able to change the set
+of chat-fail strings in the middle of the chat script. Personally, I
+think this is too complex for the simple chat scripts currently
+implemented.
+
+212.
+
+Joe Wells: There should be an option to all programs directing them to
+send all debugging output to the log file. This would just involve
+calling ulog_to_file at some point just after reporting any usage
+messages.
+
+213.
+
+Joe Wells: There should be a way to specify the execution directory
+used by uuxqt. This would avoid certain sorts of permissions
+problems. Some mechanism would still be needed for using multiple
+directories.
+
+214.
+
+Joe Wells: uuto should be documented.
+
+215.
+
+Joe Wells: Perhaps it should be possible to use multiple spool
+directories. It would be a lot of work, though.
+
+216.
+
+Joe Wells: It should be possible to specify only one of complete or
+abort.
+
+217.
+
+Dan Everhart: It would be nice if the chat-fail string could affect
+the error message reported by uustat, so that uustat could say
+something ``Line was busy''.
+
+218.
+
+Andrew A. Chernov: Add a chat-char-delay xx configuration parameter,
+which has the effect of adding \p after each character, with delay xx.
+This is to accommodate modems which can't accept command characters at
+a given baud rate.
+
+219.
+
+Gert Doering: Provide some mechanism for specifying the maximum length
+of a call. Convenient for anonymous UUCP sites.
+
+220.
+
+Joe Wells: There should be some way for "cu" to obey user commands
+during the dial chat. Right now, the only thing the user can do is
+send signals (e.g. type Control-C). This leads to user complaints
+that "cu" is not obeying its documentation.
+
+221.
+
+Joe Wells: Right now, if there is any failure in the dial or login
+chat scripts, the remote system alternate is skipped even though the
+cause of the failure may have been the local serial port or modem.
+"uucico" will not try another modem with the same remote system
+alternate. If the remote system only has one alternate, then it is
+skipped entirely.
+
+Thus, there should be a way to specify that when certain expect
+strings are not seen or certain chat-fail strings are seen that the
+port is skipped instead of the remote system alternate.
+
+222.
+
+Richard H. Gumpertz: Support pipelines in uuxqt. Right now they are
+only supported if uux puts in an 'e' line (which it does) and shell
+executions are permitted (which they normally are not). It would be
+possible to permit restricted pipelines by handling the pipe character
+specially and making sure all commands in the pipeline were permitted.
+
+223.
+
+Bill Sommerfeld: When dialing out, set the status to DIALING rather
+than CONNECTION CLOSED. Setting the status takes a bit of time; it's
+hard to tell where the right break-even point is.
+
+224.
+
+Joe Wells: Keep track of the last successful incoming call separately
+from the last successful outgoing call. Currently the two times are
+both put together in the status file.
+
+225.
+
+Joe Wells: It would be nice if uustat would provide a way to avoid
+bouncing mail that it sent itself, to avoid sending notification
+e-mail for notification e-mail. I can't think of a mechanism, though
+(using a special grade for uustat does not work because most mail
+programs do not provide a mechanism for passing a grade through to
+uux).
+
+226.
+
+Joe Wells: It would be nice if uustat could know whether it had sent
+mail for a particular job, to avoid generating multiple messages for
+the job.
+
+227.
+
+Joe Wells: It would be nice if dialcode suffixes were supported, as
+well as prefixes.
+
+228.
+
+Joe Wells: It would be nice to support another spool directory scheme
+which split stuff up more to avoid very large directories. This would
+be most useful for the files which are named in C. and X. files,
+rather than for the C. and X. files themselves (since C. and X. files
+are rarely looked up by name). Basically, some sort of partition of
+the D. directory is called for.
+
+229.
+
+Joe Wells: ``It would be nice if the exit sequence of "cu", where it
+runs the complete chat script and then disconnects could be aborted
+without disconnecting. (Yes, I know, this is a strange desire.) It
+would be nice to be able to reinvoke the dial chat by user command in
+"cu". It would be nice to be able to invoke an arbitrary named chat
+script in "cu".''
+
+230.
+
+Kevin Johnson: Provide some mechanism such that all requests to a
+particular system were automatically forwarded through some other
+system. This would be useful to hide details of a non-strongly-
+connected network, particularly if the details were subject to change.
+
+231.
+
+Gert Doering: Perhaps it should be possible to -r the default for uucp
+and uux. This would require adding a new option to force the
+invocation of uucico.
+
+232.
+
+Mark Davies: spaces are not handled correctly in the -a argument of
+uux. If an E command is generated, the requestor address is not
+quoted correctly, nor is it parsed correctly. If an execution file is
+generated, the R line is not parsed correctly.
+
+233.
+
+Emmanuel Mogenet: provide some mechanism for a maximum number of
+garbage bytes during a chat script before giving up.
+
+234.
+
+Scott Ballantyne: The address for a TCP port should be separate from
+the phone number, so that a TCP dialer can use \D.
+
+235.
+
+Peter Wemm: The 'i' protocol default parameters do not work at 2400
+baud, because the time it takes to transfer half the packets is less
+than the timeout time. Of course people can always change the
+parameters, but it would be nice if this were dealt with somehow.
+
+236.
+
+Andrew A. Chernov: Perhaps uuxqt should log when it terminates.
+
+237.
diff --git a/gnu/libexec/uucp/VERSION b/gnu/libexec/uucp/VERSION
index 99fd8f0eef77..f940c9bc0bc7 100644
--- a/gnu/libexec/uucp/VERSION
+++ b/gnu/libexec/uucp/VERSION
@@ -1,4 +1,4 @@
-Version 1.04
+Version 1.05
a complete, unmodified version of this program is available from
prep.ai.mit.edu.
diff --git a/gnu/libexec/uucp/common_sources/chat.c b/gnu/libexec/uucp/common_sources/chat.c
index 8544ed2e2027..96c2942652e5 100644
--- a/gnu/libexec/uucp/common_sources/chat.c
+++ b/gnu/libexec/uucp/common_sources/chat.c
@@ -1,7 +1,7 @@
/* chat.c
Chat routine for the UUCP package.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,13 +20,13 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#include "uucp.h"
#if USE_RCS_ID
-const char chat_rcsid[] = "$Id: chat.c,v 1.1 1993/08/05 18:22:30 conklin Exp $";
+const char chat_rcsid[] = "$Id: chat.c,v 1.2 1994/05/07 18:08:33 ache Exp $";
#endif
#include <ctype.h>
@@ -153,6 +153,9 @@ fchat (qconn, puuconf, qchat, qsys, qdial, zphone, ftranslate, zport, ibaud)
/* Loop over subexpects and subsends. */
while (TRUE)
{
+ char *ztimeout;
+ int ctimeout;
+
/* Copy the expect string into the buffer so that we can
modify it in cescape. */
clen = strlen (*pzchat);
@@ -167,6 +170,23 @@ fchat (qconn, puuconf, qchat, qsys, qdial, zphone, ftranslate, zport, ibaud)
azstrings[0] = zbuf;
if (azstrings[0][0] == '-')
++azstrings[0];
+
+ /* \Wnum at the end of the string is a timeout. */
+ ctimeout = qchat->uuconf_ctimeout;
+ ztimeout = strrchr (azstrings[0], '\\');
+ if (ztimeout != NULL && ztimeout[1] == 'W')
+ {
+ char *zend;
+ int cval;
+
+ cval = (int) strtol (ztimeout + 2, &zend, 10);
+ if (zend != ztimeout + 2 && *zend == '\0')
+ {
+ ctimeout = cval;
+ *ztimeout = '\0';
+ }
+ }
+
aclens[0] = cescape (azstrings[0]);
if (aclens[0] == 0
@@ -185,8 +205,7 @@ fchat (qconn, puuconf, qchat, qsys, qdial, zphone, ftranslate, zport, ibaud)
int istr;
istr = icexpect (qconn, cstrings, azstrings, aclens,
- qchat->uuconf_ctimeout,
- qchat->uuconf_fstrip);
+ ctimeout, qchat->uuconf_fstrip);
/* If we found the string, break out of the
subexpect/subsend loop. */
@@ -640,7 +659,7 @@ fcsend (qconn, puuconf, z, qsys, qdial, zphone, ftranslate, fstrip)
break;
case 'd':
fquote = fcsend_debug (fquote, (size_t) 0, "sleep");
- usysdep_sleep (2);
+ usysdep_sleep (1);
break;
case 'e':
fquote = fcsend_debug (fquote, (size_t) 0, "echo-check-off");
@@ -717,6 +736,8 @@ fcsend (qconn, puuconf, z, qsys, qdial, zphone, ftranslate, fstrip)
case 'L':
{
const char *zlog;
+ char *zcopy;
+ size_t clen;
if (qsys == NULL)
{
@@ -756,18 +777,24 @@ fcsend (qconn, puuconf, z, qsys, qdial, zphone, ftranslate, fstrip)
}
zlog = zcallout_login;
}
+ zcopy = zbufcpy (zlog);
+ clen = cescape (zcopy);
fquote = fcsend_debug (fquote, (size_t) 0, "login");
- fquote = fcsend_debug (fquote, strlen (zlog), zlog);
- if (! (*pfwrite) (qconn, zlog, strlen (zlog)))
+ fquote = fcsend_debug (fquote, clen, zcopy);
+ if (! (*pfwrite) (qconn, zcopy, clen))
{
+ ubuffree (zcopy);
ucsend_debug_end (fquote, TRUE);
return FALSE;
}
+ ubuffree (zcopy);
}
break;
case 'P':
{
const char *zpass;
+ char *zcopy;
+ size_t clen;
if (qsys == NULL)
{
@@ -807,13 +834,17 @@ fcsend (qconn, puuconf, z, qsys, qdial, zphone, ftranslate, fstrip)
}
zpass = zcallout_pass;
}
+ zcopy = zbufcpy (zpass);
+ clen = cescape (zcopy);
fquote = fcsend_debug (fquote, (size_t) 0, "password");
- fquote = fcsend_debug (fquote, strlen (zpass), zpass);
- if (! (*pfwrite) (qconn, zpass, strlen (zpass)))
+ fquote = fcsend_debug (fquote, clen, zcopy);
+ if (! (*pfwrite) (qconn, zcopy, clen))
{
+ ubuffree (zcopy);
ucsend_debug_end (fquote, TRUE);
return FALSE;
}
+ ubuffree (zcopy);
}
break;
case 'D':
@@ -1168,6 +1199,7 @@ fcprogram (qconn, puuconf, pzprogram, qsys, qdial, zphone, zport, ibaud)
for (zfrom = *pz; *zfrom != '\0'; zfrom++)
{
const char *zadd = NULL;
+ char *zfree = NULL;
size_t cadd;
char abadd[15];
@@ -1241,7 +1273,9 @@ fcprogram (qconn, puuconf, pzprogram, qsys, qdial, zphone, zport, ibaud)
}
zlog = zcallout_login;
}
- zadd = zlog;
+ zfree = zbufcpy (zlog);
+ (void) cescape (zfree);
+ zadd = zfree;
}
break;
case 'P':
@@ -1287,7 +1321,9 @@ fcprogram (qconn, puuconf, pzprogram, qsys, qdial, zphone, zport, ibaud)
}
zpass = zcallout_pass;
}
- zadd = zpass;
+ zfree = zbufcpy (zpass);
+ (void) cescape (zfree);
+ zadd = zfree;
}
break;
case 'D':
@@ -1405,6 +1441,7 @@ fcprogram (qconn, puuconf, pzprogram, qsys, qdial, zphone, zport, ibaud)
memcpy (zto, zadd, cadd + 1);
zto += cadd;
clen += cadd;
+ ubuffree (zfree);
}
if (! fret)
diff --git a/gnu/libexec/uucp/common_sources/conf.h b/gnu/libexec/uucp/common_sources/config.h
index 9053c4423e0a..c02a754eae9d 100644
--- a/gnu/libexec/uucp/common_sources/conf.h
+++ b/gnu/libexec/uucp/common_sources/config.h
@@ -1,10 +1,13 @@
-/* conf.h. Generated automatically by configure. */
+/* config.h. Generated automatically by configure. */
/* Configuration header file for Taylor UUCP. -*- C -*- */
-/* Set MAIL_PROGRAM to a program which takes a mail address as an
- argument and accepts a mail message to send to that address on
- stdin (e.g. "/bin/mail"). */
-#define MAIL_PROGRAM "/usr/bin/mail"
+/* If your compiler does not use const correctly, then undefine it
+ here. This #undef is commented out by the configure script if it
+ determines that const is supported. */
+/* #undef const */
+
+/* If your compiler supports prototypes, set HAVE_PROTOTYPES to 1. */
+#define HAVE_PROTOTYPES 1
/* Set ECHO_PROGRAM to a program which echoes its arguments; if echo
is a shell builtin you can just use "echo". */
@@ -14,6 +17,7 @@
macro to 1 if you have the corresponding header file, or 0 if you
do not. */
#define HAVE_STDDEF_H 1 /* <stddef.h> */
+#define HAVE_STDARG_H 1 /* <stdarg.h> */
#define HAVE_STRING_H 1 /* <string.h> */
#define HAVE_STRINGS_H 1 /* <strings.h> */
#define HAVE_UNISTD_H 1 /* <unistd.h> */
@@ -22,12 +26,13 @@
#define HAVE_TIME_H 1 /* <time.h> */
#define HAVE_SYS_WAIT_H 1 /* <sys/wait.h> */
#define HAVE_SYS_IOCTL_H 1 /* <sys/ioctl.h> */
-#define HAVE_DIRENT_H 1 /* <dirent.h> */
+#define HAVE_DIRENT_H 0 /* <dirent.h> */
#define HAVE_MEMORY_H 1 /* <memory.h> */
#define HAVE_SYS_PARAM_H 1 /* <sys/param.h> */
#define HAVE_UTIME_H 1 /* <utime.h> */
#define HAVE_FCNTL_H 1 /* <fcntl.h> */
#define HAVE_SYS_FILE_H 1 /* <sys/file.h> */
+#define HAVE_SYS_TIME_H 1 /* <sys/time.h> */
#define HAVE_SYS_TIMES_H 1 /* <sys/times.h> */
#define HAVE_LIBC_H 0 /* <libc.h> */
#define HAVE_SYSEXITS_H 1 /* <sysexits.h> */
@@ -56,10 +61,19 @@
systems this will be void; some older systems use int. */
#define RETSIGTYPE void
-/* Set HAVE_SYS_TIME_AND_TIME_H to 1 if <time.h> and <sys/time.h> can both
- be included in a single source file; if you don't have either or both of
- them, it doesn't matter what you set this to. */
-#define HAVE_SYS_TIME_AND_TIME_H 1
+/* If the macro S_ISDIR is defined in <sys/stat.h>, but is incorrect,
+ define STAT_MACROS_BROKEN to be 1. This is said to be the case on
+ Tektronix UTekV, Amdahl UTS and Motorola System V/88. */
+#define STAT_MACROS_BROKEN 0
+
+/* Set TIME_WITH_SYS_TIME to 1 if <time.h> and <sys/time.h> can both
+ be included in a single source file; if you don't have either or
+ both of them, it doesn't matter what you set this to. */
+#define TIME_WITH_SYS_TIME 1
+
+/* Set TM_IN_SYS_TIME to 1 if struct tm is defined in <sys/time.h>
+ rather than in <time.h>. */
+#define TM_IN_SYS_TIME 0
/* Set HAVE_TERMIOS_AND_SYS_IOCTL_H to 1 if <termios.h> and <sys/ioctl.h>
can both be included in a single source file; if you don't have either
@@ -91,22 +105,22 @@
/* The type pid_t is used to hold a process ID number. It is normally
defined in <sys/types.h>. This is the type returned by the
functions fork or getpid. Usually int will work fine. */
-#undef PID_T
+/* #undef PID_T */
/* The type uid_t is used to hold a user ID number. It is normally
defined in <sys/types.h>. This is the type returned by the getuid
function. Usually int will work fine. */
-#undef UID_T
+/* #undef UID_T */
/* The type gid_t is used to hold a group ID number. It is sometimes
defined in <sys/types.h>. This is the type returned by the getgid
function. Usually int will work fine. */
-#undef GID_T
+/* #undef GID_T */
/* The type off_t is used to hold an offset in a file. It is sometimes
defined in <sys/types.h>. This is the type of the second argument to
the lseek function. Usually long will work fine. */
-#undef OFF_T
+/* #undef OFF_T */
/* Set HAVE_SIG_ATOMIC_T_IN_SIGNAL_H if the type sig_atomic_t is defined
in <signal.h> as required by ANSI C. */
@@ -124,7 +138,7 @@
compiler does not support sig_atomic_t, there is no type which is
really correct; fortunately, for this package it does not really
matter very much. */
-#undef SIG_ATOMIC_T
+/* #undef SIG_ATOMIC_T */
/* Set HAVE_SIZE_T_IN_STDDEF_H to 1 if the type size_t is defined in
<stddef.h> as required by ANSI C. */
@@ -140,7 +154,7 @@
to the malloc and realloc functions. If size_t is not defined in
either <stddef.h> or <sys/types.h>, you may want to give it a
definition here. If you don't, the code will use unsigned. */
-#undef SIZE_T
+/* #undef SIZE_T */
/* Set HAVE_TIME_T_IN_TIME_H to 1 if the type time_t is defined in
<time.h>, as required by the ANSI C standard. */
@@ -167,12 +181,16 @@
STAT_STATFS2_FSIZE two argument statfs function with f_fsize field
STAT_STATFS2_FS_DATA two argument statfs function with fd_req field
STAT_STATFS4 four argument statfs function
+ STAT_DUSTAT dustat function (AIX PS/2)
+ STAT_DISK_SPACE disk_space function (QNX)
STAT_USTAT the ustat function with 512 byte blocks. */
#define STAT_STATVFS 0
#define STAT_STATFS2_BSIZE 0
#define STAT_STATFS2_FSIZE 1
#define STAT_STATFS2_FS_DATA 0
#define STAT_STATFS4 0
+#define STAT_DUSTAT 0
+#define STAT_DISK_SPACE 0
#define STAT_USTAT 0
/* Set HAVE_VOID to 1 if the compiler supports declaring functions with
@@ -186,6 +204,10 @@
/* Set HAVE_ERRNO_DECLARATION to 1 if errno is declared in <errno.h>. */
#define HAVE_ERRNO_DECLARATION 1
+/* Set HAVE_TXADDCD to 1 if TXADDCD is defined in <sys/ioctl.h>, as it
+ is on AIX. */
+#define HAVE_TXADDCD 0
+
/* There are now a number of functions to check for. For each of
these, the macro HAVE_FUNC should be set to 1 if your system has
FUNC. For example, HAVE_VFPRINTF should be set to 1 if your system
@@ -219,6 +241,7 @@
#define HAVE_STRDUP 1 /* strdup.o */
#define HAVE_STRSTR 1 /* strstr.o */
#define HAVE_STRTOL 1 /* strtol.o */
+#define HAVE_STRTOUL 1 /* strtou.o */
/* If neither of these functions exists, you should add bzero.o to
lib/Makefile. */
@@ -305,7 +328,7 @@
setjmp. These functions will only be used if your system restarts
system calls after interrupts (see HAVE_RESTARTABLE_SYSCALLS,
below). */
-#define HAVE_SIGSETJMP 0
+#define HAVE_SIGSETJMP 1
#define HAVE_SETRET 0
/* The code needs to know what function to use to set a signal
@@ -339,7 +362,7 @@
/* The code will use one of the following functions when detaching
from a terminal. One of these must exist. */
-#define HAVE_SETPGRP 0
+#define HAVE_SETPGRP 1
#define HAVE_SETSID 1
/* If you do not specify the local node name in the main configuration
@@ -347,7 +370,7 @@
in turn. If neither is available, you must specify the local node
name in the configuration file. */
#define HAVE_GETHOSTNAME 1
-#define HAVE_UNAME 0
+#define HAVE_UNAME 1
/* The code will try to use each of the following functions in turn to
determine the current time. If none are available, it will use
@@ -385,6 +408,11 @@
-lxti, to the Makefile variables LIBS. */
#define HAVE_T_OPEN 0
+/* If the dev_info function is available (QNX only), it will be used
+ to determine if any other process has the serial port open, and
+ that will cause uucico and cu to presume the port is locked. */
+#define HAVE_DEV_INFO 0
+
/* That's the end of the list of the functions. Now there are a few
last miscellaneous items. */
@@ -399,7 +427,7 @@
/* extern struct passwd *getpwnam (); */
#define GETPWNAM_DECLARATION_OK 1
/* extern struct passwd *getpwuid (); */
-#define GETPWUID_DECLARATION_OK 0
+#define GETPWUID_DECLARATION_OK 1
/* extern struct group *getgrent (); */
#define GETGRENT_DECLARATION_OK 1
@@ -425,20 +453,10 @@
#define HAVE_RESTARTABLE_SYSCALLS 1
/* Some systems supposedly need the following macros to be defined.
- These are handled by the configure script (it will turn #undef into
- #define when appropriate, which is why the peculiar #ifndef #undef
- construction is used). If you are configuring by hand, you may add
- appropriate definitions here, or just add them to CFLAGS when
- running make. */
-#ifndef _ALL_SOURCE
-#undef _ALL_SOURCE
-#endif
-#ifndef _POSIX_SOURCE
-#undef _POSIX_SOURCE
-#endif
-#ifndef _MINIX
-#undef _MINIX
-#endif
-#ifndef _POSIX_1_SOURCE
-#undef _POSIX_1_SOURCE
-#endif
+ These are handled by the configure script. If you are configuring
+ by hand, you may add appropriate definitions here, or just add them
+ to CFLAGS when running make. */
+/* #undef _ALL_SOURCE */
+/* #undef _POSIX_SOURCE */
+/* #undef _MINIX */
+/* #undef _POSIX_1_SOURCE */
diff --git a/gnu/libexec/uucp/common_sources/conn.c b/gnu/libexec/uucp/common_sources/conn.c
index 8db53516a685..5085ee5b63c9 100644
--- a/gnu/libexec/uucp/common_sources/conn.c
+++ b/gnu/libexec/uucp/common_sources/conn.c
@@ -1,7 +1,7 @@
/* conn.c
Connection routines for the Taylor UUCP package.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,13 +20,13 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#include "uucp.h"
#if USE_RCS_ID
-const char conn_rcsid[] = "$Id: conn.c,v 1.1 1993/08/05 18:22:35 conklin Exp $";
+const char conn_rcsid[] = "$Id: conn.c,v 1.2 1994/05/07 18:08:38 ache Exp $";
#endif
#include <ctype.h>
@@ -35,21 +35,19 @@ const char conn_rcsid[] = "$Id: conn.c,v 1.1 1993/08/05 18:22:35 conklin Exp $";
#include "uuconf.h"
#include "conn.h"
-static boolean fcdo_dial P((struct sconnection *qconn, pointer puuconf,
- struct uuconf_dialer *qdialer,
- const char *zphone, boolean ftranslate));
-
/* Create a new connection. This relies on system dependent functions
to set the qcmds and psysdep fields. If qport is NULL, it opens a
- standard input port. */
+ standard input port, in which case ttype is the type of port to
+ use. */
boolean
-fconn_init (qport, qconn)
+fconn_init (qport, qconn, ttype)
struct uuconf_port *qport;
struct sconnection *qconn;
+ enum uuconf_porttype ttype;
{
qconn->qport = qport;
- switch (qport == NULL ? UUCONF_PORTTYPE_STDIN : qport->uuconf_ttype)
+ switch (qport == NULL ? ttype : qport->uuconf_ttype)
{
case UUCONF_PORTTYPE_STDIN:
return fsysdep_stdin_init (qconn);
@@ -65,8 +63,10 @@ fconn_init (qport, qconn)
case UUCONF_PORTTYPE_TLI:
return fsysdep_tli_init (qconn);
#endif
+ case UUCONF_PORTTYPE_PIPE:
+ return fsysdep_pipe_init (qconn);
default:
- ulog (LOG_ERROR, "Unknown port type");
+ ulog (LOG_ERROR, "Unknown or unsupported port type");
return FALSE;
}
}
@@ -202,8 +202,9 @@ fconn_close (qconn, puuconf, qdialer, fsuccess)
fret = (*qconn->qcmds->pfclose) (qconn, puuconf, qdialer, fsuccess);
- /* Make sure any signal reporting has been done before we set
- fLog_sighup back to TRUE. */
+ /* Ignore any SIGHUP we may have gotten, and make sure any signal
+ reporting has been done before we reset fLog_sighup. */
+ afSignal[INDEXSIG_SIGHUP] = FALSE;
ulog (LOG_ERROR, (const char *) NULL);
fLog_sighup = TRUE;
@@ -211,17 +212,6 @@ fconn_close (qconn, puuconf, qdialer, fsuccess)
return fret;
}
-
-/* Reset the connection. */
-
-boolean
-fconn_reset (qconn)
- struct sconnection *qconn;
-{
- DEBUG_MESSAGE0 (DEBUG_PORT, "fconn_reset: Resetting connection");
-
- return (*qconn->qcmds->pfreset) (qconn);
-}
/* Dial out on the connection. */
@@ -347,7 +337,7 @@ fconn_break (qconn)
{
boolean (*pfbreak) P((struct sconnection *));
- pfbreak = *qconn->qcmds->pfbreak;
+ pfbreak = qconn->qcmds->pfbreak;
if (pfbreak == NULL)
return TRUE;
@@ -419,74 +409,65 @@ iconn_baud (qconn)
return (*pibaud) (qconn);
}
-/* Modem dialing routines. */
+/* Run through a dialer sequence. The pzdialer argument is a list of
+ strings, which are considered in dialer/token pairs. The dialer
+ string names a dialer to use. The token string is what \D and \T
+ in the chat script expand to. If there is no token for the last
+ dialer, the zphone argument is used. The qdialer argument is
+ filled in with information for the first dialer, and *ptdialerfound
+ is set to whether the information should be freed or not. However,
+ if *ptdialerfound is not DIALERFOUND_FALSE when this function is
+ called, then the information for the first dialer is already in
+ qdialer. */
-/*ARGSUSED*/
boolean
-fmodem_dial (qconn, puuconf, qsys, zphone, qdialer, ptdialerfound)
+fconn_dial_sequence (qconn, puuconf, pzdialer, qsys, zphone, qdialer,
+ ptdialerfound)
struct sconnection *qconn;
pointer puuconf;
+ char **pzdialer;
const struct uuconf_system *qsys;
const char *zphone;
struct uuconf_dialer *qdialer;
enum tdialerfound *ptdialerfound;
{
- *ptdialerfound = DIALERFOUND_FALSE;
+ const char *zname;
+ boolean ffirst, ffreefirst;
- if (qconn->qport->uuconf_u.uuconf_smodem.uuconf_pzdialer != NULL)
+ if (qconn->qport == NULL)
+ zname = NULL;
+ else
+ zname = qconn->qport->uuconf_zname;
+ ffirst = TRUE;
+ ffreefirst = FALSE;
+ while (*pzdialer != NULL)
{
- char **pz;
- boolean ffirst;
-
- /* The pzdialer field is a sequence of dialer/token pairs. The
- dialer portion names a dialer to use. The token portion is
- what \D and \T in the chat script expand to. If there is no
- token for the last dialer, the phone number for the system is
- used. */
- ffirst = TRUE;
- pz = qconn->qport->uuconf_u.uuconf_smodem.uuconf_pzdialer;
- while (*pz != NULL)
+ struct uuconf_dialer *q;
+ struct uuconf_dialer s;
+ const char *ztoken;
+ boolean ftranslate;
+
+ if (! ffirst)
+ q = &s;
+ else
+ q = qdialer;
+
+ if (! ffirst || *ptdialerfound == DIALERFOUND_FALSE)
{
int iuuconf;
- struct uuconf_dialer *q;
- struct uuconf_dialer s;
- const char *ztoken;
- boolean ftranslate;
- if (! ffirst)
- q = &s;
- else
- q = qdialer;
-
- iuuconf = uuconf_dialer_info (puuconf, *pz, q);
+ iuuconf = uuconf_dialer_info (puuconf, *pzdialer, q);
if (iuuconf == UUCONF_NOT_FOUND)
{
- ulog (LOG_ERROR, "%s: Dialer not found", *pz);
+ ulog (LOG_ERROR, "%s: Dialer not found", *pzdialer);
+ if (ffreefirst)
+ (void) uuconf_dialer_free (puuconf, qdialer);
return FALSE;
}
else if (iuuconf != UUCONF_SUCCESS)
{
ulog_uuconf (LOG_ERROR, puuconf, iuuconf);
- return FALSE;
- }
-
- ++pz;
- ztoken = *pz;
-
- ftranslate = FALSE;
- if (ztoken == NULL
- || strcmp (ztoken, "\\D") == 0)
- ztoken = zphone;
- else if (strcmp (ztoken, "\\T") == 0)
- {
- ztoken = zphone;
- ftranslate = TRUE;
- }
-
- if (! fcdo_dial (qconn, puuconf, q, ztoken, ftranslate))
- {
- (void) uuconf_dialer_free (puuconf, q);
- if (! ffirst)
+ if (ffreefirst)
(void) uuconf_dialer_free (puuconf, qdialer);
return FALSE;
}
@@ -494,25 +475,109 @@ fmodem_dial (qconn, puuconf, qsys, zphone, qdialer, ptdialerfound)
if (ffirst)
{
*ptdialerfound = DIALERFOUND_FREE;
- ffirst = FALSE;
+ ffreefirst = TRUE;
}
- else
+ }
+
+ ++pzdialer;
+ ztoken = *pzdialer;
+
+ ftranslate = FALSE;
+ if (ztoken == NULL
+ || strcmp (ztoken, "\\D") == 0)
+ ztoken = zphone;
+ else if (strcmp (ztoken, "\\T") == 0)
+ {
+ ztoken = zphone;
+ ftranslate = TRUE;
+ }
+
+ if (! fchat (qconn, puuconf, &q->uuconf_schat, qsys, q, ztoken,
+ ftranslate, zname, iconn_baud (qconn)))
+ {
+ if (q == &s)
(void) uuconf_dialer_free (puuconf, q);
+ if (ffreefirst)
+ (void) uuconf_dialer_free (puuconf, qdialer);
+ return FALSE;
+ }
+
+ if (ffirst)
+ ffirst = FALSE;
+ else
+ (void) uuconf_dialer_free (puuconf, q);
+
+ if (*pzdialer != NULL)
+ ++pzdialer;
+ }
+
+ return TRUE;
+}
+
+/* Modem dialing routine. */
+
+/*ARGSUSED*/
+boolean
+fmodem_dial (qconn, puuconf, qsys, zphone, qdialer, ptdialerfound)
+ struct sconnection *qconn;
+ pointer puuconf;
+ const struct uuconf_system *qsys;
+ const char *zphone;
+ struct uuconf_dialer *qdialer;
+ enum tdialerfound *ptdialerfound;
+{
+ char **pzdialer;
+
+ *ptdialerfound = DIALERFOUND_FALSE;
+
+ pzdialer = qconn->qport->uuconf_u.uuconf_smodem.uuconf_pzdialer;
+ if (pzdialer != NULL && *pzdialer != NULL)
+ {
+ int iuuconf;
+ boolean fret;
- if (*pz != NULL)
- ++pz;
+ iuuconf = uuconf_dialer_info (puuconf, *pzdialer, qdialer);
+ if (iuuconf == UUCONF_NOT_FOUND)
+ {
+ ulog (LOG_ERROR, "%s: Dialer not found", *pzdialer);
+ return FALSE;
+ }
+ else if (iuuconf != UUCONF_SUCCESS)
+ {
+ ulog_uuconf (LOG_ERROR, puuconf, iuuconf);
+ return FALSE;
}
- return TRUE;
+ *ptdialerfound = DIALERFOUND_FREE;
+
+ fret = (fsysdep_modem_begin_dial (qconn, qdialer)
+ && fconn_dial_sequence (qconn, puuconf, pzdialer, qsys, zphone,
+ qdialer, ptdialerfound)
+ && fsysdep_modem_end_dial (qconn, qdialer));
+
+ if (! fret)
+ (void) uuconf_dialer_free (puuconf, qdialer);
+
+ return fret;
}
else if (qconn->qport->uuconf_u.uuconf_smodem.uuconf_qdialer != NULL)
{
struct uuconf_dialer *q;
+ const char *zname;
q = qconn->qport->uuconf_u.uuconf_smodem.uuconf_qdialer;
*qdialer = *q;
*ptdialerfound = DIALERFOUND_TRUE;
- return fcdo_dial (qconn, puuconf, q, zphone, FALSE);
+
+ if (qconn->qport == NULL)
+ zname = NULL;
+ else
+ zname = qconn->qport->uuconf_zname;
+
+ return (fsysdep_modem_begin_dial (qconn, q)
+ && fchat (qconn, puuconf, &q->uuconf_schat, qsys, q,
+ zphone, FALSE, zname, iconn_baud (qconn))
+ && fsysdep_modem_end_dial (qconn, q));
}
else
{
@@ -520,33 +585,3 @@ fmodem_dial (qconn, puuconf, qsys, zphone, qdialer, ptdialerfound)
return FALSE;
}
}
-
-/* Actually use a dialer. We set up the modem (which may include
- opening the dialer device), run the chat script, and finish dealing
- with the modem. */
-
-static boolean
-fcdo_dial (qconn, puuconf, qdial, zphone, ftranslate)
- struct sconnection *qconn;
- pointer puuconf;
- struct uuconf_dialer *qdial;
- const char *zphone;
- boolean ftranslate;
-{
- const char *zname;
-
- if (! fsysdep_modem_begin_dial (qconn, qdial))
- return FALSE;
-
- if (qconn->qport == NULL)
- zname = NULL;
- else
- zname = qconn->qport->uuconf_zname;
-
- if (! fchat (qconn, puuconf, &qdial->uuconf_schat,
- (const struct uuconf_system *) NULL, qdial,
- zphone, ftranslate, zname, iconn_baud (qconn)))
- return FALSE;
-
- return fsysdep_modem_end_dial (qconn, qdial);
-}
diff --git a/gnu/libexec/uucp/common_sources/conn.h b/gnu/libexec/uucp/common_sources/conn.h
index 59d4881b07ff..368f7e658949 100644
--- a/gnu/libexec/uucp/common_sources/conn.h
+++ b/gnu/libexec/uucp/common_sources/conn.h
@@ -1,7 +1,7 @@
/* conn.h
Header file for routines which manipulate connections.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,7 +20,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#ifndef CONN_H
@@ -121,8 +121,6 @@ struct sconncmds
pointer puuconf,
struct uuconf_dialer *qdialer,
boolean fsuccess));
- /* Reset the connection so that another call may be accepted. */
- boolean (*pfreset) P((struct sconnection *qconn));
/* Dial a number on a connection. This set *qdialer to the dialer
used, if any, and sets *ptdialerfound appropriately. The qsys
and zphone arguments are for the chat script. This field may be
@@ -170,9 +168,11 @@ struct sconncmds
/* Initialize a connection. This must be called before any of the
other connection functions are called. It initializes the fields
- of qconn. It returns FALSE on error. */
+ of qconn. If qport is NULL, this opens standard input as a port
+ using type ttype. This function returns FALSE on error. */
extern boolean fconn_init P((struct uuconf_port *qport,
- struct sconnection *qconn));
+ struct sconnection *qconn,
+ enum uuconf_porttype ttype));
/* Free up connection data. */
extern void uconn_free P((struct sconnection *qconn));
@@ -199,9 +199,6 @@ extern boolean fconn_close P((struct sconnection *qconn,
struct uuconf_dialer *qdialer,
boolean fsuccess));
-/* Reset a connection such that another call may be accepted. */
-extern boolean fconn_reset P((struct sconnection *q));
-
/* Dial out on a connection. The qsys and zphone arguments are for
the chat scripts; zphone is the phone number to dial. If qdialer
is not NULL, *qdialer will be set to the dialer information used if
@@ -275,6 +272,15 @@ extern boolean fconn_carrier P((struct sconnection *qconn,
extern boolean fconn_run_chat P((struct sconnection *qconn,
char **pzprog));
+/* Run through a dialer sequence. This is a support routine for the
+ port type specific dialing routines. */
+extern boolean fconn_dial_sequence P((struct sconnection *qconn,
+ pointer puuconf, char **pzdialer,
+ const struct uuconf_system *qsys,
+ const char *zphone,
+ struct uuconf_dialer *qdialer,
+ enum tdialerfound *ptdialerfound));
+
/* Dialing out on a modem is partially system independent. This is
the modem dialing routine. */
extern boolean fmodem_dial P((struct sconnection *qconn, pointer puuconf,
@@ -308,5 +314,6 @@ extern boolean fsysdep_tcp_init P((struct sconnection *qconn));
#if HAVE_TLI
extern boolean fsysdep_tli_init P((struct sconnection *qconn));
#endif
+extern boolean fsysdep_pipe_init P((struct sconnection *qconn));
#endif /* ! defined (CONN_H) */
diff --git a/gnu/libexec/uucp/common_sources/copy.c b/gnu/libexec/uucp/common_sources/copy.c
index 0d1a5bb2c270..176b53641c99 100644
--- a/gnu/libexec/uucp/common_sources/copy.c
+++ b/gnu/libexec/uucp/common_sources/copy.c
@@ -20,13 +20,13 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#include "uucp.h"
#if USE_RCS_ID
-const char copy_rcsid[] = "$Id: copy.c,v 1.1 1993/08/05 18:22:37 conklin Exp $";
+const char copy_rcsid[] = "$Id: copy.c,v 1.2 1994/05/07 18:08:42 ache Exp $";
#endif
#include "uudefs.h"
diff --git a/gnu/libexec/uucp/common_sources/cu.h b/gnu/libexec/uucp/common_sources/cu.h
index 5a514ee3bfe7..748e2d32c199 100644
--- a/gnu/libexec/uucp/common_sources/cu.h
+++ b/gnu/libexec/uucp/common_sources/cu.h
@@ -20,7 +20,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
/* The user settable variables supported by cu. */
diff --git a/gnu/libexec/uucp/common_sources/log.c b/gnu/libexec/uucp/common_sources/log.c
index 9528baf5ca39..761efeff64af 100644
--- a/gnu/libexec/uucp/common_sources/log.c
+++ b/gnu/libexec/uucp/common_sources/log.c
@@ -1,7 +1,7 @@
/* log.c
Routines to add entries to the log files.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,22 +20,25 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#include "uucp.h"
#if USE_RCS_ID
-const char log_rcsid[] = "$Id: log.c,v 1.1 1993/08/05 18:22:39 conklin Exp $";
+const char log_rcsid[] = "$Id: log.c,v 1.2 1994/05/07 18:08:47 ache Exp $";
#endif
+#include <ctype.h>
#include <errno.h>
-#if ANSI_C
+#if HAVE_STDARG_H
#include <stdarg.h>
#endif
-#if HAVE_TIME_H
+#if TM_IN_SYS_TIME
+#include <sys/time.h>
+#else
#include <time.h>
#endif
@@ -45,8 +48,12 @@ const char log_rcsid[] = "$Id: log.c,v 1.1 1993/08/05 18:22:39 conklin Exp $";
/* Local functions. */
+__inline__ static char *zstpcpy P((char *zto, const char *zfrom));
static const char *zldate_and_time P((void));
+/* Program name. Set by main function. */
+const char *zProgram;
+
/* Log file name. */
static const char *zLogfile;
@@ -86,9 +93,6 @@ static FILE *eLdebug;
/* Whether we've tried to open the debugging file. */
static boolean fLdebug_tried;
-
-/* Whether we've written out any debugging information. */
-static boolean fLdebugging;
#endif
/* Statistics file name. */
@@ -212,11 +216,24 @@ ulog_device (zdevice)
zLdevice = zbufcpy (zdevice);
}
+/* A helper function for ulog. */
+
+__inline__ static char *
+zstpcpy (zto, zfrom)
+ char *zto;
+ const char *zfrom;
+{
+ while ((*zto++ = *zfrom++) != '\0')
+ ;
+ return zto - 1;
+}
+
/* Make a log entry. We make a token concession to non ANSI_C systems,
but it clearly won't always work. */
-#if ! ANSI_C
+#if ! HAVE_PROTOTYPES || ! HAVE_STDARG_H
#undef HAVE_VFPRINTF
+#define HAVE_VFPRINTF 0
#endif
/*VARARGS2*/
@@ -235,7 +252,11 @@ ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j)
#endif
FILE *e, *edebug;
boolean fstart, fend;
- const char *zhdr, *zstr;
+ const char *zhdr;
+ char *zprefix;
+ register char *zset;
+ char *zformat;
+ char *zfrom;
/* Log any received signal. We do it this way to avoid calling ulog
from the signal handler. A few routines call ulog to get this
@@ -276,11 +297,10 @@ ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j)
if (fLfile
&& eLdebug == NULL
&& ! fLdebug_tried
- && (fLdebugging || (int) ttype >= (int) LOG_DEBUG))
+ && iDebug != 0)
{
fLdebug_tried = TRUE;
eLdebug = esysdep_fopen (zLdebugfile, FALSE, TRUE, TRUE);
- fLdebugging = TRUE;
}
#endif /* DEBUG > 1 */
@@ -307,6 +327,8 @@ ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j)
#else /* HAVE_HDB_LOGGING */
{
const char *zsys;
+ char *zbase;
+ char *zlower;
char *zfile;
/* We want to write to .Log/program/system, e.g.
@@ -316,11 +338,23 @@ ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j)
else
zsys = zLsystem;
+ zbase = zsysdep_base_name (zProgram);
+ if (zbase == NULL)
+ zbase = zbufcpy (zProgram);
+
+ /* On some systems the native uusched will invoke uucico
+ with an upper case argv[0]. We work around that by
+ forcing the filename to lower case here. */
+ for (zlower = zbase; *zlower != '\0'; zlower++)
+ if (isupper (*zlower))
+ *zlower = tolower (*zlower);
+
zfile = zbufalc (strlen (zLogfile)
- + strlen (abProgram)
+ + strlen (zbase)
+ strlen (zsys)
+ 1);
- sprintf (zfile, zLogfile, abProgram, zsys);
+ sprintf (zfile, zLogfile, zbase, zsys);
+ ubuffree (zbase);
eLlog = esysdep_fopen (zfile, TRUE, TRUE, TRUE);
ubuffree (zfile);
}
@@ -328,10 +362,13 @@ ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j)
if (eLlog == NULL)
{
- /* We can't open the log file. We don't even have a
- safe way to report this problem, since we may not be
- able to write to stderr (it may, for example, be
- attached to the incoming call). */
+ /* We can't open the log file. We report the problem to
+ stderr. This is not ideal, since if this is uucico
+ running on an inbound call stderr is actually
+ connected to a remote system, but is better than
+ doing nothing. */
+ fprintf (stderr, "%s: %s: can not open log file\n",
+ zProgram, zLogfile);
if (pfLfatal != NULL)
(*pfLfatal) ();
usysdep_exit (FALSE);
@@ -392,99 +429,122 @@ ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j)
break;
}
- if (fstart)
+ if (! fstart)
+ zprefix = zbufcpy ("");
+ else
{
if (! fLfile)
{
- fprintf (e, "%s: ", abProgram);
- if (edebug != NULL)
- fprintf (edebug, "%s: ", abProgram);
+ zprefix = zbufalc (strlen (zProgram) + 3);
+ sprintf (zprefix, "%s: ", zProgram);
}
else
{
+ zprefix = zbufalc (strlen (zProgram)
+ + (zLsystem == NULL ? 1 : strlen (zLsystem))
+ + (zLuser == NULL ? 4 : strlen (zLuser))
+ + sizeof "1991-12-31 12:00:00.00"
+ + strlen (zhdr)
+ + 100);
+ zset = zprefix;
#if HAVE_TAYLOR_LOGGING
- fprintf (e, "%s ", abProgram);
- if (edebug != NULL)
- fprintf (edebug, "%s ", abProgram);
+ {
+ char *zbase;
+
+ zbase = zsysdep_base_name (zProgram);
+ if (zbase == NULL)
+ zbase = zbufcpy (zProgram);
+ zset = zstpcpy (zset, zbase);
+ *zset++ = ' ';
+ ubuffree (zbase);
+ }
#else /* ! HAVE_TAYLOR_LOGGING */
- fprintf (e, "%s ", zLuser == NULL ? "uucp" : zLuser);
- if (edebug != NULL)
- fprintf (edebug, "%s ", zLuser == NULL ? "uucp" : zLuser);
+ zset = zstpcpy (zset, zLuser == NULL ? "uucp" : zLuser);
+ *zset++ = ' ';
#endif /* HAVE_TAYLOR_LOGGING */
- fprintf (e, "%s ", zLsystem == NULL ? "-" : zLsystem);
- if (edebug != NULL)
- fprintf (edebug, "%s ", zLsystem == NULL ? "-" : zLsystem);
+ zset = zstpcpy (zset, zLsystem == NULL ? "-" : zLsystem);
+ *zset++ = ' ';
#if HAVE_TAYLOR_LOGGING
- fprintf (e, "%s ", zLuser == NULL ? "-" : zLuser);
- if (edebug != NULL)
- fprintf (edebug, "%s ", zLuser == NULL ? "-" : zLuser);
+ zset = zstpcpy (zset, zLuser == NULL ? "-" : zLuser);
+ *zset++ = ' ';
#endif /* HAVE_TAYLOR_LOGGING */
- zstr = zldate_and_time ();
- fprintf (e, "(%s", zstr);
- if (edebug != NULL)
- fprintf (edebug, "(%s", zstr);
+ *zset++ = '(';
+ zset = zstpcpy (zset, zldate_and_time ());
if (iLid != 0)
{
#if ! HAVE_HDB_LOGGING
#if HAVE_TAYLOR_LOGGING
- fprintf (e, " %d", iLid);
- if (edebug != NULL)
- fprintf (edebug, " %d", iLid);
+ sprintf (zset, " %d", iLid);
#else /* ! HAVE_TAYLOR_LOGGING */
- fprintf (e, "-%d", iLid);
- if (edebug != NULL)
- fprintf (edebug, "-%d", iLid);
+ sprintf (zset, "-%d", iLid);
#endif /* ! HAVE_TAYLOR_LOGGING */
#else /* HAVE_HDB_LOGGING */
-
/* I assume that the second number here is meant to be
some sort of file sequence number, and that it should
correspond to the sequence number in the statistics
file. I don't have any really convenient way to do
this, so I won't unless somebody thinks it's very
important. */
- fprintf (e, ",%d,%d", iLid, 0);
- if (edebug != NULL)
- fprintf (edebug, ",%d,%d", iLid, 0);
+ sprintf (zset, ",%d,%d", iLid, 0);
#endif /* HAVE_HDB_LOGGING */
+
+ zset += strlen (zset);
}
- fprintf (e, ") ");
- if (edebug != NULL)
- fprintf (edebug, ") ");
+#if QNX_LOG_NODE_ID
+ sprintf (zset, " %ld", (long) getnid ());
+ zset += strlen (zset);
+#endif
+
+ *zset++ = ')';
+ *zset++ = ' ';
- fprintf (e, "%s", zhdr);
- if (edebug != NULL)
- fprintf (edebug, "%s", zhdr);
+ strcpy (zset, zhdr);
}
}
+ zformat = zbufalc (2 * strlen (zprefix) + strlen (zmsg) + 2);
+
+ zset = zformat;
+ zfrom = zprefix;
+ while (*zfrom != '\0')
+ {
+ if (*zfrom == '%')
+ *zset++ = '%';
+ *zset++ = *zfrom++;
+ }
+
+ ubuffree (zprefix);
+
+ zset = zstpcpy (zset, zmsg);
+
+ if (fend)
+ {
+ *zset++ = '\n';
+ *zset = '\0';
+ }
+
#if HAVE_VFPRINTF
va_start (parg, zmsg);
- vfprintf (e, zmsg, parg);
+ vfprintf (e, zformat, parg);
va_end (parg);
if (edebug != NULL)
{
va_start (parg, zmsg);
- vfprintf (edebug, zmsg, parg);
+ vfprintf (edebug, zformat, parg);
va_end (parg);
}
#else /* ! HAVE_VFPRINTF */
- fprintf (e, zmsg, a, b, c, d, f, g, h, i, j);
+ fprintf (e, zformat, a, b, c, d, f, g, h, i, j);
if (edebug != NULL)
- fprintf (edebug, zmsg, a, b, c, d, f, g, h, i, j);
+ fprintf (edebug, zformat, a, b, c, d, f, g, h, i, j);
#endif /* ! HAVE_VFPRINTF */
- if (fend)
- {
- fprintf (e, "\n");
- if (edebug != NULL)
- fprintf (edebug, "\n");
- }
+ ubuffree (zformat);
(void) fflush (e);
if (edebug != NULL)
@@ -581,13 +641,24 @@ ustats (fsucceeded, zuser, zsystem, fsent, cbytes, csecs, cmicros, fmaster)
cbps = 0;
else
{
- long cmillis;
-
- /* This computation will not overflow provided csecs < 2147483
- and cbytes and cbps both fit in a long. */
+ long cmillis, cdiv, crem;
+
+ /* Compute ((csecs * 1000) / cmillis) using integer division.
+ Where DIV is integer division, we know
+ a = (a DIV b) * b + a % b
+ so
+ a / b = (a DIV b) + (a % b) / b
+ We compute the latter with a as csecs and b as cmillis,
+ mixing the multiplication by 1000. */
cmillis = csecs * 1000 + cmicros / 1000;
- cbps = ((cbytes / cmillis) * 1000
- + ((cbytes % cmillis) * 1000) / cmillis);
+ cdiv = (cbytes / cmillis) * 1000;
+ crem = (cbytes % cmillis) * 1000;
+ cbps = cdiv + (crem / cmillis);
+ if (cmillis < 0 || cdiv < 0 || crem < 0 || cbps < 0)
+ {
+ /* We overflowed using milliseconds, so use seconds. */
+ cbps = cbytes / (csecs + ((cmicros > 500000L) ? 1 : 0));
+ }
}
if (eLstats == NULL)
@@ -602,11 +673,12 @@ ustats (fsucceeded, zuser, zsystem, fsent, cbytes, csecs, cmicros, fmaster)
#if HAVE_TAYLOR_LOGGING
fprintf (eLstats,
- "%s %s (%s) %s%s %ld bytes in %ld.%03ld seconds (%ld bytes/sec)\n",
+ "%s %s (%s) %s%s %ld bytes in %ld.%03ld seconds (%ld bytes/sec) on port %s\n",
zuser, zsystem, zldate_and_time (),
fsucceeded ? "" : "failed after ",
fsent ? "sent" : "received",
- cbytes, csecs, cmicros / 1000, cbps);
+ cbytes, csecs, cmicros / 1000, cbps,
+ zLdevice == NULL ? "unknown" : zLdevice);
#endif /* HAVE_TAYLOR_LOGGING */
#if HAVE_V2_LOGGING
fprintf (eLstats,
@@ -625,18 +697,16 @@ ustats (fsucceeded, zuser, zsystem, fsent, cbytes, csecs, cmicros, fmaster)
probably correspond to the sequence number in the log file, but
that is currently always 0; using this fake sequence number
will still at least reveal which transfers are from different
- calls. We don't report a failed data transfer with this
- format. */
- if (! fsucceeded)
- return;
+ calls. */
++iseq;
fprintf (eLstats,
- "%s!%s %c (%s) (C,%d,%d) [%s] %s %ld / %ld.%03ld secs, %ld %s\n",
+ "%s!%s %c (%s) (C,%d,%d) [%s] %s %ld / %ld.%03ld secs, %ld%s%s\n",
zsystem, zuser, fmaster ? 'M' : 'S', zldate_and_time (),
iLid, iseq, zLdevice == NULL ? "unknown" : zLdevice,
fsent ? "->" : "<-",
cbytes, csecs, cmicros / 1000, cbps,
- "bytes/sec");
+ " bytes/sec",
+ fsucceeded ? "" : " [PARTIAL FILE]");
}
#endif /* HAVE_HDB_LOGGING */
diff --git a/gnu/libexec/uucp/common_sources/policy.h b/gnu/libexec/uucp/common_sources/policy.h
index 4c829bf42d8e..7fd03a24fa2e 100644
--- a/gnu/libexec/uucp/common_sources/policy.h
+++ b/gnu/libexec/uucp/common_sources/policy.h
@@ -1,7 +1,7 @@
/* policy.h
Configuration file for policy decisions. To be edited on site.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,7 +20,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
/* This header file contains macro definitions which must be set by
@@ -72,14 +72,19 @@
figure out what's happening if something goes wrong. */
#if HAVE_BSD_TTY + HAVE_SYSV_TERMIO + HAVE_POSIX_TERMIOS == 0
+#ifdef __QNX__
+#undef HAVE_POSIX_TERMIOS
+#define HAVE_POSIX_TERMIOS 1
+#else /* ! defined (__QNX__) */
#if HAVE_CBREAK
#undef HAVE_BSD_TTY
#define HAVE_BSD_TTY 1
-#else
+#else /* ! HAVE_CBREAK */
#undef HAVE_SYSV_TERMIO
#define HAVE_SYSV_TERMIO 1
-#endif
-#endif
+#endif /* ! HAVE_CBREAK */
+#endif /* ! defined (__QNX__) */
+#endif /* HAVE_BSD_TTY + HAVE_SYSV_TERMIO + HAVE_POSIX_TERMIOS == 0 */
/* On some systems a write to a serial port will block even if the
file descriptor has been set to not block. File transfer can be
@@ -155,12 +160,23 @@
#define HAVE_STRIP_BUG 0
#if HAVE_BSD_TTY
+#ifdef __ultrix__
+#ifndef ultrix
+#define ultrix
+#endif
+#endif
#ifdef ultrix
#undef HAVE_STRIP_BUG
#define HAVE_STRIP_BUG 1
#endif
#endif
+/* If your system implements full duplex pipes, set
+ HAVE_FULLDUPLEX_PIPES to 1. Everything should work fine if you
+ leave it set to 0, but setting it to 1 can be slightly more
+ efficient. */
+#define HAVE_FULLDUPLEX_PIPES 0
+
/* TIMES_TICK is the fraction of a second which times(2) returns (for
example, if times returns 100ths of a second TIMES_TICK should be
set to 100). On a true POSIX system (one which has the sysconf
@@ -187,7 +203,7 @@
HAVE_SAVED_SETUID to 1, but your system does not have saved set
user ID, uucp will fail with an error message whenever anybody
other than the uucp user uses it. */
-#define HAVE_SAVED_SETUID 1
+#define HAVE_SAVED_SETUID 0
/* On some systems, such as the DG Aviion and, possibly, the RS/6000,
the setreuid function is broken. It should be possible to use
@@ -197,7 +213,7 @@
set HAVE_BROKEN_SETREUID to 1; if you do not, you will get error
messages from setreuid. Systems on which setreuid exists but is
broken pretty much always have saved setuid. */
-#define HAVE_BROKEN_SETREUID 0
+#define HAVE_BROKEN_SETREUID 1
/* On the 3B2, and possibly other systems, nap takes an argument in
hundredths of a second rather than milliseconds. I don't know of
@@ -206,6 +222,34 @@
have the nap function. */
#define HAVE_HUNDREDTHS_NAP 0
+/* Set MAIL_PROGRAM to a program which can be used to send mail. It
+ will be used for mail to both local and remote users. Set
+ MAIL_PROGRAM_TO_BODY to 1 if the recipient should be specified as a
+ To: line in the body of the message; otherwise, the recipient will
+ be provided as an argument to MAIL_PROGRAM. Set
+ MAIL_PROGRAM_SUBJECT_BODY if the subject should be specified as a
+ Subject: line in the body of the message; otherwise, the subject
+ will be provided using the -s option to MAIL_PROGRAM (if your mail
+ program does not support the -s option, you must set
+ MAIL_PROGRAM_SUBJECT_BODY to 1). If your system uses sendmail, use
+ the sendmail choice below. Otherwise, select one of the other
+ choices as appropriate. */
+#if 1
+#define MAIL_PROGRAM "/usr/sbin/sendmail -t"
+#define MAIL_PROGRAM_TO_BODY 1
+#define MAIL_PROGRAM_SUBJECT_BODY 1
+#endif
+#if 0
+#define MAIL_PROGRAM "/usr/ucb/mail"
+#define MAIL_PROGRAM_TO_BODY 0
+#define MAIL_PROGRAM_SUBJECT_BODY 0
+#endif
+#if 0
+#define MAIL_PROGRAM "/bin/mail"
+#define MAIL_PROGRAM_TO_BODY 0
+#define MAIL_PROGRAM_SUBJECT_BODY 1
+#endif
+
/* Set PS_PROGRAM to the program to run to get a process status,
including the arguments to pass it. This is used by ``uustat -p''.
Set HAVE_PS_MULTIPLE to 1 if a comma separated list of process
@@ -229,6 +273,13 @@
#define PS_PROGRAM "/bin/ps -flp"
#define HAVE_PS_MULTIPLE 1
#endif
+#ifdef __QNX__
+/* Use this for QNX, along with HAVE_QNX_LOCKFILES. */
+#undef PS_PROGRAM
+#undef HAVE_PS_MULTIPLE
+#define PS_PROGRAM "/bin/ps -l -n -p"
+#define HAVE_PS_MULTIPLE 0
+#endif
/* If you use other programs that also lock devices, such as cu or
uugetty, the other programs and UUCP must agree on whether a device
@@ -269,20 +320,91 @@
device itself, and zzz is the minor device number of the port
device.
+ Sequent DYNIX/ptx (but perhaps not Dynix 3.x) uses yet another
+ naming convention. The lock file for /dev/ttyXA/XAAP is named
+ LCK..ttyXAAP.
+
Coherent use a completely different method of terminal locking.
See unix/cohtty for details. For locks other than for terminals,
- HDB type lock files are used. */
+ HDB type lock files are used.
+
+ QNX lock files are similar to HDB lock files except that the node
+ ID must be stored in addition to the process ID and for serial
+ devices the node ID must be included in the lock file name. QNX
+ boxes are generally used in bunches, and all of them behave like
+ one big machine to some extent. Thus, processes on different
+ machines will be sharing the files in the spool directory. To
+ detect if a process has died and a lock is thus stale, you need the
+ node ID of the process as well as the process ID. The process ID
+ is stored as a number written using ASCII digits padded to 10
+ characters, followed by a space, followed by the node ID written
+ using ASCII digits padded to 10 characters, followed by a newline.
+ The format for QNX lock files was made up just for Taylor UUCP.
+ QNX doesn't come with a version of UUCP. */
#define HAVE_V2_LOCKFILES 0
#define HAVE_HDB_LOCKFILES 1
#define HAVE_SCO_LOCKFILES 0
#define HAVE_SVR4_LOCKFILES 0
+#define HAVE_SEQUENT_LOCKFILES 0
#define HAVE_COHERENT_LOCKFILES 0
+#define HAVE_QNX_LOCKFILES 0
+
+/* This tries to pick a default based on preprocessor definitions.
+ Ignore it if you have explicitly set one of the above values. */
+#if HAVE_V2_LOCKFILES + HAVE_HDB_LOCKFILES + HAVE_SCO_LOCKFILES + HAVE_SVR4_LOCKFILES + HAVE_SEQUENT_LOCKFILES + HAVE_COHERENT_LOCKFILES + HAVE_QNX_LOCKFILES == 0
+#ifdef __QNX__
+#undef HAVE_QNX_LOCKFILES
+#define HAVE_QNX_LOCKFILES 1
+#else /* ! defined (__QNX__) */
+#ifdef __COHERENT__
+#undef HAVE_COHERENT_LOCKFILES
+#define HAVE_COHERENT_LOCKFILES 1
+#else /* ! defined (__COHERENT__) */
+#ifdef _SEQUENT_
+#undef HAVE_SEQUENT_LOCKFILES
+#define HAVE_SEQUENT_LOCKFILES 1
+#else /* ! defined (_SEQUENT) */
+#ifdef sco
+#undef HAVE_SCO_LOCKFILES
+#define HAVE_SCO_LOCKFILES 1
+#else /* ! defined (sco) */
+#ifdef __svr4__
+#undef HAVE_SVR4_LOCKFILES
+#define HAVE_SVR4_LOCKFILES 1
+#else /* ! defined (__svr4__) */
+/* Final default is HDB. There's no way to tell V2 from HDB. */
+#undef HAVE_HDB_LOCKFILES
+#define HAVE_HDB_LOCKFILES 1
+#endif /* ! defined (__svr4__) */
+#endif /* ! defined (sco) */
+#endif /* ! defined (_SEQUENT) */
+#endif /* ! defined (__COHERENT__) */
+#endif /* ! defined (__QNX__) */
+#endif /* no LOCKFILES define */
/* If your system supports Internet mail addresses (which look like
user@host.domain rather than system!user), HAVE_INTERNET_MAIL
- should be set to 1. This is checked by uuxqt when sending error
- (or success, if requested) notifications to the person who
- submitted the job. */
+ should be set to 1. This is checked by uuxqt and uustat when
+ sending notifications to the person who submitted the job.
+
+ If your system does not understand addresses of the form user@host,
+ you must set HAVE_INTERNET_MAIL to 0.
+
+ If your system does not understand addresses of the form host!user,
+ which is unlikely, you must set HAVE_INTERNET_MAIL to 1.
+
+ If your system sends mail addressed to "A!B@C" to host C (i.e., it
+ parses the address as "(A!B)@C"), you must set HAVE_INTERNET_MAIL
+ to 1.
+
+ If your system sends mail addressed to "A!B@C" to host A (i.e., it
+ parses the address as "A!(B@C)"), you must set HAVE_INTERNET_MAIL
+ to 0.
+
+ Note that in general it is best to avoid addresses of the form
+ "A!B@C" because of this ambiguity of precedence. UUCP will not
+ intentionally generate addresses of this form, but it can occur in
+ certain rather complex cases. */
#define HAVE_INTERNET_MAIL 1
/* Adminstrative decisions. */
@@ -303,6 +425,16 @@
file size will be very helpful. */
#define DEBUG 2
+/* Set HAVE_ENCRYPTED_PASSWORDS to 1 if you want login passwords to be
+ encrypted before comparing them against the values in the file.
+ This only applies when uucico is run with the -l or -e switches and
+ is doing its own login prompting. Note that the passwords used are
+ from the UUCP password file, not the system /etc/passwd file. See
+ the documentation for further details. If you set this, you are
+ responsible for encrypting the passwords in the UUCP password file.
+ The function crypt will be used to do comparisons. */
+#define HAVE_ENCRYPTED_PASSWORDS 0
+
/* Set the default grade to use for a uucp command if the -g option is
not used. The grades, from highest to lowest, are 0 to 9, A to Z,
a to z. */
@@ -327,8 +459,8 @@
When looking something up (a system, a port, etc.) the new style
configuration files will be read first, followed by the V2
configuration files, followed by the HDB configuration files. */
-#define HAVE_V2_CONFIG 1
-#define HAVE_HDB_CONFIG 1
+#define HAVE_V2_CONFIG 0
+#define HAVE_HDB_CONFIG 0
/* Exactly one of the following macros must be set to 1. The exact
format of the spool directories is explained in unix/spool.c.
@@ -351,6 +483,15 @@
#define SPOOLDIR_SVR4 0
#define SPOOLDIR_TAYLOR 1
+/* The status file generated by UUCP can use either the traditional
+ HDB upper case comments or new easier to read lower case comments.
+ This affects the display of uustat -m or uustat -q. Some
+ third-party programs read these status files and expect them to be
+ in a certain format. The default is to use the traditional
+ comments when using an HDB or SVR4 spool directory, and to use
+ lower case comments otherwise. */
+#define USE_TRADITIONAL_STATUS (SPOOLDIR_HDB || SPOOLDIR_SVR4)
+
/* You must select which type of logging you want by setting exactly
one of the following to 1. These control output to the log file
and to the statistics file.
@@ -392,6 +533,27 @@
#define HAVE_V2_LOGGING 0
#define HAVE_HDB_LOGGING 0
+/* If QNX_LOG_NODE_ID is set to 1, log messages will include the QNX
+ node ID just after the process ID. This is a policy decision
+ because it changes the log file entry format, which can break other
+ programs (e.g., some of the ones in the contrib directory) which
+ expect to read the standard log file format. */
+#ifdef __QNX__
+#define QNX_LOG_NODE_ID 1
+#else
+#define QNX_LOG_NODE_ID 0
+#endif
+
+/* If LOG_DEVICE_PREFIX is 1, log messages will give the full
+ pathname of a device rather than just the final component. This is
+ important because on QNX //2/dev/ser2 refers to a different device
+ than //4/dev/ser2. */
+#ifdef __QNX__
+#define LOG_DEVICE_PREFIX 1
+#else
+#define LOG_DEVICE_PREFIX 0
+#endif
+
/* If you would like the log, debugging and statistics files to be
closed after each message, set CLOSE_LOGFILES to 1. This will
permit the log files to be easily moved. If a log file does not
@@ -403,6 +565,7 @@
/* The name of the default spool directory. If HAVE_TAYLOR_CONFIG is
set to 1, this may be overridden by the ``spool'' command in the
configuration file. */
+/* #define SPOOLDIR "/usr/spool/uucp" */
#define SPOOLDIR "/var/spool/uucp"
/* The name of the default public directory. If HAVE_TAYLOR_CONFIG is
@@ -410,6 +573,7 @@
configuration file. Also, a particular system may be given a
specific public directory by using the ``pubdir'' command in the
system file. */
+/* #define PUBDIR "/usr/spool/uucppublic" */
#define PUBDIR "/var/spool/uucppublic"
/* The default command path. This is a space separated list of
@@ -464,16 +628,19 @@
/* The default log file when using HAVE_TAYLOR_LOGGING. When using
HAVE_TAYLOR_CONFIG, this may be overridden by the ``logfile''
command in the configuration file. */
+/* #define LOGFILE "/usr/spool/uucp/Log" */
#define LOGFILE "/var/spool/uucp/Log"
/* The default statistics file when using HAVE_TAYLOR_LOGGING. When
using HAVE_TAYLOR_CONFIG, this may be overridden by the
``statfile'' command in the configuration file. */
+/* #define STATFILE "/usr/spool/uucp/Stats" */
#define STATFILE "/var/spool/uucp/Stats"
/* The default debugging file when using HAVE_TAYLOR_LOGGING. When
using HAVE_TAYLOR_CONFIG, this may be overridden by the
``debugfile'' command in the configuration file. */
+/* #define DEBUGFILE "/usr/spool/uucp/Debug" */
#define DEBUGFILE "/var/spool/uucp/Debug"
#endif /* HAVE_TAYLOR_LOGGING */
@@ -483,17 +650,17 @@
/* The default log file when using HAVE_V2_LOGGING. When using
HAVE_TAYLOR_CONFIG, this may be overridden by the ``logfile''
command in the configuration file. */
-#define LOGFILE "/var/spool/uucp/LOGFILE"
+#define LOGFILE "/usr/spool/uucp/LOGFILE"
/* The default statistics file when using HAVE_V2_LOGGING. When using
HAVE_TAYLOR_CONFIG, this may be overridden by the ``statfile''
command in the configuration file. */
-#define STATFILE "/var/spool/uucp/SYSLOG"
+#define STATFILE "/usr/spool/uucp/SYSLOG"
/* The default debugging file when using HAVE_V2_LOGGING. When using
HAVE_TAYLOR_CONFIG, this may be overridden by the ``debugfile''
command in the configuration file. */
-#define DEBUGFILE "/var/spool/uucp/DEBUG"
+#define DEBUGFILE "/usr/spool/uucp/DEBUG"
#endif /* HAVE_V2_LOGGING */
@@ -506,16 +673,16 @@
be replaced by the system name (if there is no appropriate system,
"ANY" will be used). No other '%' character may appear in the
string. */
-#define LOGFILE "/var/spool/uucp/.Log/%s/%s"
+#define LOGFILE "/usr/spool/uucp/.Log/%s/%s"
/* The default statistics file when using HAVE_HDB_LOGGING. When using
HAVE_TAYLOR_CONFIG, this may be overridden by the ``statfile''
command in the configuration file. */
-#define STATFILE "/var/spool/uucp/.Admin/xferstats"
+#define STATFILE "/usr/spool/uucp/.Admin/xferstats"
/* The default debugging file when using HAVE_HDB_LOGGING. When using
HAVE_TAYLOR_CONFIG, this may be overridden by the ``debugfile''
command in the configuration file. */
-#define DEBUGFILE "/var/spool/uucp/.Admin/audit.local"
+#define DEBUGFILE "/usr/spool/uucp/.Admin/audit.local"
#endif /* HAVE_HDB_LOGGING */
diff --git a/gnu/libexec/uucp/common_sources/prot.c b/gnu/libexec/uucp/common_sources/prot.c
index 433bf2766829..067ac1f52ff1 100644
--- a/gnu/libexec/uucp/common_sources/prot.c
+++ b/gnu/libexec/uucp/common_sources/prot.c
@@ -1,7 +1,7 @@
/* prot.c
Protocol support routines to move commands and data around.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1994 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,18 +20,19 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#include "uucp.h"
#if USE_RCS_ID
-const char prot_rcsid[] = "$Id: prot.c,v 1.1 1993/08/05 18:22:41 conklin Exp $";
+const char prot_rcsid[] = "$Id: prot.c,v 1.2 1994/05/07 18:08:51 ache Exp $";
#endif
#include <errno.h>
#include "uudefs.h"
+#include "uuconf.h"
#include "system.h"
#include "conn.h"
#include "prot.h"
@@ -76,6 +77,9 @@ fsend_data (qconn, zsend, csend, fdoread)
--crec;
}
+ if (crec == 0)
+ return fconn_write (qconn, zsend, csend);
+
csent = csend;
if (! fconn_io (qconn, zsend, &csent, abPrecbuf + iPrecend, &crec))
diff --git a/gnu/libexec/uucp/common_sources/prot.h b/gnu/libexec/uucp/common_sources/prot.h
index 4e2bb584d842..07dc6203f426 100644
--- a/gnu/libexec/uucp/common_sources/prot.h
+++ b/gnu/libexec/uucp/common_sources/prot.h
@@ -1,7 +1,7 @@
/* prot.h
Protocol header file.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,7 +20,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
/* We need the definition of uuconf_cmdtab to declare the protocol
@@ -49,6 +49,8 @@ struct sprotocol
int ireliable;
/* The maximum number of channels this protocol can support. */
int cchans;
+ /* Whether files may be reliably restarted using this protocol. */
+ boolean frestart;
/* Protocol parameter commands. */
struct uuconf_cmdtab *qcmds;
/* A routine to start the protocol. If *pzlog is set to be
@@ -163,6 +165,7 @@ extern boolean fijstart P((struct sdaemon *qdaemon, char **pzlog,
extern struct uuconf_cmdtab asGproto_params[];
extern boolean fgstart P((struct sdaemon *qdaemon, char **pzlog));
extern boolean fbiggstart P((struct sdaemon *qdaemon, char **pzlog));
+extern boolean fvstart P((struct sdaemon *qdaemon, char **pzlog));
extern boolean fgshutdown P((struct sdaemon *qdaemon));
extern boolean fgsendcmd P((struct sdaemon *qdaemon, const char *z,
int ilocal, int iremote));
diff --git a/gnu/libexec/uucp/common_sources/sysdep.h b/gnu/libexec/uucp/common_sources/sysdep.h
index 47675ac2385d..41dcecdf9277 100644
--- a/gnu/libexec/uucp/common_sources/sysdep.h
+++ b/gnu/libexec/uucp/common_sources/sysdep.h
@@ -1,7 +1,7 @@
/* sysh.unx -*- C -*-
The header file for the UNIX system dependent routines.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,7 +20,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#ifndef SYSH_UNX_H
@@ -34,14 +34,9 @@ struct uuconf_system;
struct sconnection;
#endif
-/* Make sure the defines do not conflict. These are in this file
- because they are Unix dependent. */
-#if HAVE_V2_LOCKFILES + HAVE_HDB_LOCKFILES + HAVE_SCO_LOCKFILES + HAVE_SVR4_LOCKFILES + HAVE_COHERENT_LOCKFILES != 1
- #error LOCKFILES define not set or duplicated
-#endif
-
-/* SCO and SVR4 lockfiles are basically just like HDB lockfiles. */
-#if HAVE_SCO_LOCKFILES || HAVE_SVR4_LOCKFILES
+/* SCO, SVR4 and Sequent lockfiles are basically just like HDB
+ lockfiles. */
+#if HAVE_SCO_LOCKFILES || HAVE_SVR4_LOCKFILES || HAVE_SEQUENT_LOCKFILES
#undef HAVE_HDB_LOCKFILES
#define HAVE_HDB_LOCKFILES 1
#endif
@@ -230,6 +225,9 @@ typedef struct termios sterminal;
failed. */
#define PRESERVEDIR ".Preserve"
+/* The name of the directory to which we move corrupt files. */
+#define CORRUPTDIR ".Corrupt"
+
/* The length of the sequence number used in a file name. */
#define CSEQLEN (4)
@@ -284,6 +282,10 @@ typedef struct termios sterminal;
#define S_IXOTH 0001
#endif
+#if STAT_MACROS_BROKEN
+#undef S_ISDIR
+#endif
+
#ifndef S_ISDIR
#ifdef S_IFDIR
#define S_ISDIR(i) (((i) & S_IFMT) == S_IFDIR)
@@ -351,12 +353,16 @@ struct ssysdep_conn
{
/* File descriptor. */
int o;
+ /* File descriptor to read from (used by stdin and pipe port types). */
+ int ord;
+ /* File descriptor to write to (used by stdin and pipe port types). */
+ int owr;
/* Device name. */
char *zdevice;
/* File status flags. */
int iflags;
- /* File status flags for descriptor 1 (-1 if not standard input). */
- int istdout_flags;
+ /* File status flags for write descriptor (-1 if not used). */
+ int iwr_flags;
/* Hold the real descriptor when using a dialer device. */
int ohold;
/* TRUE if this is a terminal and the remaining fields are valid. */
@@ -369,6 +375,9 @@ struct ssysdep_conn
sterminal sorig;
/* Current terminal settings. */
sterminal snew;
+ /* Process ID of currently executing pipe command, or parent process
+ of forked TCP or TLI server, or -1. */
+ pid_t ipid;
#if HAVE_COHERENT_LOCKFILES
/* On Coherent we need to hold on to the real port name which will
be used to enable the port. Ick. */
@@ -428,6 +437,19 @@ extern FILE *espopen P((const char **pazargs, boolean frd,
prototype. */
extern int ixswait P((unsigned long ipid, const char *zreport));
+/* Read from a connection using two file descriptors. */
+extern boolean fsdouble_read P((struct sconnection *qconn, char *zbuf,
+ size_t *pclen, size_t cmin, int ctimeout,
+ boolean freport));
+
+/* Write to a connection using two file descriptors. */
+extern boolean fsdouble_write P((struct sconnection *qconn,
+ const char *zbuf, size_t clen));
+
+/* Run a chat program on a connection using two file descriptors. */
+extern boolean fsdouble_chat P((struct sconnection *qconn,
+ char **pzprog));
+
/* Find a spool file in the spool directory. For a local file, the
bgrade argument is the grade of the file. This is needed for
SPOOLDIR_SVR4. */
@@ -435,7 +457,7 @@ extern char *zsfind_file P((const char *zsimple, const char *zsystem,
int bgrade));
/* Return the grade given a sequence number. */
-extern char bsgrade P((pointer pseq));
+extern int bsgrade P((pointer pseq));
/* Lock a string. */
extern boolean fsdo_lock P((const char *, boolean fspooldir,
@@ -493,7 +515,7 @@ extern int dup2 P((int oold, int onew));
#if ! HAVE_FTW
extern int ftw P((const char *zdir,
int (*pfn) P((const char *zfile,
- const struct stat *qstat,
+ struct stat *qstat,
int iflag)),
int cdescriptors));
#endif
diff --git a/gnu/libexec/uucp/common_sources/system.h b/gnu/libexec/uucp/common_sources/system.h
index aa9d2a41a45a..9765edf17a49 100644
--- a/gnu/libexec/uucp/common_sources/system.h
+++ b/gnu/libexec/uucp/common_sources/system.h
@@ -2,7 +2,7 @@
Header file for system dependent stuff in the Taylor UUCP package.
This file is not itself system dependent.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -21,7 +21,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#ifndef SYSTEM_H
@@ -73,6 +73,11 @@ extern size_t cSysdep_max_name_len;
means, on Unix, this program is normally installed setuid. */
#define INIT_SUID (04)
+/* Do not close all open descriptors. This is not used by the UUCP
+ code, but it is used by other programs which share some of the
+ system dependent libraries. */
+#define INIT_NOCLOSE (010)
+
extern void usysdep_initialize P((pointer puuconf, int iflags));
/* Exit the program. The fsuccess argument indicates whether to
@@ -172,9 +177,13 @@ extern const char *zsysdep_port_name P((boolean *pftcp_port));
desirable on other systems. This should always return an absolute
path name, probably in the public directory. It should return NULL
on error; otherwise the return value should be allocated using
- zbufcpy or zbufalc. */
+ zbufcpy or zbufalc. If pfbadname is not NULL, then if the function
+ returns NULL *pfbadname should be set to TRUE if the error is just
+ that the file name is badly specified; *pfbadname should be set to
+ FALSE for some sort of internal error. */
extern char *zsysdep_local_file P((const char *zname,
- const char *zpubdir));
+ const char *zpubdir,
+ boolean *pfbadname));
/* Return whether a file name is in a directory, and check for read or
write access. This should check whether zfile is within zdir (or
@@ -201,17 +210,16 @@ extern boolean fsysdep_in_directory P((const char *zfile,
return error. */
extern boolean fsysdep_file_exists P((const char *zfile));
-/* Start up a program. The code expects fsysdep_run to return after
- doing a fork, but at least for now everything will work fine if it
- does not (on a system which does not support forking). The three
- string arguments may be catenated together to form the program to
- execute; I did it this way to make it easy to call execl(2), and
- because I never needed more than two arguments. The program will
- always be "uucico" or "uuxqt". The return value will be passed
- directly to usysdep_exit, and should be TRUE on success, FALSE on
+/* Start up a program. If the ffork argument is true, this should
+ spawn a new process and return. If the ffork argument is false,
+ this may either return or not. The three string arguments may be
+ catenated together to form the program to execute; I did it this
+ way to make it easy to call execl(2), and because I never needed
+ more than two arguments. The program will always be "uucico" or
+ "uuxqt". The return value should be TRUE on success, FALSE on
error. */
-extern boolean fsysdep_run P((const char *zprogram, const char *zarg1,
- const char *zarg2));
+extern boolean fsysdep_run P((boolean ffork, const char *zprogram,
+ const char *zarg1, const char *zarg2));
/* Send a mail message. This function will be passed an array of
strings. All necessary newlines are already included; the strings
@@ -329,6 +337,12 @@ extern boolean fsysdep_did_work P((pointer pseq));
the file. */
extern const char *zsysdep_save_temp_file P((pointer pseq));
+/* Save a file in a location used to hold corrupt files. This is
+ called if a bad execution file is found by uuxqt. This should
+ return the new name of the file (allocated by zbufalc), or NULL if
+ the move failed (in which the original file should remain). */
+extern char *zsysdep_save_corrupt_file P((const char *zfile));
+
/* Cleanup anything left over by fsysdep_get_work_init and
fsysdep_get_work. This may be called even though
fsysdep_get_work_init has not been. */
@@ -397,23 +411,27 @@ extern openfile_t esysdep_open_send P((const struct uuconf_system *qsys,
/* Return a temporary file name to receive into. This file will be
opened by esysdep_open_receive. The qsys argument is the system
the file is coming from, the zto argument is the name the file will
- have after it has been fully received, and the ztemp argument, if
- it is not NULL, is from the command sent by the remote system. The
- return value must be freed using ubuffree. The function should
- return NULL on error. */
+ have after it has been fully received, the ztemp argument, if it is
+ not NULL, is from the command sent by the remote system, and the
+ frestart argument is TRUE if the protocol and remote system permit
+ file transfers to be restarted. The return value must be freed
+ using ubuffree. The function should return NULL on error. */
extern char *zsysdep_receive_temp P((const struct uuconf_system *qsys,
const char *zfile,
- const char *ztemp));
+ const char *ztemp,
+ boolean frestart));
/* Open a file to receive from another system. The zreceive argument
is the return value of zsysdep_receive_temp with the same qsys,
zfile and ztemp arguments. If the function can determine that this
file has already been partially received, it should set *pcrestart
to the number of bytes that have been received. If the file has
- not been partially received, *pcrestart should be set to -1. The
- function should return EFILECLOSED on error. After the file is
- written, fsysdep_move_file will be called to move the file to its
- final destination, and to set the correct file mode. */
+ not been partially received, *pcrestart should be set to -1.
+ pcrestart will be passed in as NULL if file restart is not
+ supported by the protocol or the remote system. The function
+ should return EFILECLOSED on error. After the file is written,
+ fsysdep_move_file will be called to move the file to its final
+ destination, and to set the correct file mode. */
extern openfile_t esysdep_open_receive P((const struct uuconf_system *qsys,
const char *zto,
const char *ztemp,
@@ -428,8 +446,8 @@ extern openfile_t esysdep_open_receive P((const struct uuconf_system *qsys,
this should make sure the directory is writeable by the user zuser
(if zuser is NULL, then it must be writeable by any user); this is
to avoid a window of vulnerability between fsysdep_in_directory and
- fsysdep_move_file. This function should return FALSE on error; the
- zorig file should be removed even if an error occurs. */
+ fsysdep_move_file. This function should return FALSE on error, in
+ which case the zorig file should still exist. */
extern boolean fsysdep_move_file P((const char *zorig, const char *zto,
boolean fmkdirs, boolean fpublic,
boolean fcheck, const char *zuser));
@@ -675,7 +693,8 @@ extern boolean fsysdep_move_uuxqt_files P((int cfiles,
started in rather than in the public directory. This should return
NULL on error. */
extern char *zsysdep_local_file_cwd P((const char *zname,
- const char *zpubdir));
+ const char *zpubdir,
+ boolean *pfbadname));
/* Add the working directory to a file name. The named file is
actually on a remote system. If the file already has a directory,
@@ -748,9 +767,11 @@ extern boolean usysdep_walk_tree P((const char *zdir,
extern char *zsysdep_jobid P((const struct uuconf_system *qsys,
pointer pseq));
-/* See whether the current user is permitted to kill jobs submitted by
- another user. This should return TRUE if permission is granted,
- FALSE otherwise. */
+/* See whether the current user is privileged. Privileged users are
+ permitted to kill jobs submitted by another user, and they are
+ permitted to use the -u argument to uucico; other uses of this call
+ may be added later. This should return TRUE if permission is
+ granted, FALSE otherwise. */
extern boolean fsysdep_privileged P((void));
/* Kill a job, given the jobid. This should remove all associated
@@ -778,6 +799,11 @@ extern long ixsysdep_work_time P((const struct uuconf_system *qsys,
value must use the same epoch as ixsysdep_time. */
extern long ixsysdep_file_time P((const char *zfile));
+/* Touch a file to make it appear as though it was created at the
+ current time. This is called by uustat on execution files. On
+ error this should log an error message and return FALSE. */
+extern boolean fsysdep_touch_file P((const char *zfile));
+
/* Get the size in bytes of a file. If this file does not exist, this
should not give an error message, but should return -1. If some
other error occurs, this should return -2. */
@@ -942,7 +968,8 @@ extern boolean fsysdep_uupick_free P((const char *zsystem,
zsysdep_local_file_cwd except that a file beginning with ~/ is
placed in the user's home directory rather than in the public
directory. */
-extern char *zsysdep_uupick_local_file P((const char *zfile));
+extern char *zsysdep_uupick_local_file P((const char *zfile,
+ boolean *pfbadname));
/* Remove a directory and all the files in it. */
extern boolean fsysdep_rmdir P((const char *zdir));
diff --git a/gnu/libexec/uucp/common_sources/tcp.c b/gnu/libexec/uucp/common_sources/tcp.c
index 543e9f0d8205..6c06eb639ab4 100644
--- a/gnu/libexec/uucp/common_sources/tcp.c
+++ b/gnu/libexec/uucp/common_sources/tcp.c
@@ -1,7 +1,7 @@
/* tcp.c
Code to handle TCP connections.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,13 +20,13 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#include "uucp.h"
#if USE_RCS_ID
-const char tcp_rcsid[] = "$Id: tcp.c,v 1.1 1993/08/05 18:22:46 conklin Exp $";
+const char tcp_rcsid[] = "$Id: tcp.c,v 1.2 1994/05/07 18:09:01 ache Exp $";
#endif
#if HAVE_TCP
@@ -72,7 +72,6 @@ static boolean ftcp_close P((struct sconnection *qconn,
pointer puuconf,
struct uuconf_dialer *qdialer,
boolean fsuccess));
-static boolean ftcp_reset P((struct sconnection *qconn));
static boolean ftcp_dial P((struct sconnection *qconn, pointer puuconf,
const struct uuconf_system *qsys,
const char *zphone,
@@ -88,7 +87,6 @@ static const struct sconncmds stcpcmds =
NULL, /* pfunlock */
ftcp_open,
ftcp_close,
- ftcp_reset,
ftcp_dial,
fsysdep_conn_read,
fsysdep_conn_write,
@@ -110,9 +108,11 @@ fsysdep_tcp_init (qconn)
q = (struct ssysdep_conn *) xmalloc (sizeof (struct ssysdep_conn));
q->o = -1;
+ q->ord = -1;
+ q->owr = -1;
q->zdevice = NULL;
q->iflags = -1;
- q->istdout_flags = -1;
+ q->iwr_flags = -1;
q->fterminal = FALSE;
q->ftli = FALSE;
q->ibaud = 0;
@@ -175,6 +175,10 @@ ftcp_open (qconn, ibaud, fwait)
return FALSE;
}
+ /* We save our process ID in the qconn structure. This is checked
+ in ftcp_close. */
+ qsysdep->ipid = getpid ();
+
/* If we aren't waiting for a connection, we're done. */
if (! fwait)
return TRUE;
@@ -347,23 +351,16 @@ ftcp_close (qconn, puuconf, qdialer, fsuccess)
fret = FALSE;
}
qsysdep->o = -1;
- return fret;
-}
-
-/* Reset the port. This will be called by a child which was forked
- off in ftcp_open, above. We don't want uucico to continue looping
- and giving login prompts, so we pretend that we received a SIGINT
- signal. This should probably be handled more cleanly. The signal
- will not be recorded in the log file because we don't set
- afLog_signal[INDEXSIG_SIGINT]. */
-/*ARGSUSED*/
-static boolean
-ftcp_reset (qconn)
- struct sconnection *qconn;
-{
- afSignal[INDEXSIG_SIGINT] = TRUE;
- return TRUE;
+ /* If the current pid is not the one we used to open the port, then
+ we must have forked up above and we are now the child. In this
+ case, we are being called from within the fendless loop in
+ uucico.c. We return FALSE to force the loop to end and the child
+ to exit. This should be handled in a cleaner fashion. */
+ if (qsysdep->ipid != getpid ())
+ fret = FALSE;
+
+ return fret;
}
/* Dial out on a TCP port, so to speak: connect to a remote computer. */
@@ -383,6 +380,7 @@ ftcp_dial (qconn, puuconf, qsys, zphone, qdialer, ptdialer)
struct hostent *q;
struct sockaddr_in s;
const char *zport;
+ char **pzdialer;
qsysdep = (struct ssysdep_conn *) qconn->psysdep;
@@ -411,9 +409,9 @@ ftcp_dial (qconn, puuconf, qsys, zphone, qdialer, ptdialer)
}
s.sin_family = q->h_addrtype;
+ memcpy (&s.sin_addr.s_addr, q->h_addr, (size_t) q->h_length);
zport = qconn->qport->uuconf_u.uuconf_stcp.uuconf_zport;
s.sin_port = itcp_port_number (zport);
- memcpy (&s.sin_addr.s_addr, q->h_addr, (size_t) q->h_length);
if (connect (qsysdep->o, (struct sockaddr *) &s, sizeof s) < 0)
{
@@ -421,6 +419,15 @@ ftcp_dial (qconn, puuconf, qsys, zphone, qdialer, ptdialer)
return FALSE;
}
+ /* Handle the dialer sequence, if any. */
+ pzdialer = qconn->qport->uuconf_u.uuconf_stcp.uuconf_pzdialer;
+ if (pzdialer != NULL && *pzdialer != NULL)
+ {
+ if (! fconn_dial_sequence (qconn, puuconf, pzdialer, qsys, zphone,
+ qdialer, ptdialer))
+ return FALSE;
+ }
+
return TRUE;
}
diff --git a/gnu/libexec/uucp/common_sources/tli.c b/gnu/libexec/uucp/common_sources/tli.c
index 9fffdcdfebd1..0b2ab5489fb1 100644
--- a/gnu/libexec/uucp/common_sources/tli.c
+++ b/gnu/libexec/uucp/common_sources/tli.c
@@ -1,7 +1,7 @@
/* tli.c
Code to handle TLI connections.
- Copyright (C) 1992 Ian Lance Taylor
+ Copyright (C) 1992, 1993, 1994 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,13 +20,13 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#include "uucp.h"
#if USE_RCS_ID
-const char tli_rcsid[] = "$Id: tli.c,v 1.1 1993/08/05 18:22:46 conklin Exp $";
+const char tli_rcsid[] = "$Id: tli.c,v 1.2 1994/05/07 18:09:03 ache Exp $";
#endif
#if HAVE_TLI
@@ -92,9 +92,11 @@ extern int t_errno;
extern char *t_errlist[];
extern int t_nerr;
+#ifndef HAVE_TIUSER_H
#ifndef t_alloc
extern pointer t_alloc ();
#endif
+#endif
/* This code handles TLI connections. It's Unix specific. It's
largely based on code from Unix Network Programming, by W. Richard
@@ -110,7 +112,6 @@ static boolean ftli_close P((struct sconnection *qconn,
pointer puuconf,
struct uuconf_dialer *qdialer,
boolean fsuccess));
-static boolean ftli_reset P((struct sconnection *qconn));
static boolean ftli_dial P((struct sconnection *qconn, pointer puuconf,
const struct uuconf_system *qsys,
const char *zphone,
@@ -125,7 +126,6 @@ static const struct sconncmds stlicmds =
NULL, /* pfunlock */
ftli_open,
ftli_close,
- ftli_reset,
ftli_dial,
fsysdep_conn_read,
fsysdep_conn_write,
@@ -149,7 +149,8 @@ ztlierror ()
return t_errlist[t_errno];
}
-/* Initialize a TLI connection. */
+/* Initialize a TLI connection. This may be called with qconn->qport
+ NULL, when opening standard input as a TLI connection. */
boolean
fsysdep_tli_init (qconn)
@@ -159,9 +160,11 @@ fsysdep_tli_init (qconn)
q = (struct ssysdep_conn *) xmalloc (sizeof (struct ssysdep_conn));
q->o = -1;
+ q->ord = -1;
+ q->owr = -1;
q->zdevice = NULL;
q->iflags = -1;
- q->istdout_flags = -1;
+ q->iwr_flags = -1;
q->fterminal = FALSE;
q->ftli = TRUE;
q->ibaud = 0;
@@ -295,6 +298,10 @@ ftli_open (qconn, ibaud, fwait)
return FALSE;
}
+ /* We save our process ID in the qconn structure. This is checked
+ in ftli_close. */
+ qsysdep->ipid = getpid ();
+
/* If we aren't waiting for a connection, we can bind to any local
address, and then we're finished. */
if (! fwait)
@@ -463,23 +470,15 @@ ftli_close (qconn, puuconf, qdialer, fsuccess)
qsysdep->o = -1;
}
- return fret;
-}
-
-/* Reset the port. This will be called by a child which was forked
- off in ftli_open, above. We don't want uucico to continue looping
- and giving login prompts, so we pretend that we received a SIGINT
- signal. This should probably be handled more cleanly. The signal
- will not be recorded in the log file because we don't set
- afLog_signal[INDEXSIG_SIGINT]. */
+ /* If the current pid is not the one we used to open the port, then
+ we must have forked up above and we are now the child. In this
+ case, we are being called from within the fendless loop in
+ uucico.c. We return FALSE to force the loop to end and the child
+ to exit. This should be handled in a cleaner fashion. */
+ if (qsysdep->ipid != getpid ())
+ fret = FALSE;
-/*ARGSUSED*/
-static boolean
-ftli_reset (qconn)
- struct sconnection *qconn;
-{
- afSignal[INDEXSIG_SIGINT] = TRUE;
- return TRUE;
+ return fret;
}
/* Dial out on a TLI port, so to speak: connect to a remote computer. */
@@ -569,73 +568,12 @@ ftli_dial (qconn, puuconf, qsys, zphone, qdialer, ptdialerfound)
if (! ftli_push (qconn))
return FALSE;
- /* Handle the rest of the dialer sequence. This is similar to
- fmodem_dial, and they should, perhaps, be combined somehow. */
- if (pzdialer != NULL)
+ /* Handle the rest of the dialer sequence. */
+ if (pzdialer != NULL && *pzdialer != NULL)
{
- boolean ffirst;
-
- ffirst = TRUE;
- while (*pzdialer != NULL)
- {
- int iuuconf;
- struct uuconf_dialer *q;
- struct uuconf_dialer s;
- const char *ztoken;
- boolean ftranslate;
-
- if (! ffirst)
- q = &s;
- else
- q = qdialer;
-
- iuuconf = uuconf_dialer_info (puuconf, *pzdialer, q);
- if (iuuconf == UUCONF_NOT_FOUND)
- {
- ulog (LOG_ERROR, "%s: Dialer not found", *pzdialer);
- return FALSE;
- }
- else if (iuuconf != UUCONF_SUCCESS)
- {
- ulog_uuconf (LOG_ERROR, puuconf, iuuconf);
- return FALSE;
- }
-
- ++pzdialer;
- ztoken = *pzdialer;
-
- ftranslate = FALSE;
- if (ztoken == NULL
- || strcmp (ztoken, "\\D") == 0)
- ztoken = zphone;
- else if (strcmp (ztoken, "\\T") == 0)
- {
- ztoken = zphone;
- ftranslate = TRUE;
- }
-
- if (! fchat (qconn, puuconf, &q->uuconf_schat,
- (const struct uuconf_system *) NULL, q,
- zphone, ftranslate, qconn->qport->uuconf_zname,
- (long) 0))
- {
- (void) uuconf_dialer_free (puuconf, q);
- if (! ffirst)
- (void) uuconf_dialer_free (puuconf, qdialer);
- return FALSE;
- }
-
- if (ffirst)
- {
- *ptdialerfound = DIALERFOUND_FREE;
- ffirst = FALSE;
- }
- else
- (void) uuconf_dialer_free (puuconf, q);
-
- if (*pzdialer != NULL)
- ++pzdialer;
- }
+ if (! fconn_dial_sequence (qconn, puuconf, pzdialer, qsys, zphone,
+ qdialer, ptdialerfound))
+ return FALSE;
}
return TRUE;
diff --git a/gnu/libexec/uucp/common_sources/trans.h b/gnu/libexec/uucp/common_sources/trans.h
index 79c380ea48d8..93aee2e9ac8f 100644
--- a/gnu/libexec/uucp/common_sources/trans.h
+++ b/gnu/libexec/uucp/common_sources/trans.h
@@ -1,7 +1,7 @@
/* trans.h
Header file for file and command transfer routines.
- Copyright (C) 1992 Ian Lance Taylor
+ Copyright (C) 1992, 1993, 1994 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,7 +20,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
/* The maximum possible number of channels. */
@@ -56,6 +56,10 @@ struct sdaemon
{
/* Global uuconf pointer. */
pointer puuconf;
+ /* Configuration file name argument (from -I option). */
+ const char *zconfig;
+ /* How often to spawn uuxqt (from uuconf_runuuxqt). */
+ int irunuuxqt;
/* Remote system information. */
const struct uuconf_system *qsys;
/* Local name being used. */
@@ -64,6 +68,8 @@ struct sdaemon
struct sconnection *qconn;
/* Protocol being used. */
const struct sprotocol *qproto;
+ /* Number of channels being used. */
+ int cchans;
/* The largest file size permitted for a local request. */
long clocal_size;
/* The largest file size permitted for a remote request. */
@@ -72,6 +78,13 @@ struct sdaemon
long cmax_ever;
/* The remote system ulimit. */
long cmax_receive;
+ /* Number of bytes sent. */
+ long csent;
+ /* Number of bytes received. */
+ long creceived;
+ /* Number of execution files received since the last time we spawned
+ uuxqt. */
+ long cxfiles_received;
/* Features supported by the remote side. */
int ifeatures;
/* TRUE if we should request the remote side to hang up. */
@@ -266,3 +279,10 @@ extern void usent_receive_ack P((struct sdaemon *qdaemon,
lost. */
extern void uwindow_acked P((struct sdaemon *qdaemon,
boolean fallacked));
+
+/* Spawn a uuxqt process. The ffork argument is passed to
+ fsysdep_run. If the zsys argument is not NULL, then -s zsys is
+ passed to uuxqt. The zconfig argument is the name of the
+ configuration file, from the -I option. */
+extern boolean fspawn_uuxqt P((boolean ffork, const char *zsys,
+ const char *zconfig));
diff --git a/gnu/libexec/uucp/common_sources/util.c b/gnu/libexec/uucp/common_sources/util.c
index 89b3caf1d446..2534665a4d1e 100644
--- a/gnu/libexec/uucp/common_sources/util.c
+++ b/gnu/libexec/uucp/common_sources/util.c
@@ -1,7 +1,7 @@
/* util.c
A couple of UUCP utility functions.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,13 +20,13 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#include "uucp.h"
#if USE_RCS_ID
-const char util_rcsid[] = "$Id: util.c,v 1.1 1993/08/05 18:22:48 conklin Exp $";
+const char util_rcsid[] = "$Id: util.c,v 1.2 1994/05/07 18:09:07 ache Exp $";
#endif
#include <ctype.h>
@@ -95,6 +95,46 @@ funknown_system (puuconf, zsystem, qsys)
return TRUE;
}
+/* Remove all occurrences of the local system name followed by an
+ exclamation point from the front of a string, returning the new
+ string. This is used by uucp and uux. */
+
+char *
+zremove_local_sys (qlocalsys, z)
+ struct uuconf_system *qlocalsys;
+ char *z;
+{
+ size_t clen;
+ char *zexclam;
+
+ clen = strlen (qlocalsys->uuconf_zname);
+ zexclam = strchr (z, '!');
+ while (zexclam != NULL)
+ {
+ if (z == zexclam
+ || (zexclam - z == clen
+ && strncmp (z, qlocalsys->uuconf_zname, clen) == 0))
+ ;
+ else if (qlocalsys->uuconf_pzalias == NULL)
+ break;
+ else
+ {
+ char **pzal;
+
+ for (pzal = qlocalsys->uuconf_pzalias; *pzal != NULL; pzal++)
+ if (strlen (*pzal) == zexclam - z
+ && strncmp (z, *pzal, (size_t) (zexclam - z)) == 0)
+ break;
+ if (*pzal == NULL)
+ break;
+ }
+ z = zexclam + 1;
+ zexclam = strchr (z, '!');
+ }
+
+ return z;
+}
+
/* See whether a file is in a directory list, and make sure the user
has appropriate access. */
@@ -118,7 +158,7 @@ fin_directory_list (zfile, pzdirs, zpubdir, fcheck, freadable, zuser)
if (pz[0][0] == '!')
{
- zuse = zsysdep_local_file (*pz + 1, zpubdir);
+ zuse = zsysdep_local_file (*pz + 1, zpubdir, (boolean *) NULL);
if (zuse == NULL)
return FALSE;
@@ -128,7 +168,7 @@ fin_directory_list (zfile, pzdirs, zpubdir, fcheck, freadable, zuser)
}
else
{
- zuse = zsysdep_local_file (*pz, zpubdir);
+ zuse = zsysdep_local_file (*pz, zpubdir, (boolean *) NULL);
if (zuse == NULL)
return FALSE;
diff --git a/gnu/libexec/uucp/common_sources/uuconf.h b/gnu/libexec/uucp/common_sources/uuconf.h
index 4bf6bccbf3f2..1710568d499a 100644
--- a/gnu/libexec/uucp/common_sources/uuconf.h
+++ b/gnu/libexec/uucp/common_sources/uuconf.h
@@ -1,7 +1,7 @@
/* uuconf.h
Header file for UUCP configuration routines.
- Copyright (C) 1992 Ian Lance Taylor
+ Copyright (C) 1992, 1993, 1994 Ian Lance Taylor
This file is part of the Taylor UUCP uuconf library.
@@ -26,7 +26,7 @@
informative, and does not modify the License in any way).
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#ifndef UUCONF_H
@@ -348,7 +348,9 @@ enum uuconf_porttype
/* A TCP port. Not supported on all systems. */
UUCONF_PORTTYPE_TCP,
/* A TLI port. Not supported on all systems. */
- UUCONF_PORTTYPE_TLI
+ UUCONF_PORTTYPE_TLI,
+ /* A pipe port. Not supported on all systems. */
+ UUCONF_PORTTYPE_PIPE
};
/* Additional information for a stdin port (there is none). */
@@ -377,6 +379,8 @@ struct uuconf_modem_port
long uuconf_ihighbaud;
/* Non-zero if the port supports carrier detect. */
int uuconf_fcarrier;
+ /* Non-zero if the port supports hardware flow control. */
+ int uuconf_fhardflow;
/* A NULL terminated sequence of dialer/token pairs (element 0 is a
dialer name, element 1 is a token, etc.) May be NULL, in which
case qdialer should not be NULL. */
@@ -394,6 +398,10 @@ struct uuconf_direct_port
char *uuconf_zdevice;
/* The baud rate (speed). */
long uuconf_ibaud;
+ /* Non-zero if the port uses carrier detect. */
+ int uuconf_fcarrier;
+ /* Non-zero if the port supports hardware flow control. */
+ int uuconf_fhardflow;
};
/* Additional information for a TCP port. */
@@ -403,6 +411,9 @@ struct uuconf_tcp_port
/* The TCP port number to use. May be a name or a number. May be
NULL, in which case "uucp" is looked up using getservbyname. */
char *uuconf_zport;
+ /* A NULL terminated sequence of dialer/token pairs (element 0 is a
+ dialer name, element 1 is a token, etc.) May be NULL. */
+ char **uuconf_pzdialer;
};
/* Additional information for a TLI port. */
@@ -431,6 +442,14 @@ struct uuconf_tli_port
char *uuconf_zservaddr;
};
+/* Additional information for a pipe port. */
+
+struct uuconf_pipe_port
+{
+ /* The command and its arguments. */
+ char **uuconf_pzcmd;
+};
+
/* Information kept for a port. */
struct uuconf_port
@@ -460,6 +479,7 @@ struct uuconf_port
struct uuconf_direct_port uuconf_sdirect;
struct uuconf_tcp_port uuconf_stcp;
struct uuconf_tli_port uuconf_stli;
+ struct uuconf_pipe_port uuconf_spipe;
} uuconf_u;
};
@@ -545,6 +565,13 @@ struct uuconf_dialer
be b1 - b2. */
#define UUCONF_GRADE_CMP(b1, b2) (uuconf_grade_cmp ((b1), (b2)))
+/* uuconf_runuuxqt returns either a positive number (the number of
+ execution files to receive between uuxqt invocations) or one of
+ these constant values. */
+#define UUCONF_RUNUUXQT_NEVER (0)
+#define UUCONF_RUNUUXQT_ONCE (-1)
+#define UUCONF_RUNUUXQT_PERCALL (-2)
+
/* Most of the uuconf functions returns an error code. A value of
zero (UUCONF_SUCCESS) indicates success. */
@@ -849,15 +876,29 @@ extern int uuconf_debuglevel (void *uuconf_pglobal,
extern int uuconf_maxuuxqts (void *uuconf_pglobal,
int *uuconf_pcmaxuuxqt);
+/* Get the frequency with which to spawn a uuxqt process. This
+ returns an integer. A positive number is the number of execution
+ files that should be received between spawns. Other values are one
+ of the UUCONF_RUNUUXQT constants listed above. */
+extern int uuconf_runuuxqt (void *uuconf_pglobal,
+ int *uuconf_pirunuuxqt);
+
/* Check a login name and password. This checks the Taylor UUCP
password file (not /etc/passwd). It will work even if
- uuconf_taylor_init was not called. If the login name exists and
- the password is correct, this returns UUCONF_SUCCESS. If the login
- does not exist, or the password is wrong, this returns
- UUCONF_NOT_FOUND. Other errors are also possible. */
+ uuconf_taylor_init was not called. All comparisons are done via a
+ callback function. The first argument to the function will be zero
+ when comparing login names, non-zero when comparing passwords. The
+ second argument to the function will be the pinfo argument passed
+ to uuconf_callin. The third argument will be the login name or
+ password from the UUCP password file. The comparison function
+ should return non-zero for a match, or zero for a non-match. If
+ the login name is found and the password compares correctly,
+ uuconf_callin will return UUCONF_SUCCESS. If the login is not
+ found, or the password does not compare correctly, uuconf_callin
+ will return UUCONF_NOT_FOUND. Other errors are also possible. */
extern int uuconf_callin (void *uuconf_pglobal,
- const char *uuconf_zlogin,
- const char *uuconf_zpassword);
+ int (*uuconf_cmp) (int, void *, const char *),
+ void *uuconf_pinfo);
/* Get the callout login name and password for a system. This will
set both *pzlog and *pzpass to a string allocated by malloc, or to
@@ -922,6 +963,7 @@ extern int uuconf_statsfile ();
extern int uuconf_debugfile ();
extern int uuconf_debuglevel ();
extern int uuconf_maxuuxqts ();
+extern int uuconf_runuuxqt ();
extern int uuconf_callin ();
extern int uuconf_callout ();
extern int uuconf_remote_unknown ();
diff --git a/gnu/libexec/uucp/common_sources/uucp.h b/gnu/libexec/uucp/common_sources/uucp.h
index 8df3ec4c3e79..5faa63c120b6 100644
--- a/gnu/libexec/uucp/common_sources/uucp.h
+++ b/gnu/libexec/uucp/common_sources/uucp.h
@@ -1,7 +1,7 @@
/* uucp.h
Header file for the UUCP package.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,11 +20,11 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
/* Get the system configuration parameters. */
-#include "conf.h"
+#include "config.h"
#include "policy.h"
/* Get a definition for ANSI_C if we weren't given one. */
@@ -41,11 +41,11 @@
/* We always include some standard header files. We need <signal.h>
to define sig_atomic_t. */
+#include <stdio.h>
+#include <signal.h>
#if HAVE_STDDEF_H
#include <stddef.h>
#endif
-#include <stdio.h>
-#include <signal.h>
/* On some systems we need <sys/types.h> to get sig_atomic_t or
size_t or time_t. */
@@ -103,21 +103,24 @@ typedef long time_t;
constpointer -- for a generic pointer to constant data.
BUCHAR -- to convert a character to unsigned. */
#if ANSI_C
-#if ! HAVE_VOID || ! HAVE_UNSIGNED_CHAR
- #error ANSI C compiler without void or unsigned char
+#if ! HAVE_VOID || ! HAVE_UNSIGNED_CHAR || ! HAVE_PROTOTYPES
+ #error ANSI C compiler without void or unsigned char or prototypes
#endif
#define P(x) x
typedef void *pointer;
typedef const void *constpointer;
#define BUCHAR(b) ((unsigned char) (b))
#else /* ! ANSI_C */
-/* Handle uses of const, volatile and void in Classic C. */
-#define const
+/* Handle uses of volatile and void in Classic C. */
#define volatile
#if ! HAVE_VOID
#define void int
#endif
+#if HAVE_PROTOTYPES
+#define P(x) x
+#else
#define P(x) ()
+#endif
typedef char *pointer;
typedef const char *constpointer;
#if HAVE_UNSIGNED_CHAR
@@ -169,6 +172,7 @@ extern pointer memcpy (), memchr ();
#else /* ! HAVE_STDLIB_H */
extern pointer malloc (), realloc (), bsearch ();
extern long strtol ();
+extern unsigned long strtoul ();
extern char *getenv ();
#endif /* ! HAVE_STDLIB_H */
@@ -225,6 +229,11 @@ typedef FILE *openfile_t;
#define ffileseek(e, i) (fseek ((e), (long) (i), 0) == 0)
#define ffilerewind(e) (fseek ((e), (long) 0, 0) == 0)
#endif
+#ifdef SEEK_END
+#define ffileseekend(e) (fseek ((e), (long) 0, SEEK_END) == 0)
+#else
+#define ffileseekend(e) (fseek ((e), (long) 0, 2) == 0)
+#endif
#define ffileclose(e) (fclose (e) == 0)
#else /* ! USE_STDIO */
@@ -247,6 +256,11 @@ typedef int openfile_t;
#define ffileseek(e, i) (lseek ((e), (long) i, 0) >= 0)
#define ffilerewind(e) (lseek ((e), (long) 0, 0) >= 0)
#endif
+#ifdef SEEK_END
+#define ffileseekend(e) (lseek ((e), (long) 0, SEEK_END) >= 0)
+#else
+#define ffileseekend(e) (lseek ((e), (long) 0, 2) >= 0)
+#endif
#define ffileclose(e) (close (e) >= 0)
#endif /* ! USE_STDIO */
@@ -359,6 +373,11 @@ extern char *strrchr P((const char *z, int b));
extern long strtol P((const char *, char **, int));
#endif
+/* Turn a string into a long unsigned integer. */
+#if ! HAVE_STRTOUL
+extern unsigned long strtoul P((const char *, char **, int));
+#endif
+
/* Lookup a key in a sorted array. */
#if ! HAVE_BSEARCH
extern pointer bsearch P((constpointer pkey, constpointer parray,
diff --git a/gnu/libexec/uucp/common_sources/uudefs.h b/gnu/libexec/uucp/common_sources/uudefs.h
index 47d2c89896ef..f957ee636c16 100644
--- a/gnu/libexec/uucp/common_sources/uudefs.h
+++ b/gnu/libexec/uucp/common_sources/uudefs.h
@@ -1,7 +1,7 @@
/* uudefs.h
Miscellaneous definitions for the UUCP package.
- Copyright (C) 1991, 1992 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,7 +20,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#if ANSI_C
@@ -106,8 +106,8 @@ struct scmd
simple execution, 'H' for hangup, 'Y' for hangup confirm, 'N' for
hangup deny). */
char bcmd;
- /* At least one compiler needs an explicit padding byte here. */
- char bdummy;
+ /* Grade of the command ('\0' if from remote system). */
+ char bgrade;
/* Sequence handle for fsysdep_did_work. */
pointer pseq;
/* File name to transfer from. */
@@ -237,6 +237,12 @@ extern boolean fspool_file P((const char *zfile));
extern boolean ftimespan_match P((const struct uuconf_timespan *qspan,
long *pival, int *pcretry));
+/* Remove all occurrences of the local system name followed by an
+ exclamation point from the start of the argument. Return the
+ possibly shortened argument. */
+extern char *zremove_local_sys P((struct uuconf_system *qlocalsys,
+ char *z));
+
/* Determine the maximum size that may ever be transferred, given a
timesize span. If there are any time gaps larger than 1 hour not
described by the timesize span, this returns -1. Otherwise it
@@ -375,9 +381,8 @@ extern void xfree P((pointer));
/* Global variables. */
-/* The name of the program being run. This is statically initialized,
- although it should perhaps be set from argv[0]. */
-extern char abProgram[];
+/* The name of the program being run. Set from argv[0]. */
+extern const char *zProgram;
/* When a signal occurs, the signal handlers sets the appropriate
element of the arrays afSignal and afLog_signal to TRUE. The
@@ -427,12 +432,6 @@ extern boolean fLog_sighup;
(afSignal[INDEXSIG_SIGHUP] || afSignal[INDEXSIG_SIGQUIT] \
|| afSignal[INDEXSIG_SIGTERM] || afSignal[INDEXSIG_SIGPIPE])
-/* File being sent. */
-extern openfile_t eSendfile;
-
-/* File being received. */
-extern openfile_t eRecfile;
-
/* Device name to log. This is set by fconn_open. It may be NULL. */
extern char *zLdevice;
diff --git a/gnu/libexec/uucp/contrib/Makefile.uurt b/gnu/libexec/uucp/contrib/Makefile.uurt
index 235fcca889f8..39922d5cb319 100644
--- a/gnu/libexec/uucp/contrib/Makefile.uurt
+++ b/gnu/libexec/uucp/contrib/Makefile.uurt
@@ -1,30 +1,40 @@
+# $Id: Makefile.uurt,v 1.2 1994/05/07 18:09:19 ache Exp $
+# Makefile for uurate 1.10
#
-# Makefile for uurate 1.0
-#
+
+# Prefix directory for installation directories.
+prefix = /usr/local
+
+# Directory where the needed .h files are installed (uucp.h ...).
+uucpsrcs = ../
# Where uurate is installed
-BIN=/usr/local/bin
+BIN=$(prefix)/bin
+# Where uurate's man is installed
+MAN=$(prefix)/man/man1
+
+# The directory to look in for Taylor style configuration files
+newconfigdir = $(prefix)/conf/uucp
# Flags to use when compiling uurate
-CFLAGS=-I..
+CC=gcc -O2
+CFLAGS=-I.. -Wall
+LDFLAGS=-s
-CC=cc
SHELL=/bin/sh
PROGS=uurate
#-----------
+MORECFLAGS= -I. -I$(uucpsrcs) -DNEWCONFIGLIB=\"$(newconfigdir)\"
all: $(PROGS)
+uurate: uurate.c
+ $(CC) $(CFLAGS) $(MORECFLAGS) $@.c -o $@ $(LDFLAGS)
+
install: $(PROGS)
- @for i in $(PROGS) ; do \
- echo "Install $$i into $(BIN)..." ; \
- cp $$i $(BIN) ; \
- echo "Set ownership and protection..." ; \
- /bin/chmod 0555 $(BIN)/$$i ; \
- /bin/chown bin $(BIN)/$$i ; \
- /bin/chgrp bin $(BIN)/$$i ; \
- done
+ cp $(PROGS) $(BIN)
+ cp uurate.man $(MAN)/uurate.1
clean:
rm -f $(PROGS) core
diff --git a/gnu/libexec/uucp/contrib/README b/gnu/libexec/uucp/contrib/README
index c4105ed03868..8e4651a9bbd2 100644
--- a/gnu/libexec/uucp/contrib/README
+++ b/gnu/libexec/uucp/contrib/README
@@ -3,6 +3,11 @@ This is the README file for the Taylor UUCP contrib directory.
This directory contains contributed shell scripts and programs that
you may find useful.
+Not actually included here, but nonetheless useful, is the TUA program
+distributed by Lele Gaifax <lele@nautilus.sublink.org>. It can do
+various sorts of analysis of any type of UUCP log file. It should be
+available from most FTP sites.
+
xchat.c, xchat.man, README-XCHAT, xc-conf.h-dist, Makefile.xchat:
A program by Bob Denny that may be invoked by the ``chat-program''
command for any of the various types of chat scripts. It is
@@ -13,9 +18,16 @@ xchat.c, xchat.man, README-XCHAT, xc-conf.h-dist, Makefile.xchat:
Dial.Hayes, Hangup.Hayes, Login.LAT, Login.PortSel, Login.VMS:
Sample scripts for xchat.
+uucomp.shar
+ A set of programs which automatically compresses outgoing data in
+ the spool directory. The remote system must cooperate when using
+ this. It can cut down on phone usage when applicable.
+ Contributed by Ed Carp.
+
uurate.c, uurate.man, README-UURATE, Makefile.uurt:
A nifty little program by Bob Denny which analyzes the Log and
- Stats file and prints various sorts of reports.
+ Stats file and prints various sorts of reports. This version was
+ tweaked by Stephan Niemz and Klaus Dahlenburg.
uutraf:
Another program to produce neat reports from your log files, this
@@ -28,9 +40,10 @@ savelog.sh, savelog.man:
is originally from smail. It was written by Ronald S. Karr and
Landon Curt Noll, and was given to me by Bob Denny.
-uureroute:
- A perl script reroute all mail queued up for one host to another.
- Written by Bill Campbell and contributed by Francois Pinard.
+uureroute.perl:
+ A perl script to reroute all mail queued up for one host to
+ another. Written by Bill Campbell and contributed by Francois
+ Pinard.
stats.sh:
A gawk script by Zacharias Beckman which reads the Stats file and
@@ -39,6 +52,29 @@ stats.sh:
uuq.sh:
A uuq workalike shell script by Zacharias Beckman.
+uupoll.shar:
+ uupoll and autopoll programs contributed by Klaus Dahlenburg.
+ uupoll can be used to automatically poll all systems, or a list of
+ systems; autopoll will poll and then retry failed calls.
+
+uudemon.shar:
+ An implementation of the HDB uudemon.poll script by Donald Burr.
+
+uuxconv:
+ A program by Richard E. Nickle to help convert SPOOLDIR_HDB spool
+ directories to SPOOLDIR_TAYLOR spool directories (note that it is
+ not necessary to convert your spool directories at all; the
+ SPOOLDIR_TAYLOR approach may be slightly more efficient).
+
+dialHDB.c:
+ A program by Daniel Hagerty which permits using HDB dialer
+ programs as chat programs.
+
+amiga.c:
+ A wrapper program to run uucico from a cron table under Amiga
+ SVR4 (apparently a wrapper is required). This was contributed by
+ Lawrence E. Rosenman.
+
tstout.c:
A program to remove a user from utmp and wtmp, essentially logging
them out. I put this together from BSD code. I need it to use
diff --git a/gnu/libexec/uucp/contrib/README-UURATE b/gnu/libexec/uucp/contrib/README-UURATE
index 2cc361ce26fb..0ef637514a5b 100644
--- a/gnu/libexec/uucp/contrib/README-UURATE
+++ b/gnu/libexec/uucp/contrib/README-UURATE
@@ -1,20 +1,21 @@
-uurate V1.2 - Gather and display Taylor UUCP traffic statistics
+uurate V1.10 - Gather and display Taylor UUCP traffic statistics
-Bob Denny (denny@alisa.com) - Thu Sep 3 19:47:41 1992
+Bob Denny (denny@alisa.com) - Thu Sep 3 19:47:41 1992 (V1.2.1)
+Klaus Dahlenburg (kdburg@incoahe.hanse.de) - Tue Sep 28 18:11:34 CET 1993
See the man page for documentation.
Installation:
------------
-(1) Copy Makefile.uurt to Makefile.
+(1) Copy or sym-link Makefile.uurt to Makefile.
-(2) Edit Makefile: set BIN where you want uurate to be installed, and
- set CFLAGS to point to the directory containing the UUCP sources
- (this is .. by default).
+(2) Edit Makefile: set BIN where you want uurate to be installed,
+ MAN where the man page should go to, and set CFLAGS to point
+ to the directory containing the UUCP sources (this is .. by
+ default). Don't forget to set newconfigdir= to point to the
+ directory where the (Taylor-uucp)config is stored.
(3) Type ``make'' to compile the program.
(4) Type ``make install'' to install the program.
-
-(5) Install the man page if you want. I didn't put that into the Makefile.
diff --git a/gnu/libexec/uucp/contrib/amiga.c b/gnu/libexec/uucp/contrib/amiga.c
new file mode 100644
index 000000000000..d982364cfd57
--- /dev/null
+++ b/gnu/libexec/uucp/contrib/amiga.c
@@ -0,0 +1,43 @@
+/* Wrapper code for Taylor UUCP on Amiga Unix (SVR4) for cron invoked UUCP */
+/* processes. */
+
+/* The problem: Cron is not a "licensed" process. any process that grabs a
+ controlling terminal needs to be licensed. Taylor UUCP needs controlling
+ terminals. Taylor UUCP does relinquish the controlling terminal before
+ fork(), so the "UUCP" license is appropriate.
+ This simple program does the "right" thing, but *MUST* be SETUID ROOT */
+
+/* Written by: Lawrence E. Rosenman <ler@lerami.lerctr.org> */
+
+#include <sys/sysm68k.h>
+#include <sys/types.h>
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+#include <pwd.h>
+
+int main(int argc,char *argv[],char *envp)
+{
+ struct passwd *pw;
+ char name[256];
+
+ strcpy(name,"/usr/local/lib/uucp/uucico");
+ if (sysm68k(_m68k_LIMUSER,EUA_GET_LIC) == 0 ) { /* are we unlicensed? */
+ if (sysm68k(_m68k_LIMUSER,EUA_UUCP) == -1) { /* yes, get a "uucp" license */
+ fprintf(stderr,"sysm68k failed, errno=%d\n",errno); /* we didn't? crab it */
+ exit(errno);
+ }
+ }
+
+ pw = getpwnam("uucp"); /* get the Password Entry for uucp */
+ if (pw == NULL)
+ {
+ fprintf(stderr,"User ID \"uucp\" doesn't exist.\n");
+ exit(1);
+ }
+ setgid(pw->pw_gid); /* set gid to uucp */
+ setuid(pw->pw_uid); /* set uid to uucp */
+ argv[0]=name; /* have PS not lie... */
+ execv("/usr/local/lib/uucp/uucico",argv); /* go to the real program */
+ exit(errno);
+}
diff --git a/gnu/libexec/uucp/contrib/dialHDB.c b/gnu/libexec/uucp/contrib/dialHDB.c
new file mode 100644
index 000000000000..cb2662134af6
--- /dev/null
+++ b/gnu/libexec/uucp/contrib/dialHDB.c
@@ -0,0 +1,187 @@
+/*
+# File: dialHDB.c
+# Author: Daniel Hagerty , hag@eddie.mit.edu
+# Copyright (C) 1993
+# Date: Fri Nov 26 19:22:31 1993
+# Description: Program for using HDB dialers for dialing modems, exiting
+ with 0 on success, else failure.
+# Version: 1.0
+# Revision History:
+######
+### 11/26/93 Hag - File creation
+######
+### 1/5/94 Hag - Finally got around to finishing this damn thing.
+######
+*/
+/* Basic theory behind this program-
+ dialHDB forks into two processes, a monitor parent, and a child
+ that does the exec of the dialer. Child pretty much just execs the
+ dialer program, unless there's an exec problem, in which case the
+ child sends the parent a SIGUSR1 to indicate failed execution.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <signal.h>
+
+#define kUsage "Usage:\n\t%s dialerPath device number speed\n\
+%s dialer -h device speed\n"
+
+#define kExitErrFlag 0x80 /* & in with exit code to determine error */
+#define kErrorMask 0x0f /* Mask to determine error code */
+
+/* Error code defines as lifted from an HDB dialer */
+#define RCE_NULL 0 /* general purpose or unknown error code */
+#define RCE_INUSE 1 /* line in use */
+#define RCE_SIG 2 /* signal aborted dialer */
+#define RCE_ARGS 3 /* invalid arguments */
+#define RCE_PHNO 4 /* invalid phone number */
+#define RCE_SPEED 5 /* invalid baud rate -or- bad connect baud */
+#define RCE_OPEN 6 /* can't open line */
+#define RCE_IOCTL 7 /* ioctl error */
+#define RCE_TIMOUT 8 /* timeout */
+#define RCE_NOTONE 9 /* no dial tone */
+#define RCE_BUSY 13 /* phone is busy */
+#define RCE_NOCARR 14 /* no carrier */
+#define RCE_ANSWER 15 /* no answer */
+
+/* Structure definition to map error codes to strings */
+typedef struct
+{
+ int errNum;
+ char *errString;
+} errTable;
+
+const errTable errors[]=
+{
+ { RCE_NULL, "Unknown Error" },
+ { RCE_INUSE, "Line is being used" },
+ { RCE_SIG, "Recieved fatal signal" },
+ { RCE_ARGS, "Bad arguments" },
+ { RCE_PHNO, "Invalid phone number" },
+ { RCE_SPEED, "Invalid baud rate or bad connection" },
+ { RCE_OPEN, "Unable to open line" },
+ { RCE_IOCTL, "ioctl error" },
+ { RCE_TIMOUT, "Timed out" },
+ { RCE_NOTONE, "No dialtone" },
+ { RCE_BUSY, "Phone number is busy" },
+ { RCE_NOCARR, "No carrier" },
+ { RCE_ANSWER, "No answer" },
+ { 0,NULL}
+};
+
+/* Function Prototypes */
+int figureStat(int stat);
+char *findInTable(int error);
+void badExec(void);
+
+char *dialerName; /* basename of our dialer program */
+char *dialerPath; /* full path of dialer program */
+
+main(int argc,char *argv[])
+{
+ int parent; /* pid of parent process */
+ int child; /* pid of child process */
+ int stat; /* exit status of child process */
+ char *temp; /* used to get basename of dialer */
+
+ if(argc!=5)
+ {
+ fprintf(stderr,kUsage,argv[0],argv[0]);
+ exit(1);
+ }
+
+ dialerPath=argv[1];
+ dialerName= (temp=strrchr(argv[1],'/'))!=NULL ? temp+1 : argv[1];
+
+ parent=getpid();
+
+ signal(SIGUSR1,badExec); /* set up for possible failed exec */
+
+ if((child=fork())<0)
+ {
+ perror("fork");
+ exit(2);
+ }
+ if(child>0) /* We're parent, wait for child to exit */
+ {
+ /* Set up to ignore signals so we can report them on stderror */
+ signal(SIGHUP,SIG_IGN);
+ signal(SIGINT,SIG_IGN);
+ signal(SIGTERM,SIG_IGN);
+
+ wait(&stat); /* wait for child to exit */
+ exit(figureStat(stat)); /* figure out our exit code and die */
+ }
+ else /* child process */
+ {
+ close(0); /* close of modem file desc, since HDB */
+ close(1); /* doesn't use them */
+ dup2(2,1); /* and remap stdout to stderr, just in case */
+ if(execvp(argv[1],argv+1)<0) /* exec program with argv shifted by 1 */
+ { /* if exec fails, send SIGUSR1 to parent */
+ kill(parent,SIGUSR1);
+ exit(0);
+ }
+ }
+ exit(0);
+}
+
+/* Figure out whether or not dialer ran succesfully, and return
+with 0 if it worked, otherwise error */
+int figureStat(int stat)
+{
+ int exit;
+ int errFlag;
+ int error;
+
+ if(WIFSIGNALED(stat)) /* determine if exit was from signal or what */
+ {
+ fprintf(stderr,"Error: Dialer %s recieved signal %d.\n",dialerName,
+ WTERMSIG(stat));
+ return(1);
+ }
+ if(WIFSTOPPED(stat))
+ {
+ fprintf(stderr,"Error: Dialer %s recieved signal %d.\n",dialerName,
+ WSTOPSIG(stat));
+ return(1);
+ }
+ exit=WEXITSTATUS(stat);
+
+ errFlag=exit&kExitErrFlag; /* Is the error flag set? */
+ if(errFlag)
+ {
+ char *errString;
+
+ error=exit&kErrorMask;
+ errString=findInTable(error); /* find it's string, print it on stderr */
+ fprintf(stderr,"Error: %s - %s.\n",dialerName,errString); /* and return */
+ return(1);
+ }
+ return(0);
+}
+
+/* Support routine, look up exit code in error table, and return pointer
+to proper string */
+char *findInTable(int error)
+{
+ int i=0;
+
+ for(i=0;errors[i].errString!=NULL;i++)
+ {
+ if(errors[i].errNum==error)
+ return(errors[i].errString);
+ }
+ /* Still here, return the top entry, for unknown error */
+ return(errors[0].errString);
+}
+
+/* Called by signal if we recieve SIGUSR 1 */
+void badExec(void)
+{
+ fprintf(stderr,"Error: %s - Execution problem.\n",dialerPath);
+ exit(1);
+}
diff --git a/gnu/libexec/uucp/contrib/uucomp.shar b/gnu/libexec/uucp/contrib/uucomp.shar
new file mode 100644
index 000000000000..da131d048c5e
--- /dev/null
+++ b/gnu/libexec/uucp/contrib/uucomp.shar
@@ -0,0 +1,552 @@
+#! /bin/sh
+#
+# Created by shar, version 0.5 - 04/10/91
+#
+# This is a shell archive, meaning:
+# 1. Remove everything about the #! /bin/sh line.
+# 2. Save the resulting text in a file.
+# 3. Execute the file with /bin/sh to create:
+#
+# length name
+# ------ -------------------------------------
+# 128 uucomp-1.1/Compress
+# 264 uucomp-1.1/Copyright
+# 410 uucomp-1.1/INTERNALS
+# 1069 uucomp-1.1/Makefile
+# 3528 uucomp-1.1/README
+# 632 uucomp-1.1/crmail.c
+# 632 uucomp-1.1/crnews.c
+# 108 uucomp-1.1/tags
+# 3506 uucomp-1.1/uucomp.c
+# 383 uucomp-1.1/uucomp.h
+#
+
+if test ! -d uucomp-1.1 ; then
+ mkdir uucomp-1.1
+fi
+#
+# Archive number 1
+# This archive created Tue Sep 28 20:21:14 1993
+#
+
+echo "shar: extracting uucomp-1.1/Compress - (128 characters)"
+if test -f 'uucomp-1.1/Compress' ; then
+ echo shar: will not over-write existing file uucomp-1.1/Compress
+else
+sed 's/^X//' << \SHAR_EOF > 'uucomp-1.1/Compress'
+Xfor i in $*
+Xdo
+X if [ -d /usr/spool/uucp/$i ]
+X then
+X# echo Looking at $i
+X cd /usr/spool/uucp/$i
+X /usr/bin/uucomp C.*
+X fi
+Xdone
+SHAR_EOF
+if test 128 -ne "`wc -c < 'uucomp-1.1/Compress'`" ; then
+ echo "shar: ***** error transmitting file uucomp-1.1/Compress (should have been 128 characters, but was "`wc -c < 'uucomp-1.1/Compress'`" characters) *****"
+fi
+fi
+
+touch 0715110393 uucomp-1.1/Compress
+chmod 0700 uucomp-1.1/Compress
+
+echo "shar: extracting uucomp-1.1/Copyright - (264 characters)"
+if test -f 'uucomp-1.1/Copyright' ; then
+ echo shar: will not over-write existing file uucomp-1.1/Copyright
+else
+sed 's/^X//' << \SHAR_EOF > 'uucomp-1.1/Copyright'
+X
+X/*
+X *
+X * Copyright 1993 by Ed Carp (erc@apple.com) All rights reserved.
+X *
+X * Permission is hereby granted for any non-commercial use of this
+X * program, as long as this copyright notice remains intact. Commercial
+X * users may contact me - I'm easy.
+X *
+X */
+X
+SHAR_EOF
+if test 264 -ne "`wc -c < 'uucomp-1.1/Copyright'`" ; then
+ echo "shar: ***** error transmitting file uucomp-1.1/Copyright (should have been 264 characters, but was "`wc -c < 'uucomp-1.1/Copyright'`" characters) *****"
+fi
+fi
+
+touch 0715174993 uucomp-1.1/Copyright
+chmod 0600 uucomp-1.1/Copyright
+
+echo "shar: extracting uucomp-1.1/INTERNALS - (410 characters)"
+if test -f 'uucomp-1.1/INTERNALS' ; then
+ echo shar: will not over-write existing file uucomp-1.1/INTERNALS
+else
+sed 's/^X//' << \SHAR_EOF > 'uucomp-1.1/INTERNALS'
+XThis is the basic workflow for uucomp:
+X
+Xfor (every argv)
+Xdo
+X if not "C." file skip
+X if open fail, skip
+X read 1 line from C. file
+X grab second and 10th field (second is data file name,
+X 10th is command name)
+X if open fail on second field, skip
+X if 10th field isn't "rmail" or "rnews", skip
+X execute "gzip -9" on second field
+X change "rmail" and "rnews" to "crmail" and "crnews", respectively
+X in C. file
+Xdone
+SHAR_EOF
+if test 410 -ne "`wc -c < 'uucomp-1.1/INTERNALS'`" ; then
+ echo "shar: ***** error transmitting file uucomp-1.1/INTERNALS (should have been 410 characters, but was "`wc -c < 'uucomp-1.1/INTERNALS'`" characters) *****"
+fi
+fi
+
+touch 0715174693 uucomp-1.1/INTERNALS
+chmod 0600 uucomp-1.1/INTERNALS
+
+echo "shar: extracting uucomp-1.1/Makefile - (1069 characters)"
+if test -f 'uucomp-1.1/Makefile' ; then
+ echo shar: will not over-write existing file uucomp-1.1/Makefile
+else
+sed 's/^X//' << \SHAR_EOF > 'uucomp-1.1/Makefile'
+X#
+X# Makefile generated with genmake - version 1.1 08/22/92
+X#
+X# genmake is Copyright 1991 by Edwin R. Carp
+X#
+X# GENMAKE -B/usr/bin -tsp [files]
+X#
+X
+XCC = gcc -O6
+XCFLAGS = $(INCLUDE)
+XSOURCES = crmail.c crnews.c uucomp.c
+XOBJECTS = crmail.o crnews.o uucomp.o
+XPROGRAMS = /usr/bin/crmail /usr/bin/crnews /usr/bin/uucomp
+X
+Xall: $(PROGRAMS) tags
+X
+X/usr/bin/crmail: crmail.o
+X $(CC) $(CFLAGS) -o crmail crmail.o $(LDFLAGS) -O
+X strip crmail
+X chmod 755 crmail
+X mv crmail /usr/bin
+X
+X/usr/bin/crnews: crnews.o
+X $(CC) $(CFLAGS) -o crnews crnews.o $(LDFLAGS) -O
+X strip crnews
+X chmod 755 crnews
+X mv crnews /usr/bin
+X
+X/usr/bin/uucomp: uucomp.o
+X $(CC) $(CFLAGS) -o uucomp uucomp.o $(LDFLAGS) -O
+X strip uucomp
+X chmod 755 uucomp
+X mv uucomp /usr/bin
+X
+Xclean:
+X /bin/rm -f $(OBJECTS) MAKELOG eddep makedep
+X
+Xclobber:
+X /bin/rm -f $(OBJECTS) $(PROGRAMS) MAKELOG eddep makedep *~ *.bak *.BAK
+X /bin/rm -f tags
+X
+Xhidden:
+X echo "make all > MAKELOG 2>&1 &"|/bin/sh
+X
+Xmakefile:
+X genmake -B/usr/bin -tsp $(SOURCES) &
+X
+Xmakeall:
+X genmake -B/usr/bin -tsp *.c &
+X
+Xtags: $(SOURCES)
+X ctags $(SOURCES) > tags
+X
+SHAR_EOF
+if test 1069 -ne "`wc -c < 'uucomp-1.1/Makefile'`" ; then
+ echo "shar: ***** error transmitting file uucomp-1.1/Makefile (should have been 1069 characters, but was "`wc -c < 'uucomp-1.1/Makefile'`" characters) *****"
+fi
+fi
+
+touch 0714235093 uucomp-1.1/Makefile
+chmod 0600 uucomp-1.1/Makefile
+
+echo "shar: extracting uucomp-1.1/README - (3528 characters)"
+if test -f 'uucomp-1.1/README' ; then
+ echo shar: will not over-write existing file uucomp-1.1/README
+else
+sed 's/^X//' << \SHAR_EOF > 'uucomp-1.1/README'
+XLike most people these days, I'm looking for ways to make my computing
+Xenvironment more efficient. This environment consists of a 486, a 386,
+Xand a 386SL laptop, all of which run Taylor uucp under Linux. The 386
+Xlaptop gets used a lot, since it goes wherever I go and I answer a lot
+Xof news and email every day. Often, I must use other people's facilities
+X(phone lines and such) to send out replies and post news if I'm not at home.
+XSince it's not fair to the client for them to pay for my zone calls back
+Xto my home in Fremont, I place the calls on my phone card. Unfortunately,
+XPacBell is very proud of the services they offer, especially in regards
+Xto this convenience of automatically charging calls to my house wherever I
+Xmay be. Considering that this can be very expensive to do, I searched for
+Xa way to cut my phone bill down to something I could afford to pay each
+Xmonth without fainting every time I saw the bill.
+X
+XThe first thing I did was to go out and plunk $195 for a 14.4KB modem.
+XThat helped, but C-News is very slow on my laptop, and batching articles
+Xis even slower, and email (of course) isn't batched at all. Even with
+XMNP5 compression turned on, this doesn't make for a very efficient setup,
+Xeven at high speeds.
+X
+XPlaying around with uucp told me that the line turnaround wasn't that much
+Xoverhead, nor was sending the C./X. files (the execute files) - the real
+Xoverhead was sending out uncompressed news and especially email, since
+XI subscribe to several mailing lists and digests can run quite large.
+X
+XI looked at uubatch, but the most current version I could find (1.05) was
+Xnot compatible with Taylor uucp (and I had no other alternative), so I
+Xdecided to write my own. Experiments with "gzip -9" convinced me that
+Xthat was the way to go, since gzip gives email and news 60 to 75 percent
+Xcompression, which would tend to cut one's phone bill significantly.
+X
+XYou hold in your mailbox (or news reader) the end result of that effort.
+XBear in mind that (1) this is a "first cut" and while it is unlikely that
+Xthere are very many bugs, there are certainly places where the programs could
+Xbe improved and tuned. Suggestions and comments are welcome!
+X
+XTo install:
+X
+X 1. Feed this to shar.
+X 2. Look at the Makefile. Make sure that the paths for
+X things are set up correctly.
+X 3. Look at uucomp.h and make sure that the path and
+X options for COMPRESS/UNCOMPRESS are set up properly.
+X 3. Type "make". This will make uucomp, crmail, and crnews
+X and will place them in /usr/bin. Move Compress into
+X /usr/lib/uucp.
+X 4. Make an entry in crontab to do
+X /usr/lib/uucp/Compress site1 site2 site3...
+X occasionally. It is suggested that this be done fairly
+X frequently. Alternately, you could set up a login shell
+X for selected sites to run uucomp every time that site
+X logged in.
+X 5. Don't forget to add /usr/bin/crmail and /usr/bin/crnews
+X to the list of programs allowed to be executed in your
+X Permissions file (if running HDB UUCP), or whatever is
+X appropriate for your version of uucp.
+X
+XEnjoy! Any questions or comments can be sent to erc@apple.com.
+X
+XNote: This is tuned for Taylor uucp, but would not be particularly
+Xdifficult to adapt to other version of uucp. See the file INTERNALS for
+Xdetails of how this works.
+X
+XJuly 15, 1993
+XEd Carp
+Xerc@apple.com
+X------------------------------------------------------------------------------
+XChanges since 1.0:
+X
+X Version Date Description
+X
+X 1.1 08/04/93 Added sanity check in C. file (check that
+X 'E' is first char in file, otherwise skip)
+SHAR_EOF
+if test 3528 -ne "`wc -c < 'uucomp-1.1/README'`" ; then
+ echo "shar: ***** error transmitting file uucomp-1.1/README (should have been 3528 characters, but was "`wc -c < 'uucomp-1.1/README'`" characters) *****"
+fi
+fi
+
+touch 0804224993 uucomp-1.1/README
+chmod 0600 uucomp-1.1/README
+
+echo "shar: extracting uucomp-1.1/crmail.c - (632 characters)"
+if test -f 'uucomp-1.1/crmail.c' ; then
+ echo shar: will not over-write existing file uucomp-1.1/crmail.c
+else
+sed 's/^X//' << \SHAR_EOF > 'uucomp-1.1/crmail.c'
+X/*
+X * crmail - get compressed mail from host, uncompress
+X * WARNING: This may be insecure!
+X */
+X
+X/*
+X *
+X * Copyright 1993 by Ed Carp (erc@apple.com) All rights reserved.
+X *
+X * Permission is hereby granted for any non-commercial use of this
+X * program, as long as this copyright notice remains intact. Commercial
+X * users may contact me - I'm easy.
+X *
+X */
+X
+X#include <stdio.h>
+X#include "uucomp.h"
+Xmain (argc, argv)
+Xint argc;
+Xchar **argv;
+X{
+X char cmd[1024];
+X int i;
+X
+X sprintf (cmd, "%s|%s ", UNCOMPRESS, RMAIL);
+X for (i = 1; i < argc; i++)
+X {
+X strcat (cmd, argv[i]);
+X strcat (cmd, " ");
+X }
+X system (cmd);
+X exit (0);
+X}
+SHAR_EOF
+if test 632 -ne "`wc -c < 'uucomp-1.1/crmail.c'`" ; then
+ echo "shar: ***** error transmitting file uucomp-1.1/crmail.c (should have been 632 characters, but was "`wc -c < 'uucomp-1.1/crmail.c'`" characters) *****"
+fi
+fi
+
+touch 0715195493 uucomp-1.1/crmail.c
+chmod 0600 uucomp-1.1/crmail.c
+
+echo "shar: extracting uucomp-1.1/crnews.c - (632 characters)"
+if test -f 'uucomp-1.1/crnews.c' ; then
+ echo shar: will not over-write existing file uucomp-1.1/crnews.c
+else
+sed 's/^X//' << \SHAR_EOF > 'uucomp-1.1/crnews.c'
+X/*
+X * crnews - get compressed news from host, uncompress
+X * WARNING: This may be insecure!
+X */
+X
+X/*
+X *
+X * Copyright 1993 by Ed Carp (erc@apple.com) All rights reserved.
+X *
+X * Permission is hereby granted for any non-commercial use of this
+X * program, as long as this copyright notice remains intact. Commercial
+X * users may contact me - I'm easy.
+X *
+X */
+X
+X#include <stdio.h>
+X#include "uucomp.h"
+Xmain (argc, argv)
+Xint argc;
+Xchar **argv;
+X{
+X char cmd[1024];
+X int i;
+X
+X sprintf (cmd, "%s|%s ", UNCOMPRESS, RNEWS);
+X for (i = 1; i < argc; i++)
+X {
+X strcat (cmd, argv[i]);
+X strcat (cmd, " ");
+X }
+X system (cmd);
+X exit (0);
+X}
+SHAR_EOF
+if test 632 -ne "`wc -c < 'uucomp-1.1/crnews.c'`" ; then
+ echo "shar: ***** error transmitting file uucomp-1.1/crnews.c (should have been 632 characters, but was "`wc -c < 'uucomp-1.1/crnews.c'`" characters) *****"
+fi
+fi
+
+touch 0715195593 uucomp-1.1/crnews.c
+chmod 0600 uucomp-1.1/crnews.c
+
+echo "shar: extracting uucomp-1.1/tags - (108 characters)"
+if test -f 'uucomp-1.1/tags' ; then
+ echo shar: will not over-write existing file uucomp-1.1/tags
+else
+sed 's/^X//' << \SHAR_EOF > 'uucomp-1.1/tags'
+Xmain crmail.c /^main (argc, argv)$/
+Xmain crnews.c /^main (argc, argv)$/
+Xmain uucomp.c /^main (argc, argv)$/
+SHAR_EOF
+if test 108 -ne "`wc -c < 'uucomp-1.1/tags'`" ; then
+ echo "shar: ***** error transmitting file uucomp-1.1/tags (should have been 108 characters, but was "`wc -c < 'uucomp-1.1/tags'`" characters) *****"
+fi
+fi
+
+touch 0804224993 uucomp-1.1/tags
+chmod 0600 uucomp-1.1/tags
+
+echo "shar: extracting uucomp-1.1/uucomp.c - (3506 characters)"
+if test -f 'uucomp-1.1/uucomp.c' ; then
+ echo shar: will not over-write existing file uucomp-1.1/uucomp.c
+else
+sed 's/^X//' << \SHAR_EOF > 'uucomp-1.1/uucomp.c'
+X/*
+X * uucomp - compress outgoing news/mail
+X *
+X * usage: uucomp C.*
+X *
+X * This works for Taylor uucp (available from prep.ai.mit.edu:/pub/gnu/uucp*),
+X * but I don't promise it works for anyone else's uucp package. Basically, this
+X * is a quick-n-dirty hack to get compressed mail and news to a uucp site. This
+X * becomes important when you're on the other end of a 1200 baud packet radio
+X * link, where the throughput can be 60 CPS (or lower). It also tends to hide
+X * any nasties that people might want to say to you, since the packets *are*
+X * public readable. Yes, I looked at uubatch, but it was too complicated for
+X * me to figure out <grin>, and it didn't work with Taylor-uucp. This is almost
+X * too simple to work...
+X *
+X * To use this little guy, do something like this in the .bashrc or .profile
+X * or .cshrc of the uucp's login shell:
+X *
+X * cd /usr/spool/uucp/<wherever the C. and D. files are kept>
+X * /usr/bin/uucomp C.*
+X * exec /usr/lib/uucp/uucico
+X *
+X * This program was written by Ed Carp (erc@apple.com). It can be used for any
+X * non-commercial purpose. This software is freely redistributable.
+X */
+X
+X/*
+X *
+X * Copyright 1993 by Ed Carp (erc@apple.com) All rights reserved.
+X *
+X * Permission is hereby granted for any non-commercial use of this
+X * program, as long as this copyright notice remains intact. Commercial
+X * users may contact me - I'm easy.
+X *
+X */
+X
+X#include <stdio.h>
+X#include "uucomp.h"
+X#undef NULL
+X#define NULL (0)
+Xmain (argc, argv)
+Xint argc;
+Xchar **argv;
+X{
+X int i, j, sw, ctr = 0, errflag = 0, mctr = 0, nctr = 0, skipctr = 0;
+X char scr[64], rcmd[10], line[1024], lineout[1024];
+X char *strtok (), *ptr, *lineptr, compfile[32];
+X FILE *in;
+X
+X printf ("uucomp 1.1 08/04/93 ... by erc@apple.com\nscanning %d files.", argc - 1);
+X for (i = 1; i < argc; i++)
+X {
+X if (strncmp (argv[i], "C.", 2) != 0)
+X {
+X skipctr++;
+X continue;
+X }
+X if ((in = fopen (argv[i], "r+")) == (FILE *) NULL)
+X {
+X skipctr++;
+X continue;
+X }
+X fgets (line, 1022, in);
+X if(*line != 'E')
+X {
+X skipctr++;
+X continue;
+X }
+X line[strlen (line) - 1] = NULL;
+X rewind (in);
+X *lineout = NULL;
+X lineptr = line;
+X sw = errflag = 0;
+X printf (".");
+X fflush (stdout);
+X for (j = 0;; j++)
+X {
+X ptr = strtok (lineptr, " ");
+X if (ptr == NULL)
+X break;
+X lineptr = NULL;
+X if (j == 1)
+X {
+X if (access (ptr, 4) == EOF)
+X {
+X#ifdef DEBUG
+X printf ("skip: file '%s' doesn't exist\n", ptr);
+X#endif
+X errflag = 1;
+X break; /*
+X * skip it if the data file isn't
+X * there yet
+X */
+X }
+X strcpy (compfile, ptr);
+X }
+X if (j == 9)
+X {
+X if (strcmp (ptr, "rmail") != 0 && strcmp (ptr, "rnews") != 0)
+X {
+X#ifdef DEBUG
+X printf ("skip: '%s' wrong command\n", ptr);
+X#endif
+X errflag = 1;
+X break;
+X }
+X if (strcmp (ptr, "rmail") == 0)
+X mctr++;
+X if (strcmp (ptr, "rnews") == 0)
+X nctr++;
+X sw = 1;
+X strcat (lineout, "c");
+X }
+X strcat (lineout, ptr);
+X strcat (lineout, " ");
+X }
+X if (errflag == 1)
+X {
+X skipctr++;
+X fclose (in);
+X continue;
+X }
+X fprintf (in, "%s\n", lineout);
+X fclose (in);
+X sprintf (line,
+X "%s -fc > /tmp/uucomp.%d < %s;cp /tmp/uucomp.%d %s",
+X COMPRESS, getpid (), compfile, getpid (), compfile);
+X system (line);
+X ctr++;
+X }
+X sprintf (line, "/tmp/uucomp.%d", getpid ());
+X unlink (line);
+X printf ("\n%d skipped, %d compressed (%d mail, %d news).\n",
+X skipctr, ctr, mctr, nctr);
+X exit (0);
+X}
+SHAR_EOF
+if test 3506 -ne "`wc -c < 'uucomp-1.1/uucomp.c'`" ; then
+ echo "shar: ***** error transmitting file uucomp-1.1/uucomp.c (should have been 3506 characters, but was "`wc -c < 'uucomp-1.1/uucomp.c'`" characters) *****"
+fi
+fi
+
+touch 0804224693 uucomp-1.1/uucomp.c
+chmod 0600 uucomp-1.1/uucomp.c
+
+echo "shar: extracting uucomp-1.1/uucomp.h - (383 characters)"
+if test -f 'uucomp-1.1/uucomp.h' ; then
+ echo shar: will not over-write existing file uucomp-1.1/uucomp.h
+else
+sed 's/^X//' << \SHAR_EOF > 'uucomp-1.1/uucomp.h'
+X/*
+X *
+X * Copyright 1993 by Ed Carp (erc@apple.com) All rights reserved.
+X *
+X * Permission is hereby granted for any non-commercial use of this
+X * program, as long as this copyright notice remains intact. Commercial
+X * users may contact me - I'm easy.
+X *
+X */
+X
+X#define COMPRESS "/usr/bin/gzip -9c"
+X#define UNCOMPRESS "/usr/bin/gzip -dc"
+X#define RMAIL "rmail"
+X#define RNEWS "rnews"
+SHAR_EOF
+if test 383 -ne "`wc -c < 'uucomp-1.1/uucomp.h'`" ; then
+ echo "shar: ***** error transmitting file uucomp-1.1/uucomp.h (should have been 383 characters, but was "`wc -c < 'uucomp-1.1/uucomp.h'`" characters) *****"
+fi
+fi
+
+touch 0715190293 uucomp-1.1/uucomp.h
+chmod 0600 uucomp-1.1/uucomp.h
+echo End of all shell archives
+exit 0
diff --git a/gnu/libexec/uucp/contrib/uudemon.shar b/gnu/libexec/uucp/contrib/uudemon.shar
new file mode 100644
index 000000000000..31a8fa60707c
--- /dev/null
+++ b/gnu/libexec/uucp/contrib/uudemon.shar
@@ -0,0 +1,82 @@
+#! /bin/sh
+# This is a shell archive. Remove anything before this line, then unpack
+# it by saving it into a file and typing "sh file". To overwrite existing
+# files, type "sh file -c". You can also feed this as standard input via
+# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
+# will see the following message at the end:
+# "End of shell archive."
+# Contents: Poll uudemon.poll
+# Wrapped by dburr@sbanet on Fri Jul 23 20:15:18 1993
+PATH=/bin:/usr/bin:/usr/ucb ; export PATH
+if test -f 'Poll' -a "${1}" != "-c" ; then
+ echo shar: Will not clobber existing file \"'Poll'\"
+else
+echo shar: Extracting \"'Poll'\" \(244 characters\)
+sed "s/^X//" >'Poll' <<'END_OF_FILE'
+X# HDB-ish poll file
+X#
+X# Format: <site><tab><hour1> <hour2> ...
+X# ONLY ONE TAB BETWEEN FIELDS... more may work, but I have absolutely no
+X# idea if it will work at all.
+X#
+X# comment lines (begin with `#') are ignored.
+X
+Xdschub 20 21 22
+Xgd 20 21 22
+END_OF_FILE
+if test 244 -ne `wc -c <'Poll'`; then
+ echo shar: \"'Poll'\" unpacked with wrong size!
+fi
+# end of 'Poll'
+fi
+if test -f 'uudemon.poll' -a "${1}" != "-c" ; then
+ echo shar: Will not clobber existing file \"'uudemon.poll'\"
+else
+echo shar: Extracting \"'uudemon.poll'\" \(941 characters\)
+sed "s/^X//" >'uudemon.poll' <<'END_OF_FILE'
+X#!/bin/sh
+X#
+X# This is my impersonation of the HDB uudemon.poll script.
+X# Yes, I know, this is very clumsy and clunky... ahh well, I've always
+X# been better at C/pascal/etc than Shell programming... :(
+X
+X# change LIBDIR to where UUCP library/conf. files are
+X# change SPOOLDIR to the UUCP spool directory. It must be HDB-ish.
+XLIBDIR=/usr/lib/uucp; export LIBDIR
+XSPOOLDIR=/usr/spool/uucp; export SPOOLDIR
+X
+X### no changes needed past here ###
+X
+XHOUR=`date +%H`; export HOUR
+X
+Xif [ -f ${LIBDIR}/Poll ]; then
+X for SYS in `uuname`
+X do
+X CHOICES="`grep "^$SYS[ ]" ${LIBDIR}/Poll | awk -F' ' \
+X '{ print $2 }'`"
+X DOIT="no"
+X for H in $CHOICES
+X do
+X if [ "$HOUR" = "$H" ]; then
+X DOIT="yes"
+X fi
+X done
+X if [ "$DOIT" = "yes" ]; then
+X if [ ! -d ${SPOOLDIR}/${SYS} ]; then
+X mkdir ${SPOOLDIR}/${SYS}
+X fi
+X chmod 755 ${SPOOLDIR}/${SYS}
+X touch ${SPOOLDIR}/${SYS}/C.${SYS}n0000
+X chmod 644 ${SPOOLDIR}/${SYS}/C.${SYS}n0000
+X fi
+X done
+Xfi
+END_OF_FILE
+if test 941 -ne `wc -c <'uudemon.poll'`; then
+ echo shar: \"'uudemon.poll'\" unpacked with wrong size!
+fi
+chmod +x 'uudemon.poll'
+# end of 'uudemon.poll'
+fi
+echo shar: End of shell archive.
+exit 0
diff --git a/gnu/libexec/uucp/contrib/uupoll.shar b/gnu/libexec/uucp/contrib/uupoll.shar
new file mode 100644
index 000000000000..49cdb1b33318
--- /dev/null
+++ b/gnu/libexec/uucp/contrib/uupoll.shar
@@ -0,0 +1,2696 @@
+#!/bin/sh
+# This is a shell archive (produced by shar 3.49)
+# To extract the files from this archive, save it to a file, remove
+# everything above the "!/bin/sh" line above, and type "sh file_name".
+#
+# made 04/17/1994 02:21 UTC by ian@comton.airs.com
+# Source directory /disk4/ian
+#
+# existing files will NOT be overwritten unless -c is specified
+#
+# This shar contains:
+# length mode name
+# ------ ---------- ------------------------------------------
+# 2602 -r--r--r-- uupoll/Makefile
+# 3636 -r--r--r-- uupoll/README
+# 4718 -r--r--r-- uupoll/autopoll.8c
+# 44031 -r--r--r-- uupoll/autopoll.c
+# 3884 -r--r--r-- uupoll/conf.h
+# 4787 -r--r--r-- uupoll/uupoll.8c
+# 27587 -r--r--r-- uupoll/uupoll.c
+#
+# ============= uupoll/Makefile ==============
+if test ! -d 'uupoll'; then
+ echo 'x - creating directory uupoll'
+ mkdir 'uupoll'
+fi
+if test -f 'uupoll/Makefile' -a X"$1" != X"-c"; then
+ echo 'x - skipping uupoll/Makefile (File already exists)'
+else
+echo 'x - extracting uupoll/Makefile (Text)'
+sed 's/^X//' << 'SHAR_EOF' > 'uupoll/Makefile' &&
+# This is the Makefile for uupoll and autopoll
+# borrowed and hacked from Taylor UUCP 1.04
+X
+# Prefix directory for installation directories.
+prefix = /usr/local
+X
+# The user name/group that should own the resulting executables.
+# Both should run suid.
+owner = uucp.daemon
+X
+# Which mode should the resulting executables have.
+emode = 4111
+X
+# Where to install autopoll. This definition requires $(prefix)/lib to exist.
+lbindir = $(prefix)/lib/uucp
+X
+# Where are the sources from uucp-Taylor uucp.h, uuconf.h, policy.h.
+# the following assumes that our sources are in uucp-1.05/contrib/uupoll
+# and the required .h files are in main directory for uucp-1.05
+uucpsrcs = ../../
+X
+# Where to install uupoll
+bbindir = $(prefix)/bin
+X
+# Where to install man pages. Section 8 for daemons.
+man8dir = $(prefix)/man/man8
+man8ext = .8c
+X
+# Define programs and flags
+CC = gcc
+CFLAGS = -O2
+LDFLAGS = -s
+LIBS =
+X
+INSTALL = /usr/bin/install -c
+INSTALL_PROGRAM = $(INSTALL)
+INSTALL_DATA = $(INSTALL) -m 644
+X
+#
+# Nothing else to configure
+#
+X
+SHELL = /bin/sh
+X
+VERSION = 1.00
+X
+MORECFLAGS = -I. -I$(uucpsrcs) -Wall
+X
+PROGRAMS = uupoll autopoll
+X
+UUPOLLOBJS = uupoll.o
+AUTOOBJS = autopoll.o
+X
+ALLOBJS = uupoll.o autopoll.o
+X
+all: $(PROGRAMS)
+X
+install: $(PROGRAMS)
+X if test -d $(lbindir); then true; else mkdir $(lbindir); fi
+X if test -d $(bbindir); then true; else mkdir $(bbindir); fi
+X -if test -f $(lbindir)/autopoll.old; then rm -f $(lbindir)/autopoll; else mv $(lbindir)/autopoll $(lbindir)/autopoll.old; fi
+X -if test -f $(bbindir)/uupoll.old; then rm -f $(bbindir)/uupoll; else mv $(bbindir)/uupoll $(bbindir)/uupoll.old; fi
+X $(INSTALL_PROGRAM) autopoll $(lbindir)/autopoll
+X $(INSTALL_PROGRAM) uupoll $(bbindir)/uupoll
+X chown $(owner) $(lbindir)/autopoll $(bbindir)/uupoll
+X chmod $(emode) $(lbindir)/autopoll $(bbindir)/uupoll
+X $(INSTALL_DATA) uupoll.8c $(man8dir)/uupoll$(man8ext)
+X $(INSTALL_DATA) autopoll.8c $(man8dir)/autopoll$(man8ext)
+X
+uninstall:
+X rm -f $(lbindir)/autopoll $(bbindir)/uupoll
+X rm -f $(man8dir)/autopoll$(man8ext) $(man8dir)/uupoll$(man8ext)
+X -cp $(lbindir)/autopoll.old $(lbindir)/autopoll
+X -cp $(bbindir)/uupoll.old $(bbindir)/uupoll
+X -chown $(owner) $(lbindir)/autopoll $(bbindir)/uupoll
+X -chmod $(emode) $(lbindir)/autopoll $(bbindir)/uupoll
+X
+uupoll: $(UUPOLLOBJS)
+X $(CC) $(LDFLAGS) -o uupoll $(UUPOLLOBJS) $(LIBS)
+X
+autopoll: $(AUTOOBJS)
+X $(CC) $(LDFLAGS) -o autopoll $(AUTOOBJS) $(LIBS)
+X
+.c.o:
+X $(CC) -c $(CFLAGS) $(MORECFLAGS) $<
+X
+X
+clean:
+X rm -f $(ALLOBJS) $(PROGRAMS)
+X
+mostlyclean: clean
+X
+TAGS:
+X etags *.h *.c
+X
+# Header file dependencies. These are maintained by hand.
+X
+$(ALLOBJS): conf.h
+X
+.NOEXPORT:
+SHAR_EOF
+chmod 0444 uupoll/Makefile ||
+echo 'restore of uupoll/Makefile failed'
+Wc_c="`wc -c < 'uupoll/Makefile'`"
+test 2602 -eq "$Wc_c" ||
+ echo 'uupoll/Makefile: original size 2602, current size' "$Wc_c"
+fi
+# ============= uupoll/README ==============
+if test -f 'uupoll/README' -a X"$1" != X"-c"; then
+ echo 'x - skipping uupoll/README (File already exists)'
+else
+echo 'x - extracting uupoll/README (Text)'
+sed 's/^X//' << 'SHAR_EOF' > 'uupoll/README' &&
+X
+The package consists of the following files:
+X
+X - autopoll.c
+X - autopoll.8c
+X - conf.h
+X - Makefile
+X - README
+X - uupoll.c
+X - uupoll.8c
+X
+CAVEAT:
+uupoll as well as autopoll are created, tested and run on
+a NeXT running NeXTstep 2.1+ only! Autopoll will take the same arguments
+as uucico and may well work with them the same way uucico works but it
+has only been tested to call uucico with the options:
+X
+X -s<site> -S<site> -f -r1 -C -D (as well as the long form of these options)
+X
+so far. All options given to autopoll will be passed verbatim to uucico.
+X
+DESCRIPTION:
+The program uupoll was created to be a full replacement for the vendor
+supplied one on a NeXT computer. That uupoll checked any site name against
+the "hardwired" L.sys and did end with a "Bus error" if the site could not
+be found. There was no source available to modify so it had to be created
+from scratch.
+The program autopoll has no equivalent an the NeXT. The intentions behind
+it was to automate the task of rescheduling any failed call. It may be
+started by an entry in the crontab tables in just the same way uucico is
+started (it will start uucico):
+X
+05 5 * * * uucp /usr/local/lib/uucp/autopoll -r1 >>/tmp/poll.log 2>&1
+X
+Any messages go to stderr or a file (if compiled with that option); in case
+the file could not be opened it will use stdout to tell you just that and quit.
+To catch any output one may place the string
+X
+X >>/tmp/poll.log 2>&1
+X
+into the command line as well. Uupoll as well as autopoll will place only
+a start message into the logfiles in case they are invoked manually from
+the shell.
+If the call fails autopoll will reschedule uucico for a later time by means
+of an AT job.
+The messages given by uupoll and autopoll carry an indicator to inform about
+the nature of an error; they are:
+X
+- (I) informal message; such as ".. started" ".. ended".
+- (W) there might be an error but the program decided to go ahead.
+X The exit code will be at least 4.
+- (E) a severe error was encountered that either aborts the whole run or
+X only the task for one site will be aborted.
+X The exit code will be at least 8.
+- (C) a catastrophic error has been found such as unable to fork. The run
+X is aborted.
+X The exit code will be at least 16.
+The final message will show the exit code the programm has terminated with.
+X
+For more information see the man pages or look into the source.
+X
+INSTALLATION:
+all files should be placed in one folder. Then examine and change the files
+Makefile and conf.h to meet your needs. To compile uupoll some files of
+uucp must be available (see Makefile: uucpsrcs)
+If not already there change to the directory which contain the files and type:
+X
+make
+X
+this should compile UUPOLL and AUTOPOLL. There should only be a warning
+that rcsid is defined but not used.
+Before actually installing you should test the programs to be working as
+desired.
+Then check the Makefile for the final placement of the modules and the man
+pages. Make sure the ownership and setuid is what you need on your machine
+to run the program(s).
+Then su to root and type:
+X
+make install
+X
+which should install the above programs and the man pages in the appropriate
+directories.
+Some word on the coding: have mercy! This is my second project in 'C'; any
+suggestions that may improve the style/coding are welcome however.
+X
+In case of any problems that can't be solved feel free to contact the
+author at:
+X
+Klaus Dahlenburg Timezone : GMT + 2
+P.O.Box 1267 email : kdburg@incoahe.hanse.de
+D-21249 Tostedt Fax : +49 4287 676
+X Germany Voice : +49 4287 681
+X
+Have fun!
+SHAR_EOF
+chmod 0444 uupoll/README ||
+echo 'restore of uupoll/README failed'
+Wc_c="`wc -c < 'uupoll/README'`"
+test 3636 -eq "$Wc_c" ||
+ echo 'uupoll/README: original size 3636, current size' "$Wc_c"
+fi
+# ============= uupoll/autopoll.8c ==============
+if test -f 'uupoll/autopoll.8c' -a X"$1" != X"-c"; then
+ echo 'x - skipping uupoll/autopoll.8c (File already exists)'
+else
+echo 'x - extracting uupoll/autopoll.8c (Text)'
+sed 's/^X//' << 'SHAR_EOF' > 'uupoll/autopoll.8c' &&
+.\"
+.\" @(#)autopoll.8c 1.4 (incoahe) 5/09/1993
+.\"
+.TH AUTOPOLL 8C "May 09, 1993"
+.UC 6
+.SH NAME
+autopoll \- automatic \s-1UUCP\s+1 file transfer supervisor
+.SH SYNOPSIS
+.B autopoll
+[
+.BI options
+]
+.SH DESCRIPTION
+file transfer requests placed by
+.IR uucp (1)
+or
+.IR uux (1)
+are handled by
+.IR uucico (8C).
+.IR uucico
+will be invoked immediately by the above programs unless the \-r
+option is given which queues the request for later processing. This
+is typically done by entries in the
+.IR crontab
+table(s) which will invoke
+.IR uucico.
+.IR uucico
+can also be invoked by
+.IR uupoll (8C).
+All methods have in common that there is no automatic retry by
+.IR uucico
+itself in case the call failed for some reason.
+Either manual
+intervention or some sort of scripts must be used to overcome this
+limitation.
+.PP
+.IR Autopoll
+can be used to automate up to a certain degree the task of rescheduling
+a call. None of the standard programs already mentioned need to be
+modified to get this working. Also not recommended (see BUGS section)
+.IR uucico
+may be an alias to
+.IR autopoll
+as all arguments passed to
+.IR autopoll
+will be copied verbatim to
+.IR uucico.
+In case this is done by link or other means the original
+.I uucio
+must still be available in a directory outside of the normal search path
+otherwise
+.I autopoll
+can't do what it's intended to do and will form a loop.
+.PP
+When
+.IR autopoll
+is called thre will be a check on the \-s, \-S and \-f option to
+see whether this
+is a specific call or not. Also the \-S and the \-f option must be checked
+to determine the type of call: honor any imposed wait for a site or not.
+Any call to ourself or to an unknown site will be refused. The known sites
+will be obtained by a call to
+.IR uuname(1).
+All other options will not be checked in any way. Next to this
+.IR uucico
+is called and the exit code is checked for a `1' which indicates that the call
+failed for some reason whatsoever. A `0' exit code will be interpreted as
+a success and
+.IR autopoll
+ends immediate. If the call seems to be unsuccessful a new call is scheduled
+for any site whose .Status files have a retry period greater than 0. The
+retry will be scheduled by means of placing an
+.IR at
+job at the time of the failing call plus any wait time given. For those
+sites that have been called with either the \-f or \-S option the retry
+time will be the time of the failing call plus 120 seconds.
+.PP
+In case the time calculated from the values found in a \.Status file is
+lower than the current time, the current time plus 60 seconds will be taken
+as the retry time.
+.PP
+A site will
+.IR not
+be automatically called again if one of the following
+conditions is met:
+.PP
+\-
+.IR uucico
+is terminated by a signal
+.PP
+\- either fork() or exec() failed
+.PP
+\- the
+.IR at
+command failed for any reasons.
+.PP
+\- if no wait should be honored and the retry time is found to be zero.
+(this may indicate a `Wrong time to call' condition.
+.PP
+There are other circumstances that may lead to not reschedule a call or
+not to call
+.IR uucico
+at all, all of which should be accompanied by (a) self explanatory message(s).
+.SH BUGS
+\- invalid options will make
+.IR uucico
+fail. The exit code for this type is the same as for any other failure; this
+can reschedule the call over and over again or never.
+.PP
+\-
+.IR autopoll
+may not work as expected when called with options other than \-r1, \-s,
+\-S or \-f.
+.PP
+\- a rescheduled call may fail with `wrong time to call' the second time
+but will be rescheduled again. The times to call won't be checked by
+.IR autopoll
+and the .Status file may not indicate this in case the \-c option is given.
+.PP
+\- in case the ..._DIR points to an invalid file a `Bus error' my pop up
+during the `exec' call.
+.PP
+\- the `chat-timeout' value may have to be increased when using
+.IR autopoll.
+An indication to do that is that the call fails short after `CONNECT'
+has been received with `Time out in chat script'.
+.PP
+\- the site names given will be checked aginst the output of
+.I uuname
+without any alias expansion done.
+.PP
+\- the text strings whithin the \.Status files will not be used to detect
+a failing call.
+.SH FILES
+.nf
+/usr/local/lib/uucp UUCP internal utilities
+/usr/lib/uucp
+/usr/local/bin UUCP internal utilities
+/usr/bin
+/usr/spool/uucp/.Status/ Status files for each site
+/usr/spool/uucp/ UUCP spool area. one of its sub-
+X directories will hold the null jobs.
+/tmp/poll.log This file is present only if autopoll
+X has been compiled to place the messages
+X into a file. Otherwise all messages will
+X go to stderr. The directory as well as
+X the name may be different.
+.fi
+.SH SEE ALSO
+uucp(1C), uux(1C), uucico(8C), uupoll(8C), uuname(1C), sort(1), uniq(1),
+at(1)
+SHAR_EOF
+chmod 0444 uupoll/autopoll.8c ||
+echo 'restore of uupoll/autopoll.8c failed'
+Wc_c="`wc -c < 'uupoll/autopoll.8c'`"
+test 4718 -eq "$Wc_c" ||
+ echo 'uupoll/autopoll.8c: original size 4718, current size' "$Wc_c"
+fi
+# ============= uupoll/autopoll.c ==============
+if test -f 'uupoll/autopoll.c' -a X"$1" != X"-c"; then
+ echo 'x - skipping uupoll/autopoll.c (File already exists)'
+else
+echo 'x - extracting uupoll/autopoll.c (Text)'
+sed 's/^X//' << 'SHAR_EOF' > 'uupoll/autopoll.c' &&
+/* ---------------------------------------------------------------------------*
+X
+X Name: autopoll
+X
+X Author: Klaus Dahlenburg <kdburg@incoahe.hanse.de>
+X
+X Status: Public domain
+X
+X Copyright: none; claiming it to be your work will adversly affect
+X your image to be a good programmer.
+X
+X Function: Autopoll may be called just as uucico is called. The difference
+X is that autopoll will call uucico and if the return code is
+X not zero a check is made on the status files to see which site's
+X call failed. Those sites will be called again at that time found
+X in the status file plus any imposed wait. The next call will be
+X scheduled via an at job which in turn is handled by cron.
+X Atrun depends on the scheduling granularity of cron so the
+X actual times may be later than planned.
+X Autopoll will check the options -f and -s (-S) as well as the name
+X of the site passed. All other options will be passed unchecked.
+X The -f and -S options will indicate to autopoll that any wait
+X to call a site should be ignored; if the call fails the next
+X call to those sites will be at the current time plus 120 secs.
+X When the time found plus any wait evaluates to a time that
+X passed already the next call will be the current time plus 60
+X secs. The name of the site if given must be a valid one and not
+X the host itself otherwise it will be ignored.
+X
+X Call: autopoll [ options ]
+X
+X all option that apply to uucico may be given and
+X will be passed verbatim. See man uucico(8).
+X
+X Environment: NeXT 2.1+, Taylor UUCP-1.04+
+X
+X I/O: stdin: unused.
+X stdout: used only when ALOG_DIR is defined and the file
+X can't be opened. It will be a single message to tell
+X just that and the run is aborted.
+X stderr: all messages go here.
+X If ALOG_DIR is defined (see conf.h) all messages will
+X be appended to a file autopoll.msglog in that
+X directory; the file will be created automatically if
+X necessary; a redirection is then no longer possible.
+X Needs access to .Status files (see Comments later on).
+X
+X Called Programs: sort, uniq, uucico, uuname, at
+X
+X Compile: no special options are needed. Compiled with gcc 2.3.3 -O2.
+X Compile with the supplied cc might produce erroneous code
+X for the check options switch case 's' code: the break inside
+X the first if (..) {... break} is ignored.
+X
+X Comments: - should run setuid UUCP or whatever userid is necessary to
+X access (RDONLY) the .Status files and to run the programs
+X named under "Called Programs" above.
+X - No alias expansion is done on the given names for the
+X check against uuname's output..
+X - Invalid arguments will yield in an exit code > 0 as do
+X "normal" failures. It may therefore happen that a site
+X is called at the intervals with the same invalid arguments.
+X - "Wrong time to call" is not handled properly and may
+X call the site at the intervals until the time ban is lifted.
+X - human action is necessary as we can't distinguish between
+X "normal" failures and "errors" such as wrong password,
+X number to dial etc. The logs should be checked periodically.
+X - if CICO_DIR points to a non existent program the run may
+X end with signal 10: Bus Error.
+X - is has been observed that uucico will time out with "Dial
+X failed" when called via autopoll; setting chat-timeout to
+X value of 40 cured that problem.
+X - no rescheduling is done in case uucico fails and this
+X is not reported in the .Status file, one should check
+X the uucico log; this is to the fact that autopoll will
+X not scan the uucico log.
+*/
+X
+X
+#if !defined(lint)
+static char rcsid[] = "$Id: uupoll.shar,v 1.1 1994/05/07 18:09:32 ache Exp $";
+#endif /* not lint */
+X
+/* $Log: uupoll.shar,v $
+# Revision 1.1 1994/05/07 18:09:32 ache
+# Upgrade to version 1.05
+#
+X * Revision 2.8 1994/04/14 17:22:54 kdburg
+X * corrected misspelled AT_OPTION
+X *
+X * Revision 2.7 1994/04/11 20:15:48 kdburg
+X * major rework done; honor now some of the new option taht came with
+X * uucp-1.05
+X *
+X * Revision 2.6 1994/03/26 17:40:30 kdburg
+X * added support for UNAME_DIR; cleanup of some code; adjusted code after
+X * obtaining sitenames via popen()
+X *
+X * Revision 2.5 1993/07/07 16:49:02 kdburg
+X * when used interactivly only the start msg is put into the msg-log
+X * so far defined (UULOG)
+X *
+X * Revision 2.4 1993/06/26 16:17:51 kdburg
+X * the -S option wasn't propagated to the command passed to the at pgm
+X *
+X * Revision 2.3 1993/05/25 12:05:01 kdburg
+X * added error check on gettimeofday; added comment in the note section;
+X * minor changes not affection code
+X *
+X * Revision 2.2 1993/05/17 20:47:05 kdburg
+X * execution of at cmd also ok always said failed...
+X *
+X * Revision 2.1 1993/05/16 21:49:13 kdburg
+X * changed exit() to _exit() in case the exec fails within child
+X *
+X * Revision 2.0 1993/05/16 14:12:05 kdburg
+X * initial revision
+X * */
+X
+#define CAT 16
+#define SEVERE 8
+#define WARNING 4
+#define OK 0
+/* Boolean types */
+typedef int bool;
+#undef TRUE
+#undef FALSE
+#define TRUE (1)
+#define FALSE (0)
+X
+#include "conf.h"
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <pwd.h>
+#include <unistd.h>
+#include <sys/file.h>
+#include <sys/time.h>
+#include <sys/param.h>
+#include <sys/wait.h>
+X
+#ifdef ALOG_FILE
+X static char Msg_Log[] = ALOG_FILE; /* name of msglog filename */
+#endif
+X
+#ifdef UNAME_DIR
+X static char subcmd[] = " | sort | uniq"; /* pipe that follows uuname */
+#else /* ! UNAME_DIR */
+X static char Sort[] = "uuname | sort | uniq"; /* default to obtain site names */
+#endif /*UNAME_DIR */
+X
+#ifdef AT_OPTION
+X static char at_opt[] = AT_OPTION;
+#else
+X static char at_opt[] = "-mc";
+#endif /* AT_OPTION */
+X
+static char at_cmd[] = "at";
+static char cGrade[] = DEF_GRADE; /* grade as defined in conf.h */
+static char dGrade[] = "A"; /* use this if DEF_GRADE is invalid */
+static char Auto_Dir[] = AUTO_DIR; /* we live here */
+static char Cico_Dir[] = CICO_DIR; /* here lives cico */
+X
+struct Sites {
+X char name[MAXHOSTNAMELEN+1]; /* name of site as supplied by uuname */
+X char grade[1]; /* as passed or defaulted */
+X bool flag; /* TRUE: call this site only */
+X bool force; /* TRUE: -S or -f option given */
+X int stat_code;
+X int stat_retries;
+X long stat_lastcall;
+X long stat_delay;
+X char *stat_errtext;
+};
+X struct Common_Stor {
+X int maxtab; /* high-water-mark for site tab */
+X int Single_Site_Tab; /* entry into site tab for a site */
+X /* passed via -s or -S option */
+X bool force_any; /* TRUE: -f option without site */
+X bool one_site; /* TRUE: call for a specific site */
+X bool nodetach; /* TRUE: -D or --nodetach found */
+X bool ifwork; /* TRUE: -C or --ifwork found */
+X char *Grade; /* use this as grade for calls */
+X char *Poll_Pgm; /* our name without path */
+X char *called_as; /* but called by this name */
+X int our_pid; /* our process-id */
+X char *Uucico; /* cico's name without path */
+X char This_Site[MAXHOSTNAMELEN+1]; /* our site name */
+X char Single_Site[MAXHOSTNAMELEN+1]; /* name of site found as arg */
+X union wait *W_Stat;
+X char *Usort; /* will hold uuname + subcmd */
+X struct passwd *pwd;
+X struct timeval tp;
+X struct timezone tzp;
+X struct Sites Sitetab[SITE_MAX];
+X char mon[3];
+X int day, hh, mm, ss;
+X char oname[24];
+X char jname[20];
+X char tstr[20];
+X char ctag[2];
+X char workf[300];
+X char call_args[300];
+X };
+X
+/* copied from taylor uucp "uudefs.h"
+X *
+X **/
+X
+/* The tstatus_type enumeration holds the kinds of status information
+X we put in the status file. The order of entries here corresponds
+X to the order of entries in the azStatus array. */
+enum tstatus_type
+{
+X /* Conversation complete. */
+X STATUS_COMPLETE,
+X /* Port unavailable. */
+X STATUS_PORT_FAILED,
+X /* Dial failed. */
+X STATUS_DIAL_FAILED,
+X /* Login failed. */
+X STATUS_LOGIN_FAILED,
+X /* Handshake failed. */
+X STATUS_HANDSHAKE_FAILED,
+X /* Failed after logging in. */
+X STATUS_FAILED,
+X /* Talking to remote system. */
+X STATUS_TALKING,
+X /* Wrong time to call. */
+X STATUS_WRONG_TIME,
+X /* Number of status values. */
+X STATUS_VALUES
+};
+X
+/* ----end-- copied from taylor uucp "uudefs.h" */
+X
+X
+/* define the prototypes
+X * */
+X
+int set_mlog(FILE **seclog, struct Common_Stor *);
+int get_sites(struct Common_Stor *);
+int Call_Cico(int argc, char *argv[], struct Common_Stor *);
+int get_args(int argc, char *argv[], struct Common_Stor *);
+int Housekeeping(int argc, char *argv[], struct Common_Stor *);
+int Chk_Status(int argc, char *argv[],
+X struct timeval tcc,
+X struct timezone tzcc,
+X struct Common_Stor *);
+int Check_Site(struct Common_Stor *);
+int start_at(char *name, struct Common_Stor *);
+void *storage(unsigned count, char *errloc, int *Rc, struct Common_Stor *);
+X
+extern int gethostname(char *name, int namelen);
+extern int system(char *cmd);
+extern int fork();
+extern int unlink(char *path);
+extern void *malloc(size_t byteSize);
+extern int execve(char *name, char *argv[], char *envp[]);
+extern int execlp(char *name, char *arg0, ...);
+extern int chmod(char *path, int mode);
+extern int getuid();
+extern int getpid();
+extern int isatty(int);
+extern char *ttyname(int);
+extern void free(void *ptr);
+#ifdef __STRICT_ANSI__
+extern FILE *popen(char *command, char *type);
+extern int pclose(FILE *stream);
+extern void _exit(int status);
+#endif /* __STRICT_ANSI__ */
+#ifdef __STRICT_BSD__
+extern int fprintf(FILE *stream, const char *format, ...);
+extern int fclose(FILE *stream);
+extern char *strerror(int errnum);
+extern int fflush(FILE *stream);
+extern void exit(int status);
+extern int fscanf(FILE *stream, const char *format, ...);
+extern int sscanf(char *s, const char *format, ...);
+#endif /* __STRICT_BSD__ */
+X
+/* --------------------------------------------------------------------------*/
+/* Main */
+/* --------------------------------------------------------------------------*/
+X
+int main(int argc, char *argv[])
+{
+X
+X struct Common_Stor *sCom_Sto;
+X int Maxrc = OK; /* Max err-code encountered so far */
+X int k = 0;
+X
+X if ( NULL == (sCom_Sto = malloc(sizeof(struct Common_Stor))) ) {
+X fprintf(stderr,"%s: (C) malloc failed (%s). Reason: %i (%s)\n",
+X AUTO_DIR,"Common_Stor",errno,strerror(errno));
+X exit (CAT);
+X }
+X
+X Maxrc = Housekeeping(argc, argv, sCom_Sto);
+X
+/* If any errors popped up so far they are of such a nature that it is very
+X * questionable to continue; so we better bail out in this case.
+X */
+X if (Maxrc <= WARNING) {
+X if ((sCom_Sto->W_Stat = (union wait *)storage (sizeof(union wait),
+X "W_Stat",&Maxrc,sCom_Sto)) != NULL) {
+X k = Call_Cico(argc, argv, sCom_Sto);
+X Maxrc = Maxrc >= k ? Maxrc:k;
+X free(sCom_Sto->W_Stat);
+X sCom_Sto->W_Stat = NULL;
+X }
+X }
+X k = gettimeofday(&sCom_Sto->tp, &sCom_Sto->tzp);
+X fprintf(stderr,"%s: (I) ended with rc = %i on %s\n",
+X sCom_Sto->called_as,
+X Maxrc,k!=0 ? "time unavailable":ctime(&sCom_Sto->tp.tv_sec));
+X fclose(stderr);
+X free(sCom_Sto);
+X sCom_Sto = NULL;
+X exit (Maxrc);
+}
+X
+/* --------------------------------------------------------------------------*/
+/* Functions */
+/* --------------------------------------------------------------------------*/
+X
+/* --------------------------------------------------------------------
+X * housekeeping
+X */
+X
+int Housekeeping(argc, argv, sCom_Sto)
+X int argc;
+X char *argv[];
+X struct Common_Stor *sCom_Sto; {
+X
+X FILE *seclog = NULL;
+X int Rc = OK;
+X int Rci = OK; /* intermediate rc as returnd by functions */
+X
+X sCom_Sto->our_pid = getpid();
+X
+/*
+X * get our name sans path
+X * */
+X
+X sCom_Sto->called_as = argv[0] + strlen(*argv);
+X for(;sCom_Sto->called_as >= argv[0] && *--sCom_Sto->called_as != '/';)
+X ;
+X sCom_Sto->called_as++;
+X
+/* if defined set up the name of the message log file otherwise
+X * stderr will be used. Setup the cmd string to obtain all known sitenames
+X * which will be sorted in ascending order with duplicates removed
+X * */
+X
+X Rc = set_mlog(&seclog, sCom_Sto);
+X if (Rc > WARNING)
+X return (Rc);
+X
+/* put out the started message including the time and the userid.
+X * */
+X
+X sCom_Sto->pwd = getpwuid(getuid());
+X
+X if ((gettimeofday(&sCom_Sto->tp, &sCom_Sto->tzp)) != 0) { /* unacceptable error */
+X fprintf(stderr,"%s: (C) gettimeofday() failed. Reason: %i (%s)\n",
+X sCom_Sto->called_as,errno,strerror(errno));
+X return (Rc >= CAT ? Rc:CAT);
+X }
+X
+X if (seclog != NULL) {
+X fprintf(seclog,"\n%s: (I) started by `%s' (%s) on %s",
+X sCom_Sto->called_as,
+X (sCom_Sto->pwd==NULL) ? "???":sCom_Sto->pwd->pw_name,
+X ttyname(0),
+X ctime(&sCom_Sto->tp.tv_sec));
+X fclose(seclog);
+X }
+X fprintf(stderr,"\n%s: (I) started by `%s' on %s",
+X sCom_Sto->called_as,
+X (sCom_Sto->pwd==NULL) ? "???":sCom_Sto->pwd->pw_name,
+X ctime(&sCom_Sto->tp.tv_sec));
+X
+/* set up the default grade
+X * */
+X
+X sCom_Sto->Grade = dGrade; /* set default for now */
+X if (strlen(cGrade) != 1) {
+X fprintf(stderr,"%s: (W) grade %s invalid; default `%s' used\n",
+X sCom_Sto->called_as,cGrade,sCom_Sto->Grade);
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X }
+X else
+X sCom_Sto->Grade = cGrade; /* Ok, take the one from conf.h */
+X
+/* get the program to actually call the site. This is normally UUCICO.
+X * */
+X
+X sCom_Sto->Uucico = Cico_Dir + strlen(Cico_Dir);
+X for(;sCom_Sto->Uucico >= Cico_Dir && *--sCom_Sto->Uucico != '/';)
+X ;
+X sCom_Sto->Uucico++;
+X
+/* get the path to ourself.
+X * */
+X
+X sCom_Sto->Poll_Pgm = Auto_Dir + strlen(Auto_Dir);
+X for(;sCom_Sto->Poll_Pgm >= Auto_Dir && *--(sCom_Sto->Poll_Pgm) != '/';)
+X ;
+X sCom_Sto->Poll_Pgm++;
+X
+/* obtain our sitename
+X * */
+X
+X if ((gethostname(sCom_Sto->This_Site,MAXHOSTNAMELEN+1)) != 0) {
+X fprintf(stderr,"%s: (W) hostname could not be obtained\n",
+X sCom_Sto->called_as);
+X Rc = (Rc >= WARNING) ? Rc:WARNING;
+X }
+X
+/* obtain all known sitenames
+X * */
+X
+X Rci = get_sites(sCom_Sto);
+X Rc = Rci > Rc ? Rci:Rc;
+X
+/* check the arguments that we are called with
+X * */
+X
+X Rci = get_args(argc, argv, sCom_Sto);
+X Rc = Rci > Rc ? Rci:Rc;
+X
+X return (Rc);
+}
+X
+/* --------------------------------------------------------------------
+X * check all relevant arguments that have been passed to us. Those args
+X * that may be needed for a recall will be copied to a workfield.
+X * */
+X
+int get_args(int argc, char *argv[], struct Common_Stor *sCom_Sto) {
+X
+X int j = 0;
+X int Rc = OK;
+X int Rci = OK;
+X
+X strcpy(sCom_Sto->Single_Site,"");
+X sCom_Sto->force_any = FALSE;
+X sCom_Sto->one_site = FALSE;
+X sCom_Sto->nodetach = FALSE;
+X
+X strcpy(sCom_Sto->call_args,AUTO_DIR); /* specify complete path to us */
+X strcat(sCom_Sto->call_args," "); /* and separate by one space */
+X for (j=1;j<argc;j++) {
+X if (strcmp(argv[j],"--nodetach") == 0 ||
+X strcmp(argv[j],"-D") == 0) {
+X sCom_Sto->nodetach = TRUE;
+X strcat(sCom_Sto->call_args,"-D ");
+X continue;
+X }
+X if (strcmp(argv[j],"--force") == 0 ||
+X strcmp(argv[j],"-f") == 0) {
+X strcat(sCom_Sto->call_args,"-f ");
+X sCom_Sto->force_any = TRUE;
+X continue;
+X }
+X if (strcmp(argv[j],"--ifwork") == 0 ||
+X strcmp(argv[j],"-C") == 0) {
+X sCom_Sto->ifwork = TRUE;
+X continue;
+X }
+X if ( strncmp(argv[j],"-s",2) == 0 ||
+X strncmp(argv[j],"-S",2) == 0 ||
+X strcmp(argv[j],"--system") == 0) {
+X if (strncmp(argv[j],"-S",2) == 0)
+X sCom_Sto->force_any = TRUE;
+X
+X if (strlen(argv[j]) == 2 || strcmp(argv[j],"--system") == 0) {
+X j++;
+X if (j>=argc) {
+X fprintf(stderr,"%s: (E) System to call is missing\n",
+X sCom_Sto->called_as);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X break;
+X }
+X else {
+X strcpy(sCom_Sto->Single_Site,argv[j]);
+X Rci = Check_Site(sCom_Sto);
+X if (! Rci) {
+X sCom_Sto->one_site = TRUE; /* specific call */
+X strcat(sCom_Sto->call_args,argv[j-1]);
+X strcat(sCom_Sto->call_args," ");
+X strcat(sCom_Sto->call_args,argv[j]);
+X strcat(sCom_Sto->call_args," ");
+X }
+X }
+X Rc = Rci <= Rc ? Rc:Rci;
+X }
+X else {
+X strcpy(sCom_Sto->Single_Site,argv[j]+2);
+X Rci = Check_Site(sCom_Sto);
+X if (! Rci) {
+X sCom_Sto->one_site = TRUE; /* specific call */
+X strcat(sCom_Sto->call_args,argv[j]);
+X strcat(sCom_Sto->call_args," ");
+X }
+X Rc = Rci <= Rc ? Rc:Rci;
+X }
+X continue;
+X }
+X strcat(sCom_Sto->call_args,argv[j]);
+X strcat(sCom_Sto->call_args," ");
+X } /* end copy all arguments */
+X
+X if (sCom_Sto->ifwork) {
+X if (sCom_Sto->one_site) {
+X strcat(sCom_Sto->call_args,"-C ");
+X }
+X else {
+X fprintf(stderr,"%s: (W) no site given, '-C' option is ignored\n",
+X sCom_Sto->called_as);
+X sCom_Sto->ifwork = FALSE;
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X }
+X }
+X
+X if (! sCom_Sto->nodetach) {
+X strcat(sCom_Sto->call_args,"-D ");
+X }
+X
+X return (Rc);
+}
+X
+/* --------------------------------------------------------------------
+X * call uucico or whatever programm is necessary to get connected
+X */
+X
+/* Start uucico and wait for completion. In case the return code is '0'
+X * we're finished; otherwise we'll have to check the status files for any
+X * non successful calls (retry time > 0).
+X * Any such site will be called again at the current time plus any wait
+X * Note:
+X * If the '-D' or '--nodetach' option is missing, uucico will
+X * detach immediate. The return-code is 0 in this case and therefore
+X * we can't check whether the call is successful or not. No recall
+X * is scheduled for such an invocation. If we however get control
+X * to schedule a recall we silently add the '-D' option. To add
+X * the '-D' option in any case may be undesirable for a specific
+X * type of run.
+X */
+X
+int Call_Cico(int argc, char *argv[], struct Common_Stor *sCom_Sto) {
+X
+X int W_Ret = 0;
+X int pid = 0;
+X int Rc = OK;
+X struct timeval tcc;
+X struct timezone tzcc;
+X
+X if ((gettimeofday(&tcc, &tzcc)) != 0) { /* unacceptable error */
+X fprintf(stderr,"%s: (C) gettimeofday() failed. Reason: %i (%s)\n",
+X sCom_Sto->called_as,errno,strerror(errno));
+X Rc = Rc >= CAT ? Rc:CAT;
+X }
+X
+X if (Rc > WARNING) {
+X return (Rc);
+X }
+X
+X fflush(stderr);
+X switch(pid = fork()) {
+X case -1:
+X fprintf(stderr,"%s: (C) could not fork(). Reason-code: %i (%s)\n",
+X sCom_Sto->called_as,errno,strerror(errno));
+X return (CAT);
+X case 0:
+X if ((argv[0] = (char *)storage(strlen(sCom_Sto->Uucico)+1,"argv[0]",
+X &Rc,sCom_Sto)) == NULL) {
+X _exit (CAT);
+X }
+X strcpy(argv[0],sCom_Sto->Uucico); /* change name to be uucico */
+X execve(Cico_Dir, argv, NULL);
+X fprintf(stderr,"%s: (C) could not start %s. Reason-code: %i (%s)\n",
+X sCom_Sto->called_as,
+X sCom_Sto->Uucico,errno,strerror(errno));
+X _exit (CAT); /* child: bail out */
+X default:
+X fprintf(stderr,"%s: (I) starting %s [%d]\n\n",
+X sCom_Sto->called_as,sCom_Sto->Uucico,pid);
+X fflush(stderr); /* maybe we come behind uucico's output */
+X /* if any; it's a race condition */
+X W_Ret = wait(sCom_Sto->W_Stat);
+X if (sCom_Sto->W_Stat->w_termsig == 0) {
+X if (sCom_Sto->W_Stat->w_retcode == 0) {
+X fprintf(stderr,"%s: (I) %s [%d] ended normally\n",
+X sCom_Sto->called_as,sCom_Sto->Uucico,pid);
+X return (OK);
+X }
+X if (sCom_Sto->W_Stat->w_retcode != CAT) {
+X fprintf(stderr,"%s: (I) %s's log may contain further information !\n",
+X sCom_Sto->called_as,sCom_Sto->Uucico);
+X fprintf(stderr,"\n%s: (W) %s [%d] ended with rc = %i\n",
+X sCom_Sto->called_as,
+X sCom_Sto->Uucico,pid,
+X sCom_Sto->W_Stat->w_retcode);
+X return (Chk_Status(argc, argv,
+X tcc, tzcc, sCom_Sto));
+X }
+X else
+X return (CAT); /* we where unable to exec */
+X }
+X else {
+X fprintf(stderr,"\n%s: (E) %s [%d] terminated by signal %i\n",
+X sCom_Sto->called_as,
+X sCom_Sto->Uucico,
+X pid,
+X sCom_Sto->W_Stat->w_termsig);
+X return (SEVERE);
+X }
+X } /* switch (pid = fork()) */
+X return (OK); /* Never reached: silence the compiler */
+}
+X
+X
+/* --------------------------------------------------------------------
+X * check the status after the call has completed and the return code
+X * is > zero. The status is checked for all sites found via uuname or
+X * for one site only (option -s, -S or --system given on call)
+X */
+X
+int Chk_Status(int argc, char *argv[],
+X struct timeval tcc,
+X struct timezone tzcc,
+X struct Common_Stor *sCom_Sto) {
+X
+/*
+X * For all sites found in Site_Tab their status files will be checked.
+X * The table scan will be bypassed for a call to a specific site.
+X * If the call failed the wait period is > 0. We will schedule an at-job
+X * to be run at the time found + the delta. In case we find an old entry
+X * where the time + delta is lower than the current time we'll advance
+X * the current time by 60 secs. and use that value instead.
+X * In case we are invoked to call a specific site and either the -f option or
+X * the site was given as -S... indicating to disregard any wait, we'll
+X * use the time found in the status file increased by 120 secs.
+*/
+X
+X FILE *infile;
+X long secs, retries = 0;
+X long add = 0;
+X int errind = 0;
+X int i = 0;
+X int ecnt = 0;
+X int recall_cnt = 0;
+X char curr_site[MAXHOSTNAMELEN+11] = ""; /* keyword + sitename */
+X bool schedule = TRUE; /* FALSE: no more rescheduling: unspec. + force */
+X int Rc = WARNING; /* uucico got rc = 1 otherwise we were not here */
+X int Rs = 0; /* uucico' reason code from .Status file */
+X
+/*
+X * Note
+X * We have to increase the sum of time and wait by at least one minute.
+X * That is because this time denotes the earliest point *after* which
+X * we may call again.
+X * When a site is called at the wrong time the follwing actions are
+X * taken: wait = 0 && ! force --> no further action (indicator: see log)
+X * wait = 0 && force --> (W) message generated; no further action
+X * wait > 0 && ! force --> normal scheduling at time + wait
+X * wait > 0 && force --> normal scheduling at time+120 secs
+X * We can't depend on the string "Wrong time to call" because the .Status
+X * file may not be updated due to the -c switch. This may lead to a
+X * situation where the site will be called over and over again while it's
+X * still the wrong time. (No we don't want to go fishing for a message in
+X * the uucp LOG!)
+X * In case the -s, -S or --system option was given we will only
+X * check that site and schedule a recall for it so far the
+X * conditions are met.
+X * In case the -C or --ifwork switch is given without naming a site a
+X * the option is dropped and only an unspecific call is scheduled.
+X * */
+X
+X if (sCom_Sto->one_site) {
+X i = sCom_Sto->Single_Site_Tab;
+X if (strncmp(sCom_Sto->Sitetab[i].name,
+X sCom_Sto->Single_Site,
+X sizeof(sCom_Sto->Single_Site)) != 0) {
+X fprintf(stderr,"%s: (C) internal index-error (%d): %s found: %s\n",
+X sCom_Sto->called_as,
+X i,
+X sCom_Sto->Single_Site,
+X sCom_Sto->Sitetab[i].name);
+X Rc = Rc >= CAT ? Rc:CAT;
+X return (Rc); /* break unconditionally */
+X }
+X }
+X
+X for (i = sCom_Sto->Single_Site_Tab; i <= sCom_Sto->maxtab; i++) {
+X sprintf(sCom_Sto->workf,"%s%s",STATUS_DIR,sCom_Sto->Sitetab[i].name);
+X if ((infile=fopen(sCom_Sto->workf,"r")) == NULL) {
+X ecnt++;
+X fprintf(stderr,"%s: (W) no access to status file for: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X if (sCom_Sto->one_site) {
+X break;
+X }
+X else {
+X continue;
+X }
+X }
+X
+X fscanf(infile,"%d %d %ld %ld",&errind,&retries,&secs,&add);
+X fclose(infile);
+X
+X /*
+X * in case the .Status file is not updated and we have a call to
+X * a specific site we try to give some clues of what went wrong
+X * (we won't succeed in any case!)
+X */
+X
+X if (sCom_Sto->Sitetab[i].stat_lastcall == secs && sCom_Sto->one_site) {
+X
+X if (errind == 0 && retries == 0 && add == 0)
+X break;
+X
+X if (errind > 0) {
+X if (tcc.tv_sec <= (secs+add) && ! sCom_Sto->Sitetab[i].force) {
+X fprintf(stderr,"%s: (W) retry time not reached for site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X }
+X else {
+X fprintf(stderr,"%s: (E) maybe port/site unavailable site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X }
+X else {
+X if (sCom_Sto->one_site) {
+X fprintf(stderr,"%s: (E) unknown error for call to site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X }
+X fprintf(stderr,"%s: (W) no recall scheduled for site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X break; /* bail out completely */
+X }
+X
+X if (sCom_Sto->Sitetab[i].stat_lastcall == secs) {
+X if (sCom_Sto->one_site)
+X break;
+X else
+X continue;
+X }
+X
+X Rs = OK; /* if Rs is > WARNING we won't schedule a recall */
+X switch(errind) {
+X case STATUS_COMPLETE:
+X if (add != 0 || retries != 0) {
+X fprintf(stderr,"%s: (E) unknown error for call to site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X Rs = Rs >= SEVERE ? Rs:SEVERE;
+X }
+X break;
+X case STATUS_PORT_FAILED:
+X fprintf(stderr,"%s: (E) port was unavailable site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X break;
+X case STATUS_DIAL_FAILED:
+X fprintf(stderr,"%s: (E) dail failed for site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X break;
+X case STATUS_LOGIN_FAILED:
+X fprintf(stderr,"%s: (E) login for site: %s failed\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X Rs = Rs >= SEVERE ? Rs:SEVERE;
+X break;
+X case STATUS_HANDSHAKE_FAILED:
+X fprintf(stderr,"%s: (E) handshake failed site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X break;
+X case STATUS_FAILED:
+X fprintf(stderr,"%s: (E) invalid status after login site: %s \n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X break;
+X case STATUS_TALKING:
+X break;
+X case STATUS_WRONG_TIME:
+X fprintf(stderr,"%s: (W) it's the wrong time to call site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X Rs = Rs >= SEVERE ? Rs:SEVERE;
+X break;
+X default:
+X fprintf(stderr,"%s: (E) unknown error for call to site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X Rs = Rs >= SEVERE ? Rs:SEVERE;
+X break;
+X }
+X Rc = Rs > Rc ? Rs:Rc;
+X if (Rs > WARNING) { /* schedule a recall ? */
+X fprintf(stderr,"%s: (W) no recall scheduled for site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X if (sCom_Sto->one_site)
+X break;
+X else
+X continue;
+X }
+X
+X if (add == 0) {
+X fprintf(stderr,"%s: (W) no delay found for site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X }
+X
+X
+X if (! schedule) {
+X recall_cnt += 1;
+X continue; /* scheduling already done: unspec. + force */
+X }
+X if ((gettimeofday(&sCom_Sto->tp, &sCom_Sto->tzp)) != 0) {
+X fprintf(stderr,"%s: (C) gettimeofday() failed. Reason: %i (%s)\n",
+X sCom_Sto->called_as,errno,strerror(errno));
+X fclose(infile);
+X Rc = Rc >= CAT ? Rc:CAT;
+X break; /* break unconditionally */
+X }
+X
+X if (sCom_Sto->force_any || sCom_Sto->Sitetab[i].force) {
+X add = secs + 120; /* shorten the wait */
+X }
+X else { /* ! force */
+X
+/*
+X * check for an already scheduled recall. For we don't keep
+X * a file of already scheduled recalls the only way to recognize
+X * this, is to check the current time against that of the .Stats file.
+X * In case the current time is >= the .Stats-time + n-secs fuzz value
+X * we assume (99.99% correctness) that we have already scheduled a recall
+X * for this site. If this assumption is incorrect a call will be
+X * scheduled on the next unspecific failing call. This check can't
+X * be done for forced call because the .Stats will be updated.
+X */
+X if (sCom_Sto->tp.tv_sec >= secs+2) {
+X fprintf(stderr,"%s: (W) Retry time not reached for site: %s\n",
+X sCom_Sto->called_as,
+X sCom_Sto->Sitetab[i].name);
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X if (sCom_Sto->one_site)
+X break;
+X else
+X continue;
+X }
+X add += secs + 60; /* if not force then take the full wait */
+X } /* force */
+X
+X if (sCom_Sto->tp.tv_sec >= add) {
+X add = sCom_Sto->tp.tv_sec + 60; /* time < current time */
+X }
+X
+X sscanf(ctime(&add),"%*s %s %d %d:%d:%d",sCom_Sto->mon,
+X &sCom_Sto->day,
+X &sCom_Sto->hh,
+X &sCom_Sto->mm,
+X &sCom_Sto->ss);
+X
+X sprintf(sCom_Sto->oname,"/tmp/at.%d.%02d%02d%02d",sCom_Sto->our_pid,
+X sCom_Sto->hh,
+X sCom_Sto->mm,
+X sCom_Sto->ss);
+X if (! sCom_Sto->one_site) {
+X strcpy(curr_site,"-s");
+X strcat(curr_site,sCom_Sto->Sitetab[i].name);
+X }
+X
+X /*
+X * If 'onesite' is FALSE and 'force' is TRUE
+X * we will reschedule one unspecific call an let UUCICO decide
+X * which site should be called (is there any work?)
+X */
+X
+X if ( ! sCom_Sto->one_site && sCom_Sto->force_any) {
+X recall_cnt += 1;
+X schedule = FALSE;
+X continue;
+X }
+X strcat(sCom_Sto->call_args,curr_site);
+X Rs = start_at(sCom_Sto->Sitetab[i].name, sCom_Sto);
+X Rc = Rs >= Rc ? Rs:Rc;
+X unlink(sCom_Sto->oname);
+X if (Rc > SEVERE || sCom_Sto->one_site)
+X break;
+X } /* for (i = Single_Site_Tab; ...) */
+X
+X if (ecnt > sCom_Sto->maxtab) {
+X fprintf(stderr,"%s: (E) no access to status files; no scheduling done\n",
+X sCom_Sto->called_as);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X else {
+X if (! schedule) {
+X if (recall_cnt == 1) {
+X strcat(sCom_Sto->call_args,curr_site);
+X }
+X Rs = start_at("any site", sCom_Sto);
+X Rc = Rs >= Rc ? Rs:Rc;
+X unlink(sCom_Sto->oname);
+X }
+X }
+X return (Rc);
+}
+X
+X /*
+X *
+X */
+X
+int start_at(char *site, struct Common_Stor *sCom_Sto) {
+X
+FILE *outfile;
+int W_Ret = 0;
+int Rc = OK;
+int pid = 0;
+X
+/*
+X * if we can't open the workfile to be passed to AT we'll abandon
+X * this site and set the rc accordingly
+X * */
+X
+X if ((outfile=fopen(sCom_Sto->oname,"w")) == NULL) {
+X fprintf(stderr,"%s: (E) could not open workfile %s. No scheduling for: %s\n",
+X sCom_Sto->called_as,
+X sCom_Sto->oname,
+X site);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X fclose(outfile);
+X unlink(sCom_Sto->oname);
+X return (Rc); /* bail out here */
+X }
+X sprintf(sCom_Sto->jname,"at.%d.%02d%02d%02d",sCom_Sto->our_pid,
+X sCom_Sto->hh,
+X sCom_Sto->mm,
+X sCom_Sto->ss);
+X fprintf(outfile,"%s \n",sCom_Sto->call_args);
+X sprintf(sCom_Sto->tstr,"%02d%02d",sCom_Sto->hh,
+X sCom_Sto->mm);
+X sprintf(sCom_Sto->ctag,"%d",sCom_Sto->day);
+X fclose(outfile);
+X if ((chmod(sCom_Sto->oname,00644)) != 0) {
+X fprintf(stderr,"%s: (W) chmod to %s failed. Reason_code: %i (%s)\n",
+X sCom_Sto->called_as,
+X sCom_Sto->oname,
+X errno,
+X strerror(errno));
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X }
+X
+X switch (pid = fork()) {
+X case -1:
+X fprintf(stderr,"%s: (C) could not fork(). Reason-code: %i (%s)\n",
+X sCom_Sto->called_as,errno,strerror(errno));
+X return (Rc >= CAT ? Rc:CAT);
+X case 0:
+X if (*at_opt == '\0')
+X execlp(at_cmd, at_cmd, sCom_Sto->tstr,
+X sCom_Sto->mon, sCom_Sto->ctag,
+X sCom_Sto->oname, 0);
+X else
+X execlp(at_cmd, at_cmd, at_opt, sCom_Sto->tstr,
+X sCom_Sto->mon, sCom_Sto->ctag,
+X sCom_Sto->oname, 0);
+X
+X fprintf(stderr,"%s: (C) could not start AT-cmd. Reason-code: %i (%s)\n",
+X sCom_Sto->called_as,
+X errno,strerror(errno));
+X _exit (CAT); /* child: bail out */
+X default:
+X fprintf(stderr,"%s: (I) at [%d] started. Job name: %s\n",
+X sCom_Sto->called_as,
+X pid,
+X sCom_Sto->jname);
+X W_Ret = wait(sCom_Sto->W_Stat);
+X if (sCom_Sto->W_Stat->w_termsig == 0) {
+X if (sCom_Sto->W_Stat->w_retcode != 0) {
+X if (sCom_Sto->W_Stat->w_retcode != CAT) {
+X fprintf(stderr,"%s: (E) at-cmd failed for some reason\n",
+X sCom_Sto->called_as);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X else {
+X Rc = Rc >= CAT ? Rc:CAT;
+X }
+X
+X fprintf(stderr,"%s: (I) at [%d] ended with rc = %i\n",
+X sCom_Sto->called_as,
+X pid,
+X sCom_Sto->W_Stat->w_retcode);
+X /* bail out in case wait returned > SEVERE */
+X if (Rc > SEVERE) {
+X return (Rc);
+X }
+X }
+X else {
+X fprintf(stderr,"%s: (I) at-cmd [%d] ended normally\n",
+X sCom_Sto->called_as,
+X pid);
+X }
+X }
+X else {
+X fprintf(stderr,"%s: (E) at [%d] terminated by signal %i\n",
+X sCom_Sto->called_as,
+X pid,
+X sCom_Sto->W_Stat->w_termsig);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X } /* switch (pid = fork()) */
+X return (Rc);
+}
+/* -----------------------------------------------------------------
+X * check the site passed via -s or -S option to be a valid one and
+X * not to be our hostname.
+X * */
+X
+int Check_Site(struct Common_Stor *sCom_Sto) {
+X
+X int i,j = 0;
+X sCom_Sto->Single_Site_Tab = 0;
+X if (strcmp(sCom_Sto->Single_Site,sCom_Sto->This_Site) == 0) {
+X fprintf(stderr,"%s: (E) won't call *ourself* %s\n",
+X sCom_Sto->called_as,sCom_Sto->Single_Site);
+X return(SEVERE);
+X }
+X for(i=0;i<=sCom_Sto->maxtab;i++) {
+X if ((j=strcmp(sCom_Sto->Sitetab[i].name,sCom_Sto->Single_Site)) >= 0) {
+X break;
+X }
+X }
+X if (j != 0) {
+X fprintf(stderr,"%s: (E) unknown site: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Single_Site);
+X return(SEVERE);
+X }
+X sCom_Sto->Single_Site_Tab = i;
+X sCom_Sto->Sitetab[i].flag = TRUE;
+X if (sCom_Sto->force_any) {
+X sCom_Sto->Sitetab[i].force = TRUE;
+X sCom_Sto->force_any = FALSE;
+X }
+X return(OK);
+}
+X
+X /* ------------------------------------------------------------------
+X * storage - get some memory
+X */
+X
+void *storage(unsigned count,
+X char *location,
+X int *Rc,
+X struct Common_Stor *sCom_Sto)
+{
+X void *p;
+X
+X if( NULL == (p= malloc(count)) ) {
+X fprintf(stderr,"%s: (C) malloc failed (%s). Reason: %i (%s)\n",
+X sCom_Sto->called_as,location,errno,strerror(errno));
+X *Rc = *Rc >= CAT ? *Rc:CAT;
+X }
+X return p;
+}
+X
+/* ------------------------------------------------------------------
+X * if defined open the message log file otherwise all mesages will go
+X * to stderr. If UNAME_DIR is defined construct the command to be
+X * passed to popen(); if undefined the deafult will be used
+X * */
+X
+int set_mlog(FILE **seclog, struct Common_Stor *sCom_Sto) {
+X
+X int Rc = 0;
+X
+#ifdef ALOG_FILE
+X if (!isatty(0)) {
+X if ((freopen(Msg_Log,"a",stderr)) == NULL) {
+X fprintf(stdout,"%s: (C) Could not open msglog: %s\n",
+X sCom_Sto->called_as,Msg_Log);
+X return (Rc >= CAT ? Rc:CAT);
+X }
+X }
+X else {
+X if ((*seclog = fopen(Msg_Log,"a")) == NULL) {
+X fprintf(stderr,"%s: (C) Could not open msglog: %s\n",
+X sCom_Sto->called_as,Msg_Log);
+X return (Rc >= CAT ? Rc:CAT);
+X }
+X }
+#endif /* ALOG_FILE */
+X
+/* set up the pipe together with the complete path to uuname */
+X
+#ifdef UNAME_DIR
+X if ((sCom_Sto->Usort = (char *)storage (sizeof(UNAME_DIR)+sizeof(subcmd),
+X "Sort",&Rc, sCom_Sto)) != NULL) {
+X strncpy(sCom_Sto->Usort,UNAME_DIR,strlen(UNAME_DIR)); /* paste in the path */
+X strcat(sCom_Sto->Usort,subcmd); /* chain the pipe to it */
+X }
+#else /* ! UNAME_DIR */
+X sCom_Sto->Usort = &Sort; /* set pointer to uuname + sort */
+#endif /* UNAME_DIR */
+X
+X return (Rc);
+}
+X
+/* ------------------------------------------------------------------
+X * obtain all active sitenames
+X * */
+X
+int get_sites(struct Common_Stor *sCom_Sto) {
+X
+X int i = 0;
+X int n;
+X int Rc = 0;
+X FILE *infile, *statsfile;
+X
+X if ((infile=popen(sCom_Sto->Usort,"r")) != NULL) {
+X while(fgets(sCom_Sto->Sitetab[i].name,MAXHOSTNAMELEN+1,infile)) {
+X if (i > SITE_MAX) { /* let'm run so that we can give */
+X i++; /* the user some guidance */
+X continue; /* we'll tell the user later on */
+X }
+X n = strlen(sCom_Sto->Sitetab[i].name)-1; /* offset: next to last char */
+X sCom_Sto->Sitetab[i].name[n] = '\0'; /* strip trailing newline */
+X sCom_Sto->Sitetab[i].flag = FALSE; /* TRUE: poll this site only*/
+X sCom_Sto->Sitetab[i].force = FALSE; /* TRUE: force call */
+X strcpy(sCom_Sto->Sitetab[i].grade,sCom_Sto->Grade);
+X sprintf(sCom_Sto->workf,"%s%s",STATUS_DIR,sCom_Sto->Sitetab[i].name);
+X if ((statsfile=fopen(sCom_Sto->workf,"r")) == NULL) {
+X fprintf(stderr,"%s: (W) no access to status file for: %s\n",
+X sCom_Sto->called_as,sCom_Sto->Sitetab[i].name);
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X }
+X else {
+X fscanf(statsfile,"%d %d %ld %ld %s",
+X &sCom_Sto->Sitetab[i].stat_code,
+X &sCom_Sto->Sitetab[i].stat_retries,
+X &sCom_Sto->Sitetab[i].stat_lastcall,
+X &sCom_Sto->Sitetab[i].stat_delay,
+X sCom_Sto->workf);
+X
+X fclose(statsfile);
+X if ((sCom_Sto->Sitetab[i].stat_errtext =
+X (char *)storage (sizeof(sCom_Sto->workf),
+X "stat_errtext",&Rc, sCom_Sto)) == NULL) {
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X }
+X else
+X strcpy(sCom_Sto->Sitetab[i].stat_errtext,sCom_Sto->workf);
+X }
+X sCom_Sto->maxtab = i++; /* set high-water-mark */
+X }
+X if (ferror(infile) != 0) {
+X fprintf(stderr,"%s: (E) fgets() for sitenames failed reason-code: %i (%s)\n",
+X sCom_Sto->called_as,errno,strerror(errno));
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X pclose(infile);
+X
+X /*
+X * check for an empty table (strange but possible)
+X */
+X
+X if (sCom_Sto->maxtab == 0) {
+X fprintf(stderr,"%s: (E) could not obtain sitenames.\n",
+X sCom_Sto->called_as);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X else {
+X
+X /* in case the internal table overflows we'll now give notice and tell
+X * the user by which amount the table has to be increased to hold all
+X * site-names
+X */
+X
+X if (i > SITE_MAX) {
+X fprintf(stderr,"%s: (E) number of sites > internal tab\n",
+X sCom_Sto->called_as);
+X fprintf(stderr,"%s: (E) increase SITE_MAX to >= %d and recompile\n",
+X sCom_Sto->called_as,i);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X } /* sCom_Sto->maxtab == 0 */
+X
+X }
+X else /* infile == NULL */
+X {
+X fprintf(stderr,"%s: (E) could not sort sitenames. Reason-code: %i (%s)\n",
+X sCom_Sto->called_as,errno,strerror(errno));
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X
+X } /* if ((infile=popen(sCom_Sto->Usort,"r")) ... */
+X
+X return (Rc);
+}
+SHAR_EOF
+chmod 0444 uupoll/autopoll.c ||
+echo 'restore of uupoll/autopoll.c failed'
+Wc_c="`wc -c < 'uupoll/autopoll.c'`"
+test 44031 -eq "$Wc_c" ||
+ echo 'uupoll/autopoll.c: original size 44031, current size' "$Wc_c"
+fi
+# ============= uupoll/conf.h ==============
+if test -f 'uupoll/conf.h' -a X"$1" != X"-c"; then
+ echo 'x - skipping uupoll/conf.h (File already exists)'
+else
+echo 'x - extracting uupoll/conf.h (Text)'
+sed 's/^X//' << 'SHAR_EOF' > 'uupoll/conf.h' &&
+#ifndef CONF
+X #define CONF
+X
+/* $Id: uupoll.shar,v 1.1 1994/05/07 18:09:32 ache Exp $ */
+/* $Log: uupoll.shar,v $
+# Revision 1.1 1994/05/07 18:09:32 ache
+# Upgrade to version 1.05
+#
+X * Revision 1.9 1994/04/14 17:24:58 kdburg
+X * added comment to the AT_OPTION
+X *
+X * Revision 1.8 1994/03/26 17:41:06 kdburg
+X * the location of uuname can now be specified. This was added due to
+X * the fact that cron (NeXT 3.2 and +) now obeys the path that was active
+X * during boot (either /.path or set within /etc/rc) so autopoll/uupoll
+X * always got the wrong uuname when called direct fron cron. This is
+X * not true when called via a script that does a 'su - user -c ...'
+X *
+X * Revision 1.7 1993/06/26 16:21:47 kdburg
+X * default location for logfiles changed
+X *
+X * Revision 1.6 1993/05/14 22:32:05 kdburg
+X * change to HAVE_SPOOLDIR_TAYLOR
+X *
+X * Revision 1.5 1993/05/09 13:16:53 kdburg
+X * make have-autopoll the default
+X *
+X * Revision 1.4 1993/05/08 23:17:34 kdburg
+X * cleanup and to reflect changes made to autopoll/uupoll
+X *
+X * Revision 1.3 1993/04/29 10:46:34 kdburg
+X * added def for STATUS_DIR
+X *
+X * Revision 1.2 1993/04/27 15:31:47 kdburg
+X * rearranged the defs; changed LOG_DIR to ALOG_DIR in case uupoll
+X * will have one too; we need then eventually 2 different dirs.
+X *
+X * Revision 1.1 1993/04/26 21:20:12 kdburg
+X * Initial revision
+X * */
+X
+/* --------- combined config file for uupoll and autopoll */
+/* --------- change the following defines to meet your needs */
+X
+/* define the default grade to be inserted into the pollfile name */
+#define DEF_GRADE "A"
+X
+/* Define the complete path to the uuname program.
+X * If undefined we'll use just the name 'uuname' to call it
+X * */
+#define UNAME_DIR "/usr/local/bin/uuname"
+X
+/* define the path to the directory which does contain uucico */
+#define CICO_DIR "/usr/local/lib/uucp/uucico"
+X
+/* define the path to the directory which holds all the uucp files.
+X * We'll place the poll file in one of it's subdirectories
+X * */
+#define SPOOL_DIR "/usr/spool/uucp"
+X
+/* at least one of the follwing must be defined To use the second or
+X * third set of definitions, change the ``#if 1'' to ``#if 0''
+X * and change the appropriate ``#if 0'' to ``#if 1''.
+X * */
+#if 0
+#define HAVE_SPOOLDIR_BSD
+#endif
+#if 0
+#define HAVE_SPOOLDIR_HDB
+#endif
+#if 1
+#define HAVE_SPOOLDIR_TAYLOR
+#endif
+X
+/* define the maximum number of sites in your config or L.sys */
+#define SITE_MAX 100
+X
+/* define the path to the directory which is to contain the
+X * message log created by uupoll and the file name itself.
+X * change the ``#if 1'' to ``#if 0'' to have the messages on stderr
+X * */
+#if 1
+#define ULOG_FILE "/Logfiles/poll.log"
+#endif
+X
+/* change if to 0 if you don't have autopoll installed. */
+#if 1
+#define AUTO_POLL
+#endif
+X
+/* The following defs are irrelevant if you don't have autopoll */
+X
+/* define the options to be given to the at cmd (-s -c -m). The default
+X * is shown (use csh and send mail after execution) if AT_OPTION is
+X * undefined
+X * */
+#define AT_OPTION "-mc"
+X
+/* Define the complete path to the autopoll program.
+X * This will assure that we get the one we want
+X * The path must be the same as given in Makefile (lbindir)
+X * */
+#define AUTO_DIR "/usr/local/lib/uucp/autopoll"
+X
+/* define the path to the directory which is to contain the
+X * message log created by autopoll and the file name itself.
+X * change the ``#if 1'' to ``#if 0'' to have the messages on stderr
+X * */
+#if 1
+#define ALOG_FILE "/Logfiles/poll.log"
+#endif
+X
+/* define the full path to the directory which holds the status files
+X * The name should be given *except* the sitename. A trailing `/' if any
+X * must be given.
+X * Example: /usr/spool/uucp/.Status/sys.sitename
+X * then specify STATUS_DIR as
+X * "/usr/spool/uucp/.Status/sys."
+X * */
+#define STATUS_DIR "/usr/spool/uucp/.Status/"
+#endif
+SHAR_EOF
+chmod 0444 uupoll/conf.h ||
+echo 'restore of uupoll/conf.h failed'
+Wc_c="`wc -c < 'uupoll/conf.h'`"
+test 3884 -eq "$Wc_c" ||
+ echo 'uupoll/conf.h: original size 3884, current size' "$Wc_c"
+fi
+# ============= uupoll/uupoll.8c ==============
+if test -f 'uupoll/uupoll.8c' -a X"$1" != X"-c"; then
+ echo 'x - skipping uupoll/uupoll.8c (File already exists)'
+else
+echo 'x - extracting uupoll/uupoll.8c (Text)'
+sed 's/^X//' << 'SHAR_EOF' > 'uupoll/uupoll.8c' &&
+.\" Copyright (c) 1986 Regents of the University of California.
+.\" All rights reserved. The Berkeley software License Agreement
+.\" specifies the terms and conditions for redistribution.
+.\"
+.\" @(#)uupoll.8c 6.1 (Berkeley) 4/24/86
+.\" @(#)uupoll.8c 1.11 (incoahe) 5/09/1993
+.\"
+.TH UUPOLL 8C "Mai 09, 1993"
+.UC 6
+.SH NAME
+uupoll \- poll a remote \s-1UUCP\s+1 site
+.SH SYNOPSIS
+.B uupoll
+[
+.BI \-g grade
+] [
+.B \-n
+] [
+.B \-x
+]
+.I system ... ...
+.SH SUMMARY
+This version of
+.IR uupoll
+can be used to fully replace the vendor supplied
+.IR uupoll
+that comes with the NeXTStep OS. The original version (up to 3.1) had a
+X bug in that
+X an unknown site given as argument would yield in a `Bus error' condition.
+Using any other type of UUCP like Taylor-UUCP with the option of having
+a different file structure as well as a different L.sys will therefore
+make it necessary to do maintenance to the (unused) L.sys as well to keep
+.IR uupoll
+going. This one has been programmed from scratch due to the fact that no
+source code was available. Some enhancements have been incorporated into
+this version:
+.PP
+\- the default grade may now be compiled different from `A'.
+.PP
+\- the options may now be given in any order and the \-g option may be given
+more than once. Any option will be used immediately when encountered and
+will stay in effect unless reset; this does not apply to the \-x and \-n
+option which can't be reset. The processing of options is guaranteed to be
+from left to right so that some grouping may be achieved (see below).
+.PP
+\-
+.IR uupoll
+may be used to call any program instead of
+.IR uucico
+namely
+.IR autopoll
+to ease the task of rescheduling a failed call.
+.SH DESCRIPTION
+.I Uupoll
+is used to force a poll of a remote system. It queues a null job for the
+remote system, unless the \-x option has been given, and then invokes
+either
+.IR uucico (8C)
+or
+.IR autopoll (8C)
+or any other program depending on how
+.IR uupoll
+is customized. If used in conjunction with
+.IR autopoll
+the latter will then invoke
+.IR uucico.
+.SH OPTIONS
+The following options are available:
+.TP 8
+.BI \-g grade
+Only send jobs of grade
+.I grade
+or higher on this call. The
+.I grade
+stays in effect until it is changed by a different \-g option.
+.TP 8
+.B \-n
+Queue the null job, but do not invoke the program that actually calls
+the named site(s).
+The \-n option once given will apply to all sites following to the
+.IR right
+of it.
+.TP 8
+.B \-x
+Do not place a null job for all following sites. This option must be given
+before the \-n option. The \-n option will nullify this. Any grade in effect
+will not be honored because
+.I uucico (Taylor)
+does not carry the \-g option at the moment.
+.PP
+.I Uupoll
+is usually run by
+.IR cron (5)
+or by a user who wants to hurry a job along. A typical entry in
+.I crontab
+could be:
+.PP
+.nf
+X 0 0,8,16 * * * uucp /usr/bin/uupoll ihnp4
+X 0 4,12,20 * * * uucp /usr/bin/uupoll ucbvax
+.fi
+This will poll
+.B ihnp4
+at midnight, 0800, and 1600, and
+.B ucbvax
+at 0400, noon, and 2000.
+.PP
+If the local machine is already running
+.I uucico
+every
+hour and has a limited number of outgoing modems, a better approach
+might be:
+.PP
+.nf
+X 0 0,8,16 * * * uucp /usr/bin/uupoll -n ihnp4
+X 0 4,12,20 * * * uucp /usr/bin/uupoll -n ucbvax
+X 5 * * * * uucp /usr/lib/uucp/uucico -r1 -D -C
+.fi
+This will queue null jobs for the remote sites at the top of the hour; they
+will be processed by
+.I uucico
+when it runs five minutes later (the -C option apply to Taylor
+uucp-1.05 only, the -D option applies to Talor uucp-1.04 and up)
+.SH EXTENDED options
+An example of the options and how they interact is given below. The working
+order while processing the options is left to right:
+.nf
+X uupoll -gC site1 -gB site2 -x site3 -n -gA site4 site5
+.fi
+.PP
+this poll will:
+.PP
+- call immediate site1 with grade C or higher and will place a null job
+.PP
+- call immediate site2 with grade B or higher and will place a null job
+.PP
+- call immediate site3 with grade B or higher without placing a null job
+.PP
+- just placing a null job for site4 and site5 with grade A or higher. These
+sites will be called at the next regular schedule.
+.SH BUGS
+When more than one site is given on the command line and no \-n option is
+given there will be an immediate invocation of
+.IR uucico
+or
+.IR autopoll
+for
+.IR all
+sites given. That may lead to a `No port available' condition.
+.SH FILES
+.ta \w'/usr/spool/uucp/ 'u
+.nf
+/etc/uucp/ UUCP internal files/utilities
+/usr/spool/uucp/ Spool directory
+/tmp/poll.log This file is present only if uupoll has been
+X compiled to place the messages into a file.
+X Otherwise all messages will go to stderr.
+X The directory as well as the name may be
+X different. The name may be defined at compile time.
+.fi
+.SH SEE ALSO
+uucp(1C), uux(1C), uucico(8C), autopoll(8C)
+SHAR_EOF
+chmod 0444 uupoll/uupoll.8c ||
+echo 'restore of uupoll/uupoll.8c failed'
+Wc_c="`wc -c < 'uupoll/uupoll.8c'`"
+test 4787 -eq "$Wc_c" ||
+ echo 'uupoll/uupoll.8c: original size 4787, current size' "$Wc_c"
+fi
+# ============= uupoll/uupoll.c ==============
+if test -f 'uupoll/uupoll.c' -a X"$1" != X"-c"; then
+ echo 'x - skipping uupoll/uupoll.c (File already exists)'
+else
+echo 'x - extracting uupoll/uupoll.c (Text)'
+sed 's/^X//' << 'SHAR_EOF' > 'uupoll/uupoll.c' &&
+/* ---------------------------------------------------------------------------*
+X
+X Name: uupoll
+X
+X Author: Klaus Dahlenburg <kdburg@incoahe.hanse.de>
+X
+X Status: Public domain
+X
+X Copyright: none
+X
+X Funktion: The main intention behind this program was to get a full
+X replacement of the uupoll supplied by NeXT when using an
+X UUCP or a file structure that is different from that hardwired
+X config in NeXT's uupoll. The lack of source made it impossible
+X to modify the supplied uupoll.
+X
+X Call: uupoll [-n] [-x] [-g[A | 0-9,A-Z,a-z]] site ...
+X
+X -n just place a poll file but do not call uucico;
+X This option can be given only once.
+X -x meaningful only for sites not affected by the -n
+X option. It prevents the creation of a poll file;
+X the default is to place one. In case the poll fails
+X there will be no attempt to poll those sites on
+X the next general (unspecific) poll. If using
+X autopoll the site will be called at the next + 1
+X run of autopoll.
+X -g any grade may be given to meet the criteria for
+X a successful poll. The default being specified
+X in conf.h (A).
+X This option may be given individually for each
+X site to call.
+X site the name of the site to be called. As many sites
+X as necessary may be specified separated by at least
+X one blank.
+X Note: any site will be called with the options currently in
+X effect. The working order is left to right. Example:
+X uupoll -gQ site1 site2 -gZ site3 -n site4
+X site1 and site2 will be called immediate with grade Q
+X site3 will be called immediate with grade Z. Site4 will
+X have a poll file created with grade Z.
+X
+X Environment: NeXT 2.1
+X
+X Called Programs: sort, uniq, uucico (or autopoll), uuname
+X
+X Compile: no special options are needed
+X
+X Comments: - should run setuid UUCP or whatever userid is necessary to
+X write to the spool directory with the proper ownership of
+X the files and to run uucico.
+X - No alias expansion is done on the given names.
+*/
+X
+#if !defined(lint)
+static char rcsid[] = "$Id: uupoll.shar,v 1.1 1994/05/07 18:09:32 ache Exp $";
+#endif /* not lint */
+X
+/* $Log: uupoll.shar,v $
+# Revision 1.1 1994/05/07 18:09:32 ache
+# Upgrade to version 1.05
+#
+X * Revision 2.7 1994/04/14 17:22:04 kdburg
+X * major rework done
+X *
+X * Revision 2.6 1994/03/26 17:38:41 kdburg
+X * added support for UNAME_DIR; cleanup of some code; adjusted code after
+X * obtaining sitenames via popen()
+X *
+X * Revision 2.5 1994/03/24 19:01:24 kdburg
+X * some minor changes; some calls had their rc not checked
+X *
+X * Revision 2.4 1993/07/08 07:56:26 kdburg
+X * befor invoking autopoll stdin is now closed to avoid blocking of
+X * terminal
+X *
+X * Revision 2.3 1993/07/05 19:43:00 kdburg
+X * when used interactivly only the start msg is put into the msg-log
+X * so far defined (UULOG)
+X *
+X * Revision 2.2 1993/05/20 18:50:52 kdburg
+X * no execute permission to the poll-pgm (uucico/autopoll) was not
+X * reflected in the log; when to start message was not given when -x
+X * option was present
+X *
+X * Revision 2.1 1993/05/16 21:48:15 kdburg
+X * changed exit() to _exit() in case the exec fails within child
+X *
+X * Revision 2.0 1993/05/16 14:11:04 kdburg
+X * initial revision
+X * */
+X
+#define CAT 16
+#define SEVERE 8
+#define WARNING 4
+#define OK 0
+#define P_MODE 00647 /* file-mode for poll-file */
+/* Boolean types */
+typedef int bool;
+#undef TRUE
+#undef FALSE
+#define TRUE (1)
+#define FALSE (0)
+X
+#include "conf.h"
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <sys/file.h>
+#include <sys/param.h>
+#include <pwd.h>
+#include <sys/time.h>
+X
+#define X_OK 1 /* access: executable ? */
+X
+#ifdef ALOG_FILE
+X static char Msg_Log[] = ALOG_FILE; /* name of msglog filename */
+#endif
+X
+#ifdef UNAME_DIR
+X static char subcmd[] = " | sort | uniq"; /* pipe that follows uuname */
+#else /* ! UNAME_DIR */
+X static char Sort[] = "uuname | sort | uniq"; /* default to obtain site names */
+#endif /*UNAME_DIR */
+X
+static char cGrade[] = DEF_GRADE; /* grade as defined in conf.h */
+static char dGrade[] = "A"; /* use this if DEF_GRADE is invalid */
+#ifdef AUTO_POLL
+X static char Auto_Dir[] = AUTO_DIR; /* autopoll lives here */
+#else
+X static char Cico_Dir[] = CICO_DIR; /* and here lives cico */
+#endif /* AUTO_POLL */
+X
+struct Sites {
+X char name[MAXHOSTNAMELEN+1]; /* name of site as supplied by uuname */
+X char grade[1]; /* as passed or defaulted */
+X bool flag; /* TRUE this site should be polled */
+X int asap; /* 1 without -n; 2 with -x option */
+};
+X struct Common_Stor {
+X int maxtab; /* high-water-mark for site tab */
+X char *Grade; /* use this as grade for calls */
+X char *Poll_Pgm; /* our name without path */
+X char *called_as; /* but called by this name */
+X int our_pid; /* our process-id */
+X char *Uucico; /* cico's name without path */
+X char This_Site[MAXHOSTNAMELEN+1]; /* our site name */
+X char System[MAXHOSTNAMELEN+1]; /* intermediate to hold sitename */
+X char *Usort; /* will hold uuname + subcmd */
+X struct passwd *pwd;
+X struct timeval tp;
+X struct timezone tzp;
+X struct Sites Sitetab[SITE_MAX];
+X char workf[300];
+X };
+X
+/* define the prototypes
+X * */
+X
+int set_mlog(FILE **seclog, struct Common_Stor *);
+int get_sites(struct Common_Stor *);
+int Check_Args(int argc, char *argv[], struct Common_Stor *);
+int Housekeeping(int argc, char *argv[], struct Common_Stor *);
+int Call_Site(struct Common_Stor *);
+void *storage(unsigned count, char *errloc, int *Rc, struct Common_Stor *);
+X
+extern int getpid();
+extern void free(void *ptr);
+extern int access(char *path, int mode);
+extern int gethostname(char *name, int namelen);
+extern int system(char *cmd);
+extern int fork();
+extern int execlp(char *name, char *arg0, ...);
+extern void *malloc(size_t byteSize);
+extern int getuid();
+extern int isatty(int);
+extern char *ttyname(int);
+extern int open(char *path, int flags, int mode);
+extern int close(int fd);
+#ifdef __STRICT_ANSI__
+extern FILE *popen(char *command, char *type);
+extern int pclose(FILE *stream);
+extern void _exit(int status);
+#endif /* __STRICT_ANSI__ */
+#ifdef __STRICT_BSD__
+extern int fprintf(FILE *stream, const char *format, ...);
+extern int fclose(FILE *stream);
+extern char *strerror(int errnum);
+extern int fflush(FILE *stream);
+extern void exit(int status);
+#endif /* __STRICT_BSD__ */
+X
+/* --------------------------------------------------------------------------*/
+/* Main */
+/* --------------------------------------------------------------------------*/
+X
+int main(int argc, char *argv[])
+{
+X
+X struct Common_Stor *sCom_Sto;
+X int Maxrc = OK; /* Max err-code encountered so far */
+X int k = 0;
+X
+X if ( NULL == (sCom_Sto = malloc(sizeof(struct Common_Stor))) ) {
+X fprintf(stderr,"%s: (C) malloc failed (%s). Reason: %i (%s)\n",
+X argv[0],"Common_Stor",errno,strerror(errno));
+X exit (CAT);
+X }
+X
+X Maxrc = Housekeeping(argc, argv, sCom_Sto);
+X
+/* If any errors popped up so far they are of such a nature that it is very
+X * questionable to continue; so we better bail out in this case.
+X */
+X if (Maxrc <= WARNING) {
+X k = Call_Site(sCom_Sto);
+X Maxrc = Maxrc >= k ? Maxrc:k;
+X }
+X k = gettimeofday(&sCom_Sto->tp, &sCom_Sto->tzp);
+X fprintf(stderr,"%s: (I) ended with rc = %i on %s\n",
+X sCom_Sto->called_as,
+X Maxrc,k!=0 ? "time unavailable":ctime(&sCom_Sto->tp.tv_sec));
+X fclose(stderr);
+X free(sCom_Sto);
+X sCom_Sto = NULL;
+X exit (Maxrc);
+}
+X
+/* --------------------------------------------------------------------------*/
+/* Functions */
+/* --------------------------------------------------------------------------*/
+X
+/* --------------------------------------------------------------------
+X * housekeeping
+X */
+X
+int Housekeeping(argc, argv, sCom_Sto)
+X int argc;
+X char *argv[];
+X struct Common_Stor *sCom_Sto; {
+X
+X FILE *seclog = NULL;
+X int Rc = OK;
+X int Rci = OK; /* intermediate rc as returnd by functions */
+X
+X sCom_Sto->our_pid = getpid();
+X
+/*
+X * get our name sans path
+X * */
+X
+X sCom_Sto->called_as = argv[0] + strlen(*argv);
+X for(;sCom_Sto->called_as >= argv[0] && *--sCom_Sto->called_as != '/';)
+X ;
+X sCom_Sto->called_as++;
+X
+/* if defined set up the name of the message log file otherwise
+X * stderr will be used. Setup the cmd string to obtain all known sitenames
+X * which will be sorted in ascending order with duplicates removed
+X * */
+X
+X Rc = set_mlog(&seclog, sCom_Sto);
+X if (Rc > WARNING)
+X return (Rc);
+X
+/* put out the started message including the time and the userid.
+X * */
+X
+X sCom_Sto->pwd = getpwuid(getuid());
+X
+X if ((gettimeofday(&sCom_Sto->tp, &sCom_Sto->tzp)) != 0) { /* unacceptable error */
+X fprintf(stderr,"%s: (C) gettimeofday() failed. Reason: %i (%s)\n",
+X sCom_Sto->called_as,errno,strerror(errno));
+X return (Rc >= CAT ? Rc:CAT);
+X }
+X
+X if (seclog != NULL) {
+X fprintf(seclog,"\n%s: (I) started by `%s' (%s) on %s",
+X sCom_Sto->called_as,
+X (sCom_Sto->pwd==NULL) ? "???":sCom_Sto->pwd->pw_name,
+X ttyname(0),
+X ctime(&sCom_Sto->tp.tv_sec));
+X fclose(seclog);
+X }
+X fprintf(stderr,"\n%s: (I) started by `%s' on %s",
+X sCom_Sto->called_as,
+X (sCom_Sto->pwd==NULL) ? "???":sCom_Sto->pwd->pw_name,
+X ctime(&sCom_Sto->tp.tv_sec));
+X
+/* set up the default grade
+X * */
+X
+X sCom_Sto->Grade = dGrade; /* set default for now */
+X if (strlen(cGrade) != 1) {
+X fprintf(stderr,"%s: (W) grade %s invalid; default `%s' used\n",
+X sCom_Sto->called_as,cGrade,sCom_Sto->Grade);
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X }
+X else
+X sCom_Sto->Grade = cGrade; /* Ok, take the one from conf.h */
+X
+/* get the program to actually call the site. This is either UUCICO
+X * or AUTOPOLL or something completely different.
+X * */
+X
+#ifdef AUTO_POLL
+X sCom_Sto->Uucico = Auto_Dir + strlen(Auto_Dir);
+X for(;sCom_Sto->Uucico >= Auto_Dir && *--sCom_Sto->Uucico != '/';)
+X ;
+X sCom_Sto->Uucico++;
+#else /* ! AUTO_POLL */
+X sCom_Sto->Uucico = Cico_Dir + strlen(Cico_Dir);
+X for(;sCom_Sto->Uucico >= Cico_Dir && *--sCom_Sto->Uucico != '/';)
+X ;
+X sCom_Sto->Uucico++;
+#endif /* AUTO_POLL */
+X
+/* get the path to ourself.
+X * */
+X
+X sCom_Sto->Poll_Pgm = argv[0] + strlen(argv[0]);
+X for(;sCom_Sto->Poll_Pgm >= argv[0] && *--(sCom_Sto->Poll_Pgm) != '/';)
+X ;
+X sCom_Sto->Poll_Pgm++;
+X
+/* obtain our sitename
+X * */
+X
+X if ((gethostname(sCom_Sto->This_Site,MAXHOSTNAMELEN+1)) != 0) {
+X fprintf(stderr,"%s: (W) hostname could not be obtained\n",
+X sCom_Sto->called_as);
+X Rc = (Rc >= WARNING) ? Rc:WARNING;
+X }
+X
+/* obtain all known sitenames
+X * */
+X
+X Rci = get_sites(sCom_Sto);
+X Rc = Rci > Rc ? Rci:Rc;
+X
+/* check the arguments that we are called with
+X * */
+X
+X Rci = Check_Args(argc, argv, sCom_Sto);
+X Rc = Rci > Rc ? Rci:Rc;
+X
+X return (Rc);
+}
+X
+/* --------------------------------------------------------------------
+X * check all relevant arguments that have been passed to us. Those args
+X * that may be needed for a recall will be copied to a workfield.
+X * */
+X
+int Check_Args(int argc, char *argv[], struct Common_Stor *sCom_Sto) {
+X int i,s,k,n = 0;
+X int Rc = OK;
+X int One_Site = 0; /* TRUE: found at least one valid site to call */
+X int poll_file = 1; /* FALSE: after -x option given */
+X int def_flag = 0; /* TRUE: when option -n was encountered */
+X
+X /* --------------------------------------------------------------*/
+X /* check the arguments passed to us */
+X /* */
+X /* These are: -n -> place a POLL file but do not start uucico */
+X /* -x -> do not place a poll file (immed. poll only) */
+X /* -g? -> specify a grade with the POLL file. The ? */
+X /* may be: 0-9, A-Z, a-z */
+X /* (validity not checked!) */
+X /* site name of the site to call. There many be as */
+X /* many as necessary separated by at least one */
+X /* blank */
+X /* Note: all options will stay in effect as long as they are'nt */
+X /* changed by a new setting. The options -n and -x can't */
+X /* be negated once given; that means place all sites */
+X /* that should be immediately polled to the left of the */
+X /* -n option; the same applies to the -x option which must */
+X /* be left of the -n option to come into effect! */
+X /* The working order is left to right! */
+X /* --------------------------------------------------------------*/
+X
+X for (i = 1, s = 0; i < argc; i++) {
+X k = strlen(argv[i]);
+X switch (*argv[i]) {
+X
+X /* ----> handle the options */
+X
+X case '-':
+X n = 1;
+X switch (*(argv[i]+n)) {
+X case 'n':
+X if (k > 2) {
+X fprintf(stderr,"%s: (E) invalid specification %s\n",
+X sCom_Sto->called_as,argv[i]);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X break;
+X }
+X def_flag = 1;
+X break;
+X case 'x':
+X if (k > 2) {
+X fprintf(stderr,"%s: (E) invalid specification %s\n",
+X sCom_Sto->called_as,argv[i]);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X break;
+X }
+X if (def_flag) {
+X fprintf(stderr,"%s: (W) -x after -n has no effect\n",
+X sCom_Sto->called_as);
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X }
+X else {
+X poll_file = 0;
+X }
+X break;
+X case 'g':
+X if (k > 3) {
+X fprintf(stderr,"%s: (E) invalid specification %s\n",
+X sCom_Sto->called_as,argv[i]);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X break;
+X }
+X if (*(argv[i]+n+1) == '\0') {
+X fprintf(stderr,"%s: (E) missing grade\n",
+X sCom_Sto->called_as);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X break;
+X }
+X if (isalnum(*(argv[i]+n+1)) == 0) {
+X fprintf(stderr,"%s: (E) invalid grade %s\n",
+X sCom_Sto->called_as,argv[i]);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X break;
+X }
+X strcpy(sCom_Sto->Grade,(argv[i]+n+1));
+X break;
+X default:
+X fprintf(stderr,"%s: (W) missing/unknown option `-%s' ignored\n",
+X sCom_Sto->called_as,argv[i]+n);
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X break;
+X } /* end of switch (*(argv[i]+n)) */
+X break;
+X
+X /* ----> handle the sitenames */
+X
+X default:
+X if (strcmp(argv[i],sCom_Sto->This_Site) == 0) {
+X fprintf(stderr,"%s: (W) ignoring to call *ourself* %s\n",
+X sCom_Sto->called_as,argv[i]);
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X break;
+X }
+X strcpy(sCom_Sto->System,argv[i]);
+X for(s=0;s<=sCom_Sto->maxtab;s++) {
+X if ((n=strcmp(sCom_Sto->Sitetab[s].name,sCom_Sto->System)) >= 0) {
+X break;
+X }
+X }
+X if (n != 0) {
+X fprintf(stderr,"%s: (W) unknown site (ignored): %s\n",
+X sCom_Sto->called_as,sCom_Sto->System);
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X break;
+X }
+X
+X /* ----> if there was no error we arrive here to save the data */
+X
+X strcpy(sCom_Sto->Sitetab[s].grade,sCom_Sto->Grade);
+X One_Site = sCom_Sto->Sitetab[s].flag = 1; /* poll this site */
+X if (def_flag)
+X sCom_Sto->Sitetab[s].asap = 0; /* poll on next schedule */
+X else {
+X sCom_Sto->Sitetab[s].asap = 1; /* poll immediately */
+X if (! poll_file)
+X sCom_Sto->Sitetab[s].asap++; /* and do not place a poll file */
+X }
+X s++;
+X break;
+X } /* end of switch (*argv[i]) */
+X } /* end of for(...) */
+X
+/* now let's check what we've gotten so far. If no valid data has been */
+/* entered we will indicate that to prevent further processing */
+X
+X if (! One_Site) {
+X fprintf(stderr,"%s: (E) found no site to call\n",
+X sCom_Sto->called_as);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X
+return (Rc);
+}
+X
+int Call_Site(struct Common_Stor *sCom_Sto) {
+X
+/* For all sites that carry the -n flag we will place */
+/* a poll file into the appropriate directory. For all others there will */
+/* be an immediate call to uucico (or autopoll) */
+/* Those sites that have been named on the command have the corresponding */
+/* flag byte set to one. */
+X
+X int fdpoll; /* fildes for the poll file */
+X int mode = P_MODE; /* mode for poll file */
+X int i = 0;
+X int Rc = OK;
+X int pid = 0; /* process-id after fork() */
+X
+X for(i=0;(i<=sCom_Sto->maxtab);i++) {
+X if (sCom_Sto->Sitetab[i].flag == 0) /* should we trigger this one ? */
+X continue; /* nope */
+X
+/* processing done for delayed polls only */
+X
+X if (sCom_Sto->Sitetab[i].asap <= 1) { /* do not place a poll file */
+X /* for sites that will be polled */
+X /* immediate and carry the -x option */
+#ifdef HAVE_SPOOLDIR_TAYLOR
+X sprintf(sCom_Sto->workf,"%s/%s/C./C.%sPOLL",
+X SPOOL_DIR,
+X sCom_Sto->Sitetab[i].name,
+X sCom_Sto->Sitetab[i].grade);
+#endif
+#ifdef HAVE_SPOOLDIR_HDB
+X sprintf(sCom_Sto->workf,"%s/%s/C.%s%sPOLL",
+X SPOOL_DIR,
+X sCom_Sto->Sitetab[i].name,
+X sCom_Sto->Sitetab[i].name,
+X sCom_Sto->Sitetab[i].grade);
+#endif
+#ifdef HAVE_SPOOLDIR_BSD
+X sprintf(sCom_Sto->workf,"%s/C./C.%s%sPOLL",
+X SPOOL_DIR,
+X sCom_Sto->Sitetab[i].name,
+X sCom_Sto->Sitetab[i].grade);
+#endif
+X
+X fflush(stderr);
+X if ((fdpoll=open(sCom_Sto->workf,O_CREAT,mode)) <= 0) {
+X fprintf(stderr,"%s: (E) couldn't place poll file for system: %s. Reason: %s\n",
+X sCom_Sto->called_as,
+X sCom_Sto->Sitetab[i].name,
+X strerror(errno));
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X else {
+X if (close(fdpoll) != 0) {
+X fprintf(stderr,"%s: (W) close failed for poll file; system: %s. Reason: %s\n",
+X sCom_Sto->called_as,
+X sCom_Sto->Sitetab[i].name,
+X strerror(errno));
+X Rc = Rc >= WARNING ? Rc:WARNING;
+X }
+X }
+X }
+X
+/* the following processing is done for immediate polls only
+X * there is no wait for the completion of the called program that actually
+X * calls the site
+X * */
+X
+X fflush(stderr);
+X if (Rc <= WARNING) {
+X fprintf(stderr,"%s: (I) site %s will be called %s\n",
+X sCom_Sto->called_as,
+X sCom_Sto->Sitetab[i].name,
+X sCom_Sto->Sitetab[i].asap == 0 ?
+X "upon next poll":"immediately");
+X if (sCom_Sto->Sitetab[i].asap >= 1)
+X {
+#ifdef AUTO_DIR
+X if ( access(Auto_Dir,X_OK) != 0) /* do we have xecute permission ? */
+#else /* ! AUTO_DIR */
+X if ( access(Cico_Dir,X_OK) != 0) /* do we have xecute permission ? */
+#endif /* AUTO_DIR */
+X {
+X fprintf(stderr,"%s: (C) could not start %s. Reason-code: %i (%s)\n",
+X sCom_Sto->called_as,
+X sCom_Sto->Uucico,
+X errno,strerror(errno));
+X return (Rc >= CAT ? Rc:CAT); /* abandon the run */
+X }
+X switch (pid = fork())
+X {
+X case -1:
+X fprintf(stderr,"%s: (C) could not fork() Reason-code: %i (%s)\n",
+X sCom_Sto->called_as,
+X errno,strerror(errno));
+X return (Rc >= CAT ? Rc:CAT);
+X case 0:
+X if (isatty(0))
+X close(0); /* don't block the terminal by autopoll */
+#ifdef AUTO_DIR
+X execlp(Auto_Dir,
+#else /* ! AUTO_DIR */
+X execlp(Cico_Dir,
+#endif /*AUTO_DIR */
+X sCom_Sto->Uucico,
+X "-D", "-r1", "-s",
+X sCom_Sto->Sitetab[i].name,0);
+X fprintf(stderr,"%s: (C) could not start %s. Reason-code: %i (%s)\n",
+X sCom_Sto->called_as,
+X sCom_Sto->Uucico,
+X errno,strerror(errno));
+X _exit (CAT); /* child: bail out */
+X default:
+X fflush(stderr);
+X fprintf(stderr,"%s: (I) %s [%d] started; site: %s\n",
+X sCom_Sto->called_as,
+X sCom_Sto->Uucico,
+X pid,
+X sCom_Sto->Sitetab[i].name);
+X } /* switch (pid = fork()) */
+X } /* if (Sitetab ...) */
+X } /* if (Rc ...) */
+X } /* for(i=0;(i<= ...)) */
+X return (Rc);
+}
+X
+X /* ------------------------------------------------------------------
+X * storage - get some memory
+X */
+X
+void *storage(unsigned count,
+X char *location,
+X int *Rc,
+X struct Common_Stor *sCom_Sto)
+{
+X void *p;
+X
+X if( NULL == (p= malloc(count)) ) {
+X fprintf(stderr,"%s: (C) malloc failed (%s). Reason: %i (%s)\n",
+X sCom_Sto->called_as,location,errno,strerror(errno));
+X *Rc = *Rc >= CAT ? *Rc:CAT;
+X }
+X return p;
+}
+X
+/* ------------------------------------------------------------------
+X * if defined open the message log file otherwise all mesages will go
+X * to stderr. If UNAME_DIR is defined construct the command to be
+X * passed to popen(); if undefined the default will be used
+X * */
+X
+int set_mlog(FILE **seclog, struct Common_Stor *sCom_Sto) {
+X
+X int Rc = 0;
+X
+#ifdef ALOG_FILE
+X if (!isatty(0)) {
+X if ((freopen(Msg_Log,"a",stderr)) == NULL) {
+X fprintf(stdout,"%s: (C) Could not open msglog: %s\n",
+X sCom_Sto->called_as,Msg_Log);
+X return (Rc >= CAT ? Rc:CAT);
+X }
+X }
+X else {
+X if ((*seclog = fopen(Msg_Log,"a")) == NULL) {
+X fprintf(stderr,"%s: (C) Could not open msglog: %s\n",
+X sCom_Sto->called_as,Msg_Log);
+X return (Rc >= CAT ? Rc:CAT);
+X }
+X }
+#endif /* ALOG_FILE */
+X
+/* set up the pipe together with the complete path to uuname */
+X
+#ifdef UNAME_DIR
+X if ((sCom_Sto->Usort = (char *)storage (sizeof(UNAME_DIR)+sizeof(subcmd),
+X "Sort",&Rc, sCom_Sto)) != NULL) {
+X strncpy(sCom_Sto->Usort,UNAME_DIR,strlen(UNAME_DIR)); /* paste in the path */
+X strcat(sCom_Sto->Usort,subcmd); /* chain the pipe to it */
+X }
+#else /* ! UNAME_DIR */
+X sCom_Sto->Usort = &Sort; /* set pointer to uuname + sort */
+#endif /* UNAME_DIR */
+X
+X return (Rc);
+}
+X
+/* ------------------------------------------------------------------
+X * obtain all active sitenames
+X * */
+X
+int get_sites(struct Common_Stor *sCom_Sto) {
+X
+X int i = 0;
+X int n;
+X int Rc = 0;
+X FILE *infile;
+X
+X if ((infile=popen(sCom_Sto->Usort,"r")) != NULL) {
+X while(fgets(sCom_Sto->Sitetab[i].name,MAXHOSTNAMELEN+1,infile)) {
+X if (i > SITE_MAX) { /* let'm run so that we can give */
+X i++; /* the user some guidance */
+X continue; /* we'll tell the user later on */
+X }
+X n = strlen(sCom_Sto->Sitetab[i].name)-1; /* offset: next to last char */
+X sCom_Sto->Sitetab[i].name[n] = '\0'; /* strip trailing newline */
+X sCom_Sto->Sitetab[i].flag = FALSE; /* TRUE: poll this site */
+X sCom_Sto->Sitetab[i].asap = FALSE; /* TRUE: immediate poll */
+X strcpy(sCom_Sto->Sitetab[i].grade,sCom_Sto->Grade);
+X sprintf(sCom_Sto->workf,"%s%s",STATUS_DIR,sCom_Sto->Sitetab[i].name);
+X sCom_Sto->maxtab = i++; /* set high-water-mark */
+X }
+X if (ferror(infile) != 0) {
+X fprintf(stderr,"%s: (E) fgets() for sitenames failed reason-code: %i (%s)\n",
+X sCom_Sto->called_as,errno,strerror(errno));
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X pclose(infile);
+X
+X /*
+X * check for an empty table (strange but possible)
+X */
+X
+X if (sCom_Sto->maxtab == 0) {
+X fprintf(stderr,"%s: (E) could not obtain sitenames.\n",
+X sCom_Sto->called_as);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X else {
+X
+X /* in case the internal table overflows we'll now give notice and tell
+X * the user by which amount the table has to be increased to hold all
+X * site-names
+X */
+X
+X if (i > SITE_MAX) {
+X fprintf(stderr,"%s: (E) number of sites > internal tab\n",
+X sCom_Sto->called_as);
+X fprintf(stderr,"%s: (E) increase SITE_MAX to >= %d and recompile\n",
+X sCom_Sto->called_as,i);
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X }
+X } /* sCom_Sto->maxtab == 0 */
+X
+X }
+X else /* infile == NULL */
+X {
+X fprintf(stderr,"%s: (E) could not sort sitenames. Reason-code: %i (%s)\n",
+X sCom_Sto->called_as,errno,strerror(errno));
+X Rc = Rc >= SEVERE ? Rc:SEVERE;
+X
+X } /* if ((infile=popen(sCom_Sto->Usort,"r")) ... */
+X
+X return (Rc);
+}
+SHAR_EOF
+chmod 0444 uupoll/uupoll.c ||
+echo 'restore of uupoll/uupoll.c failed'
+Wc_c="`wc -c < 'uupoll/uupoll.c'`"
+test 27587 -eq "$Wc_c" ||
+ echo 'uupoll/uupoll.c: original size 27587, current size' "$Wc_c"
+fi
+exit 0
diff --git a/gnu/libexec/uucp/contrib/uurate.c b/gnu/libexec/uucp/contrib/uurate.c
index ceab41c53bfd..80972f611baf 100644
--- a/gnu/libexec/uucp/contrib/uurate.c
+++ b/gnu/libexec/uucp/contrib/uurate.c
@@ -5,16 +5,16 @@
* and outputs various statistical data to standard out.
*
* Author:
- * Bob Denny (denny@alisa.com)
- * Fri Feb 7 13:38:36 1992
+ * Bob Denny (denny@alisa.com)
+ * Fri Feb 7 13:38:36 1992
*
* Original author:
- * Mark Pizzolato mark@infopiz.UUCP
+ * Mark Pizzolato mark@infopiz.UUCP
*
* Edits:
- * Bob Denny - Fri Feb 7 15:04:54 1992
- * Heavy rework for Taylor UUCP. This was the (very old) uurate from
- * DECUS UUCP, which had a single logfile for activity and stats.
+ * Bob Denny - Fri Feb 7 15:04:54 1992
+ * Heavy rework for Taylor UUCP. This was the (very old) uurate from
+ * DECUS UUCP, which had a single logfile for activity and stats.
* Personally, I would have done things differently, with tables
* and case statements, but in the interest of time, I preserved
* Mark Pizzolato's techniques and style.
@@ -23,41 +23,165 @@
* Changes to report format suggested by Francois Pinard and others.
* Add summary report, format from uutraf.pl (perl script), again
* thanks to Francois. Integrate and checkout with 1.03 of Taylor UUCP.
+ *
+ * Stephan Niemz <stephan@sunlab.ka.sub.org> - Fri Apr 9 1993
+ * - Print totals in summary report,
+ * - show all commands in execution report,
+ * - count incoming calls correctly,
+ * - suppress empty tables,
+ * - don't divide by zero in efficiency report,
+ * - limit the efficiency to 100% (could be more with the i-protocol),
+ * - suppress some zeros to improve readability,
+ * - check for failure of calloc,
+ * - -h option changed to -s for consistency with all other uucp commands
+ * (but -h was left in for comptibility).
+ *
+ * Scott Boyd <scott@futures.com> - Thu Aug 26 13:21:34 PDT 1993
+ * - Changed hosts linked-list insertion routine so that hosts
+ * are always listed in alphabetical order on reports.
+ *
+ * Klaus Dahlenburg <kdburg@incoahe.hanse.de> - Fri Jun 18 1993 (1.2.2)
+ * - redesigned the printed layout (sticked to those 80 column tubes).
+ * - 'Retry time not ...' and ' ERROR: All matching ports ...' will now be
+ * counted as calls and will raise the failed-call counter.
+ * - times now shown as hh:mm:ss; the fields may hold up to 999 hrs
+ * (a month equals 744 hrs at max). Printing will be as follows:
+ *
+ * hrs > 0 hh:mm:ss
+ * min > 0 mm:ss
+ * sec > 0 ss
+ * leading zeroes are suppressed.
+ *
+ * - the bytes xfered will be given in thousands only (we're counting
+ * so 1K is 1000 bytes!). Sums up to 9,999,999.9 thousand can be shown.
+ * - dropped the fractions of a byte in columns: bytes/second (avg cps).
+ * - File statistic changed to display in/out in one row instead of 2
+ * separate reports.
+ * - eliminated the goto in command report and tightened the code; also
+ * the 'goto usage' has been replaced by a call to void usage() with no
+ * return (exit 1).
+ * - a totaling is done for all reports now; the total values are held
+ * within the structure; after finishing read there will be an alloc
+ * for a site named 'Total' so that the totals line will be printed
+ * more or less automatically.
+ * - option -t implemented: that is every possible report will be given.
+ * - the start and end date/time of the input files are printed; can be
+ * dropped by the -q option at run time.
+ * - it is now possible to use Log/Stats files from V2_LOGGING configs.
+ * They must however not be mixed together (with each other).
+ * - the Log/Stats files are taken from config which is passed via
+ * Makefile at compile time. Variable to set is: newconfigdir. If the
+ * default config can't be read the default values are used
+ * (the config is optional!).
+ * Note: keyword/filename must be on the same line (no continuation).
+ * - -I option implemented to run with a different config file. In case
+ * the file can't be opened the run is aborted!
+ * - -q option implemented to run without environment report (default is
+ * FALSE: print the report).
+ * - -p option added to print protocol statistics: one for the packets
+ * and one for the errors encountered
+ * - reapplied patch by Scott Boyd <scott@futures.com> that I did not
+ * get knowledge of
*/
+/* $Log: uurate.c,v $
+ * Revision 1.2 1994/05/07 18:09:35 ache
+ * Upgrade to version 1.05
+ *
+ * Revision 1.15 1994/04/07 21:47:11 kdburg
+ * printed 'no data avail' while there was data; layout chnaged
+ * (cosmetic only)
+ *
+ * Revision 1.14 1994/04/07 21:16:32 kdburg
+ * the layout of the protocol-used line within the LOGFILE changed
+ * from 1.04 to 1.05; both formats may be used together; output
+ * changed for packet report (columns adjusted)
+ *
+ * Revision 1.13 1994/04/04 10:04:35 kdburg
+ * cosmetic change to the packet-report (separator lines)
+ *
+ * Revision 1.12 1994/03/30 19:52:04 kdburg
+ * incorporated patch by Scott Boyd which was missing from this version
+ * of uurate.c. Left the comment in cronological order.
+ *
+ * Revision 1.11 1994/03/28 18:53:22 kdburg
+ * config not checked properly for 'logfile/statsfile' overwrites, bail-out
+ * possible; wrong file name written to log for statsfile when found
+ *
+ * Revision 1.10 1993/09/28 16:46:51 kdburg
+ * transmission failures denoted by: failed after ... in stats file
+ * have not been counted at all.
+ *
+ * Revision 1.9 1993/08/17 23:38:36 kdburg
+ * sometimes a line(site) was missing from the protocol stats due
+ * to a missing +; added option -d and -v reassing option -h to print
+ * the help; a zero was returned instead of a null-pointer by
+ * prot_sum
+ *
+ * Revision 1.8 1993/07/03 06:58:55 kdburg
+ * empty input not handled properly; assigned some buffer to input; msg
+ * not displayed when no protocol data was available
+ *
+ * Revision 1.7 1993/06/27 10:31:53 kdburg
+ * rindex was replaced by strchr must be strrchr
+ *
+ * Revision 1.6 1993/06/26 06:59:18 kdburg
+ * switch hdr_done not reset at beginning of protocol report
+ *
+ * Revision 1.5 1993/06/25 22:22:30 kdburg
+ * changed rindex to strchr; if there is no NEWCONFIG defined take
+ * appropriate action
+ *
+ * Revision 1.4 1993/06/25 20:04:07 kdburg
+ * added comment about -p option; inserted proto for rindex
+ *
+ * Revision 1.3 1993/06/25 19:31:14 kdburg
+ * major rework done; added protocol reports (normal/errors)
+ *
+ * Revision 1.2 1993/06/21 19:53:54 kdburg
+ * init
+ * */
-char version[] = "@(#) Taylor UUCP Log File Summary Filter, Version 1.2";
-
-#include <ctype.h> /* Character Classification */
-#include <string.h>
+char version[] = "@(#) Taylor UUCP Log File Summary Filter, Version 1.2.2";
+static char rcsid[] = "$Id: uurate.c,v 1.2 1994/05/07 18:09:35 ache Exp $";
+#include <ctype.h> /* Character Classification */
#include <math.h>
-
#include "uucp.h"
+/* uucp.h includes string.h or strings.h, no include here. */
#define _DEBUG_ 0
-
+
/*
* Direction of Calling and Data Transmission
*/
-#define IN 0 /* Inbound */
-#define OUT 1 /* Outbound */
+
+#define IN 0 /* Inbound */
+#define OUT 1 /* Outbound */
+
+/*
+ * define some limits
+ */
+#define MAXCOLS 8 /* report has this # of columns incl. 'name' */
+#define MAXREP 6 /* number of reports available */
+#define MAXFNAME 64 /* max input file name length incl. path*/
+#define MAXDNAME 8 /* max display (Hostname) name length */
/*
* Data structures used to collect information
*/
struct File_Stats
{
- int files; /* Files Transferred */
- unsigned long bytes; /* Data Size Transferred*/
- double time; /* Transmission Time */
+ int files; /* Files Transferred */
+ unsigned long bytes; /* Data Size Transferred*/
+ double time; /* Transmission Time */
};
struct Phone_Call
{
- int calls; /* Call Count */
- int succs; /* Successful calls */
- double connect_time; /* Connect Time Spent */
- struct File_Stats flow[2]; /* Rcvd & Sent Data */
+ int calls; /* Call Count */
+ int succs; /* Successful calls */
+ double connect_time; /* Connect Time Spent */
+ struct File_Stats flow[2]; /* Rcvd & Sent Data */
};
struct Execution_Command
@@ -67,591 +191,1664 @@ struct Execution_Command
int count;
};
+struct Protocol_Summary
+ {
+ struct Protocol_Summary *next;
+ char type[3];
+ long int pr_cnt;
+ long int pr_psent;
+ long int pr_present;
+ long int pr_preceived;
+ long int pr_eheader;
+ long int pr_echksum;
+ long int pr_eorder;
+ long int pr_ereject;
+ long int pr_pwinmin;
+ long int pr_pwinmax;
+ long int pr_psizemin;
+ long int pr_psizemax;
+ };
+
struct Host_entry
{
struct Host_entry *next;
char Hostname[32];
- struct Execution_Command *cmds; /* Local Activities */
- struct Phone_Call call[2]; /* In & Out Activities */
+ struct Execution_Command *cmds; /* Local Activities */
+ struct Phone_Call call[2]; /* In & Out Activities */
+ struct Protocol_Summary *proto;
};
+ struct Host_entry *hosts = NULL;
+ struct Host_entry *tot = NULL;
+ struct Host_entry *cur = NULL;
+ struct Execution_Command *cmd, *t_cmds = NULL;
+ struct Protocol_Summary *prot, *t_prot, *s_prot, *ss_prot = NULL;
/*
* Stuff for getopt()
*/
-extern int optind; /* GETOPT : Option Index */
-extern char *optarg; /* GETOPT : Option Value */
-extern void *calloc();
-
-static void fmtime();
-static void fmbytes();
+extern int optind; /* GETOPT : Option Index */
+extern char *optarg; /* GETOPT : Option Value */
+#if ! HAVE_STDLIB_H
+ extern pointer *calloc();
+#endif /* HAVE_STDLIB_H */
/*
* Default files to read. Taken from Taylor compile-time configuration.
- * Must look like an argvec, hence the dummy argv[0].
+ * def_logs must look like an argvec, hence the dummy argv[0].
+ * Maybe later modified by scanning the config
*/
-static char *(def_logs[3]) = { "", LOGFILE, STATFILE };
+
+static char *def_logs[3] = { NULL, NULL, NULL};
+char *I_conf = NULL; /* points to config lib given by -I option */
+char *D_conf = NULL; /* points to config lib from makefile */
+char *Tlog = NULL; /* points to Log-file */
+char *Tstat = NULL; /* points to Stats-file */
+char Pgm_name[64]; /* our pgm-name */
+char logline[BUFSIZ+1]; /* input area */
+char noConf[] = "- not defined -";
+char buff[16*BUFSIZ];
+char sbuff[2*BUFSIZ];
/*
- * Misc. strings for reports
+ * Boolean switches for various decisions
*/
-static char *(file_hdr[2]) = { "\nReceived file statistics:\n",
- "\nSent file statistics\n" };
-
+
+ int p_done = FALSE; /* TRUE: start date/time of file printed */
+ int hdr_done = FALSE; /* TRUE: report header printed */
+ int show_files = FALSE; /* TRUE: -f option given */
+ int show_calls = FALSE; /* TRUE: -c option given */
+ int show_commands = FALSE; /* TRUE: -x option given */
+ int show_efficiency = FALSE; /* TRUE: -e option given */
+ int show_all = FALSE; /* TRUE: -t option given */
+ int show_proto = FALSE; /* TRUE: -p option given */
+ int use_stdin = FALSE; /* TRUE: -i option given */
+ int be_quiet = FALSE; /* TRUE: -q option given */
+ int have_files[2]; /* TRUE: [IN] or [OUT] files found */
+ int have_calls = FALSE; /* TRUE: in/out calls found */
+ int have_commands = FALSE; /* TRUE: found uuxqt records */
+ int have_proto = FALSE; /* TRUE: protocol data found */
+ int no_records = TRUE; /* FALSE: got one record from file */
+
+/*
+ * protos
+ */
+
+static pointer *getmem(unsigned n);
+static void inc_cmd(struct Execution_Command **, char *name);
+static void fmtime(double sec, char *buf);
+static void fmbytes(unsigned long n, char *buf);
+static void usage();
+static int chk_config(char *conf, int n, int type);
+static void hdrprt(char c, int bot);
+struct Protocol_Summary *prot_sum(struct Protocol_Summary **, char *, int);
+
/*
* BEGIN EXECUTION
*/
-main(argc, argv)
-int argc;
-char *argv[];
+
+int main(argc, argv)
+ int argc;
+ char *argv[];
{
- char c;
- char *p, *s;
- struct Host_entry *hosts = NULL;
- struct Host_entry *cur = NULL;
- struct Host_entry *e;
- struct Execution_Command *cmd;
- struct Execution_Command *ec;
- char Hostname[64];
FILE *Log = NULL;
- char logline[1024];
+ int c;
+ char *p, *s, *stt, *flq = NULL;
+ char Hostname[MAXHOSTNAMELEN]; /* def taken from <sys/param.h> */
+ char Filename[15]; /* filename to be printed */
+ char in_date[14]; /* holds the date info of record read*/
+ char in_time[14]; /* holds the time info of record read */
+ char dt_info[31]; /* holds the date info from the last record read */
char *logmsg;
- int sent;
- int called;
- int show_files = 0; /* I prefer boolean, but... */
- int show_calls = 0;
- int show_commands = 0;
- int show_efficiency = 0;
- int show_summary = 0;
- int have_files = 0;
- int have_calls = 0;
- int have_commands = 0;
- int use_stdin = 0;
- Hostname[0] = '\0';
+ int sent, called = IN;
+ int report = 0; /* if <= 0 give msg that no report was avail. */
+ int junk;
+
+ /* --------------------------------------------------------------------
+ * P r o l o g
+ * --------------------------------------------------------------------
+ */
+
+ Hostname[0] = '\0';
+ have_files[IN]= have_files[OUT]= FALSE;
+ setvbuf(stdout,sbuff,_IOFBF,sizeof(sbuff));
+
+ /*
+ * get how we've been called isolate the name from the path
+ */
+ if ((stt = strrchr(argv[0],'/')) != NULL)
+ strcpy(Pgm_name,++stt);
+ else
+ strcpy(Pgm_name,argv[0]);
+ def_logs[0] = Pgm_name;
+
/*
* I wish the compiler had the #error directive!
*/
-#if !HAVE_TAYLOR_LOGGING
- fprintf(stderr, "uurate cannot be used with your configuration of\n");
- fprintf(stderr, "Taylor UUCP. To use uurate you must be using the\n");
- fprintf(stderr, "TAYLOR_LOGGING configuration.\n");
+
+#if !HAVE_TAYLOR_LOGGING && !HAVE_V2_LOGGING
+ fprintf(stderr,"\a%s: (E) %s\n",Pgm_name,"Your config of Taylor UUCP is not yet supported.");
+ fprintf(stderr,"%s: (E) %s\n",Pgm_name,"Current support is for V2 or TAYLOR logging only.");
+ puts(" Run aborted due to errors\n")
exit(1);
#endif
/*
- * Process the command line arguments
+ * get some mem to store the default config name (def's are in
+ * policy.h )
*/
- while((c = getopt(argc, argv, "h:cfexai")) != EOF)
- {
- switch(c)
- {
- case 'h':
- strcpy(Hostname, optarg);
- break;
- case 'c':
- show_calls = 1;
- break;
- case 'f':
- show_files = 1;
- break;
- case 'x':
- show_commands = 1;
- break;
- case 'e':
- show_efficiency = 1;
- break;
- case 'a':
- show_calls = show_files = show_commands = show_efficiency = 1;
- break;
- case 'i':
- use_stdin = 1;
- break;
- default :
- goto usage;
- }
- }
+ if (sizeof(NEWCONFIGLIB) > 1) /* defined at compile time */
+ {
+ D_conf = (char *)getmem((sizeof(NEWCONFIGLIB) + sizeof("/config")));
+ strcpy(D_conf,NEWCONFIGLIB); /* passed by makefile */
+ strcat(D_conf,"/config");
+ }
+ Tlog = (char *)getmem(sizeof(LOGFILE));
+ Tstat = (char *)getmem(sizeof(STATFILE));
+ Tlog = LOGFILE;
+ Tstat = STATFILE;
+
/*
- * If no report switches given, show summary report.
+ * Process the command line arguments
*/
- if (show_calls == 0 && show_files == 0
- && show_efficiency == 0 && show_commands == 0)
- show_summary = 1;
-
+
+ while((c = getopt(argc, argv, "I:s:cfdexaitphv")) != EOF)
+ {
+ switch(c)
+ {
+ case 'h':
+ (void) usage();
+ case 's':
+ strcpy(Hostname, optarg);
+ break;
+ case 'c':
+ show_calls = TRUE;
+ ++report;
+ break;
+ case 'd':
+ printf("%s: (I) config-file default: %s\n",Pgm_name,D_conf);
+ exit (0);
+ break;
+ case 'f':
+ show_files = TRUE;
+ ++report;
+ break;
+ case 'x':
+ show_commands = TRUE;
+ ++report;
+ break;
+ case 'e':
+ show_efficiency = TRUE;
+ ++report;
+ break;
+ case 'a':
+ show_calls = show_files = show_commands = show_efficiency = TRUE;
+ report = 4;
+ break;
+ case 'i':
+ use_stdin = TRUE;
+ break;
+ case 't':
+ show_all = TRUE;
+ report = MAXREP;
+ break;
+ case 'p':
+ show_proto = TRUE;
+ ++report;
+ break;
+ case 'I':
+ I_conf = (char *)getmem(sizeof(optarg));
+ I_conf = optarg;
+ break;
+ case 'q':
+ be_quiet = TRUE;
+ break;
+ case 'v':
+ printf("%s\n",rcsid);
+ exit (0);
+ default :
+ (void) usage();
+ }
+ }
+ if (report == 0) /* no options given */
+ ++report; /* at least summary can be printed */
+ if (! be_quiet)
+ hdrprt('i',0); /* print header for environment info */
+
/*
* Adjust argv and argc to account for the args processed above.
*/
+
argc -= (optind - 1);
argv += (optind - 1);
/*
- * If further args present, Assume rest are logfiles for us to process,
- * otherwise, take input from Log and Stat files provided in the
- * compilation environment of Taylor UUCP. If -i was given, Log already
- * points to stdin and no file args are accepted.
+ * If further args present, Assume rest are logfiles for us to process
+ * which should be given in pairs (log plus stat) otherwise the results may
+ * not come out as expected! If no further args are present take input from
+ * Log and Stat files provided in the compilation environment of Taylor UUCP.
+ * If -i was given, Log already points to stdin and no file args are accepted.
+ */
+
+ if (use_stdin) /* If -i, read from stdin */
+ {
+ if (argc != 1) /* No file arguments allowed */
+ {
+ fprintf(stderr,"\a%s: (E) %s\n",Pgm_name,
+ "it's not posssible to give file args with '-i'");
+ (void) usage();
+ }
+ else
+ {
+ argc = 2;
+ Log = stdin;
+ if (! be_quiet)
+ puts(" Input from stdin; no other files will be used\n");
+ }
+ }
+ else
+ {
+ if (argc != 1) /* file arguments are present */
+ {
+ if (! be_quiet)
+ puts(" No defaults used; will use passed file arguments\n");
+ }
+ else /* Read from current logs */
+ {
+ def_logs[1] = Tlog; /* prime the */
+ def_logs[2] = Tstat; /* file names */
+ if (! be_quiet)
+ printf(" Config for this run: ");
+
+ if (I_conf != NULL)
+ {
+ junk = 0;
+ if (! be_quiet)
+ printf("%s\n",I_conf);
+ if (0 != (chk_config(I_conf,be_quiet,junk)))
+ return (8);
+ }
+ else
+ {
+ if (D_conf != NULL)
+ {
+ junk = 1; /* indicate default (compiled) config */
+ if (! be_quiet)
+ printf("%s\n",D_conf);
+ chk_config(D_conf,be_quiet,junk);
+ }
+ else
+ if (! be_quiet)
+ printf("%s\n",noConf);
+ }
+ def_logs[1] = Tlog; /* final setting of */
+ def_logs[2] = Tstat; /* file names */
+ argv = def_logs; /* Bash argvec to log/stat files */
+ argc = sizeof(def_logs) / sizeof(def_logs[0]);
+ }
+ }
+
+ /* --------------------------------------------------------------------
+ * MAIN LOGFILE PROCESSING LOOP
+ * --------------------------------------------------------------------
*/
- if(argc == 1) /* No file arguments */
+
+ if (!use_stdin)
+ {
+ if (argc < 3 && ! be_quiet)
+ {
+ puts(" (W) there is only one input file!");
+ puts(" (W) some reports may not be printed");
+ }
+ if (! be_quiet)
+ hdrprt('d',0); /* give subheaderline */
+ }
+
+ while (argc > 1)
+ {
+ if (!use_stdin && (Log = fopen(argv[1], "r")) == NULL)
{
- if (use_stdin) /* If -i, read from stdin */
- {
- argc = 2;
- Log = stdin;
- }
- else /* Read from current logs */
- {
- argc = 3; /* Bash argvec to default log/stat files */
- argv = &def_logs[0];
- }
+ perror(argv[1]);
+ exit (8);
}
- else if (use_stdin) /* File args with -i is an error */
+ setvbuf(Log,buff,_IOFBF,sizeof(buff));
+ if ((flq = strrchr(argv[1], '/')) == NULL)
+ strncpy(Filename,argv[1],sizeof(Filename)-1);
+ else
+ strncpy(Filename,++flq,sizeof(Filename)-1);
+
+ strcpy(in_date," n/a");
+ strcpy(in_time," n/a");
+ p_done = FALSE; /* no info printed yet */
+ no_records = TRUE; /* not read any record yet */
+
+ /*
+ * Read each line of the logfile and collect information
+ */
+
+ while (fgets(logline, sizeof(logline), Log))
{
- fprintf(stderr, "uurate (error): file args given with '-i'\n");
- goto usage;
+ /*
+ * The host name of the other end of the connection is
+ * always the second field of the log line, whether we
+ * are reading a Log file or a Stats file. Set 'p' to
+ * point to the second field, null-terminated. Skip
+ * the line if something is funny. V2 and Taylor ar identical
+ * up to this part. Put out the start/end date of the files read;
+ */
+
+ if (NULL == (p = strchr(logline, ' ')))
+ continue;
+ no_records = FALSE; /* got one (usable) record at least */
+ ++p;
+
+ if (NULL != (stt = strchr(p, '(')))
+ {
+ if (! p_done && ! use_stdin && ! be_quiet)
+ {
+
+#if HAVE_TAYLOR_LOGGING
+ sscanf(++stt,"%s%*c%[^.]",in_date,in_time);
+#endif /* HAVE_TAYLOR_LOGGING */
+
+#if HAVE_V2_LOGGING
+ sscanf(++stt,"%[^-]%*c%[1234567890:]",in_date,in_time);
+#endif /* HAVE_V2_LOGGING */
+
+ printf(" %-14s %10s %8s",Filename, in_date, in_time);
+ strcpy(in_date," n/a"); /* reset to default */
+ strcpy(in_time," n/a");
+ p_done = TRUE;
+ }
+ else
+ {
+ if (! use_stdin && ! be_quiet) /* save for last time stamp prt. */
+ strncpy(dt_info,++stt,sizeof(dt_info)-1);
+ }
+ }
+
+ if (NULL != (s = strchr(p, ' ')))
+ *s = '\0';
+ for (s = p; *s; ++s)
+ if (isupper(*s))
+ *s = tolower(*s);
+
+ /*
+ * Skip this line if we got -s <host> and
+ * this line does not contain that host name.
+ * Don't skip the `incoming call' line with the system name `-'.
+ */
+
+ if (Hostname[0] != '\0')
+ if ( (p[0] != '-' || p[1] != '\0') && 0 != strcmp(p, Hostname) )
+ continue;
+
+ /*
+ * We are within a call block now. If this line is a file
+ * transfer record, determine the direction. If not then
+ * skip the line if it is not interesting.
+ */
+
+ if ((s = strchr(++s, ')')) == NULL)
+ continue;
+
+#if ! HAVE_TAYLOR_LOGGING
+#if HAVE_V2_LOGGING
+ if ((strncmp(s,") (",3)) == 0) /* are we in stats file ?) */
+ if ((s = strchr(++s, ')')) == NULL)
+ continue; /* yes but strange layout */
+#endif /* HAVE_V2_LOGGING */
+#endif /* ! HAVE_TAYLOR_LOGGING */
+
+ logmsg = s + 2; /* Message is 2 characters after ')' */
+ if ((0 != strncmp(logmsg, "Call complete", 13)) &&
+ (0 != strncmp(logmsg, "Calling system", 14)) &&
+ (0 != strncmp(logmsg, "Incoming call", 13)) &&
+ (0 != strncmp(logmsg, "Handshake successful", 20)) &&
+ (0 != strncmp(logmsg, "Retry time not", 14)) &&
+ (0 != strncmp(logmsg, "ERROR: All matching ports", 25)) &&
+ (0 != strncmp(logmsg, "Executing", 9)) &&
+ (0 != strncmp(logmsg, "Protocol ", 9)) &&
+ (0 != strncmp(logmsg, "sent ", 5)) &&
+ (0 != strncmp(logmsg, "received ", 9)) &&
+ (0 != strncmp(logmsg, "failed after ", 13)) &&
+ (0 != strncmp(logmsg, "Errors: ", 8)))
+ continue;
+
+ /*
+ * Find the Host_entry for this host, or create a new
+ * one and link it on to the list.
+ */
+
+ if ((cur == NULL) || (0 != strcmp(p, cur->Hostname)))
+ {
+ struct Host_entry *e, *last;
+
+ for (e= cur= hosts; cur != NULL ; e= cur, cur= cur->next)
+ if (0 == strcmp(cur->Hostname, p))
+ break;
+ if (cur == NULL)
+ {
+ cur= (struct Host_entry *)getmem(sizeof(*hosts));
+ strcpy(cur->Hostname, p);
+ if (hosts == NULL)
+ e= hosts= cur;
+ else {
+ e = hosts;
+ last = NULL;
+ while (e != NULL) {
+ if (strcmp(e->Hostname, cur->Hostname) <= 0) {
+ if (e->next == NULL) {
+ e->next = cur;
+ break;
+ }
+ last = e;
+ e = e->next;
+ }
+ else {
+ cur->next = e;
+ if (last == NULL)
+ hosts = cur;
+ else
+ last->next = cur;
+ break;
+ }
+ } /* while (e != NULL) */
+ } /* hosts == NULL */
+ } /* cur == NULL */
+ }
+
+ /*
+ * OK, if this is a uuxqt record, find the Execution_Command
+ * structure for the command being executed, or create a new
+ * one. Then count an execution of this command.
+ * (Log file only)
+ */
+
+ if (0 == strncmp(logmsg, "Executing", 9))
+ {
+ if (NULL == (p = strchr(logmsg, '(')))
+ continue;
+ if ((s = strpbrk(++p, " )")) == NULL)
+ continue;
+ *s = '\0';
+ inc_cmd(&cur->cmds, p);
+ inc_cmd(&t_cmds, p);
+ have_commands = TRUE;
+ continue;
+ }
+
+ /*
+ * Count start of outgoing call.
+ */
+
+ if ((0 == strncmp(logmsg, "Calling system", 14)) ||
+ (0 == strncmp(logmsg, "Retry time not", 14)) ||
+ (0 == strncmp(logmsg, "ERROR: All matching ports", 25)))
+ {
+ called = OUT;
+ cur->call[OUT].calls++;
+ have_calls = TRUE;
+ s_prot = NULL; /* destroy pointer to protocol */
+ continue;
+ }
+
+ /*
+ * Count start of incoming call.
+ */
+
+ if (0 == strncmp(logmsg, "Incoming call", 13))
+ {
+ called = IN;
+ s_prot = NULL; /* destroy pointer to protocol */
+ continue;
+ }
+
+ /*
+ * On an incoming call, get system name from the second line.
+ * Get protocol type and size/window too
+ */
+
+ if (0 == strncmp(logmsg, "Handshake successful", 20))
+ {
+ if ( called==IN )
+ cur->call[IN].calls++;
+ have_calls = TRUE;
+ s_prot = NULL; /* destroy pointer to protocol */
+ if (NULL == (p = strchr(logmsg, '(')))
+ continue;
+ if (0 == strncmp(p, "(protocol ", 10))
+ {
+ if (NULL == (p = strchr(p, '\'')))
+ continue;
+ ss_prot = prot_sum(&cur->proto, ++p, 1);
+ s_prot = prot_sum(&t_prot, p, 1);
+ continue;
+ }
+ }
+
+ /*
+ * check protocol type and get stats
+ *
+ */
+
+ if (0 == strncmp(logmsg, "Protocol ", 9))
+ {
+ s_prot = NULL; /* destroy pointer to protocol */
+ if (NULL == (p = strchr(logmsg, '\'')))
+ continue;
+ ss_prot = prot_sum(&cur->proto, ++p, 2);
+ s_prot = prot_sum(&t_prot, p, 2);
+ continue;
+ }
+
+ /*
+ * check protocol errors. Unfortunately the line does not contain
+ * the used protocol, so if any previous line did contain that
+ * information and we did process that line we will save the pointer
+ * to that particular segment into s_prot. If this pointer is not set
+ * the error info is lost for we don't know where to store.
+ *
+ */
+
+ if ((0 == strncmp(logmsg, "Errors: header", 14)) && s_prot != NULL)
+ {
+ int i1,i2,i3,i4 = 0;
+ sscanf(logmsg,"%*s %*s %d%*c%*s %d%*c%*s %d%*c%*s %*s%*c %d",&i1,&i2,&i3,&i4);
+ ss_prot->pr_eheader += i1;
+ ss_prot->pr_echksum += i2;
+ ss_prot->pr_eorder += i3;
+ ss_prot->pr_ereject += i4;
+ s_prot->pr_eheader += i1;
+ s_prot->pr_echksum += i2;
+ s_prot->pr_eorder += i3;
+ s_prot->pr_ereject += i4;
+ s_prot = NULL;
+ continue;
+ }
+
+ /*
+ * Handle end of call. Pick up the connect time.
+ * position is on the closing paren of date/time info
+ * i.e: ) text....
+ */
+
+ if (0 == strncmp(logmsg, "Call complete", 13))
+ {
+ cur->call[called].succs++;
+ s_prot = NULL; /* destroy pointer to protocol */
+ if (NULL == (s = strchr(logmsg, '(')))
+ continue;
+ cur->call[called].connect_time += atof(s+1);
+ continue;
+ }
+
+ /*
+ * We are definitely in a Stats file now.
+ * If we reached here, this must have been a file transfer
+ * record. Count it in the field corresponding to the
+ * direction of the transfer. Count bytes transferred and
+ * the time to transfer as well.
+ * Position within the record is at the word 'received' or 'sent'
+ * depending on the direction.
+ */
+
+ sent = IN; /* give it an initial value */
+ if (0 == strncmp(logmsg, "failed after ",13))
+ logmsg += 13; /* the transmission failed for any reason */
+ /* so advance pointer */
+ if (0 == strncmp(logmsg, "sent", 4))
+ sent = OUT;
+ else if (0 == strncmp(logmsg, "received", 8))
+ sent = IN;
+ have_files[sent] = TRUE;
+ cur->call[called].flow[sent].files++;
+ if (NULL == (s = strchr(logmsg, ' '))) /* point past keyword */
+ continue; /* nothing follows */
+ /* we should be at the bytes column now*/
+#if HAVE_TAYLOR_LOGGING
+ cur->call[called].flow[sent].bytes += atol(++s);
+#endif /* HAVE_TAYLOR_LOGGING */
+#if HAVE_V2_LOGGING
+ if (NULL == (s = strpbrk(s, "0123456789"))) /* point to # bytes */
+ continue;
+ cur->call[called].flow[sent].bytes += atol(s);
+#endif /* HAVE_V2_LOGGING */
+ if (NULL == (s = strchr(s, ' '))) /* point past # of bytes */
+ continue;
+ if (NULL == (s = strpbrk(s, "0123456789"))) /* point to # of seconds */
+ continue;
+ cur->call[called].flow[sent].time += atof(s);
+
+ } /* end of while (fgets(logline...)) */
+
+ if (stt != NULL && ! use_stdin && ! be_quiet && ! no_records)
+ {
+
+#if HAVE_TAYLOR_LOGGING
+ sscanf(dt_info,"%s%*c%[^.]",in_date,in_time);
+#endif /* HAVE_TAYLOR_LOGGING */
+
+#if HAVE_V2_LOGGING
+ sscanf(dt_info,"%[^-]%*c%[1234567890:]",in_date,in_time);
+#endif /* HAVE_V2_LOGGING */
+
+ printf(" %10s %8s\n",in_date, in_time);
+ p_done = FALSE;
}
+ if (Log != stdin)
+ {
+ if (0 != ferror(Log))
+ {
+ if (! be_quiet)
+ printf(" %-14s data is incomplete; read error"," ");
+ else
+ fprintf(stderr,"%s (W) data is incomplete; read error on %s\n",
+ Pgm_name,argv[1]);
+ }
+ else
+ {
+ if (! be_quiet && no_records)
+ printf(" %-14s %10s\n",Filename, " is empty ");
+ }
+ }
+ fclose(Log);
-#if _DEBUG_
- printf("\n");
-#endif
+ argc--;
+ argv++;
+ } /* end of while (for (argv ....) */
/*
- * MAIN LOGFILE PROCESSING LOOP
+ * do we have *any* data ?
*/
- while (argc > 1)
- {
- if (!use_stdin && (Log = fopen(argv[1], "r")) == NULL)
- {
- perror(argv[1]);
- return;
- }
+ if (cur == NULL)
+ {
+ puts("\n(I) Sorry! No data is available for any requested report\n");
+ exit(0);
+ }
-#if _DEBUG_
- printf("Reading %s...\n", (use_stdin ? "stdin" : argv[1]));
-#endif
-
- /*
- * Read each line of the logfile and collect information
- */
- while (fgets(logline, sizeof(logline), Log))
- {
- /*
- * The host name of the other end of the connection is
- * always the second field of the log line, whether we
- * are reading a Log file or a Stats file. Set 'p' to
- * point to the second field, null-terminated. Skip
- * the line if something is funny.
- */
- if (NULL == (p = strchr(logline, ' ')))
- continue;
- ++p;
- if (NULL != (s = strchr(p, ' ')))
- *s = '\0';
- for (s = p; *s; ++s)
- if (isupper(*s))
- *s = tolower(*s);
- /*
- * Skip this line if we got -h <host> and
- * this line does not contain that host name.
- */
- if (Hostname[0] != '\0')
- if (0 != strcmp(p, Hostname))
- continue;
- /*
- * We are within a call block now. If this line is a file
- * transfer record, determine the direction. If not then
- * skip the line if it is not interesting.
- */
- if ((s = strchr(++s, ')')) == NULL)
- continue;
- logmsg = s + 2; /* Message is 2 characters after ')' */
- if (0 == strncmp(logmsg, "sent", 4))
- sent = OUT;
- else
- if (0 == strncmp(logmsg, "received", 8))
- sent = IN;
- else
- if ((0 != strncmp(logmsg, "Call complete", 13)) &&
- (0 != strncmp(logmsg, "Calling system", 14)) &&
- (0 != strncmp(logmsg, "Incoming call", 13)) &&
- (0 != strncmp(logmsg, "Executing", 9)))
- continue;
- /*
- * Find the Host_entry for this host, or create a new
- * one and link it on to the list.
- */
- if ((cur == NULL) || (0 != strcmp(p, cur->Hostname)))
- {
- for (cur = hosts; cur != NULL ; cur = cur->next)
- if (0 == strcmp(cur->Hostname, p))
- break;
- if (cur == NULL)
- {
- cur = (struct Host_entry *)calloc(1, sizeof(*hosts));
- strcpy(cur->Hostname, p);
- if (hosts == NULL)
- hosts = cur;
- else
- {
- for (e = hosts; e->next != NULL; e = e->next);
- e->next = cur;
- }
- }
- }
- /*
- * OK, if this is a uuxqt record, find the Execution_Command
- * structure for the command being executed, or create a new
- * one. Then count an execution of this command.
- */
- if (0 == strncmp(logmsg, "Executing", 9))
- {
- if (NULL == (p = strchr(logmsg, '(')))
- continue;
- if ((s = strpbrk(++p, " )")) == NULL)
- continue;
- *s = '\0';
- for (cmd = cur->cmds; cmd != NULL; cmd = cmd->next)
- if (0 == strcmp(cmd->Commandname, p))
- break;
- if (cmd == NULL)
- {
- cmd = (struct Execution_Command *)calloc(1, sizeof(*cmd));
- strcpy(cmd->Commandname, p);
- if (cur->cmds == NULL)
- cur->cmds = cmd;
- else
- {
- for (ec = cur->cmds; ec->next != NULL; ec = ec->next);
- ec->next = cmd;
- }
- }
- ++cmd->count;
- have_commands = 1;
- continue;
- }
- /*
- * Count start of outgoing call.
- */
- if (0 == strncmp(logmsg, "Calling system", 14))
- {
- called = OUT;
- cur->call[called].calls += 1;
- have_calls = 1;
- continue;
- }
- /*
- * Count start of incoming call.
- */
- if (0 == strncmp(logmsg, "Incoming call", 13))
- {
- called = IN;
- cur->call[called].calls += 1;
- have_calls = 1;
- continue;
- }
- /*
- * Handle end of call. Pick up the connect time.
- */
- if (0 == strncmp(logmsg, "Call complete", 13))
- {
- cur->call[called].succs += 1;
- if (NULL == (s = strchr(logmsg, '(')))
- continue;
- cur->call[called].connect_time += atof(s+1);
- continue;
- }
- /*
- * If we reached here, this must have been a file transfer
- * record. Count it in the field corresponding to the
- * direction of the transfer. Count bytes transferred and
- * the time to transfer as well.
- */
- have_files = 1;
- cur->call[called].flow[sent].files += 1;
- if (NULL == (s = strchr(logmsg, ' ')))
- continue;
- cur->call[called].flow[sent].bytes += atol(++s);
- if (NULL == (s = strchr(s, ' ')))
- continue;
- if (NULL == (s = strpbrk(s, "0123456789")))
- continue;
- cur->call[called].flow[sent].time += atof(s);
- }
- argc -= 1;
- argv += 1;
- if(Log != stdin)
- fclose(Log);
- }
-
/*
- * ***********
- * * REPORTS *
- * ***********
+ * truncate hostname, alloc the structure holding the totals and
+ * collect the totals data
*/
+ for (cur = hosts; cur != NULL;cur = cur->next)
+ {
+ cur->Hostname[MAXDNAME] = '\0';
+ if (cur->next == NULL) /* last so will have to alloc totals */
+ {
+ cur->next = (struct Host_entry *)getmem(sizeof(*hosts));
+ strcpy(cur->next->Hostname,"Totals");
+ tot = cur->next;
+ for (cur = hosts; cur != NULL; cur = cur->next)
+ {
+ if (cur->next != NULL) /* don't count totals to totals */
+ {
+ tot->call[IN].flow[IN].bytes += cur->call[IN].flow[IN].bytes;
+ tot->call[OUT].flow[IN].bytes += cur->call[OUT].flow[IN].bytes;
+ tot->call[IN].flow[OUT].bytes += cur->call[IN].flow[OUT].bytes;
+ tot->call[OUT].flow[OUT].bytes += cur->call[OUT].flow[OUT].bytes;
+ tot->call[IN].flow[IN].time += cur->call[IN].flow[IN].time;
+ tot->call[OUT].flow[IN].time += cur->call[OUT].flow[IN].time;
+ tot->call[IN].flow[OUT].time += cur->call[IN].flow[OUT].time;
+ tot->call[OUT].flow[OUT].time += cur->call[OUT].flow[OUT].time;
+ tot->call[IN].flow[IN].files += cur->call[IN].flow[IN].files;
+ tot->call[OUT].flow[IN].files += cur->call[OUT].flow[IN].files;
+ tot->call[IN].flow[OUT].files += cur->call[IN].flow[OUT].files;
+ tot->call[OUT].flow[OUT].files += cur->call[OUT].flow[OUT].files;
+ tot->call[OUT].succs += cur->call[OUT].succs;
+ tot->call[OUT].calls += cur->call[OUT].calls;
+ tot->call[OUT].connect_time += cur->call[OUT].connect_time;
+ tot->call[IN].succs += cur->call[IN].succs;
+ tot->call[IN].calls += cur->call[IN].calls;
+ tot->call[IN].connect_time += cur->call[IN].connect_time;
+ }
+ }
+ break; /* totals is last in Host_Entry */
+ }
+ }
+
/*
- * Truncate the Hostnames to 8 characters at most.
+ * ***********
+ * * REPORTS *
+ * ***********
*/
- for (cur = hosts; cur != NULL; cur = cur->next)
- cur->Hostname[8] = '\0';
#if _DEBUG_
- printf("\n");
+ putchar('\n');
#endif
- /*
- * Summary report
+ /* ------------------------------------------------------------------
+ *
+ * Summary report only when no other report except option -t is given
*
* I know, this code could be tightened (rbd)...
+ * ------------------------------------------------------------------
*/
- if(show_summary)
- {
- char t1[32], t2[32], t3[32], t4[32], t5[32];
- long ib, ob, b, rf, sf;
- long t_ib=0, t_ob=0, t_b=0, t_rf=0, t_sf=0;
- double it, ot, ir, or;
- double t_it=0.0, t_ot=0.0;
- int nhosts = 0;
-
- printf("\n\
- Remote ------- Bytes -------- --- Time ---- -- Avg CPS -- -- Files --\n");
- printf("\
- Host Rcvd Sent Total Rcvd Sent Rcvd Sent Rcvd Sent\n");
- printf("\
--------- ------- ------- ------- ------ ------ ------ ------ ----- -----\n");
- for (cur = hosts; cur != NULL; cur = cur->next)
- {
- ib = (cur->call[IN].flow[IN].bytes +
- cur->call[OUT].flow[IN].bytes);
- fmbytes(ib, t1);
- t_ib += ib;
-
- ob = (cur->call[IN].flow[OUT].bytes +
- cur->call[OUT].flow[OUT].bytes);
- fmbytes(ob, t2);
- t_ob += ob;
-
- b = ib + ob;
- fmbytes(b, t3);
- t_b += b;
-
- it = cur->call[IN].flow[IN].time +
- cur->call[OUT].flow[IN].time;
- fmtime(it, t4);
- t_it += it;
-
- ot = cur->call[IN].flow[OUT].time +
- cur->call[OUT].flow[OUT].time;
- fmtime(ot, t5);
- t_ot += ot;
-
- rf = cur->call[IN].flow[IN].files +
- cur->call[OUT].flow[IN].files;
- t_rf += rf;
-
- sf = cur->call[IN].flow[OUT].files +
- cur->call[OUT].flow[OUT].files;
- t_sf += sf;
-
- ir = (it == 0.0) ? 0.0 : (ib / it);
- or = (ot == 0.0) ? 0.0 : (ob / ot);
-
- printf("%-8s %7s %7s %7s %6s %6s %6.1f %6.1f %5d %5d\n",
- cur->Hostname,
- t1, t2, t3, t4, t5,
- ir, or, rf, sf);
- }
-
- if(nhosts > 1)
- {
- fmbytes(t_ib, t1);
- fmbytes(t_ob, t2);
- fmbytes(t_b, t3);
- fmtime(t_it, t4);
- fmtime(t_ot, t5);
- ir = (t_it == 0.0) ? 0.0 : (t_ib / t_it);
- or = (t_ot == 0.0) ? 0.0 : (t_ob / t_ot);
-
- printf("\
--------- ------- ------- ------- ------ ------ ------ ------ ----- -----\n");
- printf("\
-Totals %7s %7s %7s %6s %6s %6.1f %6.1f %5d %5d\n",
- t1, t2, t3, t4, t5,
- ir, or, t_rf, t_sf);
- }
- }
-
- /*
- * Call statistics report
+ if ( !(show_calls || show_files ||
+ show_efficiency || show_commands || show_proto) || show_all)
+ {
+ if (have_calls || have_files[IN] || have_files[OUT])
+ {
+ char t1[32], t2[32], t3[32], t4[32], t5[32];
+ long ib, ob, b, rf, sf;
+ double it, ot, ir, or;
+
+ hdr_done = FALSE;
+ for (cur = hosts; cur != NULL; cur = cur->next)
+ {
+ ib = (cur->call[IN].flow[IN].bytes +
+ cur->call[OUT].flow[IN].bytes);
+ fmbytes(ib, t1);
+
+ ob = (cur->call[IN].flow[OUT].bytes +
+ cur->call[OUT].flow[OUT].bytes);
+ fmbytes(ob, t2);
+
+ /* Don't print null-lines. */
+ if (( b= ib+ob ) == 0 )
+ continue;
+ /* Don't print the header twice. */
+ if (! hdr_done)
+ {
+ hdrprt('s',0); /* print the header line(s) */
+ hdr_done = TRUE;
+ }
+
+ fmbytes(b, t3);
+
+ it = cur->call[IN].flow[IN].time +
+ cur->call[OUT].flow[IN].time;
+ fmtime(it, t4);
+
+ ot = cur->call[IN].flow[OUT].time +
+ cur->call[OUT].flow[OUT].time;
+ fmtime(ot, t5);
+
+ rf = cur->call[IN].flow[IN].files +
+ cur->call[OUT].flow[IN].files;
+
+ sf = cur->call[IN].flow[OUT].files +
+ cur->call[OUT].flow[OUT].files;
+
+ ir = (it == 0.0) ? 0.0 : (ib / it);
+ or = (ot == 0.0) ? 0.0 : (ob / ot);
+
+ if (cur->next == NULL) /* totals line reached ? */
+ hdrprt('s',1); /* print the separator line */
+
+ printf("%-8s %4d %4d %9s %9s %9s %9s %9s %5.0f %5.0f\n",
+ cur->Hostname, rf, sf,
+ t1, t2, t3, t4, t5,
+ ir, or);
+ }
+ if (! hdr_done)
+ {
+ puts("\n(I) No data found to print Compact summary report");
+ }
+ }
+ else
+ {
+ puts("\n(I) No data available for Compact summary report");
+ --report;
+ }
+ }
+
+ /* ------------------------------------------------------------------
+ * Protocol statistics report
+ * ------------------------------------------------------------------
*/
- if(show_calls && have_calls)
- {
- char t1[32], t2[32];
-
- printf("\nCall statistics:\n");
- printf("\
- sysname callto failto totime callfm failfm fmtime\n");
- printf("\
- -------- ------ ------ -------- ------ ------ --------\n");
- for (cur = hosts; cur != NULL; cur = cur->next)
- {
- fmtime(cur->call[OUT].connect_time, t1);
- fmtime(cur->call[IN].connect_time, t2),
- printf(" %-8s %6d %6d %8s %6d %6d %8s\n",
- cur->Hostname,
- cur->call[OUT].calls,
- cur->call[OUT].calls - cur->call[OUT].succs,
- t1,
- cur->call[IN].calls,
- cur->call[IN].calls - cur->call[IN].succs,
- t2);
- }
- }
- /*
- * File statistics report
+ if (show_proto || show_all)
+ {
+ if (have_proto)
+ {
+ /* --------------------- */
+ /* protocol packet report */
+ /* --------------------- */
+
+ char *type = NULL;
+ hdr_done = FALSE;
+ for (cur = hosts; cur != NULL; cur = cur->next)
+ {
+ type = cur->Hostname;
+ if (cur->next == NULL)
+ {
+ if (hdr_done)
+ puts("-------------------------------------------------------------------");
+ cur->proto = t_prot;
+ }
+ for (prot = cur->proto; prot != NULL; prot = prot->next)
+ {
+ if (! hdr_done)
+ {
+ hdrprt('p',0); /* print the header line(s) */
+ hdr_done = TRUE;
+ }
+ printf("%-8s %3s %4d %4d %5d %4d %10d %7d %10d\n",
+ type == NULL ? " ":cur->Hostname,
+ prot->type,
+ prot->pr_psizemin,
+ prot->pr_psizemax,
+ prot->pr_pwinmin,
+ prot->pr_pwinmax,
+ prot->pr_psent,
+ prot->pr_present,
+ prot->pr_preceived);
+ type = NULL;
+ }
+ }
+ if (! hdr_done)
+ puts("\n(I) No data found to print Protocol packet report");
+
+ /* --------------------- */
+ /* protocol error report */
+ /* --------------------- */
+
+ type = NULL;
+ hdr_done = FALSE;
+ if (t_prot != NULL)
+ {
+ for (cur = hosts; cur != NULL; cur = cur->next)
+ {
+ type = cur->Hostname;
+ if (cur->next == NULL)
+ {
+ if (hdr_done)
+ puts("--------------------------------------------------------------");
+ cur->proto = t_prot;
+ }
+
+ for (prot = cur->proto; prot != NULL; prot = prot->next)
+ {
+ if ((prot->pr_eheader + prot->pr_echksum +
+ prot->pr_eorder + prot->pr_ereject) != 0)
+ {
+ if (! hdr_done)
+ {
+ hdrprt('p',1); /* print the header line(s) */
+ hdr_done = TRUE;
+ }
+ printf("%-8s %3s %11d %11d %11d %11d\n",
+ type == NULL ? " ":cur->Hostname,
+ prot->type,
+ prot->pr_eheader,
+ prot->pr_echksum,
+ prot->pr_eorder,
+ prot->pr_ereject);
+ type = NULL;
+ }
+ }
+ }
+ }
+ if (! hdr_done)
+ puts("\n(I) No data found to print Protocol error report");
+ }
+ else
+ {
+ puts("\n(I) No data available for Protocol reports");
+ --report;
+ }
+ }
+
+ /* ------------------------------------------------------------------
+ * Call statistics report
+ * ------------------------------------------------------------------
*/
- if(show_files && have_files)
- {
- char t1[32], t2[32];
-
- for (sent = IN; sent <= OUT; ++sent)
- {
- printf(file_hdr[sent]);
- printf(" sysname files bytes xfr time byte/s\n");
- printf(" -------- ------ -------- -------- ------\n");
- for (cur = hosts; cur != NULL; cur = cur->next)
- {
- double rate;
- double time;
-
- time = cur->call[IN].flow[sent].time +
- cur->call[OUT].flow[sent].time;
- if (time == 0.0)
- continue;
- rate = (cur->call[IN].flow[sent].bytes +
- cur->call[OUT].flow[sent].bytes) / time;
- fmbytes((cur->call[IN].flow[sent].bytes +
- cur->call[OUT].flow[sent].bytes), t1);
- fmtime((cur->call[IN].flow[sent].time +
- cur->call[OUT].flow[sent].time), t2);
- printf(" %-8s %6d %8s %8s %6.1f\n",
- cur->Hostname,
- cur->call[IN].flow[sent].files +
- cur->call[OUT].flow[sent].files,
- t1, t2, rate);
- }
- }
- }
- /*
- * Efficiency report
+ if (show_calls || show_all)
+ {
+ if (have_calls)
+ {
+ char t1[32], t2[32];
+
+ hdr_done = FALSE;
+ for (cur = hosts; cur != NULL; cur = cur->next)
+ {
+ if (cur->next == NULL)
+ {
+ if (hdr_done)
+ hdrprt('c',1); /* print the separator line */
+ }
+ else
+ {
+ /* Don't print null-lines on deatail lines */
+ if ( cur->call[OUT].calls + cur->call[IN].calls == 0 )
+ continue;
+
+ /* Don't print the header twice. */
+ if (! hdr_done)
+ {
+ hdrprt('c',0); /* print the header line(s) */
+ hdr_done = TRUE;
+ }
+ }
+ if ( cur->call[OUT].calls > 0 || cur->next == NULL)
+ {
+ fmtime(cur->call[OUT].connect_time, t1);
+ printf( " %-8s %7d %7d %7d %9s",
+ cur->Hostname,
+ cur->call[OUT].succs,
+ cur->call[OUT].calls - cur->call[OUT].succs,
+ cur->call[OUT].calls,
+ t1 );
+ }
+ else
+ {
+ printf( " %-42s", cur->Hostname );
+ }
+ if ( cur->call[IN].calls > 0 || cur->next == NULL )
+ {
+ fmtime(cur->call[IN].connect_time, t2);
+ printf( " %7d %7d %7d %9s",
+ cur->call[IN].succs,
+ cur->call[IN].calls - cur->call[IN].succs,
+ cur->call[IN].calls,
+ t2 );
+ }
+ putchar('\n');
+ }
+ if (! hdr_done)
+ {
+ puts("\n(I) No data found to print Call statistics report");
+ }
+ }
+ else
+ {
+ puts("\n(I) No data available for Call statistics report");
+ --report;
+ }
+ }
+
+ /* ------------------------------------------------------------------
+ * File statistics report
+ * ------------------------------------------------------------------
*/
- if (show_efficiency && have_files)
+
+ if (show_files || show_all)
+ {
+ if (have_files[IN] || have_files[OUT])
+ {
+ char t1[32], t2[32];
+ double rate = 0, time = 0;
+ int b = 0;
+ int lineOut = 0;
+
+ hdr_done = FALSE;
+ for (cur = hosts; cur != NULL; cur = cur->next)
+ {
+ lineOut = 0;
+ for (sent= IN; sent <= OUT; ++sent)
+ {
+ b = cur->call[IN].flow[sent].bytes +
+ cur->call[OUT].flow[sent].bytes;
+ time = cur->call[IN].flow[sent].time +
+ cur->call[OUT].flow[sent].time;
+
+ /* Don't print null-lines on detail lines. */
+ if ( (b != 0 && time != 0.0) || cur->next == NULL)
+ {
+ /* Don't print the header twice. */
+ if (! hdr_done)
+ {
+ hdrprt('f',0); /* print the header line(s) */
+ hdr_done = TRUE;
+ }
+ fmbytes(b, t1);
+ rate = (cur->call[IN].flow[sent].bytes +
+ cur->call[OUT].flow[sent].bytes) / time;
+ fmtime((cur->call[IN].flow[sent].time +
+ cur->call[OUT].flow[sent].time), t2);
+
+ if (lineOut == 0) /* first half not printed yet ? */
+ {
+ if (cur->next == NULL) /* totals line ? */
+ hdrprt('f',1); /* print the separator line */
+ printf(" %-8s", cur->Hostname);
+ if (sent == OUT) /* can't happen whith totals line */
+ printf("%34s", " ");
+ }
+
+ printf(" %5d %11s %9s %5.0f",
+ cur->call[IN].flow[sent].files +
+ cur->call[OUT].flow[sent].files,
+ t1, t2, rate);
+ lineOut = 1;
+ }
+ } /* end: for (sent ... ) */
+ if (lineOut)
+ printf("\n");
+ } /* end: for (cur= ... ) */
+ if (! hdr_done)
+ {
+ puts("\n(I) No data found to print File statistics report");
+ }
+ }
+ else
+ {
+ puts("\n(I) No data available for File statistics report");
+ --report;
+ }
+ }
+
+ /* ------------------------------------------------------------------
+ * Efficiency report
+ * ------------------------------------------------------------------
+ */
+
+ if (show_efficiency || show_all)
+ {
+ if (have_files[IN] || have_files[OUT])
+ {
+ char t1[32], t2[32], t3[32];
+ double total, flow;
+
+ hdr_done = FALSE;
+ for (cur = hosts; cur != NULL; cur = cur->next)
+ {
+ /* Don't print null-lines. */
+ if ( 0 == cur->call[IN].flow[IN].files +
+ cur->call[IN].flow[OUT].files +
+ cur->call[OUT].flow[IN].files +
+ cur->call[OUT].flow[OUT].files ||
+ 0.0 == (total= cur->call[IN].connect_time +
+ cur->call[OUT].connect_time))
+ {
+ continue;
+ }
+
+ if (! hdr_done)
+ {
+ hdrprt('e',0); /* print the header line(s) */
+ hdr_done = TRUE;
+ }
+
+ flow = cur->call[IN].flow[IN].time +
+ cur->call[IN].flow[OUT].time +
+ cur->call[OUT].flow[IN].time +
+ cur->call[OUT].flow[OUT].time;
+ fmtime(total, t1);
+ fmtime(flow, t2);
+ fmtime(total-flow, t3);
+
+ if (cur->next == NULL)
+ hdrprt('e',1); /* print the separator line */
+
+ printf(" %-8s %10s %10s %10s %7.2f\n",
+ cur->Hostname, t1, t2, t3,
+ flow >= total ? 100.0: flow*100.0/total);
+ } /* end: for (cur= .. */
+ if (! hdr_done)
+ {
+ puts("\n(I) No data found to print Efficiency report");
+ }
+ }
+ else
+ {
+ puts("\n(I) No data available for Efficiency report");
+ --report;
+ }
+ }
+
+ /* ------------------------------------------------------------------
+ * Command execution report
+ * ------------------------------------------------------------------
+ */
+
+ if (show_commands || show_all)
+ {
+ if (have_commands)
+ {
+ int ncmds, i, match;
+
+ /*
+ * layout the header line. The column's header is the command name
+ */
+
+ hdr_done = FALSE;
+ for (ncmds= 0, cmd= t_cmds;
+ cmd != NULL && ncmds <= MAXCOLS-1;
+ ncmds++, cmd= cmd->next)
+ {
+ if (! hdr_done)
+ {
+ puts("\nCommand executions:");
+ puts("-------------------");
+ puts(" Name of ");
+ fputs(" site ", stdout);
+ hdr_done = TRUE;
+ }
+ printf(" %7s", cmd->Commandname);
+ }
+ if (! hdr_done)
+ {
+ puts("\n(I) No data found to print Command execution report");
+ }
+ else
+ {
+ fputs("\n --------", stdout);
+ for (i= 0; i<ncmds; i++)
+ fputs(" ------", stdout);
+ putchar('\n');
+
+ /*
+ * print out the number of executions for each host/command
+ */
+
+ for (cur= hosts; cur != NULL; cur= cur->next)
+ {
+ if (cur->next == NULL)
+ break;
+
+ /* Don't print null-lines. */
+
+ if (cur->cmds == NULL)
+ continue;
+
+ printf(" %-8s", cur->Hostname);
+ for (cmd= t_cmds; cmd != NULL; cmd= cmd->next)
+ {
+ struct Execution_Command *ec;
+ match = FALSE;
+ for(ec= cur->cmds; ec != NULL; ec= ec->next)
+ {
+ if ( 0 == strcmp(cmd->Commandname, ec->Commandname) )
+ {
+ printf(" %7d", ec->count);
+ match = TRUE;
+ break;
+ }
+ }
+ if (! match)
+ printf("%8s"," "); /* blank out column */
+ }
+ putchar('\n');
+ }
+
+ /*
+ * print the totals line
+ */
+
+ fputs(" --------", stdout);
+ for (i= 0; i<ncmds; i++)
+ fputs("--------", stdout);
+ printf("\n %-8s", cur->Hostname);
+ for (cmd= t_cmds; cmd != NULL; cmd= cmd->next)
+ {
+ printf(" %7d", cmd->count);
+ }
+ putchar('\n');
+ }
+ }
+ else
+ {
+ puts("\n(I) No data available for Command execution report");
+ --report;
+ }
+ }
+ if (report <= 0 ) /* any reports ? */
+ {
+ puts("\n(I) Sorry! No data is available for any requested report\n");
+ exit(1);
+ }
+
+ puts("\n(I) End of reports\n");
+ exit (0);
+} /* end of main */
+
+ /* ------------------------------------------------------------------
+ * * Functions *
+ * ------------------------------------------------------------------
+ */
+
+ /* ------------------------------------------------------------------
+ * display the help
+ * ------------------------------------------------------------------
+ */
+
+void usage()
+{
+ fprintf(stderr,"Usage uurate [-acdefhiptvx] [-s hostname] [-I config file] [logfile(s) ... logfile(s)]\n");
+ fprintf(stderr,"where:\t-a\tPrint reports c,e,f,x\n");
+ fprintf(stderr,"\t-c\tReport call statistics\n");
+ fprintf(stderr,"\t-d\tPrint the name of the default config file\n");
+ fprintf(stderr,"\t-e\tReport efficiency statistics\n");
+ fprintf(stderr,"\t-f\tReport file transfer statistics\n");
+ fprintf(stderr,"\t-h\tPrint this help\n");
+ fprintf(stderr,"\t-i\tRead log info from standard input\n");
+ fprintf(stderr,"\t-p\tReport protocol statistics\n");
+ fprintf(stderr,"\t-t\tAll available reports plus compact summary report\n");
+ fprintf(stderr,"\t-v\tPrint version number\n");
+ fprintf(stderr,"\t-x\tReport command execution statistics\n");
+ fprintf(stderr,"\t-s host\tReport activities involving HOST only\n");
+ fprintf(stderr,"\t-I config Use config instead of standard config file\n");
+ fprintf(stderr,"If no report options given, a compact summary report is printed.\n");
+ fprintf(stderr,"log files should be given as pairs that is Log/Stats ... .\n");
+ fprintf(stderr,"If neither -i nor logfiles given, those names found in config will be used\n");
+
+ exit (1);
+}
+
+ /* ------------------------------------------------------------------
+ * getmem - get some memory
+ * ------------------------------------------------------------------
+ */
+
+static pointer *getmem(n)
+ unsigned n;
+{
+ pointer *p;
+
+ if( NULL== (p= calloc(1, n)) )
{
- char t1[32], t2[32], t3[32];
- double total, flow;
-
- printf("\nEfficiency:\n");
- printf(" sysname conntime flowtime ovhdtime eff. %%\n");
- printf(" -------- -------- -------- -------- ------\n");
- for (cur = hosts; cur != NULL; cur = cur->next)
- {
- total = cur->call[IN].connect_time + cur->call[OUT].connect_time;
- flow = cur->call[IN].flow[IN].time + cur->call[IN].flow[OUT].time +
- cur->call[OUT].flow[IN].time + cur->call[OUT].flow[OUT].time;
- fmtime(total, t1);
- fmtime(flow, t2);
- fmtime((total-flow), t3);
- printf(" %-8s %8s %8s %8s %5.1f%%\n",
- cur->Hostname, t1, t2, t3, ((flow / total) * 100.0));
- }
+ fprintf(stderr,"\a%s (C) %s\n",Pgm_name, "out of memory\n");
+ exit (8);
}
+ return p;
+}
+
+ /* ------------------------------------------------------------------
+ * inc_cmd - increment command count
+ * ------------------------------------------------------------------
+ */
+
+static void inc_cmd(cmds, name)
+ struct Execution_Command **cmds;
+ char *name;
+{
+ int cnt = 0;
+ struct Execution_Command *cmd, *ec;
+
+ for (ec = cmd = *cmds; cmd != NULL; ec= cmd, cmd= cmd->next, cnt++)
+ if ( (0 == strcmp(cmd->Commandname, name)) ||
+ (0 == strcmp(cmd->Commandname, "Misc.")) )
+ break;
+ if (cmd == NULL)
+ {
+ cmd= (struct Execution_Command *)getmem(sizeof(*cmd));
+ if (cnt <= MAXCOLS-1) /* first col prints site name therefore < max-1 */
+ {
+ strcpy(cmd->Commandname, name);
+ if (*cmds == NULL)
+ ec = *cmds = cmd;
+ else
+ ec->next= cmd;
+ }
+ else
+ {
+ strcpy(ec->Commandname, "Misc."); /* reached high-water-mark */
+ cmd = ec; /* backtrack */
+ }
+ }
+ cmd->count++;
+}
+
+
+ /* ------------------------------------------------------------------
+ * prot_sum - collect protocol data
+ * ------------------------------------------------------------------
+ */
+
+ struct Protocol_Summary *
+ prot_sum(proto, ptype, ind)
+ struct Protocol_Summary **proto;
+ char *ptype;
+ int ind;
+{
+ int cnt = 0;
+ int i1, i2, i3 = 0;
+ struct Protocol_Summary *cur, *first;
+ for (first = cur = *proto; cur != NULL; first= cur, cur= cur->next, cnt++)
+ {
+ if ( (0 == strncmp(cur->type, ptype,strlen(cur->type))))
+ break;
+ }
+ if (cur == NULL)
+ {
+ cur= (struct Protocol_Summary *)getmem(sizeof(*cur));
+ sscanf(ptype,"%[^\' ]3",cur->type);
+ if (*proto == NULL)
+ first = *proto = cur;
+ else
+ first->next= cur;
+ }
+ if (NULL == (ptype = strchr(ptype, ' ')))
+ return (NULL);
+ cur->pr_cnt++;
+ have_proto = TRUE;
+ ++ptype;
+ switch(ind)
+ {
+ case 1: /* used protocol line */
/*
- * Command execution report
- */
- if (show_commands & have_commands)
- {
- printf("\nCommand executions:\n");
- printf(" sysname rmail rnews other\n");
- printf(" -------- ------ ------ ------\n");
- for (cur = hosts; cur != NULL; cur = cur->next)
- {
- int rmail, rnews, other;
-
- if (cur->cmds == NULL)
- continue;
- rmail = rnews = other = 0;
- for (cmd = cur->cmds; cmd != NULL; cmd = cmd->next)
- {
- if (strcmp(cmd->Commandname, "rmail") == 0)
- rmail += cmd->count;
- else if (strcmp(cmd->Commandname, "rnews") == 0)
- rnews += cmd->count;
- else
- other += cmd->count;
- }
- printf(" %-8s %6d %6d %6d\n", cur->Hostname,
- rmail, rnews, other);
- }
- }
- return;
-
- usage:
- fprintf(stderr,
- "Usage uurate [-cfexai] [-h hostname] [logfile ... logfile]\n");
- fprintf(stderr,"where:\t-c\tReport call statistics\n");
- fprintf(stderr, "\t-f\tReport file transfer statistics\n");
- fprintf(stderr, "\t-e\tReport efficiency statistics\n");
- fprintf(stderr, "\t-x\tReport command execution statistics\n");
- fprintf(stderr, "\t-a\tAll of the above reports\n");
- fprintf(stderr, "\t-h host\tReport activities involving ONLY host\n");
- fprintf(stderr, "\t-i\tRead log info from standard input\n");
- fprintf(stderr,
- "If no report options given, a compact summary report is given.\n");
- fprintf(stderr,
- "If neither -i nor logfiles given, defaults to reading from\n");
- fprintf(stderr, "%s and %s\n\n", LOGFILE, STATFILE);
+ * uucp-1.04 format: .... packet size ssss window ww)
+ * uucp-1.05 format: .... remote packet/window ssss/ww local ssss/ww)
+ * (the remote packet/window will be used!)
+ */
+
+ i1 = i2 = 0; /* reset */
+
+ if (NULL == (strchr(ptype, '/')))
+ sscanf(ptype,"%*s %*s %d %*s %d",&i1,&i2);
+ else
+ sscanf(ptype,"%*s %*s %d/%d",&i1,&i2);
+
+ if (i1 > cur->pr_psizemax)
+ cur->pr_psizemax = i1;
+ if (i1 < cur->pr_psizemin || cur->pr_psizemin == 0)
+ cur->pr_psizemin = i1;
+
+ if (i2 > cur->pr_pwinmax)
+ cur->pr_pwinmax = i2;
+ if (i2 < cur->pr_pwinmin || cur->pr_pwinmin == 0)
+ cur->pr_pwinmin = i2;
+ break;
+ case 2: /* protocol statistics line */
+ i1 = i2 = i3 = 0; /* reset */
+ sscanf(ptype,"%*s %*s %d%*c %*s %d%*c %*s %d",&i1,&i2,&i3);
+ cur->pr_psent += i1;
+ cur->pr_present += i2;
+ cur->pr_preceived += i3;
+ break;
+ default:
+ break;
+ }
+ return (cur);
}
+ /* ------------------------------------------------------------------
+ * fmtime() - Format time in hours & minutes & seconds;
+ * ------------------------------------------------------------------
+ */
-/*
- * fmtime() - Format time in hours & minutes;
- */
static void fmtime(dsec, buf)
- double dsec;
- char *buf;
+ double dsec;
+ char *buf;
{
long hrs, min, lsec;
- lsec = dsec;
- hrs = lsec / 3600L;
- min = (lsec - (hrs * 3600L)) / 60L;
+ if( dsec <= 0 )
+ {
+ strcpy(buf, "0" );
+ return;
+ }
+ lsec = fmod(dsec+0.5, 60L); /* round to the next full second */
+ hrs = dsec / 3600L;
+ min = ((long)dsec / 60L) % 60L;
+ if (hrs == 0)
+ if (min == 0)
+ sprintf(buf,"%6s%2ld"," ",lsec);
+ else
+ sprintf(buf,"%3s%2ld:%02ld"," ",min,lsec);
+ else
+ sprintf(buf,"%2ld:%02ld:%02ld",hrs,min,lsec);
- sprintf(buf, "%02ld:%02ld", hrs, min);
}
-/*
- * fmbytes - Format size in bytes
- */
+ /* ------------------------------------------------------------------
+ * fmbytes - Format size in bytes
+ * ------------------------------------------------------------------
+ */
+
static void fmbytes(n, buf)
- unsigned long n;
- char *buf;
+ unsigned long n;
+ char *buf;
{
- char t;
- double s = n;
+ if ( n == 0 )
+ {
+ strcpy( buf, "0.0" );
+ return;
+ }
+ sprintf(buf, "%.1f", (double)n / 1000.0); /* Display in Kilobytes */
+}
- if(s >= 10239897.6) /* More than 9999.9K ? */
- {
- s = (double)n / 1048576.0; /* Yes, display in Megabytes */
- t = 'M';
- }
- else
- {
- s = (double)n / 1024.0; /* Display in Kilobytes */
- t = 'K';
- }
- sprintf(buf, "%.1f%c", s, t);
+ /* ------------------------------------------------------------------
+ * chk_config - Read the config file
+ * check on keywords: logfile and statfile. When found override
+ * the corresponding default
+ * ------------------------------------------------------------------
+ */
+
+int chk_config(char *T_conf,int be_quiet, int type)
+{
+ FILE *Conf;
+ char keywrd[9];
+ char name[MAXPATHLEN+1];
+ char *pos1, *pos2;
+ int i = 0;
+ int logf = FALSE;
+ int statf = FALSE;
+
+ if ((Conf = fopen(T_conf, "r")) == NULL)
+ {
+ if (! be_quiet)
+ {
+ puts(" Could not open config");
+ if (type == 0)
+ {
+ puts(" The run will be aborted\n");
+ return (8);
+ }
+ }
+ else
+ {
+ fprintf(stderr,"%s (E) %s %s \n",Pgm_name,
+ "could not open config:",
+ T_conf);
+ if (type != 0)
+ fprintf(stderr,"%s (W) defaults used for all files\n",
+ Pgm_name);
+ else
+ {
+ fprintf(stderr,"%s (C) ended due to errors\n",
+ Pgm_name);
+ return (8);
+ }
+ }
+ }
+ else
+ {
+ while (fgets(logline, sizeof(logline), Conf))
+ {
+ if (logline[0] == '#')
+ continue;
+ sscanf(logline,"%8s %s",keywrd,name);
+ if (0 == strncmp(keywrd,"logfile",7))
+ {
+ pos1 = pos2 = name;
+ for (i=0;(i<=MAXPATHLEN && *pos1 != '\0');pos1++,pos2++,i++)
+ {
+ if (*pos1 == '#') /* name immed followed by comment */
+ break;
+ if (*pos1 == '\\') /* quoted comment (filename has #) */
+ {
+ ++pos1; /* skip escape char */
+ if (*pos1 != '#') /* continuation ? */
+ {
+ puts(" Config error:");
+ puts(" Found filename continuation; bailing out\n");
+ exit (8);
+ }
+ }
+ *pos2 = *pos1; /* move char */
+ }
+ *pos2 = '\0'; /* terminate string */
+ Tlog = (char *)getmem(strlen(name)+1);
+ strcpy(Tlog,name);
+ if (! be_quiet)
+ printf(" logfile used: %s\n",Tlog);
+ logf = TRUE;
+ if (statf) /* statsfile still to come ? */
+ break; /* no finished */
+ continue;
+ }
+
+ if (0 == strncmp(keywrd,"statfile",8))
+ {
+ pos1 = pos2 = name;
+ for (i=0;(i<=MAXPATHLEN && *pos1 != '\0');pos1++,pos2++,i++)
+ {
+ if (*pos1 == '#') /* name immed followed by comment */
+ break;
+ if (*pos1 == '\\') /* quoted comment (filename has #) */
+ {
+ ++pos1; /* skip escape char */
+ if (*pos1 != '#') /* continuation ? */
+ {
+ puts(" Config error:");
+ puts(" Found filename continuation; bailing out\n");
+ exit (8);
+ }
+ }
+ *pos2 = *pos1; /* move char */
+ }
+ *pos2 = '\0'; /* terminate string */
+ Tstat = (char *)getmem(strlen(name)+1);
+ strcpy(Tstat,name);
+ if (! be_quiet)
+ printf(" statfile used: %s\n",Tstat);
+ statf = TRUE;
+ if (logf) /* logfile still to come ? */
+ break; /* no finished */
+ continue;
+ }
+ }
+ fclose(Conf);
+ }
+
+ if (! be_quiet)
+ {
+ if (! logf)
+ puts(" logfile used: - default -");
+ if (! statf)
+ puts(" statfile used: - default -");
+ }
+
+return 0;
}
+
+ /* ------------------------------------------------------------------
+ * hdrprt - Print Header/Trailer lines (constant data)
+ * ------------------------------------------------------------------
+ */
+
+static void hdrprt(char head, int bot)
+{
+ switch(head)
+ {
+ case('s'): /* standard summary report */
+ if (bot == 0)
+ {
+ puts("\nCompact summary:");
+ puts("----------------");
+ puts("\
+Name of + Files + +------- Bytes/1000 --------+ +------ Time -----+ + Avg CPS +\n\
+site in out inbound outbound total inbound outbound in out\n\
+-------- ---- ---- --------- --------- --------- --------- --------- ----- -----");
+ }
+ else
+ puts("\
+--------------------------------------------------------------------------------");
+ break;
+
+
+ case('f'): /* file statistic report */
+ if (bot == 0)
+ {
+ puts("\nFile statistics:");
+ puts("----------------");
+ puts(" Name of +----------- Inbound -----------+ +---------- Outbound -----------+");
+ puts(" site files Bytes/1000 xfr time B/sec files Bytes/1000 xfr time B/sec");
+ puts(" -------- ----- ----------- --------- ----- ----- ----------- --------- -----");
+ }
+ else
+ puts("\
+ ----------------------------------------------------------------------------");
+ break;
+
+
+ case('c'): /* calls statistic report */
+ if (bot == 0)
+ {
+ puts("\nCall statistics:");
+ puts("----------------");
+ puts(" Name of +------- Outbound Calls -------+ +-------- Inbound Calls ------+");
+ puts(" site succ. failed total time succ. failed total time");
+ puts(" -------- ------ ------ ------ --------- ------ ------ ------ ---------");
+ }
+ else
+ puts("\
+ ----------------------------------------------------------------------------");
+ break;
+
+
+ case('e'): /* efficiency statistic report */
+ if (bot == 0)
+ {
+ puts("\nEfficiency:");
+ puts("-----------");
+ puts(" Name of +------ Times inbound/outbound -------+");
+ puts(" site connected xfr time overhead eff. %");
+ puts(" -------- --------- --------- --------- ------");
+ }
+ else
+ puts(" -------------------------------------------------");
+ break;
+
+ case('i'): /* Environment information */
+ if (bot == 0)
+ {
+ puts("\nEnvironment Information:");
+ puts("------------------------");
+ printf(" Default config: %s\n",D_conf == NULL ?
+ noConf:D_conf);
+ printf(" Default logfile: %s\n",Tlog);
+ printf(" Default statfile: %s\n\n",Tstat);
+ }
+ break;
+
+ case('d'): /* Date/time coverage */
+ if (bot == 0)
+ {
+ puts("\n Date coverage of input files:");
+ puts(" Name of +----- Start -----+ +------ End ------+");
+ puts(" file date time date time");
+ puts(" -------- ---------- -------- ---------- --------");
+ }
+ break;
+
+ case('p'): /* Protocol stats */
+ if (bot == 0)
+ {
+ puts("\nProtocol packet report:");
+ puts("-----------------------");
+ puts(" +------- protocol -----+ +--------- Packets ----------+");
+ puts("Name of packet window ");
+ puts("site typ min max min max sent resent received");
+ puts("-------- --- ---- ---- ---- ---- ----------- ------- ----------");
+ }
+ else
+ {
+ puts("\nProtocol error report:");
+ puts("----------------------");
+ puts("Name of +----------------- Error Types --------------------+");
+ puts("site typ header checksum order rem-reject");
+ puts("-------- --- ----------- ---------- ----------- ----------");
+ }
+ break;
+
+ default:
+ if (bot == 0)
+ {
+ puts("\nNo header for this report defined:");
+ }
+ else
+ puts(" ");
+ break;
+ }
+}
diff --git a/gnu/libexec/uucp/contrib/uurate.man b/gnu/libexec/uucp/contrib/uurate.man
index 9f33ef303862..b7b69a46f2dd 100644
--- a/gnu/libexec/uucp/contrib/uurate.man
+++ b/gnu/libexec/uucp/contrib/uurate.man
@@ -1,10 +1,13 @@
+''' $Id: uurate.man,v 1.2 1994/05/07 18:09:37 ache Exp $
.TH uurate 1
.SH NAME
uurate \- Report Taylor UUCP statistics
.SH SYNOPSIS
-.BR uurate " [ " "\-cfexai" " ] [ " "\-h "
+.BR uurate " [ " "\-acdefhipqtvx" " ] [ " "\-s "
.I host
-.RI " ] [ " "logfile..." " ] "
+.RI " ] [ " "\-I "
+.I config
+.RI " ][ " "logfile..." " ] "
.PP
or simply,
.PP
@@ -12,20 +15,20 @@ or simply,
.PP
for a traffic summary report.
.SH DESCRIPTION
-The
+The
.I uurate
-command provides tabular summary reports on the operation of the
+command provides tabular summary reports on the operation of the
Taylor UUCP system. Data is taken from the currently active log
-files, standard input, or from a list of log files given on the
-command line. Output is in the form of tabular reports summarizing
+files, standard input, or from a list of log files given on the
+command line. Output is in the form of tabular reports summarizing
call, file transfer, and command execution
.RI "(" "uuxqt" ")"
activity.
.PP
-The log files given to
+The log and stats files given to
.I uurate
-must be in the ``Taylor'' format. Also, note that call and file
-transfer activities are logged in separate files, nominally called
+must be in the ``Taylor'' or ``V2'' format. Also, note that call and file
+transfer activities are logged in separate files, nominally called
.I Log
and
.I Stats,
@@ -33,43 +36,49 @@ respectively. For reports to be meaningful, the
.I Log
and
.I Stats
-files should be given to
+files should be given to
.I uurate
together, and cover the same time period.
.PP
If neither the
.B \-i
-option nor any
+or
+.B \-I
+option nor any
.I logfile
-options are given,
+options are given,
.I uurate
defaults to taking its input from the current Taylor
.I Log
and
.I Stats
-files, as defined at compilation time.
+files. The names are either as defined at compilation time, in case
+there is no config file, or taken from the arguments of the keywords
+.I logfile
+and
+.I statfile
+when encountered in the config file.
This is the normal mode of operation.
.PP
The reporting options described below can be used to select
-the set of reports desired. If no options are given, the
-.B call
-and
-.B file
-reports are displayed. If there is no relevant data for a particular
-report or host, that report or host will be supressed.
+the set of reports desired. If no options are given, a summary
+report is displayed. If there is no relevant data for a particular
+report or host, that report or host will be suppressed.
.SH OPTIONS
-The following options may be given to
+The following options may be given to
.I uurate:
.TP 5
+.B \-a
+All reports. Identical to
+.B \-cfexp.
+.TP 5
.B \-c
Report on call statistics. Requires data from a
.I Log
file.
.TP 5
-.B \-f
-Report on file transfer statistics. Requires data from a
-.I Stats
-file.
+.B \-d
+will print the default config file to be used.
.TP 5
.B \-e
Report on efficiency (total connect time versus time spent transferring
@@ -79,6 +88,32 @@ and a
.I Stats
file, and they must span the same time period.
.TP 5
+.B \-f
+Report on file transfer statistics. Requires data from a
+.I Stats
+file.
+.TP 5
+.B \-h
+will print a short help information.
+.TP 5
+.B \-i
+tells uurate to read any logfile information from standard input.
+.TP 5
+.B \-p
+report on protocol errors and packets sent/received
+.TP 5
+.B \-q
+do not print the Environment information,
+.TP 5
+.B \-t
+All reports. Identical to
+.B \-cfexp.
+plus the
+.B Compact summary.
+.TP 5
+.B \-v
+will print the version id string
+.TP 5
.B \-x
Report on remote execution requests (e.g.,
.IR rmail ")."
@@ -86,19 +121,20 @@ Requires data from a
.I Log
file.
.TP 5
-.B \-a
-All reports. Identical to
-.B \-cfex.
-.TP 5
-.BI "\-h " "host"
+.BI "\-s " "host"
Restrict report output to
.I host.
+.TP 5
+.BI "\-I " "config file"
+an alternate config file may be passed by this option.
.SH "DESCRIPTION OF REPORTS"
There are four reports available: the call, file transfer, efficiency,
and remote execution reports. Each may be selected by a command line
-option. All reports may be selected via the option
-.B \-a.
-If no report selection options are given,
+option. All reports may be selected via the options
+.B \-a
+or
+.B \-t.
+If no report selection options are given,
.I uurate
displays a compact traffic summary report (see below).
.SS "Summary report"
@@ -109,109 +145,136 @@ displays a traffic summary report. This is particularly useful in daily
jobs which report on errors and the like. Traffic statistics for each
active system is reported on a single line. If more than one system was
active, a 'totals' line is included at the end of the report.
+.SS "Protocol packet report"
+The protocol report gives statistics on min/max packet and window sizes
+used during transmission. Further on data is collected for packets
+transferred. The data is collected for each host/protocol type.
+The fields are described below:
+.PP
+.br
+.nf
+.in +.3i
+.ta 1.0i
+.BR "site " "UUCP node name of neighbor host system,"
+.BR "typ " "Type of protocol used"
+.BR "Min " "minimum packet/window size"
+.BR "Max " "maximum packet/window size"
+.BR "sent " "packets sent"
+.BR "resent " "packets resent"
+.BR "received " "packets received"
+.in -.3
+.SS "Protocol error report"
+The protocol report gives statistics on packet errors
+during transmission. The data is collected for each host/protocol type.
+The fields are described below:
+.PP
+.br
+.nf
+.in +.3i
+.ta 1.5i
+.BR "site " "UUCP node name of neighbor host system,"
+.BR "typ " "Type of protocol used"
+.BR "header " "number of errors in header"
+.BR "checksum " "number of checksum errors"
+.BR "order " "number of order errors"
+.BR "resent " "number packets resent"
+.BR "rem-reject " "packets that the remote site rejected"
+.in -.3
.SS "Call report"
-The call report gives statistics on inbound and outbound calls for
+The call report gives statistics on inbound and outbound calls for
each active host system. The fields are described below:
+.PP
.br
.nf
-.in +.5i
+.in +.3i
.ta 1.0i
-.BR "sysname " "UUCP node name of neighbor host system"
-.BR "callto " "Outbound calls attempted to that system"
-.BR "failto " "Failed outbound calls to that system"
-.BR "totime " "Connect time (sec.) on outbound calls"
-.BR "callfm " "Inbound calls attempted by that system"
-.BR "failfm " "Failed inbound calls from that system"
-.BR "fmtime " "Connect time (sec.) on inbound calls"
-.in -.5
+.BR "site " "UUCP node name of neighbor host system,"
+.BR "succ. " "Successful calls attempted to/by that system,"
+.BR "failed " "Failed calls to/by that system,"
+.BR "total " "Total calls to/by that system,"
+.BR "time " "Collected connect time (hh:mm:ss) for all calls,"
+.in -.3
.SS "File transfer reports"
-The file transfer reports give statistics on inbound and
+The file transfer reports give statistics on inbound and
outbound file transfers (regardless of which end initiated the transfer)
for each active host system. There are two reports, one for files
sent to the remote system and one for files received from the remote
system. The fields in each report are described below:
+.PP
.br
.nf
-.in +.5i
+.in +.3i
.ta 1.0i
-.BR "sysname " "UUCP node name of neighbor host system"
-.BR "files " "Number of files transferred"
-.BR "bytes " "Total size (bytes) of files transferred"
-.BR "seconds " "Total time (sec.) to transfer files"
-.BR "byte/sec " "Average transfer rate (bytes/sec)"
-.in -.5
+.BR "site " "UUCP node name of neighbor host system"
+.BR "files " "Number of files transferred"
+.BR "Bytes/1000 " "Total size of files transferred given in thousands"
+.BR "xfr time " "Total time (hh:mm:ss) spent on transfer the files,"
+.BR "B/sec " "Average transfer rate (bytes/sec)."
+.in -.3
.SS "Efficiency report"
The efficiency report describes the utilization of the links
to each active remote system, giving the ratio of total connect time
-to the time spent actually transferring files.
+to the time spent actually transferring files.
The fields are described below:
+.PP
.br
.nf
-.in +.5i
+.in +.3i
.ta 1.0i
-.BR "sysname " "UUCP node name of neighbor host system"
-.BR "conntime " "Total connect time for that system"
-.BR "flowtime " "Total file transfer time for that system"
-.BR "ovhdtime " "Connect time not used to transfer files"
-.BR "effcy (%) " "Ratio of connect time to transfer time"
-.in -.5
-.SS "Remote execution report"
+.BR "site " "UUCP node name of neighbor host system"
+.BR "connected " "Total connect time for that system (turn-around)"
+.BR "xfr time " "Total file transfer time for that system"
+.BR "overhead " "Connect time not used to transfer files,"
+.BR "eff. % " "Ratio of connect time to transfer time (xfer*100/conn)"
+.in -.3
+.SS "Command executions report"
The remote execution report describes remotely
-requested command executions from each active host system.
-Executions of
+requested command executions from each active host system, like
.I rmail
and
-.I rnews
-are the most common, and are detailed separately. The fields
-are described below:
+.IR rnews "."
+Up to eight command names are displayed. If there are more, the
+rest will be put together in an `Misc.' column.
+The fields are described below:
+.PP
.br
.nf
-.in +.5i
+.in +.3i
.ta 1.0i
-.BR "sysname " "UUCP node name of neighbor host system"
-.BR "rmail " "Number of rmail requests from that system"
-.BR "rnews " "Number of rnews requests from that system"
-.BR "other " "Number of other requests from that system"
-.in -.5i
+.BR "site " "UUCP node name of neighbor host system,"
+.BR "(command) " "Number of requests of this command,"
+.BR "Misc. " "Number of other requests, if more than eight."
+.in -.3i
.SS FILES
The file names below may be changed at compilation time or by the
configuration file, so these are only approximations.
.br
.nf
-.in +.5in
-.ta 2.0i
-.IR "/usr/spool/uucp/Log " "Taylor format call/execution log"
-.IR "/usr/spool/uucp/Stats " "Taylor format file transfer log"
+.in +.3in
+.ta 2.2i
+.IR "/usr/spool/uucp/Log " "V2/Taylor format call/execution log,"
+.IR "/usr/spool/uucp/Stats " "V2/Taylor format file transfer log."
.SS "SEE ALSO"
.IR uucico "(8)"
.SS BUGS
-Does not understand older (V2, BNU) logging formats. Anyone care to
-volunteer to add this? I don't use the stuff myself.
+Does not understand other than V2/TAYLOR logging formats. Anyone care to
+volunteer to add the not mentioned?
.PP
-The entries that Taylor UUCP makes in the log file for incoming calls
-don't have a host name. This confuses
-.I uurate
-into thinking that the calls came in for system "-". This may require
-a change to Taylor logging.
+Scanning the arguments of logfile and statfile keywords
+in config should handle lines continued with the backslash as well.
.PP
-Should check the configuration file to locate the currently active
-.I Log
-and
-.I Stats
-files when using them for default inputs. Instead, it uses the
-compile-time settings only.
-.PP
-Should report packet protocol error statistics by host and
-protocol type.
+The
+.B failfm
+field in the call statistics table is always zero, unless
+something really serious happens, e.g. uucico got SIGQUIT or
+the whole system crashed.
.SS AUTHOR
-Robert B. Denny (denny@alisa.com)
+Robert B. Denny (denny@alisa.com).
.br
Loosely based on the DECUS UUCP program
.I uurate
by Mark Pizzolato.
-
-
-
-
-
-
+.br
+Modified by Stephan Niemz (stephan@sunlab.ka.sub.org).
+.br
+Modified by Klaus Dahlenburg (kdburg@incoahe.hanse.de).
diff --git a/gnu/libexec/uucp/contrib/uureroute.perl b/gnu/libexec/uucp/contrib/uureroute.perl
new file mode 100755
index 000000000000..3eeb654e1e27
--- /dev/null
+++ b/gnu/libexec/uucp/contrib/uureroute.perl
@@ -0,0 +1,91 @@
+#!/usr/local/bin/perl
+eval ' exec /usr/local/bin/perl $0 "$@" '
+ if $running_under_some_shell;
+
+# From a script by <Bill.Campbell@celestial.com>
+# Newsgroups: comp.sources.misc
+# Subject: v28i073: uureroute - Reroute HDB queued mail, Part01/01
+# Date: 26 Feb 92 02:28:37 GMT
+#
+# This is a Honey DanBer specific routine written in perl to reroute all
+# mail queued up for a specific host. It needs to be run as "root" since
+# uucp will not allow itself to remove others requests.
+#
+# Revision *** 92/21/09: Francois Pinard <pinard@iro.umontreal.ca>
+# 1. adapted for Taylor UUCP
+#
+# Revision 1.3 91/10/08 09:01:21 src
+# 1. Rewritten in perl
+# 2. Add -v option for debugging.
+#
+# Revision 1.2 91/10/07 23:57:42 root
+# 1. Fix mail program path.
+# 2. Truncate directory name to 7 characters
+
+($progname = $0) =~ s!.*/!!; # save this very early
+
+$USAGE = "
+# Reroute uucp mail
+#
+# Usage: $progname [-v] host [host...]
+#
+# Options Argument Description
+# -v Verbose (doesn't execute /bin/sh)
+#
+";
+
+$UUSTAT = "/usr/local/bin/uustat";
+$SHELL = "/bin/sh";
+$SMAIL = "/bin/smail";
+
+sub usage
+{
+ die join ("\n", @_) . "\n$USAGE\n";
+}
+
+do "getopts.pl";
+
+&usage ("Invalid Option") unless do Getopts ("vV");
+
+$verbose = ($opt_v ? '-v' : ());
+$suffix = ($verbose ? '' : $$);
+
+&usage ("No system specified") if $#ARGV < 0;
+
+if (!$verbose)
+{
+ open (SHELL, "| $SHELL");
+ select SHELL;
+}
+
+while ($system = shift)
+{
+ $sysprefix = substr ($system, 0, 7);
+ $directory = "/usr/spool/uucp/$sysprefix";
+ open (UUSTAT, "$UUSTAT -s $system -c rmail |");
+ print "set -ex\n";
+ while (<UUSTAT>)
+ {
+ ($jobid, ) = split;
+ ($cfile) = substr ($jobid, length ($jobid) - 5);
+ $cfilename = "$directory/C./C.$cfile";
+ open (CFILE, $cfilename) || die "Cannot open $cfilename\n";
+ $_ = <CFILE>;
+ close CFILE;
+ if (/^E D\.(....) [^ ]+ [^ ]+ -CR D\.\1 0666 [^ ]+ 0 rmail (.*)/)
+ {
+ $datafile = "$directory/D./D.$1";
+ $address = $2;
+ }
+ else
+ {
+ print STDERR;
+ die "Cannot parse previous line from $cfilename\n";
+ }
+ print "$SMAIL -R $system!$address < $datafile && $UUSTAT -k $jobid\n";
+ }
+ close UUSTAT;
+}
+close SHELL unless $verbose;
+
+exit 0;
diff --git a/gnu/libexec/uucp/contrib/uusnap.c b/gnu/libexec/uucp/contrib/uusnap.c
index d657a620ec8a..a3d9fb433249 100644
--- a/gnu/libexec/uucp/contrib/uusnap.c
+++ b/gnu/libexec/uucp/contrib/uusnap.c
@@ -25,7 +25,7 @@
#include "uucp.h"
#if USE_RCS_ID
-char uusnap_rcsid[] = "$Id: uusnap.c,v 1.1 1993/08/05 18:23:18 conklin Exp $";
+char uusnap_rcsid[] = "$Id: uusnap.c,v 1.2 1994/05/07 18:09:40 ache Exp $";
#endif
#include <ctype.h>
diff --git a/gnu/libexec/uucp/contrib/uutraf b/gnu/libexec/uucp/contrib/uutraf
index 8b56d0f6b4f5..9625ea5206ca 100644
--- a/gnu/libexec/uucp/contrib/uutraf
+++ b/gnu/libexec/uucp/contrib/uutraf
@@ -1,11 +1,11 @@
-#!/usr/local/bin/perl
+#!/usr/bin/perl
# uutraf.pl -- UUCP Traffic Analyzer
-# SCCS Status : @(#)@ uutraf 1.7
+# SCCS Status : @(#)@ uutraf 1.8
# Author : Johan Vromans
# Created On : ***
# Last Modified By: Johan Vromans
-# Last Modified On: Wed Feb 26 08:52:56 1992
-# Update Count : 4
+# Last Modified On: Mon Aug 30 15:02:22 1993
+# Update Count : 6
# Status : OK
# Requires: : Perl V4 or later
@@ -52,7 +52,7 @@ if ( $ARGV[0] =~ /^-/ ) {
}
if ( $uucp_type eq "taylor" || $uucp_type eq "gnu" ) {
- @ARGV = ("/usr/spool/uucp/Stats") unless $#ARGV >= 0;
+ @ARGV = ("/usr/local/spool/uucp/Stats") unless $#ARGV >= 0;
$pat = "^[^ ]+ ([^ ]+) \\(([-0-9:\\/ .]+)\\) " .
"(sent|received) (\\d+) bytes in (\\d+)\\.(\\d+) seconds";
$uucp_type = 0;
@@ -73,16 +73,17 @@ elsif ( $uucp_type eq "bsd" || $uucp_type eq "v7" ) {
$recv = "received";
}
else {
- die ("Unknown UUCP type: $uucp_type\n");
+ die ("FATAL: Unknown UUCP type: $uucp_type\n");
}
$garbage = 0;
while ( <> ) {
unless ( /$pat/o ) {
- print STDERR "Possible garbage: $_";
+ print STDERR "$_";
+ next if /failed/;
if ( $garbage++ > 10 ) {
- die ("Too much garbage; wrong UUCP type?\n");
+ die ("FATAL: Too much garbage; wrong UUCP type?\n");
}
next;
}
@@ -90,10 +91,10 @@ while ( <> ) {
# gather timestamps
$last_date = $2;
$first_date = $last_date unless defined $first_date;
-
+
# initialize new hosts
unless ( defined $hosts{$1} ) {
- $hosts{$1} = $files_in{$1} = $files_out{$1} =
+ $hosts{$1} = $files_in{$1} = $files_out{$1} =
$bytes_in{$1} = $bytes_out{$1} =
$secs_in{$1} = $secs_out{$1} = 0;
}
@@ -162,9 +163,9 @@ foreach $host (@hosts) {
sub print_line {
reset "Z"; # reset print fields
- local ($Zhost,
- $Zi_bytes, $Zo_bytes,
- $Zi_secs, $Zo_secs,
+ local ($Zhost,
+ $Zi_bytes, $Zo_bytes,
+ $Zi_secs, $Zo_secs,
$Zi_count, $Zo_count) = @_;
$Ti_bytes += $Zi_bytes;
$To_bytes += $Zo_bytes;
@@ -186,7 +187,7 @@ sub print_line {
sub print_dashes {
$Zhost = $Zi_bytes = $Zo_bytes = $Zt_bytes =
- $Zi_hrs = $Zo_hrs = $Zi_acps = $Zo_acps = $Zi_count = $Zo_count =
+ $Zi_hrs = $Zo_hrs = $Zi_acps = $Zo_acps = $Zi_count = $Zo_count =
"------------";
write;
# easy, isn't it?
@@ -196,6 +197,12 @@ sub print_dashes {
sub gethostname {
$ENV{"SHELL"} = "/bin/sh";
+ $try = `hostname 2>/dev/null`;
+ chop $try;
+ return $+ if $try =~ /^[-.\w]+$/;
+ $try = `uname -n 2>/dev/null`;
+ chop $try;
+ return $+ if $try =~ /^[-.\w]+$/;
$try = `uuname -l 2>/dev/null`;
chop $try;
return $+ if $try =~ /^[-.\w]+$/;
diff --git a/gnu/libexec/uucp/contrib/uuxconv b/gnu/libexec/uucp/contrib/uuxconv
new file mode 100755
index 000000000000..843f9e000fab
--- /dev/null
+++ b/gnu/libexec/uucp/contrib/uuxconv
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# uuxconv
+#
+# After converting to Taylor from SVR4.03 UUCP, I still had a lot of
+# jobs queued up to go out.
+#
+# This script is a one-shot to mass-requeue a site's spool.
+#
+# It doesn't go and do your whole spool, nor even all grades.
+# you need to go into each grade directory for each site and
+# execute this.
+#
+# i.e.: You have a site named 'foo'
+# cd /var/spool/uucp/foo/Z
+# uuxconv foo
+#
+# it does delete the 'D' & 'X' after requeing them, but doesn't remove
+# the 'C' files.
+#
+# I foolishly went and ran this script on all my queued jobs, without
+# adding the improvements to recursively go through the entire UUCP spool,
+# so now I'm out of files to test with. I don't want to add the code
+# to do that since I can't test it, and this worked.
+#
+# I hereby give this (trivial :-)) program to the GNU Project/FSF
+# and Ian Taylor in it's entirety, so that it can be placed in
+# the contrib directory of taylor-uucp, and save others the pain
+# of rewriting it.
+#
+# Richard Nickle (rick@trystro.uucp, rnickle@gnu.ai.mit.edu)
+# May 27, 1993
+#
+if [ $# -eq 0 ]
+then
+ echo "Usage: $0 sitename"
+ exit 1
+fi
+exit 0
+site=$1
+tsite=`echo $site | cut -c1-5`
+find . -name "D.$tsite*" -print |
+while read file
+do
+ control=`egrep "^C" $file | cut -c3-`
+ input=`egrep "^I" $file | cut -c3-`
+ (uux - -r -z $site!$control < $input) && (rm $file $input)
+ echo "$site!$control < $input"
+done
+exit 0
diff --git a/gnu/libexec/uucp/contrib/xchat.c b/gnu/libexec/uucp/contrib/xchat.c
index 0fd763d9f3fc..b44549e53ed4 100644
--- a/gnu/libexec/uucp/contrib/xchat.c
+++ b/gnu/libexec/uucp/contrib/xchat.c
@@ -9,6 +9,9 @@
* Bob Denny (denny@alisa.com)
* Based on code in DECUS UUCP (for VAX/VMS)
*
+ * Small modification by:
+ * Daniel Hagerty (hag@eddie.mit.edu)
+ *
* History:
* Version 1.0 shipped with Taylor 1.03. No configuration info inside.
*
@@ -18,21 +21,25 @@
* for timed reads. Use Taylor UUCP "conf.h" file to set
* configuration for this program. Add defaulting of script
* and log file paths.
+ *
+ * Daniel Hagerty - Mon Nov 22 18:17:38 1993
+ * V1.2 - Added a new opcode to xchat. "expectstr" is a cross between
+ * sendstr and expect, looking for a parameter supplied string.
+ * Useful where a prompt could change for different dial in
+ * lines and such.
*
* Bugs:
* Does not support BSD terminal I/O. Anyone care to add it?
*/
-#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <signal.h>
#include <time.h>
-#include <sys/time.h>
#include <sys/ioctl.h>
-#include <sys/termios.h>
+#include <sys/termio.h>
#include "xc-conf.h"
@@ -132,7 +139,8 @@ struct script_opdef {
#define SC_PEVN 39 /* Set port for 7-bit, even parity */
#define SC_PODD 40 /* Set port for 7-bit, odd parity */
#define SC_HUPS 41 /* Change state on HUP signal */
-#define SC_END 42 /* end of array */
+#define SC_XPST 42 /* Expect a param string */
+#define SC_END 43 /* end of array */
/* values for prmtype, prm2type */
@@ -188,6 +196,7 @@ static struct script_opdef sc_opdef[] =
{"sendstr", SC_SNDP, SC_INT, SC_NONE},
{"ifstr", SC_IF1P, SC_INT, SC_NWST},
{"ifnstr", SC_IF0P, SC_INT, SC_NWST},
+ {"expectstr", SC_XPST, SC_INT, SC_NWST},
{"table end", SC_END, SC_NONE, SC_NONE}
};
@@ -224,16 +233,16 @@ static char telno[64]; /* Telephone number w/meta-chars */
static int Debug;
static int fShangup = FALSE; /* TRUE if HUP signal received */
static FILE *dbf = NULL;
-static struct termios old, new;
+static struct termio old, new;
-static void usignal();
-static void uhup();
+extern int usignal();
+extern int uhup();
static struct siglist
{
int signal;
- void (*o_catcher) ();
- void (*n_catcher) ();
+ int (*o_catcher) ();
+ int (*n_catcher) ();
} sigtbl[] = {
{ SIGHUP, NULL, uhup },
{ SIGINT, NULL, usignal },
@@ -246,17 +255,17 @@ static struct siglist
extern struct script *read_script();
extern void msleep();
-static char xgetc();
-static void charlog();
-static void setup_tty();
-static void restore_tty();
-static void ttoslow();
-static void ttflui();
-static void tthang();
-static void ttbreak();
-static void tt7bit();
-static void ttpar();
-static void DEBUG();
+extern char xgetc();
+extern void charlog();
+extern void setup_tty();
+extern void restore_tty();
+extern void ttoslow();
+extern void ttflui();
+extern void tthang();
+extern void ttbreak();
+extern void tt7bit();
+extern void ttpar();
+extern void DEBUG();
extern void *malloc();
@@ -337,7 +346,7 @@ char *argv[];
sigs = &sigtbl[0];
while(sigs->signal)
{
- sigs->o_catcher = signal(sigs->signal, sigs->n_catcher);
+ sigs->o_catcher = (int (*) ())signal(sigs->signal, sigs->n_catcher);
sigs += 1;
}
@@ -1031,6 +1040,7 @@ int do_script(begin)
case SC_TIMO: /* these are "expects", don't bother */
case SC_XPCT: /* with them yet, other than noting that */
case SC_CARR: /* they exist */
+ case SC_XPST:
expcnt++;
break;
}
@@ -1134,7 +1144,24 @@ int do_script(begin)
}
}
}
-
+ /* New opcode added by hag@eddie.mit.edu for expecting a
+ parameter supplied string */
+ case SC_XPST:
+ if(curscr->intprm >paramc-1)
+ {
+ sprintf(tempstr,"expectstr - param#%d",curscr->intprm);
+ logit(tempstr, " not present");
+ return(FAIL);
+ }
+ prmlen=xlat_str(tempstr,paramv[curscr->intprm]);
+ if((expin >= prmlen) &&
+ (strncmp(tempstr,&expbuf[expin-prmlen],
+ prmlen) == SAME))
+ {
+ charlog(tempstr,prmlen,DB_LGI, "Matched");
+ goto _chgstate;
+ }
+ break;
/*
* SIGNAL HANDLERS
*/
@@ -1142,7 +1169,7 @@ int do_script(begin)
/*
* usignal - generic signal catcher
*/
-static void usignal(isig)
+static int usignal(isig)
int isig;
{
DEBUG(DB_LOG, "Caught signal %d. Exiting...\n", isig);
@@ -1153,7 +1180,7 @@ static void usignal(isig)
/*
* uhup - HUP catcher
*/
-static void uhup(isig)
+static int uhup(isig)
int isig;
{
DEBUG(DB_LOG, "Data set hangup.\n");
@@ -1175,15 +1202,14 @@ int tmo; /* Timeout, seconds */
{
char c;
struct timeval s;
- fd_set f;
+ int f = 1; /* Select on stdin */
int result;
- FD_SET(0,&f); /* Select on stdin */
if(read(0, &c, 1) <= 0) /* If no data available */
{
s.tv_sec = (long)tmo;
s.tv_usec = 0L;
- if(select (1, &f, (fd_set *) NULL, &f, &s) == 1)
+ if(select (1, &f, (int *) NULL, &f, &s) == 1)
read(0, &c, 1);
else
c = '\377';
@@ -1294,7 +1320,7 @@ static void setup_tty()
{
register int i;
- tcgetattr(0,&old);
+ ioctl(0, TCGETA, &old);
new = old;
@@ -1305,7 +1331,7 @@ static void setup_tty()
new.c_iflag = ISTRIP; /* Raw mode, 7-bit stripping */
new.c_lflag = 0; /* No special line discipline */
- tcsetattr(0,TCSANOW,&new);
+ ioctl(0, TCSETA, &new);
}
/*
@@ -1314,7 +1340,7 @@ static void setup_tty()
static void restore_tty(sig)
int sig;
{
- tcsetattr(0,TCSANOW,&old);
+ ioctl(0, TCSETA, &old);
return;
}
@@ -1346,7 +1372,7 @@ static void ttoslow(s, len, delay)
static void ttflui()
{
if(isatty(0))
- tcflush(0,TCIFLUSH);
+ (void) ioctl ( 0, TCFLSH, 0);
}
/*
@@ -1364,13 +1390,13 @@ static int ttcd()
*/
static void tthang()
{
- if(!isatty(1))
+ if(!isatty())
return;
-#ifdef TIOCCDTR
- (void) ioctl (1, TIOCCDTR, 0);
+#ifdef TCCLRDTR
+ (void) ioctl (1, TCCLRDTR, 0);
sleep (2);
- (void) ioctl (1, TIOCSDTR, 0);
+ (void) ioctl (1, TCSETDTR, 0);
#endif
return;
@@ -1381,7 +1407,7 @@ static void tthang()
*/
static void ttbreak()
{
- tcsendbreak(1,5);
+ (void) ioctl (1, TCSBRK, 0);
}
/*
@@ -1405,7 +1431,7 @@ static void tt7bit(enable)
else
new.c_iflag &= ~ISTRIP;
- tcsetattr(0,TCSANOW,&new);
+ ioctl(0, TCSETA, &new);
}
/*
@@ -1436,5 +1462,12 @@ static void ttpar(mode)
break;
}
- tcsetattr(0,TCSANOW,&new);
+ ioctl(0, TCSETA, &new);
}
+
+
+
+
+
+
+
diff --git a/gnu/libexec/uucp/contrib/xchat.man b/gnu/libexec/uucp/contrib/xchat.man
index c980e202fcb4..55537be90726 100644
--- a/gnu/libexec/uucp/contrib/xchat.man
+++ b/gnu/libexec/uucp/contrib/xchat.man
@@ -380,6 +380,18 @@ is received from standard input (usually the serial port).
Case is significant, but high-order bits are not
checked.
.TP 2.0i
+.BI "expectstr " "ns int"
+Change to state
+.I ns
+if the string specified in parameter
+.I int
+is received from standard input (usually the serial port).
+.I int
+must be in the range 0 to 7.
+Case is significant, but high-order bits are not
+checked.
+Useful where a prompt can change in different dial-in lines.
+.TP 2.0i
.BI "ifcarr " ns
Change to state
.I ns
@@ -604,6 +616,8 @@ seconds).
uucico(8) for Taylor UUCP, and documentation for Taylor UUCP.
.SH AUTHOR
Robert B. Denny (denny@alisa.com)
+.SH CONTRIBUTORS
+Daniel Hagerty (hag@eddie.mit.edu)
.SH HISTORY
This program is an adaptation of the dial/login script processing
code that is a part of DECUS UUCP for VAX/VMS, written by Jamie
diff --git a/gnu/libexec/uucp/cu/Makefile b/gnu/libexec/uucp/cu/Makefile
index c2171a690a83..ada7ab2b64a7 100644
--- a/gnu/libexec/uucp/cu/Makefile
+++ b/gnu/libexec/uucp/cu/Makefile
@@ -1,9 +1,9 @@
# Makefile for cu
-# $Id: Makefile,v 1.1 1993/08/05 18:23:27 conklin Exp $
+# $Id: Makefile,v 1.3 1994/05/31 07:47:39 ache Exp $
BINDIR= $(bindir)
BINOWN= $(owner)
-BINMODE= 4555
+BINMODE= 4555
PROG= cu
SRCS= cu.c prot.c log.c chat.c conn.c tcp.c tli.c copy.c
diff --git a/gnu/libexec/uucp/cu/cu.1 b/gnu/libexec/uucp/cu/cu.1
index c08fe8020f25..630e11ca6e96 100644
--- a/gnu/libexec/uucp/cu/cu.1
+++ b/gnu/libexec/uucp/cu/cu.1
@@ -1,5 +1,5 @@
-''' $Id: cu.1,v 1.1 1993/08/05 18:23:28 conklin Exp $
-.TH cu 1 "Taylor UUCP 1.04"
+''' $Id: cu.1,v 1.2 1994/05/07 18:09:51 ache Exp $
+.TH cu 1 "Taylor UUCP 1.05"
.SH NAME
cu \- Call up another system
.SH SYNOPSIS
@@ -22,8 +22,12 @@ Otherwise, if the argument begins with a digit, it is taken to be a
phone number to call. Otherwise, it is taken to be the name of a
system to call. The
.B \-z
+or
+.B \-\-system
option may be used to name a system beginning with a digit, and the
.B \-c
+or
+.B \-\-phone
option may be used to name a phone number that does not begin with a
digit.
@@ -31,9 +35,9 @@ digit.
locates a port to use in the UUCP configuration files. If a simple
system name is given, it will select a port appropriate for that
system. The
-.B \-p, \-l
+.B \-p, \-\-port, \-l, \-\-line, \-s
and
-.B \-s
+.B \-\-speed
options may be used to control the port selection.
When a connection is made to the remote system,
@@ -208,53 +212,55 @@ default is true.
The following options may be given to
.I cu.
.TP 5
-.B \-e
+.B \-e, \-\-parity=even
Use even parity.
.TP 5
-.B \-o
-Use odd parity. If both
+.B \-o, \-\-parity=odd
+Use odd parity.
+.TP 5
+.B \-\-parity=none
+Use no parity. No parity is also used if both
.B \-e
and
.B \-o
-are used, no parity is used. Otherwise the default parity of the line
-is used.
+are given.
.TP 5
-.B \-h
+.B \-h, \-\-halfduplex
Echo characters locally (half-duplex mode).
.TP 5
-.B \-z system
+.B \-z system, \-\-system system
The system to call.
.TP 5
-.B \-c phone-number
+.B \-c phone-number, \-\-phone phone-number
The phone number to call.
.TP 5
-.B \-p port
+.B \-p port, \-\-port port
Name the port to use.
.TP 5
.B \-a port
Equivalent to
-.B \-p port.
+.B \-\-port port.
.TP 5
-.B \-l line
+.B \-l line, \-\-line line
Name the line to use by giving a device name. This may be used to
dial out on ports that are not listed in the UUCP configuration files.
Write access to the device is required.
.TP 5
-.B \-s speed
+.B \-s speed, \-\-speed speed
The speed (baud rate) to use.
.TP 5
.B \-#
Where # is a number, equivalent to
-.B \-s #.
+.B \-\-speed #.
.TP 5
-.B \-n
+.B \-n, \-\-prompt
Prompt for the phone number to use.
.TP 5
.B \-d
Enter debugging mode. Equivalent to
-.B \-x all.
+.B \-debug all.
.TP 5
-.B \-x type
+.B \-x type, \-\-debug type
Turn on particular debugging types. The following types are
recognized: abnormal, chat, handshake, uucp-proto, proto, port,
config, spooldir, execute, incoming, outgoing. Only abnormal, chat,
@@ -262,20 +268,26 @@ handshake, port, config, incoming and outgoing are meaningful for
.I cu.
Multiple types may be given, separated by commas, and the
-.B \-x
+.B \-\-debug
option may appear multiple times. A number may also be given, which
will turn on that many types from the foregoing list; for example,
-.B \-x 2
+.B \-\-debug 2
is equivalent to
-.B \-x abnormal,chat.
-.B \-x all
+.B \-\-debug abnormal,chat.
+.B \-\-debug all
may be used to turn on all debugging options.
.TP 5
-.B \-I file
+.B \-I file, \-\-config file
Set configuration file to use. This option may not be available,
depending upon how
.I cu
was compiled.
+.TP 5
+.B \-v, \-\-version
+Report version information and exit.
+.TP 5
+.B \-\-help
+Print a help message and exit.
.SH BUGS
This program does not work very well.
.SH FILES
@@ -284,3 +296,6 @@ approximation.
.br
/usr/lib/uucp/config - Configuration file.
+.SH AUTHOR
+Ian Lance Taylor
+<ian@airs.com>
diff --git a/gnu/libexec/uucp/cu/cu.c b/gnu/libexec/uucp/cu/cu.c
index 5e34601de3b9..3939f6a02ece 100644
--- a/gnu/libexec/uucp/cu/cu.c
+++ b/gnu/libexec/uucp/cu/cu.c
@@ -1,7 +1,7 @@
/* cu.c
Call up a remote system.
- Copyright (C) 1992 Ian Lance Taylor
+ Copyright (C) 1992, 1993, 1994 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -20,13 +20,13 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
*/
#include "uucp.h"
#if USE_RCS_ID
-const char cu_rcsid[] = "$Id: cu.c,v 1.1 1993/08/05 18:23:29 conklin Exp $";
+const char cu_rcsid[] = "$Id: cu.c,v 1.2 1994/05/07 18:09:54 ache Exp $";
#endif
#include "cu.h"
@@ -66,7 +66,7 @@ boolean fCuvar_binary = FALSE;
/* A prefix string to use before sending a binary character from a
file; this is only used if fCuvar_binary is TRUE. The default is
- ^Z. */
+ ^V. */
const char *zCuvar_binary_prefix = "\026";
/* Whether to check for echoes of characters sent when sending a file.
@@ -126,9 +126,6 @@ static const struct uuconf_cmdtab asCuvars[] =
{ NULL, 0, NULL, NULL}
};
-/* The program name. */
-char abProgram[] = "cu";
-
/* The string printed at the initial connect. */
#if ANSI_C
#define ZCONNMSG "\aConnected."
@@ -175,6 +172,9 @@ static boolean fCulocalecho;
/* Whether we need to call fsysdep_cu_finish. */
static boolean fCustarted;
+/* Whether ZCONNMSG has been printed yet. */
+static boolean fCuconnprinted = FALSE;
+
/* A structure used to pass information to icuport_lock. */
struct sconninfo
{
@@ -187,6 +187,7 @@ struct sconninfo
/* Local functions. */
static void ucuusage P((void));
+static void ucuhelp P((void));
static void ucuabort P((void));
static void uculog_start P((void));
static void uculog_end P((void));
@@ -209,7 +210,24 @@ static boolean fcusend_buf P((struct sconnection *qconn, const char *zbuf,
do { if (! fsysdep_terminal_puts (zline)) ucuabort (); } while (0)
/* Long getopt options. */
-static const struct option asCulongopts[] = { { NULL, 0, NULL, 0 } };
+static const struct option asCulongopts[] =
+{
+ { "phone", required_argument, NULL, 'c' },
+ { "parity", required_argument, NULL, 2 },
+ { "halfduplex", no_argument, NULL, 'h' },
+ { "prompt", no_argument, NULL, 'n' },
+ { "line", required_argument, NULL, 'l' },
+ { "port", required_argument, NULL, 'p' },
+ { "speed", required_argument, NULL, 's' },
+ { "baud", required_argument, NULL, 's' },
+ { "mapcr", no_argument, NULL, 't' },
+ { "system", required_argument, NULL, 'z' },
+ { "config", required_argument, NULL, 'I' },
+ { "debug", required_argument, NULL, 'x' },
+ { "version", no_argument, NULL, 'v' },
+ { "help", no_argument, NULL, 1 },
+ { NULL, 0, NULL, 0 }
+};
int
main (argc, argv)
@@ -252,6 +270,8 @@ main (argc, argv)
struct uuconf_dialer *qdialer;
char bcmd;
+ zProgram = argv[0];
+
/* We want to accept -# as a speed. It's easiest to look through
the arguments, replace -# with -s#, and let getopt handle it. */
for (i = 1; i < argc; i++)
@@ -271,7 +291,7 @@ main (argc, argv)
}
}
- while ((iopt = getopt_long (argc, argv, "a:c:dehnI:l:op:s:tx:z:",
+ while ((iopt = getopt_long (argc, argv, "a:c:dehnI:l:op:s:tvx:z:",
asCulongopts, (int *) NULL)) != EOF)
{
switch (iopt)
@@ -347,13 +367,47 @@ main (argc, argv)
#endif
break;
+ case 'v':
+ /* Print version and exit. */
+ fprintf
+ (stderr,
+ "%s: Taylor UUCP %s, copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor\n",
+ zProgram, VERSION);
+ exit (EXIT_SUCCESS);
+ /*NOTREACHED*/
+
+ case 2:
+ /* --parity. */
+ if (strncmp (optarg, "even", strlen (optarg)) == 0)
+ feven = TRUE;
+ else if (strncmp (optarg, "odd", strlen (optarg)) == 0)
+ fodd = TRUE;
+ else if (strncmp (optarg, "none", strlen (optarg)) == 0)
+ {
+ feven = TRUE;
+ fodd = TRUE;
+ }
+ else
+ {
+ fprintf (stderr, "%s: --parity requires even, odd or none\n",
+ zProgram);
+ ucuusage ();
+ }
+ break;
+
+ case 1:
+ /* --help. */
+ ucuhelp ();
+ exit (EXIT_SUCCESS);
+ /*NOTREACHED*/
+
case 0:
/* Long option found and flag set. */
break;
default:
ucuusage ();
- break;
+ /*NOTREACHED*/
}
}
@@ -366,7 +420,10 @@ main (argc, argv)
if (optind != argc - 1
|| zsystem != NULL
|| zphone != NULL)
- ucuusage ();
+ {
+ fprintf (stderr, "%s: too many arguments\n", zProgram);
+ ucuusage ();
+ }
if (strcmp (argv[optind], "dir") != 0)
{
if (isdigit (BUCHAR (argv[optind][0])))
@@ -382,7 +439,11 @@ main (argc, argv)
&& zport == NULL
&& zline == NULL
&& ibaud == 0L)
- ucuusage ();
+ {
+ fprintf (stderr, "%s: must specify system, line, port or speed\n",
+ zProgram);
+ ucuusage ();
+ }
if (fprompt)
{
@@ -395,7 +456,7 @@ main (argc, argv)
if (getline (&zphone, &cphone, stdin) <= 0
|| *zphone == '\0')
{
- fprintf (stderr, "%s: No phone number entered\n", abProgram);
+ fprintf (stderr, "%s: no phone number entered\n", zProgram);
exit (EXIT_FAILURE);
}
}
@@ -523,16 +584,20 @@ main (argc, argv)
sport.uuconf_u.uuconf_sdirect.uuconf_zdevice = NULL;
sport.uuconf_u.uuconf_sdirect.uuconf_ibaud = ibaud;
- if (! fsysdep_port_access (&sport))
- ulog (LOG_FATAL, "%s: Permission denied", zline);
-
- if (! fconn_init (&sport, &sconn))
+ if (! fconn_init (&sport, &sconn, UUCONF_PORTTYPE_UNKNOWN))
ucuabort ();
if (! fconn_lock (&sconn, FALSE))
ulog (LOG_FATAL, "%s: Line in use", zline);
qCuconn = &sconn;
+
+ /* Check user access after locking the port, because on
+ some systems shared lines affect the ownership and
+ permissions. In such a case ``Line in use'' is more
+ clear than ``Permission denied.'' */
+ if (! fsysdep_port_access (&sport))
+ ulog (LOG_FATAL, "%s: Permission denied", zline);
}
ihighbaud = 0L;
}
@@ -544,7 +609,8 @@ main (argc, argv)
continue;
if (qsys->uuconf_qport != NULL)
{
- if (fconn_init (qsys->uuconf_qport, &sconn))
+ if (fconn_init (qsys->uuconf_qport, &sconn,
+ UUCONF_PORTTYPE_UNKNOWN))
{
if (fconn_lock (&sconn, FALSE))
{
@@ -648,7 +714,8 @@ main (argc, argv)
|| qsys == NULL)
ucuabort ();
- if (qsys->uuconf_qalternate == NULL)
+ qsys = qsys->uuconf_qalternate;
+ if (qsys == NULL)
ulog (LOG_FATAL, "%s: No remaining alternates", zsystem);
fCuclose_conn = FALSE;
@@ -693,6 +760,7 @@ main (argc, argv)
only comes out when a special command is received from the
terminal. */
printf ("%s\n", ZCONNMSG);
+ fCuconnprinted = TRUE;
if (! fsysdep_terminal_raw (fCulocalecho))
ucuabort ();
@@ -719,7 +787,8 @@ main (argc, argv)
(void) fconn_unlock (&sconn);
uconn_free (&sconn);
- printf ("\n%s\n", ZDISMSG);
+ if (fCuconnprinted)
+ printf ("\n%s\n", ZDISMSG);
ulog_close ();
@@ -734,41 +803,56 @@ main (argc, argv)
static void
ucuusage ()
{
+ fprintf (stderr, "Usage: %s [options] [system or phone-number]\n",
+ zProgram);
+ fprintf (stderr, "Use %s --help for help\n", zProgram);
+ exit (EXIT_FAILURE);
+}
+
+/* Print a help message. */
+
+static void
+ucuhelp ()
+{
fprintf (stderr,
- "Taylor UUCP version %s, copyright (C) 1991, 1992 Ian Lance Taylor\n",
+ "Taylor UUCP %s, copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor\n",
VERSION);
fprintf (stderr,
- "Usage: cu [options] [system or phone-number]\n");
+ "Usage: %s [options] [system or phone-number]\n", zProgram);
fprintf (stderr,
- " -a port, -p port: Use named port\n");
+ " -a,-p,--port port: Use named port\n");
fprintf (stderr,
- " -l line: Use named device (e.g. tty0)\n");
+ " -l,--line line: Use named device (e.g. tty0)\n");
fprintf (stderr,
- " -s speed, -#: Use given speed\n");
+ " -s,--speed,--baud speed, -#: Use given speed\n");
fprintf (stderr,
- " -c phone: Phone number to call\n");
+ " -c,--phone phone: Phone number to call\n");
fprintf (stderr,
- " -z system: System to call\n");
+ " -z,--system system: System to call\n");
fprintf (stderr,
" -e: Set even parity\n");
fprintf (stderr,
" -o: Set odd parity\n");
fprintf (stderr,
- " -h: Echo locally\n");
+ " --parity={odd,even}: Set parity\n");
+ fprintf (stderr,
+ " -h,--halfduplex: Echo locally\n");
fprintf (stderr,
- " -t: Map carriage return to carriage return/linefeed\n");
+ " -t,--mapcr: Map carriage return to carriage return/linefeed\n");
fprintf (stderr,
- " -n: Prompt for phone number\n");
+ " -n,--prompt: Prompt for phone number\n");
fprintf (stderr,
" -d: Set maximum debugging level\n");
fprintf (stderr,
- " -x debug: Set debugging type\n");
+ " -x,--debug debug: Set debugging type\n");
#if HAVE_TAYLOR_CONFIG
fprintf (stderr,
- " -I file: Set configuration file to use\n");
+ " -I,--config file: Set configuration file to use\n");
#endif /* HAVE_TAYLOR_CONFIG */
-
- exit (EXIT_FAILURE);
+ fprintf (stderr,
+ " -v,--version: Print version and exit\n");
+ fprintf (stderr,
+ " --help: Print help and exit\n");
}
/* This function is called when a fatal error occurs. */
@@ -805,7 +889,8 @@ ucuabort ()
ulog_close ();
- printf ("\n%s\n", ZDISMSG);
+ if (fCuconnprinted)
+ printf ("\n%s\n", ZDISMSG);
usysdep_exit (FALSE);
}
@@ -866,7 +951,7 @@ icuport_lock (qport, pinfo)
q->fmatched = TRUE;
- if (! fconn_init (qport, q->qconn))
+ if (! fconn_init (qport, q->qconn, UUCONF_PORTTYPE_UNKNOWN))
return UUCONF_NOT_FOUND;
else if (! fconn_lock (q->qconn, FALSE))
{
diff --git a/gnu/libexec/uucp/doc/uucp.texi b/gnu/libexec/uucp/doc/uucp.texi
new file mode 100644
index 000000000000..5ab74118d6e9
--- /dev/null
+++ b/gnu/libexec/uucp/doc/uucp.texi
@@ -0,0 +1,4036 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename uucp.info
+@settitle Taylor UUCP
+@setchapternewpage odd
+@c %**end of header
+
+@iftex
+@finalout
+@end iftex
+
+@ignore
+---------------------------------------------------------------------->
+Franc,ois Pinard says:
+
+Hi, Ian! This is the promised merging of the current documents from
+Taylor UUCP 1.01, plus the patches to documentation you sent to me, into
+a taylor.texi file. Many things remain to do, among which:
+
+- merging in the Taylor UUCP program man pages.
+----------------------------------------------------------------------<
+@end ignore
+
+@ifinfo
+This file documents Taylor UUCP, version 1.05.
+
+Copyright @copyright{} 1992, 1993, 1994 Ian Lance Taylor
+
+Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+@ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries a copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+section entitled ``Copying'' are included exactly as in the original, and
+provided that the entire resulting derived work is distributed under the
+terms of a permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that the section entitled ``Copying'' may be included in a
+translation approved by the author instead of in the original English.
+@end ifinfo
+
+@titlepage
+@title Taylor UUCP
+@subtitle Version 1.05
+@author Ian Lance Taylor @code{<ian@@airs.com>}
+
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1992, 1993, 1994 Ian Lance Taylor
+
+Published by Ian Lance Taylor @code{<ian@@airs.com>}.
+
+Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+section entitled ``Copying'' are included exactly as in the original, and
+provided that the entire resulting derived work is distributed under the
+terms of a permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that the section entitled ``Copying'' may be included in a
+translation approved by the author instead of in the original English.
+@end titlepage
+
+@node Top, Copying, (dir), (dir)
+@top Taylor UUCP 1.05
+
+This is the documentation for the Taylor UUCP package, version 1.05.
+The programs were written by Ian Lance Taylor. The author can be
+reached at @code{<ian@@airs.com>}, or @samp{c/o Cygnus Support, Building
+200, 1 Kendall Square, Cambridge, MA, 02139, USA}.
+
+There is a mailing list for discussion of the package. To join (or get
+off) the list, send mail to
+@code{<taylor-uucp-request@@gnu.ai.mit.edu>}. Mail to this address is
+answered by a person, not a program. When joining the list, please give
+the address at which you wish to receive mail; do not rely on the
+message headers. To send a message to the list, send it to
+@code{<taylor-uucp@@gnu.ai.mit.edu>}.
+
+Jeff Ross has volunteered to maintain patches for UUCP releases. They
+may be obtained via anonymous FTP from ftp.fdu.edu, in the directory
+pub/taylor-uucp.
+
+@menu
+* Copying:: Taylor UUCP copying conditions
+* Introduction:: Introduction to Taylor UUCP
+* Overall Installation:: Taylor UUCP installation
+* Configuration Files:: Taylor UUCP configuration files
+* Protocols:: UUCP protocol internals
+* Hacking:: Hacking Taylor UUCP
+* Acknowledgements:: Acknowledgements
+
+* Index (concepts):: Concept index
+* Index (configuration file):: Index to new configuration files
+
+ --- The Detailed Node Listing ---
+
+Taylor UUCP Overall Installation
+
+* Configuration:: Configuring Taylor UUCP
+* Compilation:: Compiling Taylor UUCP
+* Testing:: Testing Taylor UUCP
+* Installation:: Installing Taylor UUCP
+* TCP:: TCP together with Taylor UUCP
+
+Installing Taylor UUCP
+
+* Running uucico:: Running uucico
+* Using UUCP for mail and news:: Using UUCP for mail and news.
+* Trimming UUCP Log Files:: Trimming UUCP Log Files
+
+Using UUCP for mail and news.
+
+* Sending mail or news:: Sending mail or news via UUCP
+* Receiving mail or news:: Receiving mail or news via UUCP
+
+Taylor UUCP Configuration Files
+
+* Configuration File Format:: Configuration file format
+* Configuration File Overview:: Configuration File Overview
+* Configuration Examples:: Examples of configuration files
+* Time Strings:: How to write time strings
+* Chat Scripts:: How to write chat scripts
+* config File:: The main configuration file
+* sys File:: The system configuration file
+* port File:: The port configuration files
+* dial File:: The dialer configuration files
+* Security:: Security issues
+
+Examples of Configuration Files
+
+* config File Examples:: Examples of the main configuration file
+* Leaf Example:: Call a single remote site
+* Gateway Example:: The gateway for several local systems
+
+The Main Configuration File
+
+* Miscellaneous (config):: Miscellaneous config file commands
+* Configuration File Names:: Using different configuration files
+* Log File Names:: Using different log files
+* Debugging Levels:: Debugging levels
+
+The System Configuration File
+
+* Defaults and Alternates:: Using defaults and alternates
+* Naming the System:: Naming the system
+* Calling Out:: Calling out
+* Accepting a Call:: Accepting a call
+* Protocol Selection:: Protocol selection
+* File Transfer Control:: File transfer control
+* Miscellaneous (sys):: Miscellaneous sys file commands
+* Default sys File Values:: Default values
+
+Calling Out
+
+* When to Call:: When to call
+* Placing the Call:: Placing the call
+* Logging In:: Logging in
+
+Hacking Taylor UUCP
+
+* System Dependence:: System Dependence
+* Naming Conventions:: Naming Conventions
+* Patches:: Patches
+@end menu
+
+@node Copying, Introduction, Top, Top
+@unnumbered Taylor UUCP Copying Conditions
+
+This package is covered by the GNU Public License. See the file
+@file{COPYING} for details. If you would like to do something with this
+package that you feel is reasonable, but you feel is prohibited by the
+license, contact me to see if we can work it out.
+
+Here is some propaganda from the Free Software Foundation. If you find
+this stuff offensive or annoying, remember that you probably did not
+spend any money to get this code. I did not write this code to make
+life easier for developers of UUCP packages, I wrote it to help end
+users, and I believe that these are the most appropriate conditions for
+distribution.
+
+All the programs, scripts and documents relating to Taylor UUCP are
+@dfn{free}; this means that everyone is free to use them and free to
+redistribute them on a free basis. The Taylor UUCP-related programs are
+not in the public domain; they are copyrighted and there are
+restrictions on their distribution, but these restrictions are designed
+to permit everything that a good cooperating citizen would want to do.
+What is not allowed is to try to prevent others from further sharing any
+version of these programs that they might get from you.
+
+Specifically, we want to make sure that you have the right to give away
+copies of the programs that relate to Taylor UUCP, that you receive
+source code or else can get it if you want it, that you can change these
+programs or use pieces of them in new free programs, and that you know
+you can do these things.
+
+To make sure that everyone has such rights, we have to forbid you to
+deprive anyone else of these rights. For example, if you distribute
+copies of the Taylor UUCP related programs, you must give the recipients
+all the rights that you have. You must make sure that they, too,
+receive or can get the source code. And you must tell them their
+rights.
+
+Also, for our own protection, we must make certain that everyone finds
+out that there is no warranty for the programs that relate to Taylor
+UUCP. If these programs are modified by someone else and passed on, we
+want their recipients to know that what they have is not what we
+distributed, so that any problems introduced by others will not reflect
+on our reputation.
+
+The precise conditions of the licenses for the programs currently being
+distributed that relate to Taylor UUCP are found in the General Public
+Licenses that accompany them.
+
+@node Introduction, Overall Installation, Copying, Top
+@chapter Introduction to Taylor UUCP
+
+General introductions to UUCP are available, and perhaps one day I will
+write one. In the meantime, here is a very brief one that concentrates
+on the programs provided by Taylor UUCP.
+
+Taylor UUCP is a complete UUCP package. It is covered by the GNU Public
+License, which means that the source code is always available. It is
+composed of several programs; most of the names of these programs are
+based on earlier UUCP packages.
+
+@table @code
+
+@item uucp
+
+The @code{uucp} program is used to copy file between systems. It is
+similar to the standard Unix @code{cp} program, except that you can
+refer to a file on a remote system by using @samp{system!} before the
+file name. For example, to copy the file @file{notes.txt} to the system
+@samp{airs}, you would say @samp{uucp notes.txt airs!~/notes.txt}. In
+this example @samp{~} is used to name the UUCP public directory on
+@samp{airs}.
+
+@item uux
+
+The @code{uux} program is used to request the execution of a program on
+a remote system. This is how mail and news are transferred over UUCP.
+As with @code{uucp}, programs and files on remote systems may be named
+by using @samp{system!}. For example, to run the @code{rnews} program
+on @samp{airs} passing it standard input, you would say @samp{uux -
+airs!rnews}. The @samp{-} means to read standard input and set things
+up such that when @code{rnews} runs on @samp{airs} it will receive the
+same standard input.
+
+@end table
+
+Neither @code{uucp} nor @code{uux} actually do any work immediately.
+Instead, they queue up requests for later processing. They then start a
+daemon process which processes the requests and calls up the appropriate
+systems. Normally the system will also start the daemon periodically to
+check if there is any work to be done. The advantage of this approach
+is that it all happens automatically. You don't have to sit around
+waiting for the files to be transferred. The disadvantage is that if
+anything goes wrong it might be a while before anybody notices.
+
+@table @code
+
+@item uustat
+
+The @code{uustat} program does many things. By default it will simply
+list all the jobs you have queued with @code{uucp} or @code{uux} that
+have not yet been processed. You can use @code{uustat} to remove any of
+your jobs from the queue. You can also it use it to show the status of
+the UUCP system in various ways, such as showing the connection status
+of all the remote systems your system knows about. The system
+administrator can use @code{uustat} to automatically discard old jobs
+while sending mail to the user who requested them.
+
+@item uuname
+
+The @code{uuname} program by default lists all the remote systems your
+system knows about. You can also use it to get the name of your local
+system. It is mostly useful for shell scripts.
+
+@item uulog
+
+The @code{uulog} program can be used to display entries in the UUCP log
+file. It can select the entries for a particular system or a particular
+user. You can use it to see what has happened to your queued jobs in
+the past.
+
+@item uuto
+@item uupick
+
+@code{uuto} is a simple shell script interface to @code{uucp}. It will
+transfer a file, or the contents of a directory, to a remote system, and
+notify a particular user on the remote system when it arrives. The
+remote user can then retrieve the file(s) with @code{uupick}.
+
+@item cu
+
+The @code{cu} program can be used to call up another system and
+communicate with it as though you were directly connected. It can also
+do simple file transfers, though it does not provide any error checking.
+
+@end table
+
+These eight programs just described, @code{uucp}, @code{uux},
+@code{uuto}, @code{uupick}, @code{uustat}, @code{uuname}, @code{uulog},
+and @code{cu} are the user programs provided by Taylor UUCP@.
+@code{uucp}, @code{uux}, and @code{uuto} add requests to the work queue,
+@code{uupick} extracts files from the UUCP public directory,
+@code{uustat} examines the work queue, @code{uuname} examines the
+configuration files, @code{uulog} examines the log files, and @code{cu}
+just uses the UUCP configuration files.
+
+The real work is actually done by two daemon processes, which are
+normally run automatically rather than by a user.
+
+@table @code
+
+@item uucico
+
+The @code{uucico} daemon is the program which actually calls the remote
+system and transfers files and requests. @code{uucico} is normally
+started automatically by @code{uucp} and @code{uux}. Most systems will
+also start it periodically to make sure that all work requests are
+handled. @code{uucico} checks the queue to see what work needs to be
+done, and then calls the appropriate systems. If the call fails,
+perhaps because the phone line is busy, @code{uucico} leaves the
+requests in the queue and goes on to the next system to call. It is
+also possible to force @code{uucico} to call a remote system even if
+there is no work to be done for it, so that it can pick up any work that
+may be queued up remotely.
+
+@need 1000
+@item uuxqt
+
+The @code{uuxqt} daemon processes execution requests made by the
+@code{uux} program on remote systems. It also processes requests made
+on the local system which require files from a remote system. It is
+normally started by @code{uucico}.
+
+@end table
+
+Suppose you, on the system @samp{bantam}, want to copy a file to the
+system @samp{airs}. You would run the @code{uucp} command locally, with
+a command like @samp{uucp notes.txt airs!~/notes.txt}. This would queue
+up a request on @samp{bantam} for @samp{airs}, and would then start the
+@code{uucico} daemon. @code{uucico} would see that there was a request
+for @samp{airs} and attempt to call it. When the call succeeded,
+another copy of @code{uucico} would be started on @samp{airs}. The two
+copies of @code{uucico} would tell each other what they had to do and
+transfer the file from @samp{bantam} to @samp{airs}. When the file
+transfer was complete the @code{uucico} on @samp{airs} would move it
+into the UUCP public directory.
+
+UUCP is often used to transfer mail. This is normally done
+automatically by mailer programs. When @samp{bantam} has a mail message
+to send to @samp{ian} at @samp{airs}, it executes @samp{uux - airs!rmail
+ian} and writes the mail message to the @code{uux} process as standard
+input. The @code{uux} program, running on @samp{bantam}, will read the
+standard input and store it, as well as the @code{rmail} request itself,
+on the work queue for @samp{airs}. @code{uux} will then start the
+@code{uucico} daemon. The @code{uucico} daemon will call up
+@samp{airs}, just as in the @code{uucp} example, and transfer the work
+request and the mail message. The @code{uucico} daemon on @samp{airs}
+will put the files on a local work queue. When the communication
+session is over, the @code{uucico} daemon on @samp{airs} will start the
+@code{uuxqt} daemon. @code{uuxqt} will see the request to run, and will
+run @samp{rmail ian} with the mail message as standard input. The
+@code{rmail} program, which is not part of the UUCP package, is then
+responsible for either putting the message in the right mailbox on
+@samp{airs} or forwarding the message on to another system.
+
+Taylor UUCP comes with a few other programs that are useful when
+installing and configuring UUCP.
+
+@table @code
+
+@item uuchk
+
+The @code{uuchk} program reads the UUCP configuration files and displays
+a rather lengthy description of what it finds. This is useful when
+configuring UUCP to make certain that the UUCP package will do what you
+expect it to do.
+
+@item uuconv
+
+The @code{uuconv} program can be used to convert UUCP configuration
+files from one format to another. This can be useful for administrators
+converting from an older UUCP. Taylor UUCP is able to read and use old
+configuration file formats, but some new features can not be selected
+using the old formats.
+
+@item uusched
+
+The @code{uusched} script is just provided for compatibility with older
+UUCP releases. It starts @code{uucico} to call, one at a time, all the
+systems for which work has been queued.
+
+@item tstuu
+
+The @code{tstuu} program is a test harness for the UUCP package; it can
+help check that the package has been configured and compiled correctly.
+However, it uses pseudo-terminals, which means that it is less portable
+than the rest of the package. If it works, it can be useful when
+initially installing Taylor UUCP.
+
+@end table
+
+@node Overall Installation, Configuration Files, Introduction, Top
+@chapter Taylor UUCP Overall Installation
+
+These are the installation instructions for the Taylor UUCP package.
+
+@menu
+* Configuration:: Configuring Taylor UUCP
+* Compilation:: Compiling Taylor UUCP
+* Testing:: Testing Taylor UUCP
+* Installation:: Installing Taylor UUCP
+* TCP:: TCP together with Taylor UUCP
+@end menu
+
+@node Configuration, Compilation, Overall Installation, Overall Installation
+@section Configuring Taylor UUCP
+
+You will have to decide what types of configuration files you want to
+use. This package supports a new sort of configuration file; see
+@ref{Configuration Files}. It also supports V2 configuration files
+(@file{L.sys}, @file{L-devices}, etc.) and HDB configuration files
+(@file{Systems}, @file{Devices}, etc.). No documentation is provided
+for V2 or HDB configuration files. All types of configuration files can
+be used at once, if you are so inclined. Currently using just V2
+configuration files is not really possible, because there is no way to
+specify a dialer (there are no built in dialers, and the program does
+not know how to read @file{acucap} or @file{modemcap}); however, V2
+configuration files can be used with a new style dial file (@pxref{dial
+File}), or with a HDB @file{Dialers} file.
+
+Use of HDB configuration files has two known bugs. A blank line in the
+middle of an entry in the @file{Permissions} file will not be ignored as
+it should be. Dialer programs, as found in some versions of HDB, are
+not recognized directly. If you must use a dialer program, rather than
+an entry in @file{Devices}, you must use the @code{chat-program} command
+in a new style dial file; see @ref{dial File}. You will have to invoke
+the dialer program via a shell script or another program, since an exit
+code of 0 is required to recognize success; the @code{dialHDB} program
+in the @file{contrib} directory may be used for this purpose.
+
+The @code{uuconv} program can be used to convert from V2 or HDB
+configuration files to the new style (it can also do the reverse
+translation, if you are so inclined). It will not do all of the work,
+and the results should be carefully checked, but it can be quite useful.
+
+If you are installing a new system, you will, of course, have to write
+the configuration files; see @ref{Configuration Files}.
+
+You must also decide what sort of spool directory you want to use. If
+you will be using only these programs for UUCP, I recommend
+@samp{SPOOLDIR_TAYLOR}; otherwise select the spool directory
+corresponding to your existing UUCP package. The details of the spool
+directory choices are described at somewhat tedious length in
+@file{unix/spool.c}.
+
+@node Compilation, Testing, Configuration, Overall Installation
+@section Compiling Taylor UUCP
+
+@enumerate
+
+@item
+Take a look at the top of @file{Makefile.in} and set the appropriate
+values for your system. These control where the programs are installed
+and which user on the system owns them (normally they will be owned by a
+special user @code{uucp} rather than a real person; they should probably
+not be owned by @code{root}).
+
+@item
+Run the shell script @code{configure}. This script was generated using
+the @code{autoconf} program written by David MacKenzie of the Free
+Software Foundation. It takes a while to run. It will generate the
+file @file{config.h} based on @file{config.h.in}, and, for each source
+code directory, will generate @file{Makefile} based on
+@file{Makefile.in}.
+
+You can pass certain arguments to @code{configure} in the environment.
+Because @code{configure} will compile little test programs to see what
+is available on your system, you must tell it how to run your compiler.
+It recognizes the following environment variables:
+
+@table @samp
+@item CC
+The C compiler. If this is not set, then if @code{configure} can find
+@samp{gcc} it will use it, otherwise it will use @samp{cc}.
+@item CFLAGS
+Flags to pass to the C compiler when compiling the actual code. If this
+is not set, @code{configure} will use @samp{-g}.
+@item LDFLAGS
+Flags to pass to the C compiler when only linking, not compiling. If
+this is not set, @code{configure} will use the empty string.
+@item LIBS
+Libraries to pass to the C compiler. If this is not set,
+@code{configure} will use the empty string.
+@item INSTALL
+The program to run to install UUCP in the binary directory. If this is
+not set, then if @code{configure} finds the BSD @code{install} program,
+it will set this to @samp{install -c}; otherwise, it will use @samp{cp}.
+@item INSTALLDATA
+The program to run to install UUCP data files, such as the man pages and
+the info pages. If this is not set, then if @code{configure} finds the
+BSD @code{install} program, it will set this to @samp{install -c -m
+644}; otherwise, it will use @samp{cp}.
+@end table
+
+Suppose you want to set the environment variable @samp{CC} to
+@samp{rcc}. If you are using @code{sh} or @code{bash}, invoke
+@code{configure} as @samp{CC=rcc configure}. If you are using
+@code{csh}, do @samp{setenv CC rcc; sh configure}.
+
+On some systems you will want to use @samp{LIBS=-lmalloc}. On Xenix
+derived versions of Unix do not use @samp{LIBS=-lx} because this will
+bring in the wrong versions of certain routines; if you want to use
+@samp{-lx} you must specify @samp{LIBS=-lc -lx}.
+
+If @code{configure} fails for some reason, or if you have a very weird
+system, you may have to configure the package by hand. To do this, copy
+the file @file{config.h.in} to @file{config.h} and edit it for your
+system. Then for each source directory (the top directory, and the
+subdirectories @file{lib}, @file{unix}, and @file{uuconf}) copy
+@file{Makefile.in} to @file{Makefile}, find the words within @kbd{@@}
+characters, and set them correctly for your system.
+
+@item
+Igor V. Semenyuk provided this (lightly edited) note about ISC Unix 3.0.
+The @code{configure} script will default to passing @samp{-posix} to
+@code{gcc}. However, using @samp{-posix} changes the environment to
+POSIX, and on ISC 3.0, at least, the default for POSIX_NO_TRUNC is 1.
+This means nothing for uucp, but can lead to a problem when uuxqt
+executes rmail. IDA sendmail has dbm configuration files named
+@file{mailertable.@{dir,pag@}}. Notice these names are 15 characters
+long. When uuxqt compiled with @samp{-posix} executes rmail, which in
+turn executes sendmail, the later is run under POSIX environment too!
+This leads to sendmail bombing out with @samp{'error opening 'M'
+database: name too long' (mailertable.dir)}. It's rather obscure
+behaviour, and it took me a day to find out the cause. I don't use
+@samp{-posix}, instead I run @code{gcc} with @samp{-D_POSIX_SOURCE}, and
+add @samp{-lcposix} to @samp{LIBS}.
+
+@item
+On some versions of BSDI there is a bug in the shell which causes the
+default value for @samp{CFLAGS} to be set incorrectly. If @samp{echo
+$@{CFLAGS--g@}} echoes @samp{g} rather than @samp{-g}, then you must set
+@samp{CFLAGS} in the environment before running configure. There is a
+patch available from BSDI for this bug. (From David Vrona).
+
+@item
+On AIX 3.2.5, and possibly other versions, @samp{cc -E} does not work,
+reporting @samp{Option NOROCONST is not valid}. Test this before
+running configure by doing something like @samp{touch /tmp/foo.c; cc -E
+/tmp/foo.c}. This may give a warning about the file being empty, but it
+should not give the @samp{Option NOROCONST} warning. The workaround is
+to remove the @samp{,noroconst} entry from the @samp{options} clause in
+the @samp{cc} stanza in @file{/etc/xlc.cfg}. (From Chris Lewis).
+
+@item
+You should verify that @code{configure} worked correctly by checking
+@file{config.h} and the instances of @file{Makefile}.
+
+@item
+Edit @file{policy.h} for your local system. The comments should explain
+the various choices. The default values are intended to be reasonable,
+so you may not have to make any changes.
+
+@item
+Type @samp{make} to compile everything. The @file{tstuu.c} file is not
+particularly portable; if you can't figure out how to compile it you can
+safely ignore it, as it is only used for testing (to use STREAMS
+pseudo-terminals, tstuu.c must be compiled with
+@samp{-DHAVE_STREAMS_PTYS}; this is not automatically determined at the
+moment). If you have any other problems there is probably a bug in the
+@code{configure} script.
+
+@item
+Please report any problems you have. That is the only way they will get
+fixed for other people. Supply a patch if you can (@pxref{Patches}), or
+just ask for help.
+
+@end enumerate
+
+@node Testing, Installation, Compilation, Overall Installation
+@section Testing Taylor UUCP
+
+This package is in use at hundreds, perhaps thousands, of sites, and has
+been running at @file{airs.com} for several years. However, it will
+doubtless fail in some situations. Do not rely on this code until you
+have proven to yourself that it will work.
+
+You can use the @code{uuchk} program to test your configuration files.
+It will read them and print out a verbose description. This program
+should not be made setuid, because it will display passwords if it can
+read them.
+
+If your system supports pseudo-terminals, and you compiled the code to
+support the new style of configuration files, you should be able to use
+the @code{tstuu} program to test the @code{uucico} daemon (if your
+system supports STREAMS based pseudo-terminals, you must compile tstuu.c
+with @samp{-DHAVE_STREAMS_PTYS}, at least at the moment; the STREAMS
+based code was contributed by Marc Boucher).
+
+To run @code{tstuu}, just type @samp{tstuu} with no arguments while
+logged in to the compilation directory (since it runs @file{./uucp},
+@file{./uux} and @file{./uucico}). It will run a lengthy series of
+tests (it takes over ten minutes on a slow VAX). You will need a fair
+amount of space available in @file{/usr/tmp}. You will probably want to
+put it in the background. Do not use @kbd{^Z}, because the program
+traps on @code{SIGCHLD} and winds up dying. It will create a directory
+@file{/usr/tmp/tstuu} and fill it with configuration files, and create
+spool directories @file{/usr/tmp/tstuu/spool1} and
+@file{/usr/tmp/tstuu/spool2}.
+
+If your system does not support the @code{FIONREAD} call, the
+@samp{tstuu} program will run very slowly. This may or may not get
+fixed in a later version.
+
+The program will finish with an execute file named
+@file{X.@var{something}} and a data file named @file{D.@var{something}}
+in the directory @file{/usr/tmp/tstuu/spool1} (or, more likely, in
+subdirectories, depending on the choice of @code{SPOOLDIR} in
+@file{policy.h}). Two log files will be created in the directory
+@file{/usr/tmp/tstuu}. They will be named @file{Log1} and @file{Log2},
+or, if you have selected @code{HAVE_HDB_LOGGING} in @file{policy.h},
+@file{Log1/uucico/test2} and @file{Log2/uucico/test1}. You can test
+@code{uuxqt} by running the command @samp{./uuxqt -I
+/usr/tmp/tstuu/Config1}. This should leave a command file
+@file{C.@var{something}} and a data file @file{D.@var{something}} in
+@file{/usr/tmp/tstuu/spool1} or in subdirectories. Again, there should
+be no errors in the log file.
+
+Assuming you compiled the code with debugging enabled, the @samp{-x}
+switch can be used to set debugging modes; see the @code{debug} command
+for details (@pxref{Debugging Levels}). Use @samp{-x all} to turn on
+all debugging and generate far more output than you will ever want to
+see. The @code{uucico} daemons will put debugging output in the files
+@file{Debug1} and @file{Debug2} in the directory @file{/usr/tmp/tstuu}.
+After that, you're pretty much on your own.
+
+On some systems you can also use @code{tstuu} to test @code{uucico}
+against the system @code{uucico}, by using the @samp{-u} switch. For
+this to work, change the definitions of @code{ZUUCICO_CMD} and
+@code{UUCICO_EXECL} at the top of @file{tstuu.c} to something
+appropriate for your system. The definitions in @file{tstuu.c} are what
+I used for Ultrix 4.0, on which @file{/usr/lib/uucp/uucico} is
+particularly obstinate about being run as a child; I was only able to
+run it by creating a login name with no password whose shell was
+@file{/usr/lib/uucp/uucico}. Calling login in this way will leave fake
+entries in @file{wtmp} and @file{utmp}; if you compile @file{tstout.c}
+(in the @file{contrib} directory) as a setuid @code{root} program,
+@code{tstuu} will run it to clear those entries out. On most systems,
+such hackery should not be necessary, although on SCO I had to su to
+@code{root} (@code{uucp} might also have worked) before I could run
+@file{/usr/lib/uucp/uucico}.
+
+You can test @code{uucp} and @code{uux} (give them the @samp{-r} switch
+to keep them from starting @code{uucico}) to make sure they create the
+right sorts of files. Unfortunately, if you don't know what the right
+sorts of files are, I'm not going to tell you here.
+
+If @code{tstuu} passes, or you can't run it for some reason or other,
+move on to testing with some other system. Set up the configuration
+files (@pxref{Configuration Files}), or use an existing configuration.
+Tell @code{uucico} to dial out to the system by using the @samp{-s}
+system switch (e.g. @samp{uucico -s uunet}). The log file should tell
+you what happens.
+
+If you compiled the code with debugging enabled, you can use debugging
+mode to get a great deal of information about what sort of data is
+flowing back and forth; the various possibilities are described under
+the @code{debug} command (@pxref{Debugging Levels}). When initially
+setting up a connection @samp{-x chat} is probably the most useful (e.g.
+@samp{uucico -s uunet -x chat}); you may also want to use @samp{-x
+handshake,incoming,outgoing}. You can use @samp{-x} multiple times on
+one command line, or you can give it comma separated arguments as in the
+last example. Use @samp{-x all} to turn on all possible debugging
+information. The debugging information is written to a file, normally
+@file{/usr/spool/uucp/Debug}, although the default can be changed in
+@file{policy.h} and the @file{config} file can override the name with
+the @code{debugfile} command. The debugging file may contain passwords
+and some file contents as they are transmitted over the line, so the
+debugging file is only readable by the @code{uucp} user.
+
+You can use the @samp{-f} switch to force @code{uucico} to call out even
+if the last call failed recently; using @samp{-S} when naming a system
+has the same effect. Otherwise the status file (in the @file{.Status}
+subdirectory of the main spool directory, normally
+@file{/usr/spool/uucp}) will prevent too many attempts from occurring in
+rapid succession.
+
+Again, please let me know about any problems you have and how you got
+around them. If you do report a problem, please include the version
+number of the package you are using, and a sample of the debugging file
+showing the problem (debugging information is usually what is needed,
+not just the log file). General questions such as ``why doesn't uucico
+dial out'' are impossible to answer without much more information.
+
+@node Installation, TCP, Testing, Overall Installation
+@section Installing Taylor UUCP
+
+You can install the executable files by becoming @code{root} and typing
+@samp{make install}. Or you can look at what @samp{make install} does
+and do it by hand. It tries to preserve your old programs, if any, but
+it only does this the first time Taylor UUCP is installed (so that if
+you install several versions of Taylor UUCP, you can still go back to
+your original UUCP programs). You can retrieve the original programs by
+typing @samp{make uninstall}.
+
+Note that by default the programs are compiled with debugging
+information, and they are not stripped when they are installed. You may
+want to strip the installed programs to save disk space. See your
+system documentation for strip for more information.
+
+However, simply installing the executable files is not enough. You must
+also arrange for them to be used correctly.
+
+@menu
+* Running uucico:: Running uucico
+* Using UUCP for mail and news:: Using UUCP for mail and news.
+* Trimming UUCP Log Files:: Trimming UUCP Log Files
+@end menu
+
+@node Running uucico, Using UUCP for mail and news, Installation, Installation
+@subsection Running uucico
+
+By default @code{uucp} and @code{uux} will automatically start up
+@code{uucico} to call another system whenever work is queued up.
+However, the call may fail, or you may have put in time restrictions
+which prevent the call at that time (perhaps because telephone rates are
+high) (@pxref{When to Call}). Also, a remote system may have work
+queued up for your system, but may not be calling you for some reason
+(perhaps you have agreed that your system should always place the call).
+To make sure that works get transferred between the systems withing a
+reasonable time period, you should arrange to periodically invoke
+@code{uucico}.
+
+These periodic invocations are normally caused by entries in the
+@file{crontab} file. The exact format of @file{crontab} files, and how
+new entries are added, varies from system to system; check your local
+documentation (try @samp{man cron}).
+
+To attempt to call all systems with outstanding work, use the command
+@samp{uucico -r1}. To attempt to call a particular system, use the
+command @samp{uucico -s @var{system}}. To attempt to call a particular
+system, but only if there is work for it, use the command @samp{uucico
+-C -s @var{system}}.
+
+A common case is to want to try to call a system at a certain time, with
+periodic retries if the call fails. A simple way to do this is to
+create an empty UUCP command file, known as a @dfn{poll file}. If a
+poll file exists for a system, then @samp{uucico -r1} will place a call
+to it. If the call succeeds, the poll file will be deleted.
+
+The file can be easily created using the @samp{touch} command. The name
+of a poll file currently depends on the type of spool directory you are
+using, as set in @file{policy.h}. If you are using
+@code{SPOOLDIR_TAYLOR} (the default), put something like this in your
+@file{crontab} file:
+@example
+touch /usr/spool/uucp/@var{sys}/C./C.A0000
+@end example
+In this example @var{sys} is the system you wish to call, and
+@samp{/usr/spool/uucp} is your UUCP spool directory.
+If you are using @code{SPOOLDIR_HDB}, use
+@example
+touch /usr/spool/uucp/@var{sys}/C.@var{sys}A0000
+@end example
+
+For example, I use the following crontab entries locally:
+
+@example
+45 * * * * /bin/echo /usr/lib/uucp/uucico -r1 | /bin/su uucpa
+40 4,10,15 * * * touch /usr/spool/uucp/uunet/C./C.A0000
+@end example
+
+Every hour, at 45 minutes past, this will check if there is any work to
+be done, and, if there is, will call the appropriate system. Also, at
+4:40am, 10:40am and 3:40pm this will create a poll file file for
+@samp{uunet}, forcing the next check to call @samp{uunet}.
+
+@node Using UUCP for mail and news, Trimming UUCP Log Files, Running uucico, Installation
+@subsection Using UUCP for mail and news.
+
+Taylor UUCP does not include a mail package. All Unix systems come with
+some sort of mail delivery agent, typically @code{sendmail} or
+@code{MMDF}. Source code is available for some alternative mail
+delivery agents, such as @code{IDA sendmail} and @code{smail}.
+
+Taylor UUCP also does not include a news package. The two major Unix
+news packages are @code{C-news} and @code{INN}. Both are available in
+source code form.
+
+Configuring and using mail delivery agents is a notoriously complex
+topic, and I will not be discussing it here. Configuring news systems
+is usually simpler, but I will not be discussing that either. I will
+merely describe the interactions between the mail and news systems and
+UUCP.
+
+A mail or news system interacts with UUCP in two ways: sending and
+receiving.
+
+@menu
+* Sending mail or news:: Sending mail or news via UUCP
+* Receiving mail or news:: Receiving mail or news via UUCP
+@end menu
+
+@node Sending mail or news, Receiving mail or news, Using UUCP for mail and news, Using UUCP for mail and news
+@unnumberedsubsubsec Sending mail or news via UUCP
+
+When mail is to be sent from your machine to another machine via UUCP,
+the mail delivery agent will invoke @code{uux}. It will generally run a
+command such as @samp{uux - @var{system}!rmail}, where @var{system} is
+the remote system to which the mail is being sent. It may pass other
+options to @code{uux}, such as @samp{-r} or @samp{-g}.
+
+News also invokes @code{uux} in order to transfer articles to another
+system. The only difference is that news will use @code{uux} to invoke
+@code{rnews} on the remote system, rather than @code{rmail}.
+
+You should arrange for your mail and news systems to invoke the Taylor
+UUCP version of @code{uux} when sending mail via UUCP. If you simply
+replace any existing version of @code{uux} with the Taylor UUCP version,
+this will probably happen automatically. However, if both versions
+exist on your system, you will probably have to modify the mail and news
+configuration files in some way.
+
+Actually, if both the system UUCP and Taylor UUCP are using the same
+spool directory format, the system @code{uux} will probably work fine
+with the Taylor @code{uucico} (the reverse is not the case: the Taylor
+@code{uux} requires the Taylor @code{uucico}). However, data transfer
+will be somewhat more efficient if the Taylor @code{uux} is used.
+
+@node Receiving mail or news, , Sending mail or news, Using UUCP for mail and news
+@unnumberedsubsubsec Receiving mail or news via UUCP
+
+As noted in @ref{Sending mail or news}, mail is sent by requesting a
+remote execution of @code{rmail}. To receive mail, then, all that is
+necessary is for UUCP to invoke @code{rmail} itself.
+
+Any mail delivery agent will provide an appropriate version of
+@code{rmail}; you must simply make sure that it is in the command path
+used by UUCP (it almost certainly already is). The default command path
+is set in @file{policy.h}, and it may be overridden for a particular
+system by the @code{command-path} command (@pxref{Miscellaneous (sys)}).
+
+Similarly, for news UUCP must be able to invoke @code{rnews}. Any news
+system will provide a version of @code{rnews}, and you must ensure that
+is in a directory on the path that UUCP will search.
+
+@node Trimming UUCP Log Files, , Using UUCP for mail and news, Installation
+@subsection Trimming UUCP Log Files
+
+You should also periodically trim the log files, as they will otherwise
+continue to grow without limit. The names of the log files are set in
+@file{policy.h}, and may be overridden in the configuration file
+(@pxref{config File}). By default they are are
+@file{/usr/spool/uucp/Log} and @file{/usr/spool/uucp/Stats}.
+
+You may find the @code{savelog} program in the @file{contrib} directory
+to be of use. There is a manual page for it in @file{contrib} as well.
+
+@node TCP, , Installation, Overall Installation
+@section TCP together with Taylor UUCP
+
+If your system has a Berkeley style socket library, or a System V style
+TLI interface library, you can compile the code to permit making
+connections over TCP. Specifying that a system should be reached via
+TCP is easy, but nonobvious.
+
+If you are using the new style configuration files, see
+@ref{Configuration Files}. Basically, you can just add the line
+@samp{port type tcp} to the entry in the system configuration file. By
+default UUCP will get the port number by looking up @samp{uucp} in
+@file{/etc/services}; if @samp{uucp} is not found, port 540 will be
+used. You can set the port number to use with the command @samp{port
+service @var{xxx}}, where @var{xxx} can be either a number or a name to
+look up in @file{/etc/services}. You can specify the address of the
+remote host with @samp{address @var{a.b.c}}; if you don't give an
+address, the remote system name will be used. You should give an
+explicit chat script for the system when you use TCP; the default chat
+script begins with a carriage return, which will not work with some UUCP
+TCP servers.
+
+If you are using V2 configuration files, add a line like this to
+@file{L.sys}:
+
+@example
+@var{sys} Any TCP uucp @var{host}.@var{domain} chat-script
+@end example
+
+This will make an entry for system @var{sys}, to be called at any time,
+over TCP, using port number @samp{uucp} (as found in
+@file{/etc/services}; this may be specified as a number), using remote
+host @file{@var{host}.@var{domain}}, with some chat script.
+
+@need 1000
+If you are using HDB configuration files, add a line like this to
+Systems:
+
+@example
+@var{sys} Any TCP - @var{host}.@var{domain} chat-script
+@end example
+
+and a line like this to Devices:
+
+@example
+TCP uucp - -
+@end example
+
+You only need one line in Devices regardless of how many systems you
+contact over TCP. This will make an entry for system @var{sys}, to be
+called at any time, over TCP, using port number @samp{uucp} (as found in
+@file{/etc/services}; this may be specified as a number), using remote
+host @file{@var{host}.@var{domain}}, with some chat script.
+
+The @code{uucico} daemon can also be run as a TCP server. To use the
+default port number, which is a reserved port, @code{uucico} must be
+invoked by root (or it must be set user ID to root, but I don't
+recommend doing that).
+
+Basically, you must define a port, either using the port file
+(@pxref{port File}) if you are using the new configuration method or
+with an entry in Devices if you are using HDB; there is no way to define
+a port using V2. If you are using HDB the port must be named
+@samp{TCP}; a line as shown above will suffice. You can then start
+@code{uucico} as @samp{uucico -p TCP} (after the @samp{-p}, name the
+port; in HDB it must be @samp{TCP}). This will wait for incoming
+connections, and fork off a child for each one. Each connection will be
+prompted with @samp{login:} and @samp{Password:}; the results will be
+checked against the UUCP (not the system) password file
+(@pxref{Configuration File Names}).
+
+Of course, you can get a similar effect by using the BSD @code{uucpd}
+program.
+
+You can also have @code{inetd} start up @code{uucico} with the @samp{-l}
+switch, which will cause it to prompt with @samp{login:} and
+@samp{Password:} and check the results against the UUCP (not the system)
+password file (you may want to also use the @samp{-D} switch to avoid a
+fork, which in this case is unnecessary). This may be used in place of
+@code{uucpd}.
+
+@node Configuration Files, Protocols, Overall Installation, Top
+@chapter Taylor UUCP Configuration Files
+
+This chapter describes the configuration files accepted by the Taylor
+UUCP package if compiled with @code{HAVE_TAYLOR_CONFIG} defined in
+@file{policy.h}.
+
+The configuration files are normally found in the directory
+@var{newconfigdir}, which is defined by the @file{Makefile} variable
+@file{newconfigdir}; by default @var{newconfigdir} is
+@file{/usr/local/conf/uucp}. However, the main configuration file,
+@file{config}, is the only one which must be in that directory, since it
+may specify a different location for any or all of the other files. You
+may run any of the UUCP programs with a different main configuration
+file by using the @samp{-I} option; this can be useful when testing a
+new configuration. When you use the @samp{-I} option the programs will
+revoke any setuid privileges.
+
+@menu
+* Configuration File Format:: Configuration file format
+* Configuration File Overview:: Configuration File Overview
+* Configuration Examples:: Examples of configuration files
+* Time Strings:: How to write time strings
+* Chat Scripts:: How to write chat scripts
+* config File:: The main configuration file
+* sys File:: The system configuration file
+* port File:: The port configuration files
+* dial File:: The dialer configuration files
+* Security:: Security issues
+@end menu
+
+@node Configuration File Format, Configuration File Overview, Configuration Files, Configuration Files
+@section Configuration File Format
+
+All the configuration files follow a simple line-oriented
+@samp{@var{keyword} @var{value}} format. Empty lines are ignored, as
+are leading spaces; unlike HDB, lines with leading spaces are read. The
+first word on each line is a keyword. The rest of the line is
+interpreted according to the keyword. Most keywords are followed by
+numbers, boolean values or simple strings with no embedded spaces.
+
+The @kbd{#} character is used for comments. Everything from a @kbd{#}
+to the end of the line is ignored unless the @kbd{#} is preceded by a
+@kbd{\} (backslash); if the @kbd{#} is preceeded by a @kbd{\}, the
+@kbd{\} is removed but the @kbd{#} remains in the line. This can be
+useful for a phone number containing a @kbd{#}. To enter the sequence
+@samp{\#}, use @samp{\\#}.
+
+The backslash character may be used to continue lines. If the last
+character in a line is a backslash, the backslash is removed and the
+line is continued by the next line. The second line is attached to the
+first with no intervening characters; if you want any whitespace between
+the end of the first line and the start of the second line, you must
+insert it yourself.
+
+However, the backslash is not a general quoting character. For example,
+you cannot use it to get an embedded space in a string argument.
+
+Everything after the keyword must be on the same line. A @var{boolean}
+may be specified as @kbd{y}, @kbd{Y}, @kbd{t}, or @kbd{T} for true and
+@kbd{n}, @kbd{N}, @kbd{f}, or @kbd{F} for false; any trailing characters
+are ignored, so @code{true}, @code{false}, etc., are also acceptable.
+
+@node Configuration File Overview, Configuration Examples, Configuration File Format, Configuration Files
+@section Configuration File Overview
+
+UUCP uses several different types of configuration files, each
+describing a different kind of information. The commands permitted in
+each file are described in detail below. This section is a brief
+description of some of the different types of files.
+
+The @file{config} file is the main configuration file. It describes
+general information not associated with a particular remote system, such
+as the location of various log files. There are reasonable defaults for
+everything that may be specified in the @file{config} file, so you may
+not actually need one on your system.
+
+There may be only one @file{config} file, but there may be one or more
+of each other type of file. The default is one file for each type, but
+more may be listed in the @file{config} file.
+
+The @file{sys} files are used to describe remote systems. Each remote
+system to which you connect must be listed in a @file{sys} file. A
+@file{sys} file will include information for a system, such as the speed
+(baud rate) to use, or when to place calls.
+
+For each system you wish to call, you must describe one or more ports;
+these ports may be defined directly in the @file{sys} file, or they may
+be defined in a @file{port} file.
+
+The @file{port} files are used to describe ports. A port is a
+particular hardware connection on your computer. You would normally
+define as many ports as there are modems attached to your computer. A
+TCP connection is also described using a port.
+
+The @file{dial} files are used to describe dialers. Dialer is
+essentially another word for modem. The @file{dial} file describes the
+commands UUCP should use to dial out on a particular type of modem. You
+would normally define as many dialers as there are types of modems
+attached to your computer. For example, if you have three Telebit
+modems used for UUCP, you would probably define three ports and one
+dialer.
+
+There are other types of configuration files, but these are the
+important ones. The other types are described below.
+
+@node Configuration Examples, Time Strings, Configuration File Overview, Configuration Files
+@section Examples of Configuration Files
+
+This section provides few typical examples of configuration files.
+There are also sample configuration files in the @file{sample}
+subdirectory of the distribution.
+
+@menu
+* config File Examples:: Examples of the main configuration file
+* Leaf Example:: Call a single remote site
+* Gateway Example:: The gateway for several local systems
+@end menu
+
+@node config File Examples, Leaf Example, Configuration Examples, Configuration Examples
+@subsection config File Examples
+@cindex config file examples
+
+To start with, here are some examples of uses of the main configuration
+file, @file{config}. For a complete description of the commands that
+are permitted in @file{config}, see @ref{config File}.
+
+In many cases you will not need to create a @file{config} file at all.
+The most common reason to create one is to give your machine a special
+UUCP name. Other reasons might be to change the UUCP spool directory or
+to permit any remote system to call in.
+
+If you have an internal network of machines, then it is likely that the
+internal name of your UUCP machine is not the name you want to use when
+calling other systems. For example, here at @file{airs.com} our
+mail/news gateway machine is named @file{elmer.airs.com} (it is one of
+several machines all named @file{@var{localname}.airs.com}). If we did
+not provide a @file{config} file, then our UUCP name would be
+@file{elmer}; however, we actually want it to be @file{airs}.
+Therefore, we use the following line in @file{config}:
+
+@example
+nodename airs
+@end example
+
+@cindex changing spool directory
+@cindex spool directory (changing)
+The UUCP spool directory name is set in @file{policy.h} when the code is
+compiled. You might at some point decide that it is appropriate to move
+the spool directory, perhaps to put it on a different disk partition.
+You would use the following commands in @file{config} to change to
+directories on the partition @file{/uucp}:
+
+@example
+spool /uucp/spool
+pubdir /uucp/uucppublic
+logfile /uucp/spool/Log
+debugfile /uucp/spool/Debug
+@end example
+
+You would then move the contents of the current spool directory to
+@file{/uucp/spool}. If you do this, make sure that no UUCP processes
+are running while you change @file{config} and move the spool directory.
+
+@cindex anonymous UUCP
+Suppose you wanted to permit any system to call in to your system and
+request files. This is generally known as @dfn{anonymous UUCP}, since
+the systems which call in are effectively anonymous. By default,
+unknown systems are not permitted to call in. To permit this you must
+use the @code{unknown} command in @file{config}. The @code{unknown}
+command is followed by any command that may appear in the system file;
+for full details, see @ref{sys File}.
+
+I will show two possible anonymous UUCP configurations. The first will
+let any system call in and download files, but will not permit them to
+upload files to your system.
+
+@example
+# No files may be transferred to this system
+unknown receive-request no
+# The public directory is /usr/spool/anonymous
+unknown pubdir /usr/spool/anonymous
+# Only files in the public directory may be sent (the default anyhow)
+unknown remote-send ~
+@end example
+
+@noindent
+Setting the public directory is convenient for the systems which call
+in. It permits to request a file by prefixing it with @file{~/}. For
+example, assuming your system is known as @samp{server}, then to
+retrieve the file @file{/usr/spool/anonymous/INDEX} a user on a remote
+site could just enter @samp{uucp server!~/INDEX ~}; this would transfer
+@file{INDEX} from @samp{server}'s public directory to the user's local
+public directory. Note that when using @samp{csh} or @samp{bash} the
+@kbd{!} and the second @kbd{~} must be quoted.
+
+The next example will permit remote systems to upload files to a special
+directory named @file{/usr/spool/anonymous/upload}. Permitting a remote
+system to upload files permits it to send work requests as well; this
+example is careful to prohibit commands from unknown systems.
+
+@example
+# No commands may be executed (the list of permitted commands is empty)
+unknown commands
+# The public directory is /usr/spool/anonymous
+unknown pubdir /usr/spool/anonymous
+# Only files in the public directory may be sent; users may not download
+# files from the upload directory
+unknown remote-send ~ !~/upload
+# May only upload files into /usr/spool/anonymous/upload
+unknown remote-receive ~/upload
+@end example
+
+@node Leaf Example, Gateway Example, config File Examples, Configuration Examples
+@subsection Leaf Example
+
+@cindex leaf site
+@cindex sys file example (leaf)
+A relatively common simple case is a @dfn{leaf site}, a system which
+only calls or is called by a single remote site. Here is a typical
+@file{sys} file that might be used in such a case. For full details on
+what commands can appear in the @file{sys} file, see @ref{sys File}.
+
+This is the @file{sys} file that is used at @file{airs.com}. We use a
+single modem to dial out to @file{uunet}. This example shows how you
+can specify the port and dialer information directly in the @file{sys}
+file for simple cases. It also shows the use of the following:
+
+@table @code
+
+@item call-login
+Using @code{call-login} and @code{call-password} allows the default
+login chat script to be used. In this case, the login name is specified
+in the call-out login file (@pxref{Configuration File Names}).
+
+@item call-timegrade
+@file{uunet} is requested to not send us news during the daytime.
+
+@item chat-fail
+If the modem returns @samp{BUSY} or @samp{NO CARRIER} the call is
+immediately aborted.
+
+@item protocol-parameter
+Since @file{uunet} tends to be slow, the default timeout has been
+increased.
+
+@end table
+
+This @file{sys} file relies on certain defaults. It will allow
+@file{uunet} to queue up @samp{rmail} and @samp{rnews} commands. It
+will allow users to request files from @file{uunet} into the UUCP public
+directory. It will also allow @file{uunet} to request files from the
+UUCP public directory; in fact @file{uunet} never requests files, but
+for additional security we could add the line @samp{request false}.
+
+@example
+# The following information is for uunet
+system uunet
+
+# The login name and password are kept in the callout password file
+call-login *
+call-password *
+
+# We can send anything at any time.
+time any
+
+# During the day we only accept grade `Z' or above; at other times
+# (not mentioned here) we accept all grades. uunet queues up news
+# at grade `d', which is lower than `Z'.
+call-timegrade Z Wk0755-2305,Su1655-2305
+
+# The phone number.
+phone 7389449
+
+# uunet tends to be slow, so we increase the timeout
+chat-timeout 120
+
+# We are using a preconfigured Telebit 2500.
+port type modem
+port device /dev/ttyd0
+port speed 19200
+port carrier true
+port dialer chat "" ATZ\r\d\c OK ATDT\D CONNECT
+port dialer chat-fail BUSY
+port dialer chat-fail NO\sCARRIER
+port dialer complete \d\d+++\d\dATH\r\c
+port dialer abort \d\d+++\d\dATH\r\c
+
+# Increase the timeout and the number of retries.
+protocol-parameter g timeout 20
+protocol-parameter g retries 10
+@end example
+
+@node Gateway Example, , Leaf Example, Configuration Examples
+@subsection Gateway Example
+
+@cindex gateway
+@cindex sys file example (gateway)
+Many organizations have several local machines which are connected by
+UUCP, and a single machine which connects to the outside world. This
+single machine is often referred to as a @dfn{gateway} machine.
+
+For this example I will assume a fairly simple case. It should still
+provide a good general example. There are three machines, @file{elmer},
+@file{comton} and @file{bugs}. @file{elmer} is the gateway machine for
+which I will show the configuration file. @file{elmer} calls out to
+@file{uupsi}. As an additional complication, @file{uupsi} knows
+@file{elmer} as @file{airs}; this will show how a machine can have one
+name on an internal network but a different name to the external world.
+@file{elmer} has two modems. It also has an TCP/IP connection to
+@file{uupsi}, but since that is supposed to be reserved for interactive
+work (it is, perhaps, only a 9600 baud SLIP line) it will only use it if
+the modems are not available.
+
+A network this small would normally use a single @file{sys} file.
+However, for pedagogical purposes I will show two separate @file{sys}
+files, one for the local systems and one for @file{uupsi}. This is done
+with the @code{sysfile} command in the @file{config} file. Here is the
+@file{config} file.
+
+@example
+# This is config
+# The local sys file
+sysfile /usr/local/lib/uucp/sys.local
+# The remote sys file
+sysfile /usr/local/lib/uucp/sys.remote
+@end example
+
+Using the defaults feature of the @file{sys} file can greatly simplify
+the listing of local systems. Here is @file{sys.local}. Note that this
+assumes that the local systems are trusted; they are permited to request
+any world readable file and to write files into any world writable
+directory.
+
+@example
+# This is sys.local
+# Get the login name and password to use from the call-out file
+call-login *
+call-password *
+
+# The systems must use a particular login
+called-login Ulocal
+
+# Permit sending any world readable file
+local-send /
+remote-send /
+
+# Permit requesting into any world writable directory
+local-receive /
+remote-receive /
+
+# Call at any time
+time any
+
+# Use port1, then port2
+port port1
+
+alternate
+
+port port2
+
+# Now define the systems themselves. Because of all the defaults we
+# used, there is very little to specify for the systems themselves.
+
+system comton
+phone 5551212
+
+system bugs
+phone 5552424
+@end example
+
+The @file{sys.remote} file describes the @file{uupsi} connection. The
+@code{myname} command is used to change the UUCP name to @file{airs}
+when talking to @file{uupsi}.
+
+@example
+# This is sys.remote
+# Define uupsi
+system uupsi
+
+# The login name and password are in the call-out file
+call-login *
+call-password *
+
+# We can call out at any time
+time any
+
+# uupsi uses a special login name
+called-login Uuupsi
+
+# uuspi thinks of us as `airs'
+myname airs
+
+# The phone number
+phone 5554848
+
+# We use port2 first, then port1, then TCP
+
+port port2
+
+alternate
+
+port port1
+
+alternate
+
+# We don't bother to make a special entry in the port file for TCP, we
+# just describe the entire port right here. We use a special chat
+# script over TCP because the usual one confuses some TCP servers.
+port type TCP
+address uu.psi.com
+chat ogin: \L word: \P
+@end example
+
+The ports are defined in the file @file{port} (@pxref{port File}). For
+this example they are both connected to the same type of 2400 baud
+Hayes-compatible modem.
+
+@example
+# This is port
+
+port port1
+type modem
+device /dev/ttyd0
+dialer hayes
+speed 2400
+
+port port2
+type modem
+device /dev/ttyd1
+dialer hayes
+speed 2400
+@end example
+
+Dialers are described in the @file{dial} file (@pxref{dial File}).
+
+@example
+# This is dial
+
+dialer hayes
+
+# The chat script used to dial the phone. \D is the phone number.
+chat "" ATZ\r\d\c OK ATDT\D CONNECT
+
+# If we get BUSY or NO CARRIER we abort the dial immediately
+chat-fail BUSY
+chat-fail NO\sCARRIER
+
+# When the call is over we make sure we hangup the modem.
+complete \d\d+++\d\dATH\r\c
+abort \d\d+++\d\dATH\r\c
+@end example
+
+@node Time Strings, Chat Scripts, Configuration Examples, Configuration Files
+@section Time Strings
+@cindex time strings
+
+Several commands use time strings to specify a range of times. This
+section describes how to write time strings.
+
+A time string may be a list of simple time strings separated with a
+vertical bar @kbd{|} or a comma @kbd{,}.
+
+Each simple time string must begin with @samp{Su}, @samp{Mo}, @samp{Tu},
+@samp{We}, @samp{Th}, @samp{Fr}, or @samp{Sa}, or @samp{Wk} for any
+weekday, or @samp{Any} for any day.
+
+Following the day may be a range of hours separated with a hyphen using
+24 hour time. The range of hours may cross 0; for example
+@samp{2300-0700} means any time except 7 AM to 11 PM. If no time is
+given, calls may be made at any time on the specified day(s).
+
+The time string may also consist of the single word @samp{Never}, which
+does not match any time, or a single word with a name defined in a
+previous @code{timetable} command (@pxref{Miscellaneous (config)}).
+
+Here are a few sample time strings with an explanation of what they
+mean.
+
+@table @samp
+
+@item Wk2305-0855,Sa,Su2305-1655
+
+This means weekdays before 8:55 AM or after 11:05 PM, any time Saturday,
+or Sunday before 4:55 PM or after 11:05 PM. These are approximately the
+times during which night rates apply to phone calls in the U.S.A. Note
+that this time string uses, for example, @samp{2305} rather than
+@samp{2300}; this will ensure a cheap rate phone call even if the
+computer clock is running up to five minutes ahead of the real time.
+
+@item Wk0905-2255,Su1705-2255
+
+This means weekdays from 9:05 AM to 10:55 PM, or Sunday from 5:05 PM to
+10:55 PM. This is approximately the opposite of the previous example.
+
+@item Any
+
+This means any day. Since no time is specified, it means any time on
+any day.
+
+@end table
+
+@node Chat Scripts, config File, Time Strings, Configuration Files
+@section Chat Scripts
+@cindex chat scripts
+
+Chat scripts are used in several different places, such as dialing out
+on modems or logging in to remote systems. Chat scripts are made up of
+pairs of strings. The program waits until it sees the first string,
+known as the @dfn{expect} string, and then sends out the second string,
+the @dfn{send} string.
+
+Each chat script is defined using a set of commands. These commands
+always end in a string beginning with @code{chat}, but may start with
+different strings. For example, in the @file{sys} file there is one set
+of commands beginning with @code{chat} and another set beginning with
+@code{called-chat}. The prefixes are only used to disambiguate
+different types of chat scripts, and this section ignores the prefixes
+when describing the commands.
+
+@table @code
+
+@item chat @var{strings}
+@findex chat
+
+Specify a chat script. The arguments to the @code{chat} command are
+pairs of strings separated by whitespace. The first string of each pair
+is an expect string, the second is a send string. The program will wait
+for the expect string to appear; when it does, the program will send the
+send string. If the expect string does not appear within a certain
+number of seconds (as set by the @code{chat-timeout} command) the chat
+script fails and, typically, the call is aborted. If the final expect
+string is seen (and the optional final send string has been sent), the
+chat script is successful.
+
+An expect string may contain additional subsend and subexpect strings,
+separated by hyphens. If the expect string is not seen, the subsend
+string is sent and the chat script continues by waiting for the
+subexpect string. This means that a hyphen may not appear in an expect
+string; on an ASCII system, use @samp{\055} instead.
+
+An expect string may simply be @samp{""}, meaning to skip the expect
+phase. Otherwise, the following escape characters may appear in expect
+strings:
+
+@table @samp
+@item \b
+a backspace character
+@item \n
+a newline or line feed character
+@item \N
+a null character (for HDB compatibility)
+@item \r
+a carriage return character
+@item \s
+a space character
+@item \t
+a tab character
+@item \\
+a backslash character
+@item \@var{ddd}
+character @var{ddd}, where @var{ddd} are up to three octal digits
+@item \x@var{ddd}
+character @var{ddd}, where @var{ddd} are hexadecimal digits.
+@end table
+
+As in C, there may be up to three octal digits following a backslash,