mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-30 00:02:44 +00:00
Commit delta: current -> 1.06 + FreeBSD configuration
This commit is contained in:
parent
ea76f9453e
commit
6ec4b3339b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=10110
@ -1,3 +1,656 @@
|
||||
Thu Aug 10 22:42:53 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* Released version 1.06.
|
||||
|
||||
* uuconf/tsinfo.c (_uuconf_itaylor_system_internal): Don't set
|
||||
uuconf_fcall merely because uuconf_qtimegrade is not set. Check
|
||||
values against _uuconf_unset, not NULL.
|
||||
|
||||
* trans.c (fgot_data): Only log when data comes in if fsendfile is
|
||||
FALSE.
|
||||
|
||||
Wed Aug 9 20:52:29 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* Makefile.in (VERSION): Change to 1.06.
|
||||
|
||||
Tue Aug 1 20:13:36 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* uuconf/tsinfo.c (_uuconf_itaylor_system_internal): Set the fcall
|
||||
field for the first alternate if it has some way of selecting a
|
||||
port.
|
||||
|
||||
* Ard van Breemen: unix/serial.c (fsserial_hardflow): Add support
|
||||
for NCR Tower using IRTS.
|
||||
|
||||
* policy.h (FSYNC_ON_CLOSE): Define.
|
||||
* system.h (fsysdep_sync): Declare.
|
||||
* uucp.h (fstdiosync): Define, twice.
|
||||
* unix/sync.c: New file.
|
||||
* copy.c (fcopy_open_file): Call fsysdep_sync.
|
||||
* cu.c (icutake): Likewise.
|
||||
* rec.c (frec_file_end): Likewise.
|
||||
(frec_file_end): Call fstdiosync.
|
||||
* uucp.c (uccopy): Likewise.
|
||||
* uux.c (main): Likewise.
|
||||
(uxadd_send_file): Likewise.
|
||||
* unix/splcmd.c (zsysdep_spool_commands): Likewise.
|
||||
* unix/Makefile.in (OBJS): Add sync.o.
|
||||
(sync.o): New target.
|
||||
|
||||
* Peter Wemm: unix/filnam.c (fscmd_seq): Increase the delay each
|
||||
time an attempt to lock LCK..SEQ fails.
|
||||
|
||||
* Peter Wemm: uustat.c (fsnotify): Escape a leading "From " when
|
||||
including standard input in a mail message.
|
||||
|
||||
Mon Jul 31 22:45:23 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* unix/serial.c (fsserial_lockfile): In the HAVE_SVR4_LOCKFILES
|
||||
case, increase the space allocated to print the major and minor
|
||||
numbers.
|
||||
|
||||
Sun Jul 30 22:30:51 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* trans.c (fgot_data): Log a message as soon as anything comes in,
|
||||
not just for file data.
|
||||
|
||||
* prote.c (feprocess_data): Handle a zero length file.
|
||||
|
||||
Wed Jul 19 00:14:46 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* unix/xqtfil.c (fSone_dir): New static variable.
|
||||
(fsysdep_get_xqt_init): Add zsystem argument.
|
||||
(zsysdep_get_xqt): Likewise.
|
||||
(usysdep_get_xqt_free): Likewise.
|
||||
* system.h (fsysdep_get_xqt_init): Update declaration.
|
||||
(zsysdep_get_xqt): Likewise.
|
||||
(usysdep_get_xqt_free): Likewise.
|
||||
* uuxqt.c (main): Pass zdosys for system to get_xqt routines.
|
||||
* uustat.c (fsexecutions): Pass NULL for system to get_xqt
|
||||
routines.
|
||||
(fsquery): Likewise.
|
||||
|
||||
* uux.c (main): If we are not starting uucico, and we queued a
|
||||
local execution, start uuxqt.
|
||||
|
||||
Tue Jul 18 22:33:08 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* uuxqt.c (REMOVE_QINPUT): Define.
|
||||
(uqdo_xqt_file): Set REMOVE_QINPUT if zQinput is in the spool
|
||||
directory.
|
||||
(isave_files): If REMOVE_QINPUT is set, save the input file.
|
||||
(uqcleanup): If REMOVE_QINPUT and REMOVE_NEEDED are set, remove
|
||||
the input file.
|
||||
|
||||
Mon Jul 17 20:59:20 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* uuchk.c (ukshow): Add missing \n.
|
||||
|
||||
Sun Jul 16 12:02:03 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* Makefile.in (TEXI2HTML): Define.
|
||||
(doc-dist): Depend upon uucp.html; put HTML files in documentation
|
||||
distribution.
|
||||
(html, uucp.html): New targets.
|
||||
|
||||
Mon Jul 10 20:24:48 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* unix/lcksys.c: Rewrite to not truncate the system name in the
|
||||
lock file name, unless HAVE_LONG_FILE_NAMES is 0.
|
||||
|
||||
Sat Jul 8 13:41:26 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* Andrey A. Chernov: cu.c (ucuhelp): Mention -E.
|
||||
(fcudo_cmd): Use BUCHAR rather than casting to unsigned int.
|
||||
(icuunrecogvar): Likewise.
|
||||
(uculist_vars): Likewise.
|
||||
(icuunrecogfn): Likewise.
|
||||
* lib/getopt.c (_getopt_internal): Likewise.
|
||||
|
||||
* Andrey A. Chernov: Makefile.in (infodir): Changed commented out
|
||||
setting from share/doc to share/info.
|
||||
|
||||
* Godfrey van der Linden: unix/serial.c (fsysdep_conn_io): Base
|
||||
select or alarm timeout on connection speed.
|
||||
|
||||
* configure.in: Move AC_PREFIX_PROGRAM before AC_PROG_CC.
|
||||
* configure: Rebuild.
|
||||
|
||||
* policy.h (HAVE_BROKEN_SETLKW): Add new define.
|
||||
* unix/filnam.c (USE_POSIX_LOCKS): Don't set if HAVE_BROKEN_SETLKW
|
||||
is set.
|
||||
(fscmd_seq): If the F_SETLKW call returns EINVAL, revert to using
|
||||
lock files.
|
||||
|
||||
* unix/spawn.c (ixsspawn): If setreuid is available, use it,
|
||||
rather than setuid, to set the real user ID to the effective user
|
||||
ID.
|
||||
|
||||
* Thomas Mechtersheimer: uuchk.c (main): Correct typo (iret for
|
||||
iint).
|
||||
|
||||
* Bob Thrush: unix/serial.c (fsserial_hardflow): Correct typo
|
||||
(c_cflags for c_cflag).
|
||||
|
||||
* configure.in: Check for sys/statvfs.h. Check for memset,
|
||||
memcmp, and memcpy with the correct argument types (apparently
|
||||
some systems require this).
|
||||
* config.h.in (HAVE_SYS_STATVFS_H): Define.
|
||||
* configure: Rebuild.
|
||||
|
||||
Mon Jul 3 00:26:50 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* Released version beta 1.06.
|
||||
|
||||
Sun Jul 2 10:39:40 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* configure.in: Add AC_OUTPUT code to touch stamp-h when
|
||||
rebuilding config.h.
|
||||
* Makefile.in (stamp-h): Remove ``echo > stamp-h''.
|
||||
|
||||
* Makefile.in (dist): Fix for srcdir != objdir.
|
||||
* unix/Makefile.in (dist): Likewise.
|
||||
* uuconf/Makefile.in (dist): Likewise.
|
||||
* lib/Makefile.in (dist): Likewise.
|
||||
|
||||
Sat Jul 1 13:42:35 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* configure.in: Check for termios.h.
|
||||
* config.h.in (HAVE_TERMIOS_H): Mention.
|
||||
* policy.h: Set HAVE_POSIX_TERMIOS if HAVE_TERMIOS_H.
|
||||
|
||||
Fri Jun 30 09:24:13 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* uux.c (zXxqt_name): Remove.
|
||||
(fXxqtlocal): New static variable; replaces local fxqtlocal.
|
||||
(sXxqtsys): New static variable; replaces local sxqtsys.
|
||||
(zXxqtloc): New static variable; replaces local zxqtloc.
|
||||
(bXgrade): New static variable; replaces local bgrade.
|
||||
(abXxqt_tname): New static variable; replaces local abxqt_tname.
|
||||
(abXxqt_xname): New static variable; replaces local abxqt_xname.
|
||||
(main): Use new static variables instead of locals. Don't set
|
||||
zXxqt_name.
|
||||
(uxadd_xqt_line): Get file name here before opening file.
|
||||
(uxadd_send_file): Remove parameters qxqtsys, zxqtloc, and bgrade.
|
||||
Change all callers.
|
||||
|
||||
* unix/filnam.c (usput62): New static function.
|
||||
(zscmd_file): When SPOOLDIR_TAYLOR, use a different algorithm
|
||||
which does not read the sequence file.
|
||||
* unix/splcmd.c (zsysdep_spool_commands): Return value of
|
||||
zscmd_file might already exist; handle that case.
|
||||
* unix/jobid.c (zsfile_to_jobid): Change jobid format when
|
||||
SPOOLDIR_TAYLOR, since sequence number is now much longer.
|
||||
(zsjobid_to_file): Corresponding change.
|
||||
* unix/work.c (fswork_file): When SPOOLDIR_TAYLOR, don't require
|
||||
the the file name to be 7 characters long.
|
||||
(bsgrade): Change algorithm used when SPOOLDIR_TAYLOR.
|
||||
|
||||
* uustat.c (fsworkfile_show): Correct kill prompt to put program
|
||||
name at start of line. Add trailing space after question mark.
|
||||
(fsexecutions): Likewise.
|
||||
|
||||
* unix/work.c (fsysdep_get_work): Don't call fsysdep_get_work_init
|
||||
if no more jobs are found.
|
||||
|
||||
Thu Jun 29 15:27:31 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* fsusg.c: Update with changes from fileutils 3.12.
|
||||
* configure.in: Update filesystem space tests to fileutils 3.12.
|
||||
* config.h.in: Corresponding changes.
|
||||
|
||||
* unix/filnam.c (fscmd_seq): If F_SETLKW fails with ENOMEM,
|
||||
ENOSPC, or ENOLCK, sleep and try again.
|
||||
|
||||
* Makefile.in (MORECFLAGS): Remove unused SBINDIR definition.
|
||||
* unix/Makefile.in (run.o): Add dependency on Makefile and
|
||||
../Makefile, so that it is rebuilt if sbindir changes.
|
||||
* uuconf/Makefile.in (callin.o): Add dependency on Makefile and
|
||||
../Makefile, so that it is rebuilt if NEWCONFIGLIB or OLDCONFIGLIB
|
||||
change.
|
||||
(hinit.o, hrmunk.o, maxuxq.o, rdperm.o, tinit.o): Likewise.
|
||||
(vinit.o): Likewise.
|
||||
|
||||
* cu.c (main, ucuhelp): Update copyright.
|
||||
* tstuu.c (main): Likewise.
|
||||
* uuchk.c (main, ukhelp): Likewise.
|
||||
* uucico.c (main, uhelp): Likewise.
|
||||
* uuconv.c (main, uvhelp): Likewise.
|
||||
* uucp.c (main, uchelp): Likewise.
|
||||
* uulog.c (main, ulhelp): Likewise.
|
||||
* uuname.c (main, unhelp): Likewise.
|
||||
* uupick.c (main, uphelp): Likewise.
|
||||
* uustat.c (main, ushelp): Likewise.
|
||||
* uux.c (main, uxhelp): Likewise.
|
||||
* uuxqt.c (main, uqhelp): Likewise.
|
||||
|
||||
* Makefile.in (VERSION): Update to beta1.06.
|
||||
|
||||
Wed Jun 28 10:36:35 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* trans.c (struct scharge, sTsend, sTreceive): Remove.
|
||||
(qTtiming_rec, iTrecsecs, iTrecmicros): New static variables.
|
||||
(fqueue_receive): If adding something to an empty receive queue,
|
||||
update iTrecsecs and iTrecmicros.
|
||||
(utransfree): Remove references to sTsend and sTreceive. If
|
||||
freeing qTtiming_rec, clear it.
|
||||
(ftcharge): Remove. Remove all calls to it.
|
||||
(fttime): New static function.
|
||||
(uclear_queue): Clear qTtiming_rec.
|
||||
(floop): Add timing code to replace ftcharge.
|
||||
(fgot_data): Likewise.
|
||||
(ftadd_cmd): Set s.bcmd to 'H' for a hangup request, for better
|
||||
debugging information.
|
||||
(ufailed): Remove setting of iTchecktime and calls to ftcharge.
|
||||
|
||||
* uuconf.h (UUCONF_STRIP_LOGIN): Define.
|
||||
(UUCONF_STRIP_PROTO): Define.
|
||||
(uuconf_strip): Declare.
|
||||
* uuconf/strip.c: New file, definining uuconf_strip.
|
||||
* uuconf/Makefile.in (OBJS): Add strip.o.
|
||||
* uuconf/uucnfi.h (struct sprocess): Add new fields fstrip_login
|
||||
and fstrip_proto.
|
||||
* uuconf/iniglb.c (_uuconf_iinit_global): Initialize new fields.
|
||||
* uuconf/tinit.c (asCmds): Add "strip-login" and "strip-proto".
|
||||
* uucico.c (fdo_call): Check whether protocol commands should be
|
||||
stripped, and pass information to zget_uucp_cmd.
|
||||
(faccept_call): Likewise.
|
||||
(flogin_prompt): Check whether login commands should be stripped,
|
||||
and pass information to zget_typed_line.
|
||||
(zget_uucp_cmd): Add fstrip argument, and use it to control
|
||||
whether incoming characters are stripped.
|
||||
(zget_typed_line): Likewise.
|
||||
* uuchk.c (main): Report uuconf_strip information.
|
||||
|
||||
Mon Jun 26 17:57:14 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* uuchk.c (main): Report global configuration information.
|
||||
|
||||
* uux.c (main): If an attempt is made to execute an empty command,
|
||||
just create a poll file instead.
|
||||
|
||||
* uupick.c (main): Mention 'd' as a possible command.
|
||||
|
||||
Wed Jun 21 16:16:13 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* unix/filnam.c (fscmd_seq): If available, use POSIX style locking
|
||||
for the sequence file. Use IPRIVATE_FILE_MODE when creating the
|
||||
sequene file.
|
||||
|
||||
* copy.c (fcopy_file): Add fsignals argument, and pass it to
|
||||
fcopy_open_file. Update all callers.
|
||||
(fcopy_open_file): Add fsignals argument; if TRUE, check for
|
||||
signals while copying the file. Update all callers.
|
||||
* uudefs.h (fcopy_file, fcopy_open_file): Update prototypes.
|
||||
|
||||
Thu Jun 15 20:34:00 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* Rob Janssen: getopt.h: Don't fail if P is not defined because
|
||||
this file got included by something other than uucp.h.
|
||||
|
||||
Tue Jun 6 13:17:14 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* log.c (ulog): Always open the log file even if zmsg is NULL.
|
||||
* unix/detach.c (usysdep_detach): Call ulog with NULL before
|
||||
closing stderr.
|
||||
|
||||
* log.c (ulog): Print file name correctly under HDB_LOGGING if an
|
||||
error occurs.
|
||||
|
||||
* Andrey A. Chernov: uucp.h: Use off_t rather than long when
|
||||
casting arguments to lseek.
|
||||
|
||||
* proti.c (IMAXPACKSIZE): Subtract one.
|
||||
(fijstart): Correct iIforced_remote_packsize check.
|
||||
|
||||
* unix/filnam.c (zsfile_name): Only use remote system name in
|
||||
local filename for SPOOLDIR_SVR4, not for SPOOLDIR_HDB.
|
||||
|
||||
* Peter da Silva: cu.c (asCulongopts): Add "escape".
|
||||
(main): Handle -E/--escape.
|
||||
* cu.1: Document -E/--escape.
|
||||
* unix/cusub.c (fsysdep_cu): Don't treat \0 as an escape
|
||||
character.
|
||||
|
||||
* Takatoshi Ikeda: log.c (ustats): Base 'M' vs. 'S' in HDB_LOGGING
|
||||
on fcaller, not on fmaster.
|
||||
(zldate_and_time): In HDB_LOGGING, don't zero fill the hour.
|
||||
* uudefs.h (ustats): Change argument name in prototype.
|
||||
* send.c (fsend_await_confirm): Pass fcaller rather than fmaster
|
||||
to ustats.
|
||||
* rec.c (frec_file_end): Likewise.
|
||||
* trans.c (ufailed): Likewise.
|
||||
|
||||
* unix/tcp.c: Include <arpa/inet.h>.
|
||||
(ftcp_dial): If gethostbyname fails, try inet_addr.
|
||||
|
||||
* Jim Brownfield: unix/detach.c (usysdep_detach): Call TIOCNOTTY
|
||||
on /dev/tty, not on file descriptor 0.
|
||||
|
||||
* uuchk.c (ukshow): If the system will never be called, say so
|
||||
explicitly.
|
||||
|
||||
* unix/pause.c (usysdep_pause): When using poll, clear the sdummy
|
||||
structure before passing it down.
|
||||
|
||||
* unix/bytfre.c (csysdep_bytes_free): Check for overflow.
|
||||
|
||||
* C.A. Lademann: cu.c (asCulongopts): Add "nostop".
|
||||
(main): Handle --nostop.
|
||||
(ucuhelp): Mention --nostop.
|
||||
* cu.1: Document --nostop.
|
||||
|
||||
* Dean Edmonds: cu.c (fcuset_var): Copy string before calling
|
||||
uuconf_cmd_args, and handle UUCONF_CMDTABRET_KEEP correctly.
|
||||
|
||||
* Jorge Cwik: Add support for 'y' protocol.
|
||||
* proty.c: New file, written by Jorge Cwik.
|
||||
* prot.h: Declare 'y' protocol functions.
|
||||
* uucico.c (asProtocols): Add entry for 'y' protocol.
|
||||
* Makefile.in (UUOBJS): Add proty.o.
|
||||
(ALLOBJS): Add proty.o.
|
||||
(proty.o): New target.
|
||||
|
||||
Mon Jun 5 12:05:22 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* cu.c (main): Don't clobber user specified ibaud when a specific
|
||||
system is being called.
|
||||
|
||||
* unix/serial.c (fsysdep_stdin_init): chmod /dev/tty to 0600 to
|
||||
prevent other users from writing to it.
|
||||
|
||||
* uux.c (main): If the argument is quoted by parentheses, don't
|
||||
break it at shell separator characters.
|
||||
|
||||
* protg.c (fgprocess_data): Don't treat a duplicate RR as an RJ if
|
||||
we are retransmitting packets. Corrects change of May 15, 1993.
|
||||
|
||||
* unix/lock.c (fsdo_lock): Log an error message if the LOCKFILES
|
||||
define appears to not match the contents of the lock file.
|
||||
|
||||
Sun Jun 4 14:25:43 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* Makefile.in (uucp.info): Use explicit $(srcdir) rather than $<.
|
||||
(uucp.dvi): Likewise.
|
||||
(uucp.ps): Use uucp.dvi rather than $<.
|
||||
|
||||
* Scott Guthridge: cu.c (icutake): Skip \r characters unless
|
||||
fCuvar_binary is set.
|
||||
|
||||
* unix/status.c (fsysdep_get_status): Ignore double quotes around
|
||||
description string in status file.
|
||||
(fsysdep_set_status): If SPOOLDIR_SVR4, put double quotes around
|
||||
description string.
|
||||
|
||||
* uustat.c (fsxqt_file_read): Change second argument from file
|
||||
name to open file.
|
||||
(fsworkfile_show): Make sure execution file can be opened before
|
||||
displaying information in execution file format.
|
||||
(fsexecutions): Open file before passing it to fsxqt_file_read.
|
||||
|
||||
* uucp.h (ffileioerror): Rename from ffilereaderror.
|
||||
* cu.c (icuput): Corresponding change.
|
||||
* trans.c (floop): Likewise.
|
||||
(fgot_data): Use ffileioerror to decide whether to print message
|
||||
using errno.
|
||||
|
||||
* uuconv.c (uvwrite_taylor_port): Fix handling of dialer-sequence
|
||||
for a modem port to actually print ``dialer-sequence''.
|
||||
|
||||
* uuconf/hsinfo.c (_uuconf_ihdb_system_internal): Treat a syntax
|
||||
error in the time field as equivalent to ``never''.
|
||||
* uuconf/vsinfo.c (_uuconf_iv2_system_internal): Likewise.
|
||||
|
||||
* uuchk.c (ukshow): Print max-retries information.
|
||||
|
||||
* Don Phillips: Add support for new called-timegrade command.
|
||||
* uuconf.h (struct uuconf_system): Add uuconf_qcalledtimegrade
|
||||
field.
|
||||
* uuconf/tsinfo.c (asIcmds): Add "called-timegrade".
|
||||
* uuconf/syssub.c (SYSTEM_TIMESPANS): Add uuconf_qcalledtimegrade.
|
||||
* trans.c (fqueue): Check uuconf_qcalledtimegrade.
|
||||
* uuchk.c (ukshow): Print called-timegrade and success-wait
|
||||
information.
|
||||
* uuconv.c (uvwrite_taylor_system): Handled called-timegrade.
|
||||
|
||||
* unix/xqtsub.c (fsysdep_lock_uuxqt_dir): Accept EISDIR.
|
||||
|
||||
* Damon: unix/mkdirs.c (fsysdep_make_dirs): Accept EROFS.
|
||||
|
||||
Sat May 27 09:55:38 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* unix/detach.c (usysdep_detach): Mention routine name in
|
||||
debugging message.
|
||||
|
||||
* tstuu.c (main): Exit with an error message if not compiled with
|
||||
HAVE_TAYLOR_CONFIG.
|
||||
|
||||
* Jim Avera: Makefile.in (install-info): Get the info files from
|
||||
the source directory if they aren't in the object directory.
|
||||
|
||||
* uuchk.c (main): Accept -s to only print information for a
|
||||
specific system.
|
||||
(asKlongopts): Add --system as a synonym for -s.
|
||||
(ukusage): Mention -s.
|
||||
(ukhelp): Likewise.
|
||||
|
||||
* Makefile.in (uuconf/libuuconf.a): Depend upon config.h.
|
||||
(unix/libunix.a, lib/libuucp.a): Likewise.
|
||||
|
||||
* Matthias Urlichs and Olaf Kirch: If an execution fails, save the
|
||||
files.
|
||||
* sysh.unx (FAILEDDIR): Define.
|
||||
* system.h (zsysdep_save_failed_file): Declare.
|
||||
* uuxqt.c (uqdo_xqt_file): Call isave_files if an execution fails.
|
||||
Move the execution files out of the execution directory on any
|
||||
failure, not just a temporary one.
|
||||
(isave_files): New function; pass all the execution files to
|
||||
zsysdep_save_failed_file, and send mail to OWNER.
|
||||
* unix/failed.c: New file.
|
||||
* unix/Makefile.in (OBJS): Add failed.o.
|
||||
(failed.o): New target.
|
||||
|
||||
* Johannes Stille: Remove various race conditions, as follows:
|
||||
* rec.c (flocal_rec_send_request): Don't free qtrans if pfsendcmd
|
||||
fails.
|
||||
(fremote_send_reply): Likewise.
|
||||
(fremote_send_fail_send): Move pfsendcmd call to the end of the
|
||||
routine, after everything else has been done.
|
||||
(frec_file_send_confirm): Likewise.
|
||||
* send.c (struct ssendinfo): Add new fields fnever and zconfirm.
|
||||
(flocal_send_fail): Remove first argument; change all callers.
|
||||
(usfree_send): Free new zconfirm field.
|
||||
(flocal_send_file_init): Initialize new zconfirm field.
|
||||
(fremote_rec_file_init): Likewise.
|
||||
(flocal_send_request): Free qtrans explicitly, rather than
|
||||
expecting flocal_send_fail to do it.
|
||||
(flocal_send_request): Don't free qtrans if pfsendcmd fails.
|
||||
(flocal_send_await_reply): Use new fnever field rather than
|
||||
overloading fsent.
|
||||
(flocal_send_cancelled): Likewise.
|
||||
(flocal_send_await_reply): Set fcmd field to TRUE.
|
||||
(fremote_rec_reply): Set fcmd field to TRUE. Set qtrans->zlog
|
||||
before calling pfsendcmd. Don't free qtrans if pfsendcmd fails.
|
||||
(fremote_rec_fail_send): Move pfsendcmd call to the end of the
|
||||
routine, after everything else has been done.
|
||||
(fsend_file_end): If zconfirm is set, call fsend_await_confirm.
|
||||
Don't bother to set fcmd here.
|
||||
(fsend_await_confirm): If fsent is not set, just save command in
|
||||
zconfirm and return.
|
||||
(fsend_exec_file_init): Free and clear new zconfirm field.
|
||||
* xcmd.c (flocal_xcmd_request): Don't free qtrans if pfsendcmd
|
||||
fails.
|
||||
|
||||
* unix/pause.c: Prefer any of the other choices to nap, since the
|
||||
meaning of nap argument varies from system to system, and the user
|
||||
may not set HAVE_HUNDREDTHS_NAP correctly.
|
||||
|
||||
* unix/cusub.c (fsysdep_shell): When starting up an interactive
|
||||
shell, use the environment variable SHELL rather than /bin/sh.
|
||||
|
||||
Fri May 26 00:03:46 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* Chip Salzenberg: uulog.c (main): Set cluser, not clsys, when
|
||||
using HAVE_HDB_LOGGING.
|
||||
|
||||
* Robert Joop: uuconf/callin.c (uuconf_callin): Improve handling
|
||||
of Unix style passwd files.
|
||||
|
||||
* uupick.c (main): Don't fail if we can't get system information,
|
||||
since uupick is not setuid.
|
||||
|
||||
* Stephen Harris: uudefs.h (struct sstatus): Add new field
|
||||
zstring.
|
||||
* unix/status.c (fsysdep_get_status): Set zstring field.
|
||||
* uustat.c (fsquery_show): Print and free zstring field, if set,
|
||||
rather than indexing off type.
|
||||
(fsmachines): Likewise.
|
||||
* uucico.c (fcall): Free sstat.zstring.
|
||||
|
||||
* proti.c (cIwindow_timeout): New static variable.
|
||||
(fijstart): Initialize cIwindow_timeout based on the window size
|
||||
and connection speed. Increment both timeouts in callee.
|
||||
(fishutdown): Initialize cIwindow_timeout.
|
||||
(fiwindow_wait): Use cIwindow_timeout rather than cItimeout.
|
||||
|
||||
* unix/serial.c (fsysdep_conn_io): Try using select before doing a
|
||||
blocking write, and use an alarm if we fall back to the blocking
|
||||
write, to try to avoid deadlock when both systems fill the pipe.
|
||||
|
||||
* Trever Miller: unix/lock.c (fsdo_lock): Fix use of inid where
|
||||
inme was intended, in HAVE_QNX_LOCKFILES code.
|
||||
|
||||
* unix/lock.c (fsdo_lock): Treat an empty lock file as stale.
|
||||
|
||||
Thu May 25 11:46:32 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* Kenji Rikitake: unix/serial.c (fsserial_hardflow): Handle
|
||||
CRTS_IFLOW as used on BSDI.
|
||||
|
||||
* Gerriet M. Denkmann: uuconf/vsnams.c (uuconf_v2_system_names):
|
||||
Accept continuation lines in L.sys.
|
||||
* uuconf/vsinfo.c (_uuconf_iv2_system_internal): Skip comment
|
||||
lines in L.cmds. Ignore everything after comma in L.cmds lines.
|
||||
|
||||
* Gerriet M. Denkmann: unix/ftw.c (ftw_dir): Initialize newlev to
|
||||
avoid warning.
|
||||
|
||||
* Paul Pryor: unix/tli.c (ftli_open): Swap real and effective user
|
||||
ID's when running as a server, so that root can bind privileged
|
||||
ports.
|
||||
|
||||
* unix/tcp.c (ftcp_open): Call fsuser_perms and fsuucp_perms
|
||||
rather than having the same code inline.
|
||||
|
||||
* sysh.unx (fsuser_perms, fsuucp_perms): Declare.
|
||||
* unix/ufopen.c (fsuser_perms, fsuucp_perms): Move into uid.c.
|
||||
* unix/uid.c: New file.
|
||||
* unix/Makefile.in (OBJS): Add uid.o.
|
||||
(uid.o): New target.
|
||||
|
||||
* unix/tcp.c: Move tcp.c into unix subdirectory.
|
||||
* unix/tli.c: Likewise for tli.c.
|
||||
* Makefile.in (UUOBJS, CUOBJS, ALLOBJS): Remove tcp.o and tli.o.
|
||||
(tcp.o, tli.o): Remove.
|
||||
* unix/Makefile.in (OBJS): Add tcp.o and tli.o.
|
||||
(tcp.o, tli.o): New targets.
|
||||
|
||||
* Paul Pryor: configure.in: Check for -lnsl_s before -lnsl.
|
||||
|
||||
* Makefile.in (prefix): Use @prefix@, not /usr/local.
|
||||
(exec_prefix): New variable, set to @exec_prefix@.
|
||||
(sbindir, bindir): Use $(exec_prefix) rather than $(prefix).
|
||||
(CPPFLAGS): New variable, set to @CPPFLAGS@.
|
||||
(@SET_MAKE@): New macro used by autoconf 2.
|
||||
(MORECFLAGS): Put -I. before -I$(srcdir).
|
||||
(MDEFINES): Pass down CPPFLAGS.
|
||||
(.c.o): Use CPPFLAGS.
|
||||
(uuconv.o): Likewise.
|
||||
(distclean): Remove stamp-h, config.log and config.cache.
|
||||
(maintainer-clean): New synonym for realclean.
|
||||
(configure, config.h, stamp-h, Makefile, config.status): Rewrite
|
||||
as suggested by autoconf 2.3.
|
||||
(.PHONY): Add maintainer-clean.
|
||||
* lib/Makefile.in (CPPFLAGS): New variable, set to @CPPFLAGS@.
|
||||
(MORECFLAGS): Put `-I..' before `-I$(srcdir)/..'.
|
||||
(maintainer-clean): New synonym for realclean.
|
||||
(.c.o): Use CPPFLAGS.
|
||||
(Makefile): Just rebuild this Makefile, not the others.
|
||||
(.PHONY): Add maintainer-clean.
|
||||
* unix/Makefile.in (CPPFLAGS): New variable, set to @CPPFLAGS@.
|
||||
(prefix): Removed.
|
||||
(sbindir): Use @exec_prefix@ rather than $(prefix).
|
||||
(MORECFLAGS): Put `-I..' before `-I$(srcdir)/..'.
|
||||
(maintainer-clean): New synonym for realclean.
|
||||
(.c.o): Use CPPFLAGS.
|
||||
(Makefile): Just rebuild this Makefile, not the others.
|
||||
(.PHONY): Add maintainer-clean.
|
||||
* uuconf/Makefile.in (prefix): Set to @prefix@, not /usr/local.
|
||||
(CPPFLAGS): New variable, set to @CPPFLAGS@.
|
||||
(MORECFLAGS): Put `-I.' before `-I$(srcdir)' and `-I..' before
|
||||
`-I$(srcdir)/..'.
|
||||
(maintainer-clean): New synonym for realclean.
|
||||
(.c.o): Use CPPFLAGS.
|
||||
(Makefile): Just rebuild this Makefile, not the others.
|
||||
(.PHONY): Add maintainer-clean.
|
||||
|
||||
* configure.in: Extensive changes for autoconf 2.3.
|
||||
* configure: Regenerate using autoconf 2.3.
|
||||
* install-sh: New file.
|
||||
|
||||
Mon May 22 22:18:59 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* Mister Flash: chat.c (fcsend): Don't get forget to add 10 in \x.
|
||||
|
||||
Tue Jan 17 22:49:05 1995 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* unix/mkdirs.c (fsysdep_make_dirs): Don't get confused by a
|
||||
double slash.
|
||||
|
||||
Wed Aug 10 09:25:10 1994 Ian Lance Taylor (ian@airs.com)
|
||||
|
||||
* uuconf/hport.c (uuconf_hdb_find_port): Set iret to
|
||||
UUCONF_SUCCESS when a port is found.
|
||||
|
||||
Tue Aug 2 08:57:05 1994 Ian Lance Taylor (ian@airs.com)
|
||||
|
||||
* trans.c (ftadd_cmd): Report a 'P' (poll) command as garbled.
|
||||
|
||||
Wed Jul 20 21:53:03 1994 Ian Lance Taylor (ian@airs.com)
|
||||
|
||||
* rec.c (flocal_rec_file_init): Set name of local system after
|
||||
calling uuconf_system_local.
|
||||
* uustat.c (fsexecutions): Likewise.
|
||||
|
||||
Sat Jul 16 16:54:12 1994 Ian Lance Taylor (ian@airs.com)
|
||||
|
||||
* log.c (ulog): Use strerror in message about being unable to open
|
||||
the log file.
|
||||
|
||||
Wed Jul 13 00:44:33 1994 Ian Lance Taylor (ian@airs.com)
|
||||
|
||||
* rec.c (fremote_send_reply): Set qinfo->freplied before sending
|
||||
the command.
|
||||
|
||||
Sun Jul 10 23:25:23 1994 Ian Lance Taylor (ian@airs.com)
|
||||
|
||||
* Tin Le: lib/debug.c (udebug_buffer): Only compile if DEBUG > 1.
|
||||
|
||||
Mon Jun 27 21:06:29 1994 Ian Lance Taylor (ian@airs.com)
|
||||
|
||||
* uuconf.h (UUCONF_CMDTABFLAG_NOCOMMENTS): Define.
|
||||
* uuconf/cmdlin.c (uuconf_cmd_line): Handle NOCOMMENTS.
|
||||
* uuxqt.c (uqdo_xqt_file): Pass NOCOMMENTS to uuconf_cmd_file.
|
||||
|
||||
Thu May 19 22:50:37 1994 Ian Lance Taylor (ian@airs.com)
|
||||
|
||||
* Ollivier Robert: unix/mkdirs.c: Permit EISDIR.
|
||||
|
||||
Wed May 18 23:15:36 1994 Ian Lance Taylor (ian@airs.com)
|
||||
|
||||
* uucico.c (fcall): Reset sDaemon fields each time through the
|
||||
loop, not just once.
|
||||
|
||||
Thu May 5 23:15:11 1994 Ian Lance Taylor (ian@airs.com)
|
||||
|
||||
* Released version 1.05.
|
||||
|
@ -16,7 +16,7 @@ LIBUUCP= $(.CURDIR)/../libuucp/obj/libuucp.a
|
||||
LIBUUCP= $(.CURDIR)/../libuucp/libuucp.a
|
||||
.endif
|
||||
|
||||
VERSION= 1.05
|
||||
VERSION= 1.06
|
||||
owner= uucp
|
||||
group= uucp
|
||||
bindir= /usr/bin
|
||||
|
@ -1,3 +1,38 @@
|
||||
Changes in version 1.06:
|
||||
|
||||
As usual, many bugs were fixed.
|
||||
|
||||
Support was added for the 'y' protocol, contributed by Jorge Cwik,
|
||||
the designer of the protocol.
|
||||
|
||||
The name of command files was changed when using SPOOLDIR_TAYLOR;
|
||||
they now use a much longer sequence number. This affects the
|
||||
jobid strings reported by uustat. The change makes uux and uucp
|
||||
more efficient.
|
||||
|
||||
Added ``called-timegrade'' command to sys file.
|
||||
|
||||
Added --nostop and -E/--escape options to cu.
|
||||
|
||||
Added -s option to uuchk.
|
||||
|
||||
Added ``strip-login'' and ``strip-proto'' commands to config file.
|
||||
|
||||
uux will now create a poll file if invoked as ``uux SYSTEM!''.
|
||||
|
||||
If an execution fails, the data file is saved, if there is enough
|
||||
free disk space.
|
||||
|
||||
uux now uses POSIX file locking, if available, when locking the
|
||||
sequence file.
|
||||
|
||||
The man pages were incorporated into the Texinfo manual.
|
||||
|
||||
The UUCP Internals FAQ was incorporated into the Texinfo manual.
|
||||
|
||||
The spool directory layout is now documented in the Texinfo
|
||||
manual.
|
||||
|
||||
Changes in version 1.05:
|
||||
|
||||
As usual, many bugs were fixed.
|
||||
|
@ -1,25 +1,27 @@
|
||||
This is the README file for version 1.05 of the Taylor UUCP package.
|
||||
This is the README file for version 1.06 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,
|
||||
Building 200, 1 Kendall Square, Cambridge MA, 02139, USA.
|
||||
48 Grove Street, Somerville, MA 02144, 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.
|
||||
Mail to this address is answered by a person, not a program. When
|
||||
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.
|
||||
There is a mailing list for discussion of the package. The list is
|
||||
hosted by Eric Schnoebelen at cirr.com. To join (or get off) the
|
||||
list, send mail to taylor-uucp-request@cirr.com. Mail to this address
|
||||
is answered by the majordomo program. To join the list, send the
|
||||
message ``subscribe ADDRESS'' where ADDRESS is your e-mail address.
|
||||
To send a message to the list, send it to taylor-uucp@cirr.com. The
|
||||
old list address, taylor-uucp@gnu.ai.mit.edu, will also work. There
|
||||
is an archive of all messages sent to the mailing list at ftp.cirr.com.
|
||||
|
||||
This package is covered by the Gnu Public License. See the file
|
||||
COPYING for details. If you would like to do something with this
|
||||
package that you feel is reasonable but you feel is prohibited by the
|
||||
license, contact me to see if we can work it out.
|
||||
|
||||
The most recent version may be obtained from any Gnu archive site.
|
||||
The canonical site is prep.ai.mit.edu. There are many mirror sites,
|
||||
including ftp.uu.net and wuarchive.wustl.edu.
|
||||
|
||||
WHAT IT IS
|
||||
|
||||
This is the complete source code for a Unix UUCP package. It provides
|
||||
@ -32,11 +34,11 @@ file to another) and tstuu (a test harness for the 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
|
||||
new bidirectional protocols. If you have a Berkeley sockets library,
|
||||
it can make TCP connections. If you have TLI libraries, it can make
|
||||
TLI connections. It supports a new configuration file mechanism which
|
||||
I like (but other people dislike).
|
||||
sizes), 'G', 't' and 'e' protocols, as well a Zmodem protocol, the FX
|
||||
UUCICO 'y' protocol, and two new bidirectional protocols. If you have
|
||||
a Berkeley sockets library, it can make TCP connections. If you have
|
||||
TLI libraries, it can make TLI connections. It supports a new
|
||||
configuration file mechanism which I like (but other people dislike).
|
||||
|
||||
The package has a few advantages over regular UUCP:
|
||||
|
||||
@ -86,7 +88,7 @@ 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.05.tar.gz.
|
||||
are available in a separate package, uucp-doc-1.06.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
|
||||
@ -105,7 +107,6 @@ The compilation instructions are in uucp.texi. Here is a summary.
|
||||
LDFLAGS: Flags to pass to $CC when only linking; default none
|
||||
LIBS: Library arguments to pass to $CC; default none
|
||||
INSTALL: Install program; default install -c or cp
|
||||
INSTALLDATA: Install data; default install -c -m 0644 or cp
|
||||
The configure script will compile a number of test programs to see
|
||||
what is available on your system, so if your system is at all
|
||||
unusual you will need to pass in $CC and $LIBS correctly.
|
||||
@ -135,7 +136,8 @@ The compilation instructions are in uucp.texi. Here is a summary.
|
||||
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).
|
||||
patch available from BSDI for this bug. (Reported by 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
|
||||
@ -145,7 +147,7 @@ The compilation instructions are in uucp.texi. Here is a summary.
|
||||
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).
|
||||
"cc" stanza in /etc/xlc.cfg. (Reported by Chris Lewis).
|
||||
|
||||
Examine config.h and Makefile to make sure they're right.
|
||||
|
||||
@ -160,3 +162,12 @@ The compilation instructions are in uucp.texi. Here is a summary.
|
||||
programs are compiled with debugging information, and they are not
|
||||
stripped when they are installed. Read the man page for strip for
|
||||
more information.
|
||||
|
||||
On older System V based systems which do not have the setreuid
|
||||
system call, problems may arise if ordinary users can start an
|
||||
execution of uuxqt, perhaps indirectly via uucp or uux. UUCP jobs
|
||||
may wind up executing with a real user ID of the user who invoked
|
||||
uuxqt, which can cause problems if the UUCP job checks the real
|
||||
user ID for security purposes. On such systems, it is safest to
|
||||
put ``run-uuxqt never'' in the `config' file, so that uucico never
|
||||
starts uuxqt, and invoke uuxqt directly from cron.
|
||||
|
@ -387,11 +387,6 @@ fancy.
|
||||
Nickolay Saukh: use a default port for cu, you can just do ``cu
|
||||
number''.
|
||||
|
||||
178.
|
||||
|
||||
Don Phillips: should there be some way to restrict of grade of
|
||||
transfers even when the other system places the call?
|
||||
|
||||
180.
|
||||
|
||||
Nickolay Saukh: if we have received a partial file, request the remote
|
||||
@ -740,3 +735,43 @@ parameters, but it would be nice if this were dealt with somehow.
|
||||
Andrew A. Chernov: Perhaps uuxqt should log when it terminates.
|
||||
|
||||
237.
|
||||
|
||||
dialer-sequence doesn't really do the right thing. There is no way to
|
||||
specify both the TCP address and a phone number.
|
||||
|
||||
238.
|
||||
|
||||
cu -t doesn't work at all. It does nothing.
|
||||
|
||||
239.
|
||||
|
||||
Paul Pryor: Perhaps a service command should be added to the sys and
|
||||
port files. This command would be used as ``service cu'' to indicate
|
||||
that the system or port was only available to cu, not to UUCP.
|
||||
|
||||
240.
|
||||
|
||||
Tim Iverson: The 'g' and 'i' protocol code tends to parse data packet
|
||||
headers twice. It processes them once to find out how large the
|
||||
packet is, waits for that data to arrive, and then processes the
|
||||
header again the second time around. It would be possible to avoid
|
||||
this by changing the code to be a simple state machine which
|
||||
remembered where it was in the process of parsing the packet.
|
||||
|
||||
241.
|
||||
|
||||
Klaus Dahlenburg: Log a more precise reason for failure in the .Status
|
||||
file: e.g., all ports in use, no matching ports, etc.
|
||||
|
||||
242.
|
||||
|
||||
Steven S. Dick: It would be helpful if there was a way to get uuchk to
|
||||
dump the data from ports/dialers/etc that was NOT picked up from the
|
||||
sys file. In other words, add some option to scan the port file and
|
||||
the dial file, presumably using uuconf_find_port for the former and
|
||||
uuconf_dialer_names for the latter.
|
||||
|
||||
243.
|
||||
|
||||
Kai Michael Kretschmann: Add a configure option to drop the connection
|
||||
if jobs are coming in too slowly, indicating a bad connection.
|
||||
|
@ -1,4 +1,4 @@
|
||||
Version 1.05
|
||||
Version 1.06
|
||||
|
||||
a complete, unmodified version of this program is available from
|
||||
prep.ai.mit.edu.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* chat.c
|
||||
Chat routine for the UUCP package.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char chat_rcsid[] = "$Id: chat.c,v 1.2 1994/05/07 18:08:33 ache Exp $";
|
||||
const char chat_rcsid[] = "$Id: chat.c,v 1.46 1995/06/21 19:14:29 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
@ -728,9 +728,9 @@ fcsend (qconn, puuconf, z, qsys, qdial, zphone, ftranslate, fstrip)
|
||||
if (isdigit (BUCHAR (z[1])))
|
||||
bsend = (char) (16 * bsend + *++z - '0');
|
||||
else if (isupper (BUCHAR (z[1])))
|
||||
bsend = (char) (16 * bsend + *++z - 'A');
|
||||
bsend = (char) (16 * bsend + *++z - 'A' + 10);
|
||||
else
|
||||
bsend = (char) (16 * bsend + *++z - 'a');
|
||||
bsend = (char) (16 * bsend + *++z - 'a' + 10);
|
||||
}
|
||||
break;
|
||||
case 'L':
|
||||
@ -926,7 +926,7 @@ fcsend (qconn, puuconf, z, qsys, qdial, zphone, ftranslate, fstrip)
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
if (fsend)
|
||||
{
|
||||
fquote = fcsend_debug (fquote, (size_t) 1, &bsend);
|
||||
@ -1190,7 +1190,7 @@ fcprogram (qconn, puuconf, pzprogram, qsys, qdial, zphone, zport, ibaud)
|
||||
*pzarg = zbufcpy (*pz);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
*pzarg = NULL;
|
||||
zto = NULL;
|
||||
calc = 0;
|
||||
|
@ -28,6 +28,7 @@
|
||||
#define HAVE_SYS_IOCTL_H 1 /* <sys/ioctl.h> */
|
||||
#define HAVE_DIRENT_H 1 /* <dirent.h> */
|
||||
#define HAVE_MEMORY_H 1 /* <memory.h> */
|
||||
#define HAVE_TERMIOS_H 1 /* <termios.h> */
|
||||
#define HAVE_SYS_PARAM_H 1 /* <sys/param.h> */
|
||||
#define HAVE_UTIME_H 1 /* <utime.h> */
|
||||
#define HAVE_FCNTL_H 1 /* <fcntl.h> */
|
||||
@ -45,6 +46,14 @@
|
||||
#define HAVE_GLOB_H 1 /* <glob.h> */
|
||||
#define HAVE_SYS_SELECT_H 0 /* <sys/select.h> */
|
||||
#define HAVE_SYS_TYPES_TCP_H 0 /* <sys/types.tcp.h> */
|
||||
#define HAVE_SYS_MOUNT_H 1 /* <sys/mount.h> */
|
||||
#define HAVE_SYS_VFS_H 0 /* <sys/vfs.h> */
|
||||
#define HAVE_SYS_FILSYS_H 0 /* <sys/filsys.h> */
|
||||
#define HAVE_SYS_STATFS_H 0 /* <sys/statfs.h> */
|
||||
#define HAVE_SYS_DUSTAT_H 0 /* <sys/dustat.h> */
|
||||
#define HAVE_SYS_FS_TYPES_H 0 /* <sys/fs_types.h> */
|
||||
#define HAVE_USTAT_H 0 /* <ustat.h> */
|
||||
#define HAVE_SYS_STATVFS_H 0 /* <sys/statvfs.h> */
|
||||
|
||||
/* If major and minor are not defined in <sys/types.h>, but are in
|
||||
<sys/mkdev.h>, set MAJOR_IN_MKDEV to 1. If they are in
|
||||
@ -177,19 +186,19 @@
|
||||
another instance of Taylor UUCP.
|
||||
|
||||
STAT_STATVFS statvfs function
|
||||
STAT_STATFS3_OSF1 three argument statfs function (OSF/1)
|
||||
STAT_STATFS2_BSIZE two argument statfs function with f_bsize field
|
||||
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_STATFS3_OSF1 0
|
||||
#define STAT_STATFS2_BSIZE 1
|
||||
#define STAT_STATFS2_FSIZE 0
|
||||
#define STAT_STATFS2_FS_DATA 0
|
||||
#define STAT_STATFS4 0
|
||||
#define STAT_DUSTAT 0
|
||||
#define STAT_DISK_SPACE 0
|
||||
#define STAT_USTAT 0
|
||||
|
||||
@ -358,7 +367,7 @@
|
||||
Otherwise, the code will use OPEN_MAX if defined, then NOFILE if
|
||||
defined, then 20. */
|
||||
#define HAVE_GETDTABLESIZE 1
|
||||
#define HAVE_SYSCONF 0
|
||||
#define HAVE_SYSCONF 1
|
||||
|
||||
/* The code will use one of the following functions when detaching
|
||||
from a terminal. One of these must exist. */
|
||||
|
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char conn_rcsid[] = "$Id: conn.c,v 1.2 1994/05/07 18:08:38 ache Exp $";
|
||||
const char conn_rcsid[] = "$Id: conn.c,v 1.15 1995/06/21 19:14:35 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
@ -234,7 +234,7 @@ fconn_dial (qconn, puuconf, qsys, zphone, qdialer, ptdialerfound)
|
||||
qdialer = &sdialer;
|
||||
if (ptdialerfound == NULL)
|
||||
ptdialerfound = &tfound;
|
||||
|
||||
|
||||
qdialer->uuconf_zname = NULL;
|
||||
*ptdialerfound = DIALERFOUND_FALSE;
|
||||
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#ifndef CONN_H
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* copy.c
|
||||
Copy one file to another for the UUCP package.
|
||||
|
||||
Copyright (C) 1991, 1992 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char copy_rcsid[] = "$Id: copy.c,v 1.13 1994/01/30 21:01:46 ian Rel $";
|
||||
const char copy_rcsid[] = "$Id: copy.c,v 1.18 1995/08/02 01:17:31 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "uudefs.h"
|
||||
@ -41,11 +41,12 @@ const char copy_rcsid[] = "$Id: copy.c,v 1.13 1994/01/30 21:01:46 ian Rel $";
|
||||
#if USE_STDIO
|
||||
|
||||
boolean
|
||||
fcopy_file (zfrom, zto, fpublic, fmkdirs)
|
||||
fcopy_file (zfrom, zto, fpublic, fmkdirs, fsignals)
|
||||
const char *zfrom;
|
||||
const char *zto;
|
||||
boolean fpublic;
|
||||
boolean fmkdirs;
|
||||
boolean fsignals;
|
||||
{
|
||||
FILE *efrom;
|
||||
boolean fret;
|
||||
@ -57,17 +58,18 @@ fcopy_file (zfrom, zto, fpublic, fmkdirs)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
fret = fcopy_open_file (efrom, zto, fpublic, fmkdirs);
|
||||
fret = fcopy_open_file (efrom, zto, fpublic, fmkdirs, fsignals);
|
||||
(void) fclose (efrom);
|
||||
return fret;
|
||||
}
|
||||
|
||||
boolean
|
||||
fcopy_open_file (efrom, zto, fpublic, fmkdirs)
|
||||
fcopy_open_file (efrom, zto, fpublic, fmkdirs, fsignals)
|
||||
FILE *efrom;
|
||||
const char *zto;
|
||||
boolean fpublic;
|
||||
boolean fmkdirs;
|
||||
boolean fsignals;
|
||||
{
|
||||
FILE *eto;
|
||||
char ab[8192];
|
||||
@ -86,6 +88,21 @@ fcopy_open_file (efrom, zto, fpublic, fmkdirs)
|
||||
(void) remove (zto);
|
||||
return FALSE;
|
||||
}
|
||||
if (fsignals && FGOT_SIGNAL ())
|
||||
{
|
||||
/* Log the signal. */
|
||||
ulog (LOG_ERROR, (const char *) NULL);
|
||||
(void) fclose (eto);
|
||||
(void) remove (zto);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (! fsysdep_sync (eto, zto))
|
||||
{
|
||||
(void) fclose (eto);
|
||||
(void) remove (zto);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (fclose (eto) != 0)
|
||||
@ -119,11 +136,12 @@ fcopy_open_file (efrom, zto, fpublic, fmkdirs)
|
||||
#endif
|
||||
|
||||
boolean
|
||||
fcopy_file (zfrom, zto, fpublic, fmkdirs)
|
||||
fcopy_file (zfrom, zto, fpublic, fmkdirs, fsignals)
|
||||
const char *zfrom;
|
||||
const char *zto;
|
||||
boolean fpublic;
|
||||
boolean fmkdirs;
|
||||
boolean fsignals;
|
||||
{
|
||||
int ofrom;
|
||||
boolean fret;
|
||||
@ -135,17 +153,18 @@ fcopy_file (zfrom, zto, fpublic, fmkdirs)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
fret = fcopy_open_file (ofrom, zto, fpublic, fmkdirs);
|
||||
fret = fcopy_open_file (ofrom, zto, fpublic, fmkdirs, fsignals);
|
||||
(void) close (ofrom);
|
||||
return fret;
|
||||
}
|
||||
|
||||
boolean
|
||||
fcopy_open_file (ofrom, zto, fpublic, fmkdirs)
|
||||
fcopy_open_file (ofrom, zto, fpublic, fmkdirs, fsignals)
|
||||
int ofrom;
|
||||
const char *zto;
|
||||
boolean fpublic;
|
||||
boolean fmkdirs;
|
||||
boolean fsignals;
|
||||
{
|
||||
int oto;
|
||||
char ab[8192];
|
||||
@ -180,6 +199,21 @@ fcopy_open_file (ofrom, zto, fpublic, fmkdirs)
|
||||
(void) remove (zto);
|
||||
return FALSE;
|
||||
}
|
||||
if (fsignals && FGOT_SIGNAL ())
|
||||
{
|
||||
/* Log the signal. */
|
||||
ulog (LOG_ERROR, (const char *) NULL);
|
||||
(void) fclose (eto);
|
||||
(void) remove (zto);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (! fsysdep_sync (oto, zto))
|
||||
{
|
||||
(void) close (oto);
|
||||
(void) remove (zto);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (close (oto) < 0)
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
/* The user settable variables supported by cu. */
|
||||
|
@ -5,18 +5,18 @@
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
This file was modified slightly by Ian Lance Taylor, November 1992,
|
||||
for Taylor UUCP. */
|
||||
for Taylor UUCP, and again in June, 1995. */
|
||||
|
||||
#ifndef _GETOPT_H
|
||||
#define _GETOPT_H 1
|
||||
@ -100,6 +100,14 @@ enum _argtype
|
||||
optional_argument
|
||||
};
|
||||
|
||||
#ifndef P
|
||||
/* On some systems, <stdio.h> includes getopt.h before P is defined by
|
||||
uucp.h, and the -I arguments cause this version of getopt.h to be
|
||||
included. Work around that here. */
|
||||
#define P(x) ()
|
||||
#define UNDEFINE_P
|
||||
#endif
|
||||
|
||||
extern int getopt P((int argc, char *const *argv, const char *shortopts));
|
||||
extern int getopt_long P((int argc, char *const *argv, const char *shortopts,
|
||||
const struct option *longopts, int *longind));
|
||||
@ -113,6 +121,11 @@ extern int _getopt_internal P((int argc, char *const *argv,
|
||||
const struct option *longopts, int *longind,
|
||||
int long_only));
|
||||
|
||||
#ifdef UNDEFINE_P
|
||||
#undef P
|
||||
#undef UNDEFINE_P
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* log.c
|
||||
Routines to add entries to the log files.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1994, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char log_rcsid[] = "$Id: log.c,v 1.2 1994/05/07 18:08:47 ache Exp $";
|
||||
const char log_rcsid[] = "$Id: log.c,v 1.61 1995/06/21 19:14:58 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
@ -199,7 +199,7 @@ ulog_system (zsystem)
|
||||
{
|
||||
ubuffree (zLsystem);
|
||||
zLsystem = zbufcpy (zsystem);
|
||||
#if HAVE_HDB_LOGGING
|
||||
#if HAVE_HDB_LOGGING
|
||||
/* Under HDB logging we now must write to a different log file. */
|
||||
ulog_close ();
|
||||
#endif /* HAVE_HDB_LOGGING */
|
||||
@ -287,9 +287,6 @@ ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j)
|
||||
}
|
||||
}
|
||||
|
||||
if (zmsg == NULL)
|
||||
return;
|
||||
|
||||
#if DEBUG > 1
|
||||
/* If we've had a debugging file open in the past, then we want to
|
||||
write all log file entries to the debugging file even if it's
|
||||
@ -321,9 +318,12 @@ ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j)
|
||||
{
|
||||
if (eLlog == NULL && ! fLlog_tried)
|
||||
{
|
||||
const char *zprint = NULL;
|
||||
|
||||
fLlog_tried = TRUE;
|
||||
#if ! HAVE_HDB_LOGGING
|
||||
eLlog = esysdep_fopen (zLogfile, TRUE, TRUE, TRUE);
|
||||
zprint = zLogfile;
|
||||
#else /* HAVE_HDB_LOGGING */
|
||||
{
|
||||
const char *zsys;
|
||||
@ -331,7 +331,7 @@ ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j)
|
||||
char *zlower;
|
||||
char *zfile;
|
||||
|
||||
/* We want to write to .Log/program/system, e.g.
|
||||
/* We want to write to .Log/program/system, e.g.
|
||||
.Log/uucico/uunet. The system name may not be set. */
|
||||
if (zLsystem == NULL)
|
||||
zsys = "ANY";
|
||||
@ -356,7 +356,10 @@ ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j)
|
||||
sprintf (zfile, zLogfile, zbase, zsys);
|
||||
ubuffree (zbase);
|
||||
eLlog = esysdep_fopen (zfile, TRUE, TRUE, TRUE);
|
||||
ubuffree (zfile);
|
||||
if (eLlog != NULL)
|
||||
ubuffree (zfile);
|
||||
else
|
||||
zprint = zfile;
|
||||
}
|
||||
#endif /* HAVE_HDB_LOGGING */
|
||||
|
||||
@ -367,8 +370,8 @@ ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j)
|
||||
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);
|
||||
fprintf (stderr, "%s: %s: can not open log file: %s\n",
|
||||
zProgram, zprint, strerror (errno));
|
||||
if (pfLfatal != NULL)
|
||||
(*pfLfatal) ();
|
||||
usysdep_exit (FALSE);
|
||||
@ -383,6 +386,9 @@ ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j)
|
||||
return;
|
||||
}
|
||||
|
||||
if (zmsg == NULL)
|
||||
return;
|
||||
|
||||
if (pfLstart != NULL)
|
||||
(*pfLstart) ();
|
||||
|
||||
@ -610,7 +616,7 @@ ulog_close ()
|
||||
|
||||
/*ARGSUSED*/
|
||||
void
|
||||
ustats (fsucceeded, zuser, zsystem, fsent, cbytes, csecs, cmicros, fmaster)
|
||||
ustats (fsucceeded, zuser, zsystem, fsent, cbytes, csecs, cmicros, fcaller)
|
||||
boolean fsucceeded;
|
||||
const char *zuser;
|
||||
const char *zsystem;
|
||||
@ -618,7 +624,7 @@ ustats (fsucceeded, zuser, zsystem, fsent, cbytes, csecs, cmicros, fmaster)
|
||||
long cbytes;
|
||||
long csecs;
|
||||
long cmicros;
|
||||
boolean fmaster;
|
||||
boolean fcaller;
|
||||
{
|
||||
long cbps;
|
||||
|
||||
@ -633,7 +639,7 @@ ustats (fsucceeded, zuser, zsystem, fsent, cbytes, csecs, cmicros, fmaster)
|
||||
{
|
||||
csecs += cmicros / 10000000L;
|
||||
cmicros = cmicros % 1000000L;
|
||||
}
|
||||
}
|
||||
|
||||
/* On a system which can determine microseconds we might very well
|
||||
have both csecs == 0 and cmicros == 0. */
|
||||
@ -701,7 +707,7 @@ ustats (fsucceeded, zuser, zsystem, fsent, cbytes, csecs, cmicros, fmaster)
|
||||
++iseq;
|
||||
fprintf (eLstats,
|
||||
"%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 (),
|
||||
zsystem, zuser, fcaller ? 'M' : 'S', zldate_and_time (),
|
||||
iLid, iseq, zLdevice == NULL ? "unknown" : zLdevice,
|
||||
fsent ? "->" : "<-",
|
||||
cbytes, csecs, cmicros / 1000, cbps,
|
||||
@ -761,7 +767,7 @@ zldate_and_time ()
|
||||
s.tm_hour, s.tm_min);
|
||||
#endif
|
||||
#if HAVE_HDB_LOGGING
|
||||
sprintf (ab, "%d/%d-%02d:%02d:%02d", s.tm_mon + 1, s.tm_mday,
|
||||
sprintf (ab, "%d/%d-%d:%02d:%02d", s.tm_mon + 1, s.tm_mday,
|
||||
s.tm_hour, s.tm_min, s.tm_sec);
|
||||
#endif
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* policy.h
|
||||
Configuration file for policy decisions. To be edited on site.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1994, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
/* This header file contains macro definitions which must be set by
|
||||
@ -72,10 +72,10 @@
|
||||
figure out what's happening if something goes wrong. */
|
||||
|
||||
#if HAVE_BSD_TTY + HAVE_SYSV_TERMIO + HAVE_POSIX_TERMIOS == 0
|
||||
#ifdef __QNX__
|
||||
#if HAVE_TERMIOS_H
|
||||
#undef HAVE_POSIX_TERMIOS
|
||||
#define HAVE_POSIX_TERMIOS 1
|
||||
#else /* ! defined (__QNX__) */
|
||||
#else /* ! HAVE_TERMIOS_H */
|
||||
#if HAVE_CBREAK
|
||||
#undef HAVE_BSD_TTY
|
||||
#define HAVE_BSD_TTY 1
|
||||
@ -83,7 +83,7 @@
|
||||
#undef HAVE_SYSV_TERMIO
|
||||
#define HAVE_SYSV_TERMIO 1
|
||||
#endif /* ! HAVE_CBREAK */
|
||||
#endif /* ! defined (__QNX__) */
|
||||
#endif /* ! HAVE_TERMIOS_H */
|
||||
#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
|
||||
@ -215,6 +215,12 @@
|
||||
broken pretty much always have saved setuid. */
|
||||
#define HAVE_BROKEN_SETREUID 0
|
||||
|
||||
/* On a few systems, such as NextStep 3.3, the POSIX macro F_SETLKW is
|
||||
defined, but does not work. On such systems, you must set
|
||||
HAVE_BROKEN_SETLKW to 1. If you do not, uux will hang, or log
|
||||
peculiar error messages, every time it is run. */
|
||||
#define HAVE_BROKEN_SETLKW 0
|
||||
|
||||
/* On the 3B2, and possibly other systems, nap takes an argument in
|
||||
hundredths of a second rather than milliseconds. I don't know of
|
||||
any way to test for this. Set HAVE_HUNDREDTHS_NAP to 1 if this is
|
||||
@ -623,6 +629,15 @@
|
||||
permitted. */
|
||||
#define ALLOW_FILENAME_ARGUMENTS 1
|
||||
|
||||
/* If you set FSYNC_ON_CLOSE to 1, all output files will be forced out
|
||||
to disk using the fsync system call when they are closed. This can
|
||||
be useful if you can not afford to lose people's mail if the system
|
||||
crashes. However, not all systems have the fsync call, and it is
|
||||
always less efficient to use it. Note that some versions of SCO
|
||||
Unix, and possibly other systems, make fsync a synonym for sync,
|
||||
which is extremely inefficient. */
|
||||
#define FSYNC_ON_CLOSE 0
|
||||
|
||||
#if HAVE_TAYLOR_LOGGING
|
||||
|
||||
/* The default log file when using HAVE_TAYLOR_LOGGING. When using
|
||||
|
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char prot_rcsid[] = "$Id: prot.c,v 1.30 1994/04/14 03:07:56 ian Rel $";
|
||||
const char prot_rcsid[] = "$Id: prot.c,v 1.32 1995/06/21 19:15:07 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* prot.h
|
||||
Protocol header file.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1994, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
/* We need the definition of uuconf_cmdtab to declare the protocol
|
||||
@ -234,11 +234,13 @@ extern boolean fiwait P((struct sdaemon *qdaemon));
|
||||
/* Prototypes for 'j' protocol functions. The 'j' protocol mostly
|
||||
uses the 'i' protocol functions, but it has a couple of functions
|
||||
of its own. */
|
||||
|
||||
extern boolean fjstart P((struct sdaemon *qdaemon, char **pzlog));
|
||||
extern boolean fjshutdown P((struct sdaemon *qdaemon));
|
||||
|
||||
/* Prototypes for 'a' protocol functions (these use 'z' as the second
|
||||
character because 'a' is a modified Zmodem protocol). */
|
||||
|
||||
extern struct uuconf_cmdtab asZproto_params[];
|
||||
extern boolean fzstart P((struct sdaemon *qdaemon, char **pzlog));
|
||||
extern boolean fzshutdown P((struct sdaemon *qdaemon));
|
||||
@ -251,3 +253,18 @@ extern boolean fzwait P((struct sdaemon *qdaemon));
|
||||
extern boolean fzfile P((struct sdaemon *qdaemon, struct stransfer *qtrans,
|
||||
boolean fstart, boolean fsend, long cbytes,
|
||||
boolean *pfhandled));
|
||||
|
||||
/* Prototypes for 'y' protocol functions. */
|
||||
|
||||
extern struct uuconf_cmdtab asYproto_params[];
|
||||
extern boolean fystart P((struct sdaemon *qdaemon, char **pzlog));
|
||||
extern boolean fyshutdown P((struct sdaemon *qdaemon));
|
||||
extern boolean fysendcmd P((struct sdaemon *qdaemon, const char *z,
|
||||
int ilocal, int iremote));
|
||||
extern char *zygetspace P((struct sdaemon *qdaemon, size_t *pcdata));
|
||||
extern boolean fysenddata P((struct sdaemon *qdaemon, char *z, size_t c,
|
||||
int ilocal, int iremote, long ipos));
|
||||
extern boolean fywait P((struct sdaemon *qdaemon));
|
||||
extern boolean fyfile P((struct sdaemon *qdaemon, struct stransfer *qtrans,
|
||||
boolean fstart, boolean fsend, long cbytes,
|
||||
boolean *pfhandled));
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* sysh.unx -*- C -*-
|
||||
The header file for the UNIX system dependent routines.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#ifndef SYSH_UNX_H
|
||||
@ -228,6 +228,9 @@ typedef struct termios sterminal;
|
||||
/* The name of the directory to which we move corrupt files. */
|
||||
#define CORRUPTDIR ".Corrupt"
|
||||
|
||||
/* The name of the directory to which we move failed execution files. */
|
||||
#define FAILEDDIR ".Failed"
|
||||
|
||||
/* The length of the sequence number used in a file name. */
|
||||
#define CSEQLEN (4)
|
||||
|
||||
@ -471,6 +474,14 @@ extern boolean fsdo_unlock P((const char *, boolean fspooldir));
|
||||
extern boolean fsuser_access P((const struct stat *, int imode,
|
||||
const char *zuser));
|
||||
|
||||
/* Switch to the permissions of the invoking user. This sets the
|
||||
argument to a value to pass to fsuucp_perms. */
|
||||
extern boolean fsuser_perms P((uid_t *));
|
||||
|
||||
/* Switch back to the permissions of the UUCP user ID. This should be
|
||||
passed the value returned by fsuser_perms in its argument. */
|
||||
extern boolean fsuucp_perms P((long));
|
||||
|
||||
/* Stick two directories and a file name together. */
|
||||
extern char *zsappend3 P((const char *zdir1, const char *zdir2,
|
||||
const char *zfile));
|
||||
|
@ -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, 1993, 1994 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1994, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -18,10 +18,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#ifndef SYSTEM_H
|
||||
@ -343,6 +343,12 @@ extern const char *zsysdep_save_temp_file P((pointer pseq));
|
||||
the move failed (in which the original file should remain). */
|
||||
extern char *zsysdep_save_corrupt_file P((const char *zfile));
|
||||
|
||||
/* Save a file in a location used to hold failed execution files.
|
||||
This is called if a uuxqt execution fails. This should return the
|
||||
new name of the file (allocated by zbufalc), or NULL if the move
|
||||
failed (in which case the original file should remain). */
|
||||
extern char *zsysdep_save_failed_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. */
|
||||
@ -461,6 +467,11 @@ extern boolean fsysdep_change_mode P((const char *zfile,
|
||||
closing the original file, removing it and reopening it. This
|
||||
should return FALSE on error. */
|
||||
extern openfile_t esysdep_truncate P((openfile_t e, const char *zname));
|
||||
|
||||
/* Sync a file to disk. If this fails it should log an error using
|
||||
the zmsg parameter, and return FALSE. This is controlled by the
|
||||
FSYNC_ON_CLOSE macro in policy.h. */
|
||||
extern boolean fsysdep_sync P((openfile_t e, const char *zmsg));
|
||||
|
||||
/* It is possible for the acknowledgement of a received file to be
|
||||
lost. The sending system will then now know that the file was
|
||||
@ -557,19 +568,25 @@ extern char *zsysdep_xqt_file_name P((void));
|
||||
/* Beginning getting execute files. To get a list of execute files,
|
||||
first fsysdep_get_xqt_init is called, then zsysdep_get_xqt is
|
||||
called several times until it returns NULL, then finally
|
||||
usysdep_get_xqt_free is called. */
|
||||
extern boolean fsysdep_get_xqt_init P((void));
|
||||
usysdep_get_xqt_free is called. If the zsystem argument is not
|
||||
NULL, it is the name of a system for which execution files are
|
||||
desired. */
|
||||
extern boolean fsysdep_get_xqt_init P((const char *zsystem));
|
||||
|
||||
/* Get the next execute file. This should return NULL when finished
|
||||
(with *pferr set to FALSE). On an error this should return NULL
|
||||
with *pferr set to TRUE. This should set *pzsystem to the name of
|
||||
the system for which the execute file was created. Both the return
|
||||
value and *pzsystem should be freed using ubuffree. */
|
||||
extern char *zsysdep_get_xqt P((char **pzsystem,
|
||||
(with *pferr set to FALSE). The zsystem argument should be the
|
||||
same string as that passed to fsysdep_get_xqt_init. On an error
|
||||
this should return NULL with *pferr set to TRUE. This should set
|
||||
*pzsystem to the name of the system for which the execute file was
|
||||
created; this is not guaranteed to match the zsystem argument--that
|
||||
must be double checked by the caller. Both the return value and
|
||||
*pzsystem should be freed using ubuffree. */
|
||||
extern char *zsysdep_get_xqt P((const char *zsystem, char **pzsystem,
|
||||
boolean *pferr));
|
||||
|
||||
/* Clean up after getting execute files. */
|
||||
extern void usysdep_get_xqt_free P((void));
|
||||
/* Clean up after getting execute files. The zsystem argument should
|
||||
be the same string as that passed to fsysdep_get_xqt_init. */
|
||||
extern void usysdep_get_xqt_free P((const char *zsystem));
|
||||
|
||||
/* Get the absolute pathname of a command to execute. This is given
|
||||
the legal list of commands (which may be the special case "ALL")
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
/* The maximum possible number of channels. */
|
||||
|
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char util_rcsid[] = "$Id: util.c,v 1.6 1994/01/30 20:59:40 ian Rel $";
|
||||
const char util_rcsid[] = "$Id: util.c,v 1.8 1995/06/21 19:16:18 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* uuconf.h
|
||||
Header file for UUCP configuration routines.
|
||||
|
||||
Copyright (C) 1992, 1993, 1994 Ian Lance Taylor
|
||||
Copyright (C) 1992, 1993, 1994, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP uuconf library.
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The use of an object file which uses material from this header
|
||||
file, and from no other portion of the uuconf library, is
|
||||
@ -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 Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#ifndef UUCONF_H
|
||||
@ -206,6 +206,12 @@ struct uuconf_system
|
||||
other system should transfer at that time. May be NULL, in which
|
||||
case there are no grade restrictions. */
|
||||
struct uuconf_timespan *uuconf_qcalltimegrade;
|
||||
/* The times at which to allow a particular grade of work to be
|
||||
transferred to the system, when it calls in. The ival field of
|
||||
each uuconf_timespan structure is the lowest grade which should
|
||||
be transferred at that time. May be NULL, in which case there
|
||||
are no grade restrictions. */
|
||||
struct uuconf_timespan *uuconf_qcalledtimegrade;
|
||||
/* The maximum number of times to retry calling this system. If
|
||||
this is 0, there is no limit. */
|
||||
int uuconf_cmax_retries;
|
||||
@ -565,6 +571,10 @@ struct uuconf_dialer
|
||||
be b1 - b2. */
|
||||
#define UUCONF_GRADE_CMP(b1, b2) (uuconf_grade_cmp ((b1), (b2)))
|
||||
|
||||
/* Definitions for bits returned by uuconf_strip. */
|
||||
#define UUCONF_STRIP_LOGIN (01)
|
||||
#define UUCONF_STRIP_PROTO (02)
|
||||
|
||||
/* uuconf_runuuxqt returns either a positive number (the number of
|
||||
execution files to receive between uuxqt invocations) or one of
|
||||
these constant values. */
|
||||
@ -871,6 +881,11 @@ extern int uuconf_debugfile (void *uuconf_pglobal,
|
||||
extern int uuconf_debuglevel (void *uuconf_pglobal,
|
||||
const char **uuconf_pzdebug);
|
||||
|
||||
/* Get a combination of UUCONF_STRIP bits indicating what types of
|
||||
global information should be stripped on input. */
|
||||
extern int uuconf_strip (void *uuconf_pglobal,
|
||||
int *uuconf_pistrip);
|
||||
|
||||
/* Get the maximum number of simultaneous uuxqt executions. This will
|
||||
set *pcmaxuuxqt to the number. Zero indicates no maximum. */
|
||||
extern int uuconf_maxuuxqts (void *uuconf_pglobal,
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* uucp.h
|
||||
Header file for the UUCP package.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1994, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
/* Get the system configuration parameters. */
|
||||
@ -78,10 +78,7 @@
|
||||
typedef SIG_ATOMIC_T sig_atomic_t;
|
||||
#endif /* ! HAVE_SIG_ATOMIC_T_IN_SIGNAL_H && ! HAVE_SIG_ATOMIC_T_IN_TYPES_H */
|
||||
|
||||
/* Make sure we have size_t. We use int as the default because the
|
||||
main use of this type is to provide an argument to malloc and
|
||||
realloc. On a system which does not define size_t, int is
|
||||
certainly the correct type to use. */
|
||||
/* Make sure we have size_t. */
|
||||
#if ! HAVE_SIZE_T_IN_STDDEF_H && ! HAVE_SIZE_T_IN_TYPES_H
|
||||
#ifndef SIZE_T
|
||||
#define SIZE_T unsigned
|
||||
@ -220,8 +217,8 @@ typedef FILE *openfile_t;
|
||||
#define ffileisopen(e) ((e) != NULL)
|
||||
#define ffileeof(e) feof (e)
|
||||
#define cfileread(e, z, c) fread ((z), 1, (c), (e))
|
||||
#define ffilereaderror(e, c) ferror (e)
|
||||
#define cfilewrite(e, z, c) fwrite ((z), 1, (c), (e))
|
||||
#define ffileioerror(e, c) ferror (e)
|
||||
#ifdef SEEK_SET
|
||||
#define ffileseek(e, i) (fseek ((e), (long) (i), SEEK_SET) == 0)
|
||||
#define ffilerewind(e) (fseek ((e), (long) 0, SEEK_SET) == 0)
|
||||
@ -236,33 +233,48 @@ typedef FILE *openfile_t;
|
||||
#endif
|
||||
#define ffileclose(e) (fclose (e) == 0)
|
||||
|
||||
#define fstdiosync(e, z) (fsysdep_sync (e, z))
|
||||
|
||||
#else /* ! USE_STDIO */
|
||||
|
||||
#if ! USE_TYPES_H
|
||||
#undef USE_TYPES_H
|
||||
#define USE_TYPES_H 1
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifdef OFF_T
|
||||
typedef OFF_T off_t;
|
||||
#undef OFF_T
|
||||
#endif
|
||||
|
||||
typedef int openfile_t;
|
||||
#define EFILECLOSED (-1)
|
||||
#define ffileisopen(e) ((e) >= 0)
|
||||
#define ffileeof(e) (FALSE)
|
||||
#define cfileread(e, z, c) read ((e), (z), (c))
|
||||
#define ffilereaderror(e, c) ((c) < 0)
|
||||
#define cfilewrite(e, z, c) write ((e), (z), (c))
|
||||
#define ffileioerror(e, c) ((c) < 0)
|
||||
#ifdef SEEK_SET
|
||||
#define ffileseek(e, i) (lseek ((e), (long) i, SEEK_SET) >= 0)
|
||||
#define ffilerewind(e) (lseek ((e), (long) 0, SEEK_SET) >= 0)
|
||||
#define ffileseek(e, i) (lseek ((e), (off_t) i, SEEK_SET) >= 0)
|
||||
#define ffilerewind(e) (lseek ((e), (off_t) 0, SEEK_SET) >= 0)
|
||||
#else
|
||||
#define ffileseek(e, i) (lseek ((e), (long) i, 0) >= 0)
|
||||
#define ffilerewind(e) (lseek ((e), (long) 0, 0) >= 0)
|
||||
#define ffileseek(e, i) (lseek ((e), (off_t) i, 0) >= 0)
|
||||
#define ffilerewind(e) (lseek ((e), (off_t) 0, 0) >= 0)
|
||||
#endif
|
||||
#ifdef SEEK_END
|
||||
#define ffileseekend(e) (lseek ((e), (long) 0, SEEK_END) >= 0)
|
||||
#define ffileseekend(e) (lseek ((e), (off_t) 0, SEEK_END) >= 0)
|
||||
#else
|
||||
#define ffileseekend(e) (lseek ((e), (long) 0, 2) >= 0)
|
||||
#define ffileseekend(e) (lseek ((e), (off_t) 0, 2) >= 0)
|
||||
#endif
|
||||
#define ffileclose(e) (close (e) >= 0)
|
||||
|
||||
#define fstdiosync(e, z) (fsysdep_sync (fileno (e), z))
|
||||
|
||||
#endif /* ! USE_STDIO */
|
||||
|
||||
/* A prototype for main to avoid warnings from gcc 2.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* uudefs.h
|
||||
Miscellaneous definitions for the UUCP package.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#if ANSI_C
|
||||
@ -93,6 +93,9 @@ struct sstatus
|
||||
long ilast;
|
||||
/* Number of seconds until a retry is permitted. */
|
||||
int cwait;
|
||||
/* String in status file. Only used when reading status file, not
|
||||
when writing. May be NULL. Should be freed with ubuffree. */
|
||||
char *zstring;
|
||||
};
|
||||
|
||||
/* How long we have to wait for the next call, given the number of retries
|
||||
@ -323,7 +326,7 @@ extern void ulog_close P((void));
|
||||
extern void ustats P((boolean fsucceeded, const char *zuser,
|
||||
const char *zsystem, boolean fsent,
|
||||
long cbytes, long csecs, long cmicros,
|
||||
boolean fmaster));
|
||||
boolean fcaller));
|
||||
|
||||
/* Close the statistics file. */
|
||||
extern void ustats_close P((void));
|
||||
@ -349,11 +352,13 @@ extern int idebug_parse P((const char *));
|
||||
|
||||
/* Copy one file to another. */
|
||||
extern boolean fcopy_file P((const char *zfrom, const char *zto,
|
||||
boolean fpublic, boolean fmkdirs));
|
||||
boolean fpublic, boolean fmkdirs,
|
||||
boolean fsignals));
|
||||
|
||||
/* Copy an open file to another. */
|
||||
extern boolean fcopy_open_file P((openfile_t efrom, const char *zto,
|
||||
boolean fpublic, boolean fmkdirs));
|
||||
boolean fpublic, boolean fmkdirs,
|
||||
boolean fsignals));
|
||||
|
||||
/* Translate escape sequences in a buffer, leaving the result in the
|
||||
same buffer and returning the length. */
|
||||
|
@ -1,10 +1,10 @@
|
||||
/* 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
|
||||
/* 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.
|
||||
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> */
|
||||
@ -36,7 +36,7 @@ int main(int argc,char *argv[],char *envp)
|
||||
exit(1);
|
||||
}
|
||||
setgid(pw->pw_gid); /* set gid to uucp */
|
||||
setuid(pw->pw_uid); /* set uid 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);
|
||||
|
@ -86,7 +86,7 @@ main(int argc,char *argv[])
|
||||
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]);
|
||||
@ -95,9 +95,9 @@ main(int argc,char *argv[])
|
||||
|
||||
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)
|
||||
@ -111,7 +111,7 @@ main(int argc,char *argv[])
|
||||
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 */
|
||||
}
|
||||
@ -125,7 +125,7 @@ main(int argc,char *argv[])
|
||||
kill(parent,SIGUSR1);
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
@ -136,7 +136,7 @@ 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,
|
||||
|
@ -21,3 +21,5 @@ find $(spooldir) -ctime +8 -name '[CDX].*' -print -exec rm -f \{\} \;
|
||||
find $(spooldir) -atime +1 -ctime +1 -name 'TM.*' -print -exec rm -f \{\} \;
|
||||
# Delete any old preserved files
|
||||
find $(spooldir)/.Preserve -atime +14 -ctime +14 -print -exec rm -f \{\} \;
|
||||
# Delete any old failed execution files
|
||||
find $(spooldir)/.Failed -atime +14 -ctime +14 -print -exec rm -f \{\} \;
|
||||
|
@ -44,7 +44,7 @@
|
||||
* - 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
|
||||
* - 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
|
||||
@ -52,7 +52,7 @@
|
||||
* sec > 0 ss
|
||||
* leading zeroes are suppressed.
|
||||
*
|
||||
* - the bytes xfered will be given in thousands only (we're counting
|
||||
* - 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
|
||||
@ -60,7 +60,7 @@
|
||||
* - 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
|
||||
* - 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.
|
||||
@ -84,9 +84,6 @@
|
||||
* 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)
|
||||
@ -142,12 +139,15 @@
|
||||
* */
|
||||
|
||||
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 $";
|
||||
static char rcsid[] = "$Id: uurate.c,v 1.15 1994/04/07 21:47:11 kdburg Rel $";
|
||||
#include <ctype.h> /* Character Classification */
|
||||
#include <math.h>
|
||||
#include "uucp.h"
|
||||
/* uucp.h includes string.h or strings.h, no include here. */
|
||||
|
||||
#if HAVE_SYS_PARAM_H
|
||||
#include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#define _DEBUG_ 0
|
||||
|
||||
@ -291,7 +291,7 @@ int main(argc, argv)
|
||||
char *argv[];
|
||||
{
|
||||
FILE *Log = NULL;
|
||||
int c;
|
||||
int c;
|
||||
char *p, *s, *stt, *flq = NULL;
|
||||
char Hostname[MAXHOSTNAMELEN]; /* def taken from <sys/param.h> */
|
||||
char Filename[15]; /* filename to be printed */
|
||||
@ -321,7 +321,7 @@ int main(argc, argv)
|
||||
else
|
||||
strcpy(Pgm_name,argv[0]);
|
||||
def_logs[0] = Pgm_name;
|
||||
|
||||
|
||||
/*
|
||||
* I wish the compiler had the #error directive!
|
||||
*/
|
||||
@ -348,7 +348,7 @@ int main(argc, argv)
|
||||
Tstat = (char *)getmem(sizeof(STATFILE));
|
||||
Tlog = LOGFILE;
|
||||
Tstat = STATFILE;
|
||||
|
||||
|
||||
/*
|
||||
* Process the command line arguments
|
||||
*/
|
||||
@ -426,8 +426,8 @@ int main(argc, argv)
|
||||
/*
|
||||
* 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.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@ -457,7 +457,7 @@ int main(argc, argv)
|
||||
else /* Read from current logs */
|
||||
{
|
||||
def_logs[1] = Tlog; /* prime the */
|
||||
def_logs[2] = Tstat; /* file names */
|
||||
def_logs[2] = Tstat; /* file names */
|
||||
if (! be_quiet)
|
||||
printf(" Config for this run: ");
|
||||
|
||||
@ -483,7 +483,7 @@ int main(argc, argv)
|
||||
printf("%s\n",noConf);
|
||||
}
|
||||
def_logs[1] = Tlog; /* final setting of */
|
||||
def_logs[2] = Tstat; /* file names */
|
||||
def_logs[2] = Tstat; /* file names */
|
||||
argv = def_logs; /* Bash argvec to log/stat files */
|
||||
argc = sizeof(def_logs) / sizeof(def_logs[0]);
|
||||
}
|
||||
@ -517,7 +517,7 @@ int main(argc, argv)
|
||||
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 */
|
||||
@ -546,7 +546,7 @@ int main(argc, argv)
|
||||
if (NULL != (stt = strchr(p, '(')))
|
||||
{
|
||||
if (! p_done && ! use_stdin && ! be_quiet)
|
||||
{
|
||||
{
|
||||
|
||||
#if HAVE_TAYLOR_LOGGING
|
||||
sscanf(++stt,"%s%*c%[^.]",in_date,in_time);
|
||||
@ -589,7 +589,7 @@ int main(argc, argv)
|
||||
* transfer record, determine the direction. If not then
|
||||
* skip the line if it is not interesting.
|
||||
*/
|
||||
|
||||
|
||||
if ((s = strchr(++s, ')')) == NULL)
|
||||
continue;
|
||||
|
||||
@ -599,7 +599,7 @@ int main(argc, argv)
|
||||
if ((s = strchr(++s, ')')) == NULL)
|
||||
continue; /* yes but strange layout */
|
||||
#endif /* HAVE_V2_LOGGING */
|
||||
#endif /* ! HAVE_TAYLOR_LOGGING */
|
||||
#endif /* ! HAVE_TAYLOR_LOGGING */
|
||||
|
||||
logmsg = s + 2; /* Message is 2 characters after ')' */
|
||||
if ((0 != strncmp(logmsg, "Call complete", 13)) &&
|
||||
@ -654,8 +654,8 @@ int main(argc, argv)
|
||||
last->next = cur;
|
||||
break;
|
||||
}
|
||||
} /* while (e != NULL) */
|
||||
} /* hosts == NULL */
|
||||
} /* while (e != NULL) */
|
||||
} /* hosts == NULL */
|
||||
} /* cur == NULL */
|
||||
}
|
||||
|
||||
@ -771,7 +771,7 @@ int main(argc, argv)
|
||||
/*
|
||||
* Handle end of call. Pick up the connect time.
|
||||
* position is on the closing paren of date/time info
|
||||
* i.e: ) text....
|
||||
* i.e: ) text....
|
||||
*/
|
||||
|
||||
if (0 == strncmp(logmsg, "Call complete", 13))
|
||||
@ -798,7 +798,7 @@ int main(argc, argv)
|
||||
if (0 == strncmp(logmsg, "failed after ",13))
|
||||
logmsg += 13; /* the transmission failed for any reason */
|
||||
/* so advance pointer */
|
||||
if (0 == strncmp(logmsg, "sent", 4))
|
||||
if (0 == strncmp(logmsg, "sent", 4))
|
||||
sent = OUT;
|
||||
else if (0 == strncmp(logmsg, "received", 8))
|
||||
sent = IN;
|
||||
@ -824,7 +824,7 @@ int main(argc, argv)
|
||||
} /* 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);
|
||||
@ -851,7 +851,7 @@ int main(argc, argv)
|
||||
{
|
||||
if (! be_quiet && no_records)
|
||||
printf(" %-14s %10s\n",Filename, " is empty ");
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(Log);
|
||||
|
||||
@ -898,11 +898,11 @@ int main(argc, argv)
|
||||
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].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].succs += cur->call[IN].succs;
|
||||
tot->call[IN].calls += cur->call[IN].calls;
|
||||
tot->call[IN].connect_time += cur->call[IN].connect_time;
|
||||
}
|
||||
}
|
||||
@ -984,7 +984,7 @@ int main(argc, argv)
|
||||
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");
|
||||
@ -1080,7 +1080,7 @@ int main(argc, argv)
|
||||
prot->pr_eorder,
|
||||
prot->pr_ereject);
|
||||
type = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1174,7 +1174,7 @@ int main(argc, argv)
|
||||
{
|
||||
char t1[32], t2[32];
|
||||
double rate = 0, time = 0;
|
||||
int b = 0;
|
||||
int b = 0;
|
||||
int lineOut = 0;
|
||||
|
||||
hdr_done = FALSE;
|
||||
@ -1182,7 +1182,7 @@ int main(argc, argv)
|
||||
{
|
||||
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 +
|
||||
@ -1218,7 +1218,7 @@ int main(argc, argv)
|
||||
t1, t2, rate);
|
||||
lineOut = 1;
|
||||
}
|
||||
} /* end: for (sent ... ) */
|
||||
} /* end: for (sent ... ) */
|
||||
if (lineOut)
|
||||
printf("\n");
|
||||
} /* end: for (cur= ... ) */
|
||||
@ -1266,7 +1266,7 @@ int main(argc, argv)
|
||||
hdr_done = TRUE;
|
||||
}
|
||||
|
||||
flow = cur->call[IN].flow[IN].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;
|
||||
@ -1299,12 +1299,12 @@ int main(argc, argv)
|
||||
*/
|
||||
|
||||
if (show_commands || show_all)
|
||||
{
|
||||
{
|
||||
if (have_commands)
|
||||
{
|
||||
int ncmds, i, match;
|
||||
|
||||
/*
|
||||
/*
|
||||
* layout the header line. The column's header is the command name
|
||||
*/
|
||||
|
||||
@ -1334,7 +1334,7 @@ int main(argc, argv)
|
||||
fputs(" ------", stdout);
|
||||
putchar('\n');
|
||||
|
||||
/*
|
||||
/*
|
||||
* print out the number of executions for each host/command
|
||||
*/
|
||||
|
||||
@ -1356,7 +1356,7 @@ int main(argc, argv)
|
||||
for(ec= cur->cmds; ec != NULL; ec= ec->next)
|
||||
{
|
||||
if ( 0 == strcmp(cmd->Commandname, ec->Commandname) )
|
||||
{
|
||||
{
|
||||
printf(" %7d", ec->count);
|
||||
match = TRUE;
|
||||
break;
|
||||
@ -1369,7 +1369,7 @@ int main(argc, argv)
|
||||
}
|
||||
|
||||
/*
|
||||
* print the totals line
|
||||
* print the totals line
|
||||
*/
|
||||
|
||||
fputs(" --------", stdout);
|
||||
@ -1405,7 +1405,7 @@ int main(argc, argv)
|
||||
*/
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* display the help
|
||||
* display the help
|
||||
* ------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@ -1647,7 +1647,7 @@ int chk_config(char *T_conf,int be_quiet, int type)
|
||||
fprintf(stderr,"%s (C) ended due to errors\n",
|
||||
Pgm_name);
|
||||
return (8);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
compile it form the Makefile or:
|
||||
cc -c -g -pipe -O -I. -I. -DNEWCONFIGLIB=\"/usr/local/lib/uucp\" uusnap.c
|
||||
cc -o uusnap uusnap.o
|
||||
cc -o uusnap uusnap.o
|
||||
For this, uusnap.[ch] must be in the same directory as uucp.h and so.
|
||||
|
||||
uusnap must have read access to SPOOLDIR/.Status in order to work.
|
||||
@ -25,7 +25,7 @@
|
||||
|
||||
#include "uucp.h"
|
||||
#if USE_RCS_ID
|
||||
char uusnap_rcsid[] = "$Id: uusnap.c,v 1.2 1994/05/07 18:09:40 ache Exp $";
|
||||
char uusnap_rcsid[] = "$Id: uusnap.c,v 1.9 92/05/05 22:51:50 hwr Exp Locker: hwr $";
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
@ -50,7 +50,7 @@ struct sysInfo {
|
||||
int num_retries; /* number of retries */
|
||||
};
|
||||
|
||||
struct sysInfo Systems[MAXSYS];
|
||||
struct sysInfo Systems[MAXSYS];
|
||||
|
||||
|
||||
/* I have extend the system status. If time for the specified system
|
||||
@ -77,7 +77,7 @@ main()
|
||||
int i;
|
||||
i=get_systems();
|
||||
display_info(i);
|
||||
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
@ -115,7 +115,7 @@ get_systems()
|
||||
get_stat_for_system(i); /* now get the system status */
|
||||
get_inq_num(i,TRUE); /* number of unprocessed files */
|
||||
get_outq_num(i,TRUE); /* number of files to send */
|
||||
i++;
|
||||
i++;
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
@ -126,7 +126,7 @@ get_systems()
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
display_info(int numSys)
|
||||
{
|
||||
@ -144,7 +144,7 @@ display_info(int numSys)
|
||||
fprintf(stderr, "Can't malloc 1024 bytes");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
while(TRUE) {
|
||||
display_headline();
|
||||
for (sysnum=0;sysnum<numSys;sysnum++) {
|
||||
@ -170,21 +170,21 @@ int
|
||||
display_status_line(int sn)
|
||||
{
|
||||
char *time_s;
|
||||
|
||||
|
||||
int sys_stat,num_retries,wait;
|
||||
int i;
|
||||
time_t last_time;
|
||||
time_t next_time;
|
||||
|
||||
|
||||
struct sysInfo sys;
|
||||
|
||||
|
||||
sys = Systems[sn];
|
||||
|
||||
printf("%10s ",sys.sysname);
|
||||
get_inq_num(sn);
|
||||
if (sys.in==0)
|
||||
printf(" ");
|
||||
else
|
||||
else
|
||||
printf("%3d ",sys.in);
|
||||
get_outq_num(sn);
|
||||
if (sys.out==0)
|
||||
@ -198,13 +198,13 @@ display_status_line(int sn)
|
||||
time_s = ctime(&sys.next);
|
||||
time_s = time_s + 11;
|
||||
*(time_s+8)='\0';
|
||||
if (sys.last == sys.next)
|
||||
if (sys.last == sys.next)
|
||||
printf(" ");
|
||||
else
|
||||
printf("%8s ",time_s); /* time of next poll */
|
||||
if (sys.num_retries==0)
|
||||
if (sys.num_retries==0)
|
||||
printf(" ");
|
||||
else
|
||||
else
|
||||
printf("%2d ",sys.num_retries);
|
||||
if (sys_stat==6) /* system is talking */
|
||||
printf("\E[7m"); /* reverse video on */
|
||||
@ -234,7 +234,7 @@ get_inq_num(int num,char firstTime)
|
||||
char filename[1024];
|
||||
struct stat stbuf;
|
||||
DIR *dirp;
|
||||
|
||||
|
||||
strcpy(filename,Systems[num].spooldir);
|
||||
strcat(filename,"/X./.");
|
||||
stat(filename,&stbuf);
|
||||
@ -263,7 +263,7 @@ get_outq_num(int sys,char firstTime)
|
||||
char filename[1024];
|
||||
struct stat stbuf;
|
||||
DIR *dirp;
|
||||
|
||||
|
||||
strcpy(filename,Systems[sys].spooldir);
|
||||
strcat(filename,"/C./.");
|
||||
stat(filename,&stbuf);
|
||||
|
@ -197,7 +197,7 @@ sub print_dashes {
|
||||
|
||||
sub gethostname {
|
||||
$ENV{"SHELL"} = "/bin/sh";
|
||||
$try = `hostname 2>/dev/null`;
|
||||
$try = `(hostname) 2>/dev/null`;
|
||||
chop $try;
|
||||
return $+ if $try =~ /^[-.\w]+$/;
|
||||
$try = `uname -n 2>/dev/null`;
|
||||
|
@ -15,10 +15,10 @@
|
||||
# files rather then being hard coded here.
|
||||
#
|
||||
Spool=/usr/spool/uucp
|
||||
Lib=/usr/lib/uucp
|
||||
Lib=/usr/local/lib/uucp
|
||||
Status=$Spool/.Status
|
||||
Debug=$Spool/Debug
|
||||
Uucico=$lib/uucico
|
||||
Uucico=$Lib/uucico
|
||||
#
|
||||
# Default option values
|
||||
#
|
||||
@ -32,7 +32,7 @@ for i in $* ; do
|
||||
esac
|
||||
done
|
||||
|
||||
if [ $s != "" ]; then
|
||||
if [ x$s != x ]; then
|
||||
rm -f $Status/$s
|
||||
$Uucico -r1 $x -s$s &
|
||||
>$Debug
|
||||
|
@ -21,7 +21,7 @@
|
||||
* 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.
|
||||
@ -43,7 +43,7 @@
|
||||
|
||||
#include "xc-conf.h"
|
||||
|
||||
/*
|
||||
/*
|
||||
* Pick a timing routine to use, as done in Taylor UUCP.
|
||||
*/
|
||||
#if HAVE_USLEEP || HAVE_NAP || HAVE_NAPMS || HAVE_POLL
|
||||
@ -279,7 +279,7 @@ extern void *malloc();
|
||||
* arguments in argc/argv, and stdin/stdout mapped to the
|
||||
* tty device, and stderr mapped to the Taylor logfile, where
|
||||
* anything written to stdout will be logged as an error.
|
||||
*
|
||||
*
|
||||
*/
|
||||
int main(argc, argv)
|
||||
int argc;
|
||||
@ -312,7 +312,7 @@ char *argv[];
|
||||
|
||||
/*
|
||||
* If the script file argument begins with '/', then we assume
|
||||
* it is an absolute pathname, otherwise, we prepend the
|
||||
* it is an absolute pathname, otherwise, we prepend the
|
||||
* SCRIPT_DIR path.
|
||||
*/
|
||||
*sfname = '\0'; /* Empty name string */
|
||||
@ -375,7 +375,7 @@ char *argv[];
|
||||
exit(stat);
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* deal_script - deallocate a script and all strings it points to
|
||||
*/
|
||||
int deal_script(loc)
|
||||
@ -386,34 +386,34 @@ struct script *loc;
|
||||
*/
|
||||
if (loc == (struct script *)NULL)
|
||||
return SUCCESS;
|
||||
|
||||
|
||||
/*
|
||||
* Deallocate the rest of the script
|
||||
*/
|
||||
deal_script(loc->next);
|
||||
|
||||
|
||||
/*
|
||||
* Deallocate the string parameter, if any
|
||||
*/
|
||||
if (loc->strprm != (char *)NULL)
|
||||
free(loc->strprm);
|
||||
|
||||
|
||||
/*
|
||||
* Deallocate the new state name parameter, if any
|
||||
*/
|
||||
if (loc->newstate != (char *)NULL)
|
||||
free(loc->newstate);
|
||||
|
||||
|
||||
/*
|
||||
* Deallocate this entry
|
||||
*/
|
||||
free(loc);
|
||||
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
/*
|
||||
* read_script
|
||||
*
|
||||
* Read & compile a script, return pointer to first entry, or null if bad
|
||||
@ -428,10 +428,10 @@ struct script *read_script(fd)
|
||||
char inpline[MAX_SCLINE];
|
||||
char inpcopy[MAX_SCLINE];
|
||||
char *c, *cln, *opc, *cp;
|
||||
|
||||
|
||||
/*
|
||||
* MAIN COMPILATION LOOP
|
||||
*/
|
||||
*/
|
||||
while ((c = fgets(inpline, (sizeof inpline - 1), fd)) != (char *)NULL)
|
||||
{
|
||||
/*
|
||||
@ -439,13 +439,13 @@ struct script *read_script(fd)
|
||||
*/
|
||||
if (*c == '#' || *c == '\n')
|
||||
continue;
|
||||
|
||||
/*
|
||||
|
||||
/*
|
||||
* Get rid of the trailing newline, and copy the string
|
||||
*/
|
||||
inpline[strlen(inpline)-1] = '\0';
|
||||
strcpy(inpcopy, inpline);
|
||||
|
||||
|
||||
/*
|
||||
* Look for text starting in the first col (a label)
|
||||
*/
|
||||
@ -467,7 +467,7 @@ struct script *read_script(fd)
|
||||
this->newstate = (char *)NULL;
|
||||
c = cln + 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Now handle the opcode. Fold it to lower case.
|
||||
*/
|
||||
@ -477,14 +477,14 @@ struct script *read_script(fd)
|
||||
cp = opc;
|
||||
while(*cp)
|
||||
tolower(*cp++);
|
||||
|
||||
/*
|
||||
|
||||
/*
|
||||
* If we have an opcode but we haven't seen anything
|
||||
* else (like a label) yet, i.e., this is the first
|
||||
* entry, and there was no label. We need to
|
||||
* entry, and there was no label. We need to
|
||||
* cobble up a label so that read_script is happy
|
||||
*/
|
||||
if (first == (struct script *)NULL)
|
||||
if (first == (struct script *)NULL)
|
||||
{
|
||||
this = (struct script *)malloc (sizeof (struct script));
|
||||
prev = this;
|
||||
@ -496,12 +496,12 @@ struct script *read_script(fd)
|
||||
this->intprm = 0;
|
||||
this->newstate = (char *)NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
/*
|
||||
* Find opcode - ndex through the opcode definition table
|
||||
*/
|
||||
for (i=1; sc_opdef[i].opcode != SC_END; i++)
|
||||
if (strcmp(opc, sc_opdef[i].opname) == SAME)
|
||||
if (strcmp(opc, sc_opdef[i].opname) == SAME)
|
||||
break;
|
||||
if ((sc_opdef[i].opcode) == SC_END)
|
||||
{
|
||||
@ -509,7 +509,7 @@ struct script *read_script(fd)
|
||||
deal_script(first);
|
||||
return (struct script *)NULL;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Found opcode. Allocate a new command node and initialize
|
||||
*/
|
||||
@ -521,8 +521,8 @@ struct script *read_script(fd)
|
||||
this->strprm = (char *)NULL;
|
||||
this->intprm = 0;
|
||||
this->newstate = (char *)NULL;
|
||||
|
||||
/*
|
||||
|
||||
/*
|
||||
* Pick up new state parameter, if any
|
||||
*/
|
||||
if (sc_opdef[i].newstate == SC_NWST)
|
||||
@ -540,7 +540,7 @@ struct script *read_script(fd)
|
||||
strcpy(this->newstate, c);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Pick up the string or integer parameter. Handle missing
|
||||
* parameter gracefully.
|
||||
@ -572,8 +572,8 @@ struct script *read_script(fd)
|
||||
/*
|
||||
* STR/XSTR strings.
|
||||
*/
|
||||
case SC_STR:
|
||||
case SC_XSTR:
|
||||
case SC_STR:
|
||||
case SC_XSTR:
|
||||
c = strtok((char *)NULL, CTL_DELIM);
|
||||
if (c == (char *)NULL)
|
||||
{
|
||||
@ -597,9 +597,9 @@ struct script *read_script(fd)
|
||||
|
||||
/*
|
||||
* For XSTR, Translate the string and store its
|
||||
* length. Note that, after escape sequences are
|
||||
* compressed, the resulting string may well be a
|
||||
* few bytes shorter than the input string (whose
|
||||
* length. Note that, after escape sequences are
|
||||
* compressed, the resulting string may well be a
|
||||
* few bytes shorter than the input string (whose
|
||||
* length was the basis for the malloc above),
|
||||
* but it will never be longer.
|
||||
*/
|
||||
@ -611,10 +611,10 @@ struct script *read_script(fd)
|
||||
else
|
||||
strcpy(this->strprm, c);
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* EOF
|
||||
*/
|
||||
@ -630,23 +630,23 @@ struct script *read_script(fd)
|
||||
* Called by read_script(), above.
|
||||
*
|
||||
* Returns the actual length of the resulting string. Note that imbedded
|
||||
* nulls (specified by \000 in the input) ARE allowed in the result.
|
||||
* nulls (specified by \000 in the input) ARE allowed in the result.
|
||||
*/
|
||||
xlat_str(out, in)
|
||||
char *out, *in;
|
||||
{
|
||||
register int i = 0, j = 0;
|
||||
int byte, k;
|
||||
|
||||
while (in[i])
|
||||
|
||||
while (in[i])
|
||||
{
|
||||
if (in[i] != '\\')
|
||||
if (in[i] != '\\')
|
||||
{
|
||||
out[j++] = in[i++];
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
switch (in[++i])
|
||||
switch (in[++i])
|
||||
{
|
||||
case 'd': /* EOT */
|
||||
out[j++] = 0x04;
|
||||
@ -682,11 +682,11 @@ xlat_str(out, in)
|
||||
case '7':
|
||||
byte = in[i] - '0';
|
||||
k = 0;
|
||||
|
||||
while (3 > ++k)
|
||||
|
||||
while (3 > ++k)
|
||||
if ((in[i+1] < '0') || (in[i+1] > '7'))
|
||||
break;
|
||||
else
|
||||
else
|
||||
{
|
||||
byte = (byte<<3) + in[i+1] - '0';
|
||||
++i;
|
||||
@ -698,7 +698,7 @@ xlat_str(out, in)
|
||||
}
|
||||
++i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return j;
|
||||
}
|
||||
|
||||
@ -711,9 +711,9 @@ struct script *begin;
|
||||
char *newstate;
|
||||
{
|
||||
struct script *here;
|
||||
|
||||
|
||||
for (here=begin; here != (struct script *)NULL; here=here->next) {
|
||||
if (here->opcode == SC_LABEL &&
|
||||
if (here->opcode == SC_LABEL &&
|
||||
strcmp(here->strprm, newstate) == SAME)
|
||||
return here;
|
||||
}
|
||||
@ -721,8 +721,8 @@ char *newstate;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* do_script() - execute a script
|
||||
/*
|
||||
* do_script() - execute a script
|
||||
*/
|
||||
int do_script(begin)
|
||||
struct script *begin;
|
||||
@ -734,7 +734,7 @@ int do_script(begin)
|
||||
char *c, chr;
|
||||
int prmlen;
|
||||
int dbfd;
|
||||
|
||||
|
||||
time_t sc_carrtime = 45000; /* time to wf carr after dial */
|
||||
time_t sc_chrdly = 100; /* delay time for ttoslow */
|
||||
time_t sc_ptime = 2000; /* time to allow for pause char */
|
||||
@ -746,118 +746,118 @@ int do_script(begin)
|
||||
char sc_wchar = 'W'; /* modem wait-for-dialtone character */
|
||||
time_t sc_begwait; /* time at beg of wait */
|
||||
time_t sc_secs; /* timeout period */
|
||||
|
||||
|
||||
int expcnt;
|
||||
int expin;
|
||||
static char expbuf[MAX_EXPCT];
|
||||
|
||||
|
||||
dbgsave = Debug;
|
||||
curstate = begin;
|
||||
|
||||
if (curstate == (struct script *)NULL)
|
||||
|
||||
if (curstate == (struct script *)NULL)
|
||||
return SUCCESS;
|
||||
|
||||
|
||||
_newstate:
|
||||
/*
|
||||
/*
|
||||
* do all of curstate's actions. Enter with curstate pointing
|
||||
* to a label entry
|
||||
*/
|
||||
expin = 0;
|
||||
|
||||
|
||||
for (curscr = curstate->next; /* point to 1st scr after label */
|
||||
(curscr != (struct script *)NULL) && /* do until end of scr */
|
||||
(curscr->opcode != SC_LABEL); /* or next label */
|
||||
curscr = curscr->next)
|
||||
curscr = curscr->next)
|
||||
{
|
||||
expcnt = 0;
|
||||
switch (curscr->opcode)
|
||||
switch (curscr->opcode)
|
||||
{
|
||||
case SC_LABEL:
|
||||
logit("Script proc err", curstate->strprm);
|
||||
return FAIL;
|
||||
|
||||
|
||||
case SC_FLSH:
|
||||
DEBUG(DB_LGII, "Flushing typeahead buffer\n", 0);
|
||||
ttflui();
|
||||
break;
|
||||
|
||||
|
||||
case SC_CDLY:
|
||||
sc_chrdly = curscr->intprm;
|
||||
DEBUG(DB_LGII, "Set chrdly to %d\n", sc_chrdly);
|
||||
break;
|
||||
|
||||
|
||||
case SC_PCHR:
|
||||
sc_pchar = *(curscr->strprm);
|
||||
DEBUG(DB_LGII, "Set pause char to %c\n", sc_pchar);
|
||||
break;
|
||||
|
||||
|
||||
case SC_PTIM:
|
||||
sc_ptime = curscr->intprm;
|
||||
DEBUG(DB_LGII, "Set pause time to %d\n", sc_ptime);
|
||||
break;
|
||||
|
||||
|
||||
case SC_WCHR:
|
||||
sc_wchar = *(curscr->strprm);
|
||||
DEBUG(DB_LGII, "Set wait char to %c\n", sc_wchar);
|
||||
break;
|
||||
|
||||
|
||||
case SC_WTIM:
|
||||
sc_wtime = curscr->intprm;
|
||||
DEBUG(DB_LGII, "Set wait time to %d\n", sc_wtime);
|
||||
break;
|
||||
|
||||
|
||||
case SC_ZERO:
|
||||
sc_counter = 0;
|
||||
DEBUG(DB_LGII, "Set counter to %d\n", sc_counter);
|
||||
break;
|
||||
|
||||
|
||||
case SC_INCR:
|
||||
sc_counter++;
|
||||
DEBUG(DB_LGII, "Incr counter to %d\n", sc_counter);
|
||||
break;
|
||||
|
||||
|
||||
case SC_WAIT:
|
||||
DEBUG(DB_LGII, "Sleeping %d tenth-secs\n", curscr->intprm);
|
||||
msleep(curscr->intprm);
|
||||
break;
|
||||
|
||||
|
||||
case SC_DTIM:
|
||||
sc_dtime = curscr->intprm;
|
||||
DEBUG(DB_LGII, "Digit time is %d\n", sc_dtime);
|
||||
break;
|
||||
|
||||
|
||||
case SC_CTIM:
|
||||
sc_carrtime = curscr->intprm;
|
||||
DEBUG(DB_LGII, "Carrier time is %d\n", sc_carrtime);
|
||||
break;
|
||||
|
||||
|
||||
case SC_EXIT:
|
||||
Debug = dbgsave;
|
||||
DEBUG(DB_LGI, "Script ended successfully\n", 0);
|
||||
return SUCCESS;
|
||||
|
||||
|
||||
case SC_FAIL:
|
||||
Debug = dbgsave;
|
||||
if (DEBUG_LEVEL(DB_LGI) && dbf != NULL)
|
||||
fprintf(dbf, "Script failed\n");
|
||||
else if (expin)
|
||||
charlog(expbuf, expin, DB_LOG,
|
||||
charlog(expbuf, expin, DB_LOG,
|
||||
"Script failed. Last received data");
|
||||
return FAIL;
|
||||
|
||||
|
||||
case SC_LOG:
|
||||
logit(curscr->strprm, "");
|
||||
break;
|
||||
|
||||
|
||||
case SC_LOGE:
|
||||
logit("ERROR: ", curscr->strprm);
|
||||
break;
|
||||
|
||||
|
||||
case SC_DBOF:
|
||||
/*
|
||||
* If the debug file name does not begin with "/", then
|
||||
* we prepend the LOG_DIR to the string. Then CREATE the
|
||||
* file. This WIPES OUT previous logs.
|
||||
* file. This WIPES OUT previous logs.
|
||||
*/
|
||||
*dfname = '\0'; /* Zero name string */
|
||||
if(curscr->strprm[0] != '/')
|
||||
@ -877,102 +877,102 @@ int do_script(begin)
|
||||
return FAIL;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case SC_DBG:
|
||||
DEBUG(DB_LGI, "<%s>\n", curscr->strprm);
|
||||
break;
|
||||
|
||||
|
||||
case SC_DBGE:
|
||||
DEBUG(DB_LGIE, "ERROR: <%s>\n", curscr->strprm);
|
||||
break;
|
||||
|
||||
|
||||
case SC_DBST:
|
||||
Debug |= curscr->intprm;
|
||||
DEBUG(DB_LGII, "Debug mask set to %04o (octal)\n", Debug);
|
||||
break;
|
||||
|
||||
|
||||
case SC_DBCL:
|
||||
Debug &= ~(curscr->intprm);
|
||||
DEBUG(DB_LGII, "Debug mask set to %04o (octal)\n", Debug);
|
||||
break;
|
||||
|
||||
|
||||
case SC_BRK:
|
||||
DEBUG(DB_LGI, "Sending break\n", 0);
|
||||
ttbreak();
|
||||
break;
|
||||
|
||||
|
||||
case SC_HANG:
|
||||
DEBUG(DB_LGI, "Dropping DTR\n", 0);
|
||||
tthang();
|
||||
break;
|
||||
|
||||
|
||||
case SC_7BIT:
|
||||
DEBUG(DB_LGI, "Enabling 7-bit stripping\n", 0);
|
||||
tt7bit(TRUE);
|
||||
break;
|
||||
|
||||
|
||||
case SC_8BIT:
|
||||
DEBUG(DB_LGI, "Disabling 7-bit stripping\n", 0);
|
||||
tt7bit(FALSE);
|
||||
break;
|
||||
|
||||
|
||||
case SC_PNON:
|
||||
DEBUG(DB_LGI, "Setting 8-bit, no parity\n", 0);
|
||||
ttpar(NONE);
|
||||
break;
|
||||
|
||||
|
||||
case SC_PEVN:
|
||||
DEBUG(DB_LGI, "Setting 7-bit, even parity\n", 0);
|
||||
ttpar(EVEN);
|
||||
break;
|
||||
|
||||
|
||||
case SC_PODD:
|
||||
DEBUG(DB_LGI, "Setting 7-bit, odd parity\n", 0);
|
||||
ttpar(ODD);
|
||||
break;
|
||||
|
||||
|
||||
case SC_IFBL:
|
||||
if (ttblind())
|
||||
if (ttblind())
|
||||
{
|
||||
DEBUG(DB_LGI, "Blind mux,\n", 0);
|
||||
goto _chgstate;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case SC_IFBG:
|
||||
if (ttblind() && sc_counter > curscr->intprm)
|
||||
if (ttblind() && sc_counter > curscr->intprm)
|
||||
{
|
||||
DEBUG(DB_LGI, "Blind mux & ctr > %d\n",
|
||||
DEBUG(DB_LGI, "Blind mux & ctr > %d\n",
|
||||
curscr->intprm);
|
||||
goto _chgstate;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case SC_IFGT:
|
||||
if (sc_counter > curscr->intprm)
|
||||
if (sc_counter > curscr->intprm)
|
||||
{
|
||||
DEBUG(DB_LGI, "Counter > %d\n", curscr->intprm);
|
||||
goto _chgstate;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case SC_GOTO:
|
||||
_chgstate:
|
||||
DEBUG(DB_LGI, "Changing to state %s\n",
|
||||
curscr->newstate);
|
||||
curstate = find_state(begin, curscr->newstate);
|
||||
if (curstate == NULL)
|
||||
if (curstate == NULL)
|
||||
{
|
||||
logit("New state not found",
|
||||
curscr->newstate);
|
||||
return FAIL;
|
||||
}
|
||||
goto _newstate;
|
||||
|
||||
|
||||
case SC_SEND:
|
||||
ttoslow(curscr->strprm, curscr->intprm, sc_chrdly);
|
||||
break;
|
||||
|
||||
|
||||
case SC_TELN:
|
||||
if (curscr->intprm > paramc - 1)
|
||||
{
|
||||
@ -983,7 +983,7 @@ int do_script(begin)
|
||||
strcpy(telno, paramv[curscr->intprm]);
|
||||
DEBUG(DB_LGII, "telno set to %s\n", telno);
|
||||
break;
|
||||
|
||||
|
||||
case SC_SNDP:
|
||||
if (curscr->intprm > paramc - 1)
|
||||
{
|
||||
@ -994,17 +994,17 @@ int do_script(begin)
|
||||
prmlen = xlat_str(tempstr, paramv[curscr->intprm]);
|
||||
ttoslow(tempstr, prmlen, sc_chrdly);
|
||||
break;
|
||||
|
||||
|
||||
case SC_IF1P:
|
||||
if (curscr->intprm < paramc)
|
||||
goto _chgstate;
|
||||
break;
|
||||
|
||||
|
||||
case SC_IF0P:
|
||||
if (curscr->intprm >= paramc)
|
||||
goto _chgstate;
|
||||
break;
|
||||
|
||||
|
||||
case SC_DIAL:
|
||||
if(telno[0] == '\0')
|
||||
{
|
||||
@ -1017,17 +1017,17 @@ int do_script(begin)
|
||||
* changed by the script. See the man page xchat(8) for
|
||||
* details.
|
||||
*/
|
||||
sc_dtmo = (sc_dtime+sc_chrdly)*strlen(telno)
|
||||
sc_dtmo = (sc_dtime+sc_chrdly)*strlen(telno)
|
||||
+ sc_carrtime;
|
||||
c=strcpy(tempstr, telno);
|
||||
for (; *c!='\0'; c++)
|
||||
for (; *c!='\0'; c++)
|
||||
{
|
||||
if (*c == 'W')
|
||||
if (*c == 'W')
|
||||
{
|
||||
*c = sc_wchar;
|
||||
sc_dtmo += sc_wtime;
|
||||
}
|
||||
else if (*c == 'P')
|
||||
else if (*c == 'P')
|
||||
{
|
||||
*c = sc_pchar;
|
||||
sc_dtmo += sc_ptime;
|
||||
@ -1036,7 +1036,7 @@ int do_script(begin)
|
||||
DEBUG(DB_LGI, "Dialing, default timeout is %d millisecs\n", sc_dtmo);
|
||||
ttoslow(tempstr, 0, sc_chrdly);
|
||||
break;
|
||||
|
||||
|
||||
case SC_TIMO: /* these are "expects", don't bother */
|
||||
case SC_XPCT: /* with them yet, other than noting that */
|
||||
case SC_CARR: /* they exist */
|
||||
@ -1044,107 +1044,107 @@ int do_script(begin)
|
||||
expcnt++;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* we've done the current state's actions, now do its expects, if any */
|
||||
|
||||
if (expcnt == 0)
|
||||
|
||||
if (expcnt == 0)
|
||||
{
|
||||
if (curscr != (struct script *)NULL &&
|
||||
(curscr->opcode == SC_LABEL))
|
||||
if (curscr != (struct script *)NULL &&
|
||||
(curscr->opcode == SC_LABEL))
|
||||
{
|
||||
curstate = curscr;
|
||||
DEBUG(DB_LGI, "Fell through to state %s\n",
|
||||
curstate->strprm);
|
||||
goto _newstate;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
logit("No way out of state", curstate->strprm);
|
||||
return FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
time(&sc_begwait); /* log time at beg of expect */
|
||||
DEBUG(DB_LGI, "Doing expects for state %s\n", curstate->strprm);
|
||||
charlog((char *)NULL, 0, DB_LGI, "Received");
|
||||
|
||||
while (1)
|
||||
|
||||
while (1)
|
||||
{
|
||||
chr = xgetc(1); /* Returns upon char input or 1 sec. tmo */
|
||||
|
||||
|
||||
charlog(&chr, 1, DB_LGI, (char *)NULL);
|
||||
|
||||
if (chr != EOF)
|
||||
|
||||
if (chr != EOF)
|
||||
{
|
||||
if (expin < MAX_EXPCT)
|
||||
if (expin < MAX_EXPCT)
|
||||
{
|
||||
expbuf[expin++] = chr & 0x7f;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
strncpy(expbuf, &expbuf[1], MAX_EXPCT-1);
|
||||
expbuf[MAX_EXPCT-1] = chr & 0x7f;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* for each entry in the current state... */
|
||||
|
||||
for (curscr = curstate->next;
|
||||
|
||||
for (curscr = curstate->next;
|
||||
(curscr != (struct script *)NULL) &&
|
||||
(curscr->opcode != SC_LABEL);
|
||||
curscr = curscr->next)
|
||||
curscr = curscr->next)
|
||||
{
|
||||
|
||||
switch (curscr->opcode)
|
||||
|
||||
switch (curscr->opcode)
|
||||
{
|
||||
case SC_TIMO:
|
||||
sc_secs = curscr->intprm;
|
||||
if (sc_secs == 0)
|
||||
sc_secs = sc_dtmo;
|
||||
sc_secs /= 1000;
|
||||
if (time(NULL)-sc_begwait > sc_secs)
|
||||
if (time(NULL)-sc_begwait > sc_secs)
|
||||
{
|
||||
DEBUG(DB_LGI,
|
||||
"\nTimed out (%d secs)\n", sc_secs);
|
||||
goto _chgstate;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case SC_CARR:
|
||||
if (ttcd())
|
||||
if (ttcd())
|
||||
{
|
||||
DEBUG(DB_LGI, "\nGot carrier\n", 0);
|
||||
goto _chgstate;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case SC_HUPS:
|
||||
if (fShangup)
|
||||
if (fShangup)
|
||||
{
|
||||
DEBUG(DB_LGI, "\nGot data set hangup\n", 0);
|
||||
goto _chgstate;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case SC_XPCT:
|
||||
if ((expin >= curscr->intprm) &&
|
||||
(strncmp(curscr->strprm,
|
||||
(strncmp(curscr->strprm,
|
||||
&expbuf[expin - curscr->intprm],
|
||||
curscr->intprm) == SAME))
|
||||
curscr->intprm) == SAME))
|
||||
{
|
||||
charlog(curscr->strprm, curscr->intprm,
|
||||
DB_LGI, "Matched");
|
||||
goto _chgstate;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* New opcode added by hag@eddie.mit.edu for expecting a
|
||||
/* New opcode added by hag@eddie.mit.edu for expecting a
|
||||
parameter supplied string */
|
||||
case SC_XPST:
|
||||
if(curscr->intprm >paramc-1)
|
||||
@ -1194,8 +1194,8 @@ static int uhup(isig)
|
||||
/*
|
||||
* xgetc - get a character with timeout
|
||||
*
|
||||
* Assumes that stdin is opened on a terminal or TCP socket
|
||||
* with O_NONBLOCK.
|
||||
* Assumes that stdin is opened on a terminal or TCP socket
|
||||
* with O_NONBLOCK.
|
||||
*/
|
||||
static char xgetc(tmo)
|
||||
int tmo; /* Timeout, seconds */
|
||||
@ -1218,7 +1218,7 @@ int tmo; /* Timeout, seconds */
|
||||
return(c);
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Pause for an interval in milliseconds
|
||||
*/
|
||||
void msleep(msec)
|
||||
@ -1248,7 +1248,7 @@ long msec;
|
||||
|
||||
if(msec == 0)
|
||||
return;
|
||||
/*
|
||||
/*
|
||||
* We need to pass an unused pollfd structure because poll checks
|
||||
* the address before checking the number of elements.
|
||||
*/
|
||||
@ -1289,7 +1289,7 @@ char *msg1, *msg2;
|
||||
*
|
||||
* SPECIAL CASE: msg=NULL, len=1 and msg[0]='\377' gets logged
|
||||
* when read does its 1 sec. timeout. Log "<1 sec.>"
|
||||
* so user can see elapsed time
|
||||
* so user can see elapsed time
|
||||
*/
|
||||
static void charlog(buf, len, mask, msg)
|
||||
char *buf;
|
||||
@ -1344,21 +1344,21 @@ int sig;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* ttoslow() - Send characters with pacing delays
|
||||
*/
|
||||
static void ttoslow(s, len, delay)
|
||||
char *s;
|
||||
char *s;
|
||||
int len;
|
||||
time_t delay;
|
||||
time_t delay;
|
||||
{
|
||||
int i;
|
||||
|
||||
|
||||
if (len == 0)
|
||||
len = strlen(s);
|
||||
|
||||
|
||||
charlog (s, len, DB_LGI, "Sending slowly");
|
||||
|
||||
|
||||
for (i = 0; i < len; i++, s++)
|
||||
{
|
||||
write(1, s, 1);
|
||||
|
@ -1,12 +1,12 @@
|
||||
# Makefile for cu
|
||||
# $Id: Makefile,v 1.2 1994/05/31 05:23:39 ache Exp $
|
||||
# $Id: Makefile,v 1.3 1994/05/31 07:47:39 ache Exp $
|
||||
|
||||
BINDIR= $(bindir)
|
||||
BINOWN= $(owner)
|
||||
BINMODE= 4555
|
||||
|
||||
PROG= cu
|
||||
SRCS= cu.c prot.c log.c chat.c conn.c tcp.c tli.c copy.c
|
||||
SRCS= cu.c prot.c log.c chat.c conn.c copy.c
|
||||
LDADD+= $(LIBUNIX) $(LIBUUCONF) $(LIBUUCP)
|
||||
DPADD+= $(LIBUNIX) $(LIBUUCONF) $(LIBUUCP)
|
||||
CFLAGS+= -I$(.CURDIR)/../common_sources\
|
||||
|
@ -1,5 +1,5 @@
|
||||
''' $Id: cu.1,v 1.2 1994/05/07 18:09:51 ache Exp $
|
||||
.TH cu 1 "Taylor UUCP 1.05"
|
||||
''' $Id: cu.1,v 1.9 1995/08/02 00:16:58 ian Rel $
|
||||
.TH cu 1 "Taylor UUCP 1.06"
|
||||
.SH NAME
|
||||
cu \- Call up another system
|
||||
.SH SYNOPSIS
|
||||
@ -169,7 +169,7 @@ returns. The default is false.
|
||||
A string used before sending a binary character in a file transfer, if
|
||||
the
|
||||
.B binary
|
||||
variable is true. The default is ^Z.
|
||||
variable is true. The default is ^V.
|
||||
.TP 5
|
||||
.B echo-check
|
||||
Whether to check file transfers by examining what the remote system
|
||||
@ -228,6 +228,15 @@ are given.
|
||||
.B \-h, \-\-halfduplex
|
||||
Echo characters locally (half-duplex mode).
|
||||
.TP 5
|
||||
.B \-\-nostop
|
||||
Turn off XON/XOFF handling (it is on by default).
|
||||
.TP 5
|
||||
.B \-E char, \-\-escape char
|
||||
Set the escape character. Initially
|
||||
.B ~
|
||||
(tilde). To eliminate the escape character, use
|
||||
.B -E ''.
|
||||
.TP 5
|
||||
.B \-z system, \-\-system system
|
||||
The system to call.
|
||||
.TP 5
|
||||
@ -258,7 +267,7 @@ Prompt for the phone number to use.
|
||||
.TP 5
|
||||
.B \-d
|
||||
Enter debugging mode. Equivalent to
|
||||
.B \-debug all.
|
||||
.B \-\-debug all.
|
||||
.TP 5
|
||||
.B \-x type, \-\-debug type
|
||||
Turn on particular debugging types. The following types are
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* cu.c
|
||||
Call up a remote system.
|
||||
|
||||
Copyright (C) 1992, 1993, 1994 Ian Lance Taylor
|
||||
Copyright (C) 1992, 1993, 1994, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char cu_rcsid[] = "$Id: cu.c,v 1.3 1994/10/02 23:10:39 ache Exp $";
|
||||
const char cu_rcsid[] = "$Id: cu.c,v 1.42 1995/08/02 01:19:50 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "cu.h"
|
||||
@ -213,6 +213,7 @@ static boolean fcusend_buf P((struct sconnection *qconn, const char *zbuf,
|
||||
static const struct option asCulongopts[] =
|
||||
{
|
||||
{ "phone", required_argument, NULL, 'c' },
|
||||
{ "escape", required_argument, NULL, 'E' },
|
||||
{ "parity", required_argument, NULL, 2 },
|
||||
{ "halfduplex", no_argument, NULL, 'h' },
|
||||
{ "prompt", no_argument, NULL, 'n' },
|
||||
@ -221,6 +222,7 @@ static const struct option asCulongopts[] =
|
||||
{ "speed", required_argument, NULL, 's' },
|
||||
{ "baud", required_argument, NULL, 's' },
|
||||
{ "mapcr", no_argument, NULL, 't' },
|
||||
{ "nostop", no_argument, NULL, 3 },
|
||||
{ "system", required_argument, NULL, 'z' },
|
||||
{ "config", required_argument, NULL, 'I' },
|
||||
{ "debug", required_argument, NULL, 'x' },
|
||||
@ -252,6 +254,8 @@ main (argc, argv)
|
||||
boolean fmapcr = FALSE;
|
||||
/* -z: system. */
|
||||
const char *zsystem = NULL;
|
||||
/* --nostop: turn off XON/XOFF. */
|
||||
enum txonxoffsetting txonxoff = XONXOFF_ON;
|
||||
/* -I: configuration file name. */
|
||||
const char *zconfig = NULL;
|
||||
int iopt;
|
||||
@ -291,7 +295,7 @@ main (argc, argv)
|
||||
}
|
||||
}
|
||||
|
||||
while ((iopt = getopt_long (argc, argv, "a:c:dehnI:l:op:s:tvx:z:",
|
||||
while ((iopt = getopt_long (argc, argv, "a:c:deE:hnI:l:op:s:tvx:z:",
|
||||
asCulongopts, (int *) NULL)) != EOF)
|
||||
{
|
||||
switch (iopt)
|
||||
@ -313,6 +317,11 @@ main (argc, argv)
|
||||
feven = TRUE;
|
||||
break;
|
||||
|
||||
case 'E':
|
||||
/* Escape character. */
|
||||
zCuvar_escape = optarg;
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
/* Local echo. */
|
||||
fCulocalecho = TRUE;
|
||||
@ -371,7 +380,7 @@ main (argc, argv)
|
||||
/* Print version and exit. */
|
||||
fprintf
|
||||
(stderr,
|
||||
"%s: Taylor UUCP %s, copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor\n",
|
||||
"%s: Taylor UUCP %s, copyright (C) 1991, 92, 93, 94, 1995 Ian Lance Taylor\n",
|
||||
zProgram, VERSION);
|
||||
exit (EXIT_SUCCESS);
|
||||
/*NOTREACHED*/
|
||||
@ -395,6 +404,11 @@ main (argc, argv)
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
/* --nostop. */
|
||||
txonxoff = XONXOFF_OFF;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
/* --help. */
|
||||
ucuhelp ();
|
||||
@ -531,6 +545,7 @@ main (argc, argv)
|
||||
{
|
||||
enum tparitysetting tparity;
|
||||
enum tstripsetting tstrip;
|
||||
long iusebaud;
|
||||
|
||||
/* The uuconf_find_port function only selects directly on a port
|
||||
name and a speed. To select based on the line name, we use a
|
||||
@ -599,6 +614,7 @@ main (argc, argv)
|
||||
if (! fsysdep_port_access (&sport))
|
||||
ulog (LOG_FATAL, "%s: Permission denied", zline);
|
||||
}
|
||||
iusebaud = ibaud;
|
||||
ihighbaud = 0L;
|
||||
}
|
||||
else
|
||||
@ -660,12 +676,12 @@ main (argc, argv)
|
||||
ulog (LOG_FATAL, "%s: No %smatching ports", zsystem, zrem);
|
||||
}
|
||||
|
||||
ibaud = qsys->uuconf_ibaud;
|
||||
iusebaud = qsys->uuconf_ibaud;
|
||||
ihighbaud = qsys->uuconf_ihighbaud;
|
||||
}
|
||||
|
||||
/* Here we have locked a connection to use. */
|
||||
if (! fconn_open (&sconn, ibaud, ihighbaud, FALSE))
|
||||
if (! fconn_open (&sconn, iusebaud, ihighbaud, FALSE))
|
||||
ucuabort ();
|
||||
|
||||
fCuclose_conn = TRUE;
|
||||
@ -695,7 +711,7 @@ main (argc, argv)
|
||||
tstrip = STRIPSETTING_DEFAULT;
|
||||
}
|
||||
|
||||
if (! fconn_set (&sconn, tparity, tstrip, XONXOFF_ON))
|
||||
if (! fconn_set (&sconn, tparity, tstrip, txonxoff))
|
||||
ucuabort ();
|
||||
|
||||
if (qsys != NULL)
|
||||
@ -815,7 +831,7 @@ static void
|
||||
ucuhelp ()
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Taylor UUCP %s, copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor\n",
|
||||
"Taylor UUCP %s, copyright (C) 1991, 92, 93, 94, 1995 Ian Lance Taylor\n",
|
||||
VERSION);
|
||||
fprintf (stderr,
|
||||
"Usage: %s [options] [system or phone-number]\n", zProgram);
|
||||
@ -835,8 +851,12 @@ ucuhelp ()
|
||||
" -o: Set odd parity\n");
|
||||
fprintf (stderr,
|
||||
" --parity={odd,even}: Set parity\n");
|
||||
fprintf (stderr,
|
||||
" -E,--escape char: Set escape character\n");
|
||||
fprintf (stderr,
|
||||
" -h,--halfduplex: Echo locally\n");
|
||||
fprintf (stderr,
|
||||
" --nostop: Turn off XON/XOFF handling\n");
|
||||
fprintf (stderr,
|
||||
" -t,--mapcr: Map carriage return to carriage return/linefeed\n");
|
||||
fprintf (stderr,
|
||||
@ -1012,7 +1032,7 @@ fcudo_cmd (puuconf, qconn, bcmd)
|
||||
{
|
||||
default:
|
||||
if (! isprint (*zCuvar_escape))
|
||||
sprintf (abescape, "\\%03o", (unsigned int) *zCuvar_escape);
|
||||
sprintf (abescape, "\\%03o", BUCHAR (*zCuvar_escape));
|
||||
else
|
||||
{
|
||||
abescape[0] = *zCuvar_escape;
|
||||
@ -1047,7 +1067,7 @@ fcudo_cmd (puuconf, qconn, bcmd)
|
||||
case '|': t = SHELL_STDIN_FROM_PORT; break;
|
||||
case '+': t = SHELL_STDIO_ON_PORT; break;
|
||||
}
|
||||
|
||||
|
||||
(void) fsysdep_shell (qconn, zline, t);
|
||||
}
|
||||
if (! fsysdep_cu_copy (TRUE)
|
||||
@ -1098,7 +1118,7 @@ fcudo_cmd (puuconf, qconn, bcmd)
|
||||
ucuabort ();
|
||||
fCurestore_terminal = TRUE;
|
||||
return TRUE;
|
||||
|
||||
|
||||
case 's':
|
||||
fret = fcuset_var (puuconf, zline);
|
||||
ubuffree (zline);
|
||||
@ -1110,7 +1130,7 @@ fcudo_cmd (puuconf, qconn, bcmd)
|
||||
|
||||
case '?':
|
||||
if (! isprint (*zCuvar_escape))
|
||||
sprintf (abescape, "\\%03o", (unsigned int) *zCuvar_escape);
|
||||
sprintf (abescape, "\\%03o", BUCHAR (*zCuvar_escape));
|
||||
else
|
||||
{
|
||||
abescape[0] = *zCuvar_escape;
|
||||
@ -1192,7 +1212,6 @@ fcuset_var (puuconf, zline)
|
||||
{
|
||||
char *zvar, *zval;
|
||||
char *azargs[2];
|
||||
char azbool[2];
|
||||
int iuuconf;
|
||||
|
||||
zvar = strtok (zline, "= \t");
|
||||
@ -1208,25 +1227,27 @@ fcuset_var (puuconf, zline)
|
||||
{
|
||||
azargs[0] = zvar;
|
||||
if (azargs[0][0] != '!')
|
||||
azbool[0] = 't';
|
||||
azargs[1] = zbufcpy ("t");
|
||||
else
|
||||
{
|
||||
++azargs[0];
|
||||
azbool[0] = 'f';
|
||||
azargs[1] = zbufcpy ("f");
|
||||
}
|
||||
azbool[1] = '\0';
|
||||
azargs[1] = azbool;
|
||||
}
|
||||
else
|
||||
{
|
||||
azargs[0] = zvar;
|
||||
azargs[1] = zval;
|
||||
azargs[1] = zbufcpy (zval);
|
||||
}
|
||||
|
||||
iuuconf = uuconf_cmd_args (puuconf, 2, azargs, asCuvars,
|
||||
(pointer) NULL, icuunrecogvar, 0,
|
||||
(pointer) NULL);
|
||||
if (iuuconf != UUCONF_SUCCESS)
|
||||
|
||||
if ((iuuconf & UUCONF_CMDTABRET_KEEP) == 0)
|
||||
ubuffree (azargs[1]);
|
||||
|
||||
if ((iuuconf &~ UUCONF_CMDTABRET_KEEP) != UUCONF_SUCCESS)
|
||||
ulog_uuconf (LOG_ERROR, puuconf, iuuconf);
|
||||
|
||||
return TRUE;
|
||||
@ -1246,7 +1267,7 @@ icuunrecogvar (puuconf, argc, argv, pvar, pinfo)
|
||||
char abescape[5];
|
||||
|
||||
if (! isprint (*zCuvar_escape))
|
||||
sprintf (abescape, "\\%03o", (unsigned int) *zCuvar_escape);
|
||||
sprintf (abescape, "\\%03o", BUCHAR (*zCuvar_escape));
|
||||
else
|
||||
{
|
||||
abescape[0] = *zCuvar_escape;
|
||||
@ -1301,7 +1322,7 @@ uculist_vars ()
|
||||
|
||||
if (! isprint (*z))
|
||||
{
|
||||
sprintf (abchar, "\\%03o", (unsigned int) *z);
|
||||
sprintf (abchar, "\\%03o", BUCHAR (*z));
|
||||
cchar = 4;
|
||||
}
|
||||
else
|
||||
@ -1413,7 +1434,7 @@ icuunrecogfn (puuconf, argc, argv, pvar, pinfo)
|
||||
char abescape[5];
|
||||
|
||||
if (! isprint (*zCuvar_escape))
|
||||
sprintf (abescape, "\\%03o", (unsigned int) *zCuvar_escape);
|
||||
sprintf (abescape, "\\%03o", BUCHAR (*zCuvar_escape));
|
||||
else
|
||||
{
|
||||
abescape[0] = *zCuvar_escape;
|
||||
@ -1651,7 +1672,7 @@ icuput (puuconf, argc, argv, pvar, pinfo)
|
||||
if (ffileeof (e))
|
||||
break;
|
||||
c = cfileread (e, abbuf, sizeof abbuf);
|
||||
if (ffilereaderror (e, c))
|
||||
if (ffileioerror (e, c))
|
||||
{
|
||||
ucuputs ("[file read error]");
|
||||
break;
|
||||
@ -1827,8 +1848,6 @@ icutake (puuconf, argc, argv, pvar, pinfo)
|
||||
return UUCONF_CMDTABRET_CONTINUE;
|
||||
}
|
||||
|
||||
ubuffree (zto);
|
||||
|
||||
if (! fsysdep_cu_copy (FALSE)
|
||||
|| ! fsysdep_terminal_signals (TRUE))
|
||||
ucuabort ();
|
||||
@ -1860,6 +1879,7 @@ icutake (puuconf, argc, argv, pvar, pinfo)
|
||||
{
|
||||
ucuputs ("[timed out waiting for newline]");
|
||||
ucuputs (abCuconnected);
|
||||
ubuffree (zto);
|
||||
return UUCONF_CMDTABRET_CONTINUE;
|
||||
}
|
||||
}
|
||||
@ -1883,7 +1903,7 @@ icutake (puuconf, argc, argv, pvar, pinfo)
|
||||
the future. */
|
||||
afSignal[INDEXSIG_SIGINT] = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
b = breceive_char (qconn, cCuvar_timeout, TRUE);
|
||||
if (b == -2)
|
||||
@ -1896,7 +1916,7 @@ icutake (puuconf, argc, argv, pvar, pinfo)
|
||||
break;
|
||||
}
|
||||
|
||||
if (b == '\r')
|
||||
if (b == '\r' && ! fCuvar_binary)
|
||||
continue;
|
||||
|
||||
if (ceoflen == 0)
|
||||
@ -1941,8 +1961,16 @@ icutake (puuconf, argc, argv, pvar, pinfo)
|
||||
|
||||
ubuffree (zlook);
|
||||
|
||||
if (! ffileclose (e))
|
||||
ferr = TRUE;
|
||||
if (! fsysdep_sync (e, zto))
|
||||
{
|
||||
(void) ffileclose (e);
|
||||
ferr = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! ffileclose (e))
|
||||
ferr = TRUE;
|
||||
}
|
||||
if (ferr)
|
||||
ucuputs ("[file write error]");
|
||||
|
||||
@ -1952,6 +1980,8 @@ icutake (puuconf, argc, argv, pvar, pinfo)
|
||||
|
||||
ucuputs (abCuconnected);
|
||||
|
||||
ubuffree (zto);
|
||||
|
||||
return UUCONF_CMDTABRET_CONTINUE;
|
||||
}
|
||||
|
||||
@ -2055,7 +2085,7 @@ fcusend_buf (qconn, zbufarg, cbufarg)
|
||||
*zput++ = *zget;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
zbuf += csend;
|
||||
cbuf -= csend;
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -17,6 +17,7 @@ dup2.c
|
||||
efopen.c
|
||||
epopen.c
|
||||
exists.c
|
||||
failed.c
|
||||
filnam.c
|
||||
fsusg.c
|
||||
fsusg.h
|
||||
@ -64,11 +65,15 @@ srmdir.c
|
||||
statsb.c
|
||||
status.c
|
||||
strerr.c
|
||||
sync.c
|
||||
tcp.c
|
||||
time.c
|
||||
tli.c
|
||||
tmpfil.c
|
||||
trunc.c
|
||||
uacces.c
|
||||
ufopen.c
|
||||
uid.c
|
||||
ultspl.c
|
||||
unknwn.c
|
||||
uuto.c
|
||||
|
@ -1,17 +1,17 @@
|
||||
# This subdirectory contains Unix specific support functions.
|
||||
# $Id: Makefile,v 1.2 1994/05/07 18:10:03 ache Exp $
|
||||
# $Id: Makefile,v 1.3 1995/05/13 12:57:23 ache Exp $
|
||||
|
||||
LIB= unix
|
||||
SRCS = access.c addbas.c app3.c app4.c basnam.c bytfre.c corrup.c \
|
||||
chmod.c cohtty.c cusub.c cwd.c detach.c efopen.c epopen.c \
|
||||
exists.c filnam.c fsusg.c indir.c init.c isdir.c isfork.c \
|
||||
iswait.c jobid.c lcksys.c link.c locfil.c lock.c loctim.c \
|
||||
mail.c mkdirs.c mode.c move.c opensr.c pause.c picksb.c pipe.c \
|
||||
portnm.c priv.c proctm.c recep.c run.c seq.c serial.c signal.c \
|
||||
sindir.c size.c sleep.c spawn.c splcmd.c splnam.c spool.c \
|
||||
srmdir.c statsb.c status.c time.c tmpfil.c trunc.c uacces.c \
|
||||
ufopen.c ultspl.c unknwn.c uuto.c walk.c wldcrd.c work.c \
|
||||
xqtfil.c xqtsub.c ftw.c
|
||||
exists.c failed.c filnam.c fsusg.c indir.c init.c isdir.c \
|
||||
isfork.c iswait.c jobid.c lcksys.c link.c locfil.c lock.c \
|
||||
loctim.c mail.c mkdirs.c mode.c move.c opensr.c pause.c \
|
||||
picksb.c pipe.c portnm.c priv.c proctm.c recep.c run.c seq.c \
|
||||
serial.c signal.c sindir.c size.c sleep.c spawn.c splcmd.c \
|
||||
splnam.c spool.c srmdir.c statsb.c status.c sync.c tcp.c \
|
||||
time.c tli.c tmpfil.c trunc.c uacces.c ufopen.c uid.c ultspl.c \
|
||||
unknwn.c uuto.c walk.c wldcrd.c work.c xqtfil.c xqtsub.c ftw.c
|
||||
CFLAGS+= -I$(.CURDIR)/../common_sources \
|
||||
-DOWNER=\"$(owner)\" -DSBINDIR=\"$(libxdir)\"
|
||||
|
||||
|
@ -7,6 +7,12 @@
|
||||
#include "sysdep.h"
|
||||
#include "fsusg.h"
|
||||
|
||||
#if HAVE_LIMITS_H
|
||||
#include <limits.h>
|
||||
#else
|
||||
#define LONG_MAX 2147483647
|
||||
#endif
|
||||
|
||||
long
|
||||
csysdep_bytes_free (zfile)
|
||||
const char *zfile;
|
||||
@ -15,5 +21,7 @@ csysdep_bytes_free (zfile)
|
||||
|
||||
if (get_fs_usage ((char *) zfile, (char *) NULL, &s) < 0)
|
||||
return -1;
|
||||
if (s.fsu_bavail >= LONG_MAX / (long) 512)
|
||||
return LONG_MAX;
|
||||
return s.fsu_bavail * (long) 512;
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
lightly edited by Ian Lance Taylor. */
|
||||
|
||||
/* The bottom part of this file is lock.c.
|
||||
* This is a hacked lock.c. A full lock.c can be found in the libmisc sources
|
||||
* This is a hacked lock.c. A full lock.c can be found in the libmisc sources
|
||||
* under /usr/src/misc.tar.Z.
|
||||
*
|
||||
* These are for checking for the existence of locks:
|
||||
@ -146,7 +146,7 @@ char enable_device[16]; /* this will hold our device name
|
||||
return TRUE;
|
||||
}else{
|
||||
/* device not enabled */
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -192,7 +192,7 @@ char *buff;
|
||||
{
|
||||
struct stat sbuf;
|
||||
int status;
|
||||
|
||||
|
||||
if (0 != (status = stat(path, &sbuf))) {
|
||||
/* Can't stat the file. */
|
||||
return (NULL);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* cusub.c
|
||||
System dependent routines for cu.
|
||||
|
||||
Copyright (C) 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char cusub_rcsid[] = "$Id: cusub.c,v 1.2 1994/05/07 18:10:14 ache Exp $";
|
||||
const char cusub_rcsid[] = "$Id: cusub.c,v 1.24 1995/06/21 19:18:53 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "uudefs.h"
|
||||
@ -330,7 +330,7 @@ fsysdep_cu (qconn, pbcmd, zlocalname)
|
||||
if (c <= 0)
|
||||
break;
|
||||
|
||||
if (fstart && b == *zCuvar_escape)
|
||||
if (fstart && b == *zCuvar_escape && b != '\0')
|
||||
{
|
||||
c = cscu_escape (pbcmd, zlocalname);
|
||||
if (c <= 0)
|
||||
@ -410,7 +410,7 @@ cscu_escape (pbcmd, zlocalname)
|
||||
usysdep_start_catch ();
|
||||
alarm (1);
|
||||
}
|
||||
|
||||
|
||||
c = 0;
|
||||
|
||||
while (TRUE)
|
||||
@ -426,7 +426,7 @@ cscu_escape (pbcmd, zlocalname)
|
||||
b = ']';
|
||||
write (1, &b, 1);
|
||||
}
|
||||
|
||||
|
||||
if (c <= 0)
|
||||
c = read (0, pbcmd, 1);
|
||||
if (c >= 0 || errno != EINTR)
|
||||
@ -437,7 +437,7 @@ cscu_escape (pbcmd, zlocalname)
|
||||
return c;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* A SIGALRM handler which does nothing but send a signal to the child
|
||||
process and schedule another alarm. POSIX.1 permits kill and alarm
|
||||
@ -715,7 +715,7 @@ uscu_child (qconn, opipe)
|
||||
cwrite -= c;
|
||||
zbuf += c;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* On some systems apparently read will return 0 until
|
||||
@ -788,7 +788,7 @@ fsysdep_terminal_raw (flocalecho)
|
||||
}
|
||||
|
||||
fSterm = TRUE;
|
||||
|
||||
|
||||
sSterm_new = sSterm_orig;
|
||||
|
||||
#if HAVE_BSD_TTY
|
||||
@ -1114,7 +1114,14 @@ fsysdep_shell (qconn, zcmd, tcmd)
|
||||
int aidescs[3];
|
||||
pid_t ipid;
|
||||
|
||||
azargs[0] = "/bin/sh";
|
||||
if (tcmd != SHELL_NORMAL)
|
||||
azargs[0] = "/bin/sh";
|
||||
else
|
||||
{
|
||||
azargs[0] = getenv ("SHELL");
|
||||
if (azargs[0] == NULL)
|
||||
azargs[0] = "/bin/sh";
|
||||
}
|
||||
if (zcmd == NULL || *zcmd == '\0')
|
||||
azargs[1] = NULL;
|
||||
else
|
||||
@ -1158,7 +1165,7 @@ fsysdep_shell (qconn, zcmd, tcmd)
|
||||
aidescs[0] = oread;
|
||||
if (tcmd == SHELL_STDOUT_TO_PORT || tcmd == SHELL_STDIO_ON_PORT)
|
||||
aidescs[1] = owrite;
|
||||
|
||||
|
||||
ipid = ixsspawn (azargs, aidescs, FALSE, TRUE, (const char *) NULL,
|
||||
FALSE, FALSE, (const char *) NULL,
|
||||
(const char *) NULL, (const char *) NULL);
|
||||
|
@ -37,7 +37,7 @@ zsysdep_local_file_cwd (zfile, zpubdir, pfbadname)
|
||||
return zsysdep_local_file (zfile, zpubdir, pfbadname);
|
||||
else
|
||||
return zsysdep_add_cwd (zfile);
|
||||
}
|
||||
}
|
||||
|
||||
/* Add the current working directory to a remote file name. */
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* detach.c
|
||||
Detach from the controlling terminal.
|
||||
|
||||
Copyright (C) 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -38,7 +38,7 @@
|
||||
#ifdef TIOCNOTTY
|
||||
#define HAVE_TIOCNOTTY 1
|
||||
#else
|
||||
#define HAVE_TIOCNOTTY 0
|
||||
#define HAVE_TIOCNOTTY 0
|
||||
#endif
|
||||
|
||||
#if HAVE_FCNTL_H
|
||||
@ -71,6 +71,11 @@ usysdep_detach ()
|
||||
{
|
||||
pid_t igrp;
|
||||
|
||||
/* Make sure that we can open the log file. We do this now so that,
|
||||
if we can't, a message will be written to stderr. After we leave
|
||||
this routine, stderr will be closed. */
|
||||
ulog (LOG_NORMAL, (const char *) NULL);
|
||||
|
||||
/* Make sure we are not a process group leader. */
|
||||
#if HAVE_BSD_PGRP
|
||||
igrp = getpgrp (0);
|
||||
@ -107,17 +112,24 @@ usysdep_detach ()
|
||||
if (! fignored)
|
||||
usset_signal (SIGHUP, ussignal, TRUE, (boolean *) NULL);
|
||||
|
||||
DEBUG_MESSAGE2 (DEBUG_PORT, "Forked; old PID %ld, new pid %ld",
|
||||
DEBUG_MESSAGE2 (DEBUG_PORT,
|
||||
"usysdep_detach: Forked; old PID %ld, new pid %ld",
|
||||
(long) igrp, (long) ipid);
|
||||
}
|
||||
|
||||
#if ! HAVE_SETSID && HAVE_TIOCNOTTY
|
||||
/* Lose the original controlling terminal as well as our process
|
||||
group. If standard input has been reopened to /dev/null, this
|
||||
will do no harm. If another port has been opened to become the
|
||||
controlling terminal, it should have been detached when it was
|
||||
closed. */
|
||||
(void) ioctl (0, TIOCNOTTY, (char *) NULL);
|
||||
group. */
|
||||
{
|
||||
int o;
|
||||
|
||||
o = open ((char *) "/dev/tty", O_RDONLY);
|
||||
if (o >= 0)
|
||||
{
|
||||
(void) ioctl (o, TIOCNOTTY, (char *) NULL);
|
||||
(void) close (o);
|
||||
}
|
||||
}
|
||||
#endif /* ! HAVE_SETSID && HAVE_TIOCNOTTY */
|
||||
|
||||
/* Close stdin, stdout and stderr and reopen them on /dev/null, to
|
||||
|
@ -18,10 +18,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -47,7 +47,7 @@ dup2 (oold, onew)
|
||||
if (oold == onew)
|
||||
return onew;
|
||||
(void) close (onew);
|
||||
|
||||
|
||||
#ifdef F_DUPFD
|
||||
return fcntl (oold, F_DUPFD, onew);
|
||||
#else
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -78,7 +78,7 @@ espopen (pazargs, frd, pipid)
|
||||
errno = ierr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
*pipid = ipid;
|
||||
|
||||
return eret;
|
||||
|
26
gnu/libexec/uucp/libunix/failed.c
Normal file
26
gnu/libexec/uucp/libunix/failed.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* failed.c
|
||||
Save a file in the .Failed directory. */
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#include "sysdep.h"
|
||||
#include "uudefs.h"
|
||||
#include "system.h"
|
||||
|
||||
char *
|
||||
zsysdep_save_failed_file (zfile)
|
||||
const char *zfile;
|
||||
{
|
||||
char *zto;
|
||||
|
||||
zto = zsappend3 (zSspooldir, FAILEDDIR, zfile);
|
||||
|
||||
if (! fsysdep_move_file (zfile, zto, TRUE, FALSE, FALSE,
|
||||
(const char *) NULL))
|
||||
{
|
||||
ubuffree (zto);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return zto;
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
/* filnam.c
|
||||
Get names to use for UUCP files.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -56,6 +56,23 @@
|
||||
#define SEEK_SET 0
|
||||
#endif
|
||||
|
||||
/* We use POSIX style fcntl locks if they are available, unless
|
||||
O_CREAT is not defined. We could use them in the latter case, but
|
||||
the code would have to become more complex to avoid races
|
||||
concerning the use of creat. It is very unlikely that there is any
|
||||
system which does have POSIX style locking but does not have
|
||||
O_CREAT. */
|
||||
#if ! HAVE_BROKEN_SETLKW
|
||||
#ifdef F_SETLKW
|
||||
#ifdef O_CREAT
|
||||
#define USE_POSIX_LOCKS 1
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#ifndef USE_POSIX_LOCKS
|
||||
#define USE_POSIX_LOCKS 0
|
||||
#endif
|
||||
|
||||
/* External functions. */
|
||||
#ifndef lseek
|
||||
extern off_t lseek ();
|
||||
@ -83,21 +100,31 @@ fscmd_seq (zsystem, zseq)
|
||||
const char *zsystem;
|
||||
char *zseq;
|
||||
{
|
||||
boolean ferr;
|
||||
int cdelay;
|
||||
char *zfree;
|
||||
const char *zfile;
|
||||
int o;
|
||||
boolean flockfile;
|
||||
int i;
|
||||
boolean fret;
|
||||
|
||||
/* Lock the sequence file. This may not be correct for all systems,
|
||||
but it only matters if the system UUCP and this UUCP are running
|
||||
at the same time. */
|
||||
while (! fsdo_lock ("LCK..SEQ", TRUE, &ferr))
|
||||
{
|
||||
if (ferr || FGOT_SIGNAL ())
|
||||
return FALSE;
|
||||
sleep (5);
|
||||
}
|
||||
cdelay = 5;
|
||||
|
||||
#if ! USE_POSIX_LOCKS
|
||||
{
|
||||
boolean ferr;
|
||||
|
||||
/* Lock the sequence file. */
|
||||
while (! fsdo_lock ("LCK..SEQ", TRUE, &ferr))
|
||||
{
|
||||
if (ferr || FGOT_SIGNAL ())
|
||||
return FALSE;
|
||||
sleep (cdelay);
|
||||
if (cdelay < 60)
|
||||
++cdelay;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
zfree = NULL;
|
||||
|
||||
@ -123,12 +150,12 @@ fscmd_seq (zsystem, zseq)
|
||||
#endif /* SPOOLDIR_TAYLOR */
|
||||
|
||||
#ifdef O_CREAT
|
||||
o = open ((char *) zfile, O_RDWR | O_CREAT | O_NOCTTY, IPUBLIC_FILE_MODE);
|
||||
o = open ((char *) zfile, O_RDWR | O_CREAT | O_NOCTTY, IPRIVATE_FILE_MODE);
|
||||
#else
|
||||
o = open ((char *) zfile, O_RDWR | O_NOCTTY);
|
||||
if (o < 0 && errno == ENOENT)
|
||||
{
|
||||
o = creat ((char *) zfile, IPUBLIC_FILE_MODE);
|
||||
o = creat ((char *) zfile, IPRIVATE_FILE_MODE);
|
||||
if (o >= 0)
|
||||
{
|
||||
(void) close (o);
|
||||
@ -143,15 +170,17 @@ fscmd_seq (zsystem, zseq)
|
||||
{
|
||||
if (! fsysdep_make_dirs (zfile, FALSE))
|
||||
{
|
||||
#if ! USE_POSIX_LOCKS
|
||||
(void) fsdo_unlock ("LCK..SEQ", TRUE);
|
||||
#endif
|
||||
return FALSE;
|
||||
}
|
||||
#ifdef O_CREAT
|
||||
o = open ((char *) zfile,
|
||||
O_RDWR | O_CREAT | O_NOCTTY,
|
||||
IPUBLIC_FILE_MODE);
|
||||
IPRIVATE_FILE_MODE);
|
||||
#else
|
||||
o = creat ((char *) zfile, IPUBLIC_FILE_MODE);
|
||||
o = creat ((char *) zfile, IPRIVATE_FILE_MODE);
|
||||
if (o >= 0)
|
||||
{
|
||||
(void) close (o);
|
||||
@ -162,11 +191,79 @@ fscmd_seq (zsystem, zseq)
|
||||
if (o < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "open (%s): %s", zfile, strerror (errno));
|
||||
#if ! USE_POSIX_LOCKS
|
||||
(void) fsdo_unlock ("LCK..SEQ", TRUE);
|
||||
#endif
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
#if ! USE_POSIX_LOCKS
|
||||
flockfile = TRUE;
|
||||
#else
|
||||
{
|
||||
struct flock slock;
|
||||
|
||||
flockfile = FALSE;
|
||||
|
||||
slock.l_type = F_WRLCK;
|
||||
slock.l_whence = SEEK_SET;
|
||||
slock.l_start = 0;
|
||||
slock.l_len = 0;
|
||||
while (fcntl (o, F_SETLKW, &slock) == -1)
|
||||
{
|
||||
boolean fagain;
|
||||
|
||||
/* Some systems define F_SETLKW, but it does not work. We try
|
||||
to catch those systems at runtime, and revert to using a
|
||||
lock file. */
|
||||
if (errno == EINVAL)
|
||||
{
|
||||
boolean ferr;
|
||||
|
||||
/* Lock the sequence file. */
|
||||
while (! fsdo_lock ("LCK..SEQ", TRUE, &ferr))
|
||||
{
|
||||
if (ferr || FGOT_SIGNAL ())
|
||||
{
|
||||
(void) close (o);
|
||||
return FALSE;
|
||||
}
|
||||
sleep (cdelay);
|
||||
if (cdelay < 60)
|
||||
++cdelay;
|
||||
}
|
||||
|
||||
flockfile = TRUE;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
fagain = FALSE;
|
||||
if (errno == ENOMEM)
|
||||
fagain = TRUE;
|
||||
#ifdef ENOLCK
|
||||
if (errno == ENOLCK)
|
||||
fagain = TRUE;
|
||||
#endif
|
||||
#ifdef ENOSPC
|
||||
if (errno == ENOSPC)
|
||||
fagain = TRUE;
|
||||
#endif
|
||||
if (fagain)
|
||||
{
|
||||
sleep (cdelay);
|
||||
if (cdelay < 60)
|
||||
++cdelay;
|
||||
continue;
|
||||
}
|
||||
ulog (LOG_ERROR, "Locking %s: %s", zfile, strerror (errno));
|
||||
(void) close (o);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (read (o, zseq, CSEQLEN) != CSEQLEN)
|
||||
strcpy (zseq, "0000");
|
||||
zseq[CSEQLEN] = '\0';
|
||||
@ -199,19 +296,24 @@ fscmd_seq (zsystem, zseq)
|
||||
}
|
||||
#endif /* SPOOLDIR_ULTRIX || SPOOLDIR_TAYLOR */
|
||||
|
||||
fret = TRUE;
|
||||
|
||||
if (lseek (o, (off_t) 0, SEEK_SET) < 0
|
||||
|| write (o, zseq, CSEQLEN) != CSEQLEN
|
||||
|| close (o) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "lseek or write or close: %s", strerror (errno));
|
||||
ulog (LOG_ERROR, "lseek or write or close %s: %s",
|
||||
zfile, strerror (errno));
|
||||
(void) close (o);
|
||||
(void) fsdo_unlock ("LCK..SEQ", TRUE);
|
||||
return FALSE;
|
||||
fret = FALSE;
|
||||
}
|
||||
|
||||
(void) fsdo_unlock ("LCK..SEQ", TRUE);
|
||||
if (flockfile)
|
||||
(void) fsdo_unlock ("LCK..SEQ", TRUE);
|
||||
|
||||
return TRUE;
|
||||
ubuffree (zfree);
|
||||
|
||||
return fret;
|
||||
}
|
||||
|
||||
/* Get the name of a command or data file for a remote system. The
|
||||
@ -266,9 +368,9 @@ zsfile_name (btype, zsystem, zlocalname, bgrade, fxqt, ztname, zdname, zxname)
|
||||
our system name so that remote UUCP's running SPOOLDIR_V2
|
||||
and the like can distinguish while files come from which
|
||||
systems. */
|
||||
#if SPOOLDIR_HDB || SPOOLDIR_SVR4
|
||||
#if SPOOLDIR_SVR4
|
||||
sprintf (absimple, "D.%.7s%c%s", zsystem, bgrade, abseq);
|
||||
#else /* ! SPOOLDIR_HDB && ! SPOOLDIR_SVR4 */
|
||||
#else /* ! SPOOLDIR_SVR4 */
|
||||
#if ! SPOOLDIR_TAYLOR
|
||||
sprintf (absimple, "D.%.7s%c%s", zlocalname, bgrade, abseq);
|
||||
#else /* SPOOLDIR_TAYLOR */
|
||||
@ -329,10 +431,41 @@ zsysdep_data_file_name (qsys, zlocalname, bgrade, fxqt, ztname, zdname,
|
||||
char *zdname;
|
||||
char *zxname;
|
||||
{
|
||||
return zsfile_name ('D', qsys->uuconf_zname, zlocalname, bgrade, fxqt,
|
||||
return zsfile_name ('D', qsys->uuconf_zname, zlocalname, bgrade, fxqt,
|
||||
ztname, zdname, zxname);
|
||||
}
|
||||
|
||||
#if SPOOLDIR_TAYLOR
|
||||
|
||||
/* Write out a number in base 62 into a given number of characters,
|
||||
right justified with zero fill. This is used by zscmd_file if
|
||||
SPOOLDIR_TAYLOR. */
|
||||
|
||||
static void usput62 P((long i, char *, int c));
|
||||
|
||||
static void
|
||||
usput62 (i, z, c)
|
||||
long i;
|
||||
char *z;
|
||||
int c;
|
||||
{
|
||||
for (--c; c >= 0; --c)
|
||||
{
|
||||
int d;
|
||||
|
||||
d = i % 62;
|
||||
i /= 62;
|
||||
if (d < 26)
|
||||
z[c] = 'A' + d;
|
||||
else if (d < 52)
|
||||
z[c] = 'a' + d - 26;
|
||||
else
|
||||
z[c] = '0' + d - 52;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SPOOLDIR_TAYLOR */
|
||||
|
||||
/* Get a command file name. */
|
||||
|
||||
char *
|
||||
@ -340,9 +473,84 @@ zscmd_file (qsys, bgrade)
|
||||
const struct uuconf_system *qsys;
|
||||
int bgrade;
|
||||
{
|
||||
#if ! SPOOLDIR_TAYLOR
|
||||
return zsfile_name ('C', qsys->uuconf_zname, (const char *) NULL,
|
||||
bgrade, FALSE, (char *) NULL, (char *) NULL,
|
||||
(char *) NULL);
|
||||
#else
|
||||
char *zname;
|
||||
long isecs, imicros;
|
||||
pid_t ipid;
|
||||
|
||||
/* This file name is never seen by the remote system, so we don't
|
||||
actually need to get a sequence number for it. We just need to
|
||||
get a file name which is unique for this system. We don't try
|
||||
this optimization for other spool directory formats, mainly due
|
||||
to compatibility concerns. It would be possible for HDB and SVR4
|
||||
spool directory formats.
|
||||
|
||||
We get a unique name by combining the process ID and the current
|
||||
time. The file name must start with C.g, where g is the grade.
|
||||
Note that although it is likely that this name will be unique, it
|
||||
is not guaranteed, so the caller must be careful. */
|
||||
|
||||
isecs = ixsysdep_time (&imicros);
|
||||
ipid = getpid ();
|
||||
|
||||
/* We are going to represent the file name as a series of numbers in
|
||||
base 62 (using the alphanumeric characters). The maximum file
|
||||
name length is 14 characters, so we may use 11. We use 3 for the
|
||||
seconds within the day, 3 for the microseconds, and 5 for the
|
||||
process ID. */
|
||||
|
||||
/* Cut the seconds down to a number within a day (maximum value
|
||||
86399 < 62 ** 3 == 238328). */
|
||||
isecs %= (long) 24 * (long) 60 * (long) 60;
|
||||
/* Divide the microseconds (max 999999) by 5 to make sure they are
|
||||
less than 62 ** 3. */
|
||||
imicros %= 1000000;
|
||||
imicros /= 5;
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
char ab[15];
|
||||
|
||||
ab[0] = 'C';
|
||||
ab[1] = '.';
|
||||
ab[2] = bgrade;
|
||||
usput62 (isecs, ab + 3, 3);
|
||||
usput62 (imicros, ab + 6, 3);
|
||||
usput62 ((long) ipid, ab + 9, 5);
|
||||
ab[14] = '\0';
|
||||
|
||||
zname = zsfind_file (ab, qsys->uuconf_zname, bgrade);
|
||||
if (zname == NULL)
|
||||
return NULL;
|
||||
|
||||
if (! fsysdep_file_exists (zname))
|
||||
break;
|
||||
|
||||
ubuffree (zname);
|
||||
|
||||
/* We hit a duplicate. Move backward in time until we find an
|
||||
available name. Note that there is still a theoretical race
|
||||
condition, since 5 base 62 digits might not be enough for the
|
||||
process ID, and some other process might be running these
|
||||
checks at the same time as we are. The caller must deal with
|
||||
this. */
|
||||
if (imicros == 0)
|
||||
{
|
||||
imicros = (long) 62 * (long) 62 * (long) 62;
|
||||
if (isecs == 0)
|
||||
isecs = (long) 62 * (long) 62 * (long) 62;
|
||||
--isecs;
|
||||
}
|
||||
--imicros;
|
||||
}
|
||||
|
||||
return zname;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Return a name for an execute file to be created locally. This is
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* fsusage.c -- return space usage of mounted filesystems
|
||||
Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -13,74 +13,70 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
This file was modified slightly by Ian Lance Taylor, December 1992,
|
||||
for use with Taylor UUCP. */
|
||||
and again July 1995, for use with Taylor UUCP. */
|
||||
|
||||
#include "uucp.h"
|
||||
#include "uudefs.h"
|
||||
#include "sysdep.h"
|
||||
#include "fsusg.h"
|
||||
|
||||
#if STAT_STATFS2_BSIZE
|
||||
#ifdef __FreeBSD__
|
||||
int statfs ();
|
||||
|
||||
#if HAVE_SYS_PARAM_H
|
||||
#include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_SYS_MOUNT_H
|
||||
#include <sys/mount.h>
|
||||
#else
|
||||
#ifndef _IBMR2 /* 4.3BSD, SunOS 4, HP-UX, AIX PS/2. */
|
||||
#endif
|
||||
|
||||
#if HAVE_SYS_VFS_H
|
||||
#include <sys/vfs.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HAVE_SYS_FILSYS_H
|
||||
#include <sys/filsys.h> /* SVR2. */
|
||||
#endif
|
||||
|
||||
#if STAT_STATFS2_FSIZE /* 4.4BSD. */
|
||||
#include <sys/mount.h>
|
||||
#if HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#if STAT_STATFS2_FS_DATA /* Ultrix. */
|
||||
#include <sys/param.h>
|
||||
#include <sys/mount.h>
|
||||
#endif
|
||||
|
||||
#if STAT_USTAT /* SVR2 and others. */
|
||||
#include <ustat.h>
|
||||
#endif
|
||||
|
||||
#if STAT_STATFS4 /* SVR3, Dynix, Irix. */
|
||||
#if HAVE_SYS_STATFS_H
|
||||
#include <sys/statfs.h>
|
||||
#endif
|
||||
#ifdef _AIX
|
||||
#ifdef _IBMR2 /* AIX RS6000. */
|
||||
#include <sys/statfs.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if STAT_DUSTAT /* AIX PS/2. */
|
||||
#include <sys/stat.h>
|
||||
#if HAVE_SYS_DUSTAT_H /* AIX PS/2. */
|
||||
#include <sys/dustat.h>
|
||||
#endif
|
||||
|
||||
#if STAT_STATVFS /* SVR4. */
|
||||
#if HAVE_SYS_STATVFS_H /* SVR4. */
|
||||
#include <sys/statvfs.h>
|
||||
int statvfs ();
|
||||
#endif
|
||||
|
||||
#if HAVE_USTAT_H /* SVR2 and others. */
|
||||
#include <ustat.h>
|
||||
#endif
|
||||
|
||||
#if STAT_DISK_SPACE /* QNX. */
|
||||
#include <sys/disk.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#endif
|
||||
|
||||
#define STAT_NONE 0
|
||||
|
||||
#if ! STAT_STATVFS
|
||||
#if ! STAT_STATFS3_OSF1
|
||||
#if ! STAT_STATFS2_FS_DATA
|
||||
#if ! STAT_STATFS2_BSIZE
|
||||
#if ! STAT_STATFS2_FSIZE
|
||||
#if ! STAT_STATFS2_FS_DATA
|
||||
#if ! STAT_STATFS4
|
||||
#if ! STAT_DUSTAT
|
||||
#if ! STAT_USTAT
|
||||
#if ! STAT_STATVFS
|
||||
#if ! STAT_DISK_SPACE
|
||||
#if ! STAT_USTAT
|
||||
#undef STAT_NONE
|
||||
#define STAT_NONE 1
|
||||
#endif
|
||||
@ -97,19 +93,25 @@
|
||||
static long adjust_blocks P((long blocks, int fromsize, int tosize));
|
||||
|
||||
/* Return the number of TOSIZE-byte blocks used by
|
||||
BLOCKS FROMSIZE-byte blocks, rounding up. */
|
||||
BLOCKS FROMSIZE-byte blocks, rounding away from zero.
|
||||
TOSIZE must be positive. Return -1 if FROMSIZE is not positive. */
|
||||
|
||||
static long
|
||||
adjust_blocks (blocks, fromsize, tosize)
|
||||
long blocks;
|
||||
int fromsize, tosize;
|
||||
{
|
||||
if (tosize <= 0)
|
||||
abort ();
|
||||
if (fromsize <= 0)
|
||||
return -1;
|
||||
|
||||
if (fromsize == tosize) /* E.g., from 512 to 512. */
|
||||
return blocks;
|
||||
else if (fromsize > tosize) /* E.g., from 2048 to 512. */
|
||||
return blocks * (fromsize / tosize);
|
||||
else /* E.g., from 256 to 512. */
|
||||
return (blocks + 1) / (tosize / fromsize);
|
||||
return (blocks + (blocks < 0 ? -1 : 1)) / (tosize / fromsize);
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -129,25 +131,33 @@ get_fs_usage (path, disk, fsp)
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
#if STAT_STATFS3_OSF1
|
||||
struct statfs fsd;
|
||||
|
||||
if (statfs (path, &fsd, sizeof (struct statfs)) != 0)
|
||||
return -1;
|
||||
#define CONVERT_BLOCKS(b) adjust_blocks ((b), fsd.f_fsize, 512)
|
||||
#endif /* STAT_STATFS3_OSF1 */
|
||||
|
||||
#if STAT_STATFS2_FS_DATA /* Ultrix. */
|
||||
struct fs_data fsd;
|
||||
|
||||
if (statfs (path, &fsd) != 1)
|
||||
return -1;
|
||||
#define convert_blocks(b) adjust_blocks ((long) (b), 1024, 512)
|
||||
fsp->fsu_blocks = convert_blocks (fsd.fd_req.btot);
|
||||
fsp->fsu_bfree = convert_blocks (fsd.fd_req.bfree);
|
||||
fsp->fsu_bavail = convert_blocks (fsd.fd_req.bfreen);
|
||||
#define CONVERT_BLOCKS(b) adjust_blocks ((long) (b), 1024, 512)
|
||||
fsp->fsu_blocks = CONVERT_BLOCKS (fsd.fd_req.btot);
|
||||
fsp->fsu_bfree = CONVERT_BLOCKS (fsd.fd_req.bfree);
|
||||
fsp->fsu_bavail = CONVERT_BLOCKS (fsd.fd_req.bfreen);
|
||||
fsp->fsu_files = fsd.fd_req.gtot;
|
||||
fsp->fsu_ffree = fsd.fd_req.gfree;
|
||||
#endif
|
||||
|
||||
#if STAT_STATFS2_BSIZE || STAT_DUSTAT /* 4.3BSD, SunOS 4, HP-UX, AIX. */
|
||||
#if STAT_STATFS2_BSIZE /* 4.3BSD, SunOS 4, HP-UX, AIX. */
|
||||
struct statfs fsd;
|
||||
|
||||
if (statfs (path, &fsd) < 0)
|
||||
return -1;
|
||||
#define convert_blocks(b) adjust_blocks ((b), fsd.f_bsize, 512)
|
||||
#define CONVERT_BLOCKS(b) adjust_blocks ((b), fsd.f_bsize, 512)
|
||||
#endif
|
||||
|
||||
#if STAT_STATFS2_FSIZE /* 4.4BSD. */
|
||||
@ -155,7 +165,7 @@ get_fs_usage (path, disk, fsp)
|
||||
|
||||
if (statfs (path, &fsd) < 0)
|
||||
return -1;
|
||||
#define convert_blocks(b) adjust_blocks ((b), fsd.f_fsize, 512)
|
||||
#define CONVERT_BLOCKS(b) adjust_blocks ((b), fsd.f_fsize, 512)
|
||||
#endif
|
||||
|
||||
#if STAT_STATFS4 /* SVR3, Dynix, Irix. */
|
||||
@ -166,10 +176,16 @@ get_fs_usage (path, disk, fsp)
|
||||
/* Empirically, the block counts on most SVR3 and SVR3-derived
|
||||
systems seem to always be in terms of 512-byte blocks,
|
||||
no matter what value f_bsize has. */
|
||||
#define convert_blocks(b) (b)
|
||||
#ifndef _SEQUENT_ /* _SEQUENT_ is DYNIX/ptx. */
|
||||
#define f_bavail f_bfree
|
||||
#endif
|
||||
# if _AIX
|
||||
# define CONVERT_BLOCKS(b) adjust_blocks ((b), fsd.f_bsize, 512)
|
||||
# else
|
||||
# define CONVERT_BLOCKS(b) (b)
|
||||
# ifndef _SEQUENT_ /* _SEQUENT_ is DYNIX/ptx. */
|
||||
# ifndef DOLPHIN /* DOLPHIN 3.8.alfa/7.18 has f_bavail */
|
||||
# define f_bavail f_bfree
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if STAT_STATVFS /* SVR4. */
|
||||
@ -178,7 +194,7 @@ get_fs_usage (path, disk, fsp)
|
||||
if (statvfs (path, &fsd) < 0)
|
||||
return -1;
|
||||
/* f_frsize isn't guaranteed to be supported. */
|
||||
#define convert_blocks(b) \
|
||||
#define CONVERT_BLOCKS(b) \
|
||||
adjust_blocks ((b), fsd.f_frsize ? fsd.f_frsize : fsd.f_bsize, 512)
|
||||
#endif
|
||||
|
||||
@ -188,7 +204,7 @@ get_fs_usage (path, disk, fsp)
|
||||
long cfree_blocks, ctotal_blocks;
|
||||
char *zpath;
|
||||
char *zslash;
|
||||
|
||||
|
||||
zpath = zbufcpy (path);
|
||||
while ((o = open (zpath, O_RDONLY, 0)) == -1
|
||||
&& errno == ENOENT)
|
||||
@ -247,7 +263,7 @@ get_fs_usage (path, disk, fsp)
|
||||
fsp->fsu_blocks = ctotal_blocks;
|
||||
fsp->fsu_bfree = cfree_blocks;
|
||||
fsp->fsu_bavail = cfree_blocks;
|
||||
|
||||
|
||||
/* QNX has no limit on the number of inodes. Most inodes are stored
|
||||
directly in the directory entry. */
|
||||
fsp->fsu_files = -1;
|
||||
@ -272,9 +288,9 @@ get_fs_usage (path, disk, fsp)
|
||||
#if ! STAT_DISK_SPACE
|
||||
#if ! STAT_USTAT
|
||||
#if ! STAT_NONE
|
||||
fsp->fsu_blocks = convert_blocks (fsd.f_blocks);
|
||||
fsp->fsu_bfree = convert_blocks (fsd.f_bfree);
|
||||
fsp->fsu_bavail = convert_blocks (fsd.f_bavail);
|
||||
fsp->fsu_blocks = CONVERT_BLOCKS (fsd.f_blocks);
|
||||
fsp->fsu_bfree = CONVERT_BLOCKS (fsd.f_bfree);
|
||||
fsp->fsu_bavail = CONVERT_BLOCKS (fsd.f_bavail);
|
||||
fsp->fsu_files = fsd.f_files;
|
||||
fsp->fsu_ffree = fsd.f_ffree;
|
||||
#endif
|
||||
@ -285,7 +301,8 @@ get_fs_usage (path, disk, fsp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if STAT_DUSTAT
|
||||
#ifdef _AIX
|
||||
#ifdef _I386
|
||||
/* AIX PS/2 does not supply statfs. */
|
||||
|
||||
int
|
||||
@ -311,4 +328,5 @@ statfs (path, fsb)
|
||||
fsb->f_fsid.val[1] = fsd.du_pckno;
|
||||
return 0;
|
||||
}
|
||||
#endif /* STAT_DUSTAT */
|
||||
#endif /* _I386 */
|
||||
#endif /* _AIX */
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
This files was modified slightly by Ian Lance Taylor for use with
|
||||
Taylor UUCP. */
|
||||
|
@ -14,8 +14,8 @@ Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA.
|
||||
not, write to the Free Software Foundation, Inc., 59 Temple Place -
|
||||
Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Modified by Ian Lance Taylor for Taylor UUCP, June 1992, and October 1993. */
|
||||
|
||||
@ -76,7 +76,7 @@ ftw_dir (dirs, level, descriptors, dir, len, func)
|
||||
{
|
||||
size_t namlen;
|
||||
struct stat s;
|
||||
int flag, ret, newlev;
|
||||
int flag, ret, newlev = 0;
|
||||
|
||||
++got;
|
||||
|
||||
|
@ -48,7 +48,7 @@ getcwd (zbuf, cbuf)
|
||||
cread = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (cread == 0)
|
||||
{
|
||||
errno = ierr;
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* isfork.c
|
||||
/* isfork.c
|
||||
Retry fork several times before giving up. */
|
||||
|
||||
#include "uucp.h"
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -134,7 +134,7 @@ ixswait (ipid, zreport)
|
||||
}
|
||||
}
|
||||
#endif /* ! HAVE_WAIT4 */
|
||||
#endif /* ! HAVE_WAITPID */
|
||||
#endif /* ! HAVE_WAITPID */
|
||||
|
||||
DEBUG_MESSAGE2 (DEBUG_EXECUTE, "%s %d",
|
||||
WIFEXITED (istat) ? "Exit status" : "Signal",
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* jobid.c
|
||||
Convert file names to jobids and vice versa.
|
||||
|
||||
Copyright (C) 1991, 1992 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -31,10 +31,7 @@
|
||||
#include "system.h"
|
||||
|
||||
/* Translate a file name and an associated system into a job id.
|
||||
These job ids are used by uustat. We use the system name attached
|
||||
to the grade and sequence number. This won't work correctly if the
|
||||
file name was actually created by some other version of uucp that
|
||||
uses a different length for the sequence number. Too bad. */
|
||||
These job ids are used by uustat. */
|
||||
|
||||
char *
|
||||
zsfile_to_jobid (qsys, zfile, bgrade)
|
||||
@ -46,10 +43,50 @@ zsfile_to_jobid (qsys, zfile, bgrade)
|
||||
char *zret;
|
||||
|
||||
clen = strlen (qsys->uuconf_zname);
|
||||
|
||||
#if ! SPOOLDIR_TAYLOR
|
||||
|
||||
/* We use the system name attached to the grade and sequence number.
|
||||
This won't work correctly if the file name was actually created
|
||||
by some other version of uucp that uses a different length for
|
||||
the sequence number. Too bad. */
|
||||
|
||||
zret = zbufalc (clen + CSEQLEN + 2);
|
||||
memcpy (zret, qsys->uuconf_zname, clen);
|
||||
zret[clen] = bgrade;
|
||||
memcpy (zret + clen + 1, zfile + strlen (zfile) - CSEQLEN, CSEQLEN + 1);
|
||||
|
||||
#else
|
||||
|
||||
/* We use the system name followed by a dot, the grade, and the
|
||||
sequence number. In this case, the sequence number is a long
|
||||
string. */
|
||||
|
||||
{
|
||||
size_t cseqlen;
|
||||
|
||||
/* zfile is SYS/C./C.gseq. */
|
||||
zfile = strrchr (zfile, '/');
|
||||
|
||||
#if DEBUG > 0
|
||||
if (zfile == NULL
|
||||
|| zfile[1] != 'C'
|
||||
|| zfile[2] != '.'
|
||||
|| zfile[3] == '\0')
|
||||
ulog (LOG_FATAL, "zsfile_to_jobid: Can't happen");
|
||||
#endif
|
||||
|
||||
/* Make zfile point at .gseq. */
|
||||
zfile += 2;
|
||||
|
||||
cseqlen = strlen (zfile);
|
||||
zret = zbufalc (clen + cseqlen + 1);
|
||||
memcpy (zret, qsys->uuconf_zname, clen);
|
||||
memcpy (zret + clen, zfile, cseqlen + 1);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
return zret;
|
||||
}
|
||||
|
||||
@ -61,6 +98,7 @@ zsjobid_to_file (zid, pzsystem, pbgrade)
|
||||
char **pzsystem;
|
||||
char *pbgrade;
|
||||
{
|
||||
#if ! SPOOLDIR_TAYLOR
|
||||
size_t clen;
|
||||
const char *zend;
|
||||
char *zsys;
|
||||
@ -81,11 +119,7 @@ zsjobid_to_file (zid, pzsystem, pbgrade)
|
||||
zsys[clen - CSEQLEN - 1] = '\0';
|
||||
|
||||
/* This must correspond to zsfile_name. */
|
||||
#if ! SPOOLDIR_TAYLOR
|
||||
sprintf (abname, "C.%.7s%s", zsys, zend);
|
||||
#else
|
||||
sprintf (abname, "C.%s", zend);
|
||||
#endif
|
||||
|
||||
zret = zsfind_file (abname, zsys, *zend);
|
||||
|
||||
@ -98,4 +132,38 @@ zsjobid_to_file (zid, pzsystem, pbgrade)
|
||||
*pbgrade = *zend;
|
||||
|
||||
return zret;
|
||||
#else /* SPOOLDIR_TAYLOR */
|
||||
char *zdot;
|
||||
size_t csyslen;
|
||||
char *zsys;
|
||||
char ab[15];
|
||||
char *zret;
|
||||
|
||||
zdot = strrchr (zid, '.');
|
||||
if (zdot == NULL)
|
||||
{
|
||||
ulog (LOG_ERROR, "%s: Bad job id", zid);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
csyslen = zdot - zid;
|
||||
zsys = zbufalc (csyslen + 1);
|
||||
memcpy (zsys, zid, csyslen);
|
||||
zsys[csyslen] = '\0';
|
||||
|
||||
ab[0] = 'C';
|
||||
strcpy (ab + 1, zdot);
|
||||
|
||||
zret = zsfind_file (ab, zsys, zdot[1]);
|
||||
|
||||
if (zret != NULL && pzsystem != NULL)
|
||||
*pzsystem = zsys;
|
||||
else
|
||||
ubuffree (zsys);
|
||||
|
||||
if (pbgrade != NULL)
|
||||
*pbgrade = zdot[1];
|
||||
|
||||
return zret;
|
||||
#endif /* SPOOLDIR_TAYLOR */
|
||||
}
|
||||
|
@ -8,21 +8,39 @@
|
||||
#include "sysdep.h"
|
||||
#include "system.h"
|
||||
|
||||
/* Get the name of a system lock file. */
|
||||
/* Do the actual lock or unlock. */
|
||||
|
||||
static char *zssys_lock_name P((const struct uuconf_system *qsys, char *z));
|
||||
static boolean fslock_sys P((boolean, const char *));
|
||||
|
||||
#define LOCKNAMELEN (sizeof "LCK..12345678")
|
||||
|
||||
static char *
|
||||
zssys_lock_name (qsys, z)
|
||||
const struct uuconf_system *qsys;
|
||||
char *z;
|
||||
static boolean
|
||||
fslock_sys (flock, zname)
|
||||
boolean flock;
|
||||
const char *zname;
|
||||
{
|
||||
strcpy (z, "LCK..");
|
||||
strncpy (z + sizeof "LCK.." - 1, qsys->uuconf_zname, 8);
|
||||
z[sizeof "LCK.." - 1 + 8] = '\0';
|
||||
return z;
|
||||
size_t clen;
|
||||
char *z;
|
||||
boolean fret;
|
||||
|
||||
clen = strlen (zname);
|
||||
|
||||
#if ! HAVE_LONG_FILE_NAMES
|
||||
if (clen > 8)
|
||||
clen = 8;
|
||||
#endif
|
||||
|
||||
z = zbufalc (sizeof "LCK.." + clen);
|
||||
memcpy (z, "LCK..", sizeof "LCK.." - 1);
|
||||
memcpy (z + sizeof "LCK.." - 1, zname, clen);
|
||||
z[sizeof "LCK.." - 1 + clen] = '\0';
|
||||
|
||||
if (flock)
|
||||
fret = fsdo_lock (z, FALSE, (boolean *) NULL);
|
||||
else
|
||||
fret = fsdo_unlock (z, FALSE);
|
||||
|
||||
ubuffree (z);
|
||||
|
||||
return fret;
|
||||
}
|
||||
|
||||
/* Lock a remote system. */
|
||||
@ -31,9 +49,7 @@ boolean
|
||||
fsysdep_lock_system (qsys)
|
||||
const struct uuconf_system *qsys;
|
||||
{
|
||||
char ab[LOCKNAMELEN];
|
||||
|
||||
return fsdo_lock (zssys_lock_name (qsys, ab), FALSE, (boolean *) NULL);
|
||||
return fslock_sys (TRUE, qsys->uuconf_zname);
|
||||
}
|
||||
|
||||
/* Unlock a remote system. */
|
||||
@ -42,7 +58,5 @@ boolean
|
||||
fsysdep_unlock_system (qsys)
|
||||
const struct uuconf_system *qsys;
|
||||
{
|
||||
char ab[LOCKNAMELEN];
|
||||
|
||||
return fsdo_unlock (zssys_lock_name (qsys, ab), FALSE);
|
||||
return fslock_sys (FALSE, qsys->uuconf_zname);
|
||||
}
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -77,7 +77,7 @@ zsysdep_local_file (zfile, zpubdir, pfbadname)
|
||||
zcopy = zbufalc (cuserlen + 1);
|
||||
memcpy (zcopy, zfile, cuserlen);
|
||||
zcopy[cuserlen] = '\0';
|
||||
|
||||
|
||||
q = getpwnam (zcopy);
|
||||
if (q == NULL)
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* lock.c
|
||||
Lock and unlock a file name.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char lock_rcsid[] = "$Id: lock.c,v 1.2 1994/05/07 18:10:40 ache Exp $";
|
||||
const char lock_rcsid[] = "$Id: lock.c,v 1.20 1995/06/21 19:19:38 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "uudefs.h"
|
||||
@ -34,6 +34,7 @@ const char lock_rcsid[] = "$Id: lock.c,v 1.2 1994/05/07 18:10:40 ache Exp $";
|
||||
#include "system.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#if HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
@ -178,7 +179,7 @@ fsdo_lock (zlock, fspooldir, pferr)
|
||||
}
|
||||
|
||||
#if HAVE_QNX_LOCKFILES
|
||||
sprintf (ab, "%10ld %10ld\n", (long) ime, (long) inid);
|
||||
sprintf (ab, "%10ld %10ld\n", (long) ime, (long) inme);
|
||||
cwrote = write (o, ab, strlen (ab));
|
||||
#else
|
||||
#if HAVE_V2_LOCKFILES
|
||||
@ -274,6 +275,25 @@ fsdo_lock (zlock, fspooldir, pferr)
|
||||
break;
|
||||
}
|
||||
|
||||
#if DEBUG > 0
|
||||
#if HAVE_V2_LOCKFILES
|
||||
{
|
||||
char ab[10];
|
||||
|
||||
if (read (o, ab, sizeof ab) > 4
|
||||
&& isdigit (BUCHAR (ab[0])))
|
||||
ulog (LOG_ERROR,
|
||||
"Lock file %s may be HDB format; check LOCKFILES in policy.h",
|
||||
zpath);
|
||||
}
|
||||
#else
|
||||
if (cgot == 4)
|
||||
ulog (LOG_ERROR,
|
||||
"Lock file %s may be V2 format; check LOCKFILES in policy.h",
|
||||
zpath);
|
||||
#endif
|
||||
#endif /* DEBUG > 0 */
|
||||
|
||||
#if HAVE_QNX_LOCKFILES
|
||||
ab[cgot] = '\0';
|
||||
ipid = (pid_t) strtol (ab, &zend, 10);
|
||||
@ -308,17 +328,23 @@ fsdo_lock (zlock, fspooldir, pferr)
|
||||
}
|
||||
}
|
||||
|
||||
/* If the lock file is empty (cgot == 0), we assume that it is
|
||||
stale. This can happen if the system crashed after the lock
|
||||
file was created but before the process ID was written out. */
|
||||
if (cgot > 0)
|
||||
{
|
||||
#if HAVE_QNX_LOCKFILES
|
||||
if (! fsqnx_stale ((unsigned long) ipid, (unsigned long) inme,
|
||||
(unsigned long) inid, pferr))
|
||||
break;
|
||||
if (! fsqnx_stale ((unsigned long) ipid, (unsigned long) inme,
|
||||
(unsigned long) inid, pferr))
|
||||
break;
|
||||
#else
|
||||
/* If the process still exists, we will get EPERM rather than
|
||||
ESRCH. We then return FALSE to indicate that we cannot make
|
||||
the lock. */
|
||||
if (kill (ipid, 0) == 0 || errno == EPERM)
|
||||
break;
|
||||
/* If the process still exists, we will get EPERM rather
|
||||
than ESRCH. We then return FALSE to indicate that we
|
||||
cannot make the lock. */
|
||||
if (kill (ipid, 0) == 0 || errno == EPERM)
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (fstat (o, &st) < 0)
|
||||
strcpy (abtime, "unknown");
|
||||
@ -411,7 +437,7 @@ fsdo_lock (zlock, fspooldir, pferr)
|
||||
}
|
||||
|
||||
#if HAVE_QNX_LOCKFILES
|
||||
sprintf (ab, "%10ld %10ld\n", (long) ime, (long) inid);
|
||||
sprintf (ab, "%10ld %10ld\n", (long) ime, (long) inme);
|
||||
cwrote = write (o, ab, strlen (ab));
|
||||
#else
|
||||
#if HAVE_V2_LOCKFILES
|
||||
@ -620,7 +646,7 @@ fsqnx_stale (ipid, inme, inid, pferr)
|
||||
/* Use the local pid of the local process manager. */
|
||||
ivid = PROC_PID;
|
||||
}
|
||||
|
||||
|
||||
/* Request the process information. */
|
||||
ifound_pid = qnx_psinfo (ivid /* process manager handling request */,
|
||||
ipid /* get info on this process */,
|
||||
@ -636,7 +662,7 @@ fsqnx_stale (ipid, inme, inid, pferr)
|
||||
strerror (errno));
|
||||
errno = isaved_errno;
|
||||
}
|
||||
|
||||
|
||||
/* If the returned pid matches then the process still holds the lock. */
|
||||
if ((ifound_pid == ipid) && (spsdata.pid == ipid))
|
||||
return FALSE;
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
@ -28,9 +28,18 @@ fsysdep_make_dirs (zfile, fpublic)
|
||||
{
|
||||
if (*z == '/' && z != zcopy)
|
||||
{
|
||||
/* Some versions of uuto will send a double slash. Some
|
||||
systems will fail to create a directory ending in a
|
||||
slash. */
|
||||
if (z[-1] == '/')
|
||||
continue;
|
||||
*z = '\0';
|
||||
if (mkdir (zcopy, imode) != 0
|
||||
&& errno != EEXIST
|
||||
&& errno != EISDIR
|
||||
#ifdef EROFS
|
||||
&& errno != EROFS
|
||||
#endif
|
||||
&& (errno != EACCES || ! fsysdep_directory (zcopy)))
|
||||
{
|
||||
ulog (LOG_ERROR, "mkdir (%s): %s", zcopy,
|
||||
@ -38,10 +47,7 @@ fsysdep_make_dirs (zfile, fpublic)
|
||||
ubuffree (zcopy);
|
||||
return FALSE;
|
||||
}
|
||||
*z = '/'; /* replace '/' in its place */
|
||||
/* now skips over multiple '/' in name */
|
||||
while ( (*(z + 1)) && (*(z + 1)) == '/')
|
||||
z++;
|
||||
*z = '/';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -152,7 +152,7 @@ fsysdep_move_file (zorig, zto, fmkdirs, fpublic, fcheck, zuser)
|
||||
}
|
||||
(void) close (o);
|
||||
|
||||
if (! fcopy_file (zorig, zto, fpublic, fmkdirs))
|
||||
if (! fcopy_file (zorig, zto, fpublic, fmkdirs, FALSE))
|
||||
return FALSE;
|
||||
|
||||
if (remove (zorig) != 0)
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -75,7 +75,7 @@ esysdep_open_send (qsys, zfile, fcheck, zuser)
|
||||
struct stat s;
|
||||
openfile_t e;
|
||||
int o;
|
||||
|
||||
|
||||
if (fsysdep_directory (zfile))
|
||||
{
|
||||
ulog (LOG_ERROR, "%s: is a directory", zfile);
|
||||
@ -148,7 +148,7 @@ zsysdep_receive_temp (qsys, zto, ztemp, frestart)
|
||||
return zsappend3 (".Temp", qsys->uuconf_zname, ztemp);
|
||||
else
|
||||
return zstemp_file (qsys);
|
||||
}
|
||||
}
|
||||
|
||||
/* The number of seconds in one week. We must cast to long for this
|
||||
to be calculated correctly on a machine with 16 bit ints. */
|
||||
|
@ -7,27 +7,29 @@
|
||||
#include "system.h"
|
||||
|
||||
/* Pick a timing routine to use. I somewhat arbitrarily picked usleep
|
||||
above nap above napms above poll above select. */
|
||||
#if HAVE_USLEEP || HAVE_NAP || HAVE_NAPMS || HAVE_POLL
|
||||
above napms above poll above select above nap. The nap function is
|
||||
last because on different systems the argument has different
|
||||
meanings. */
|
||||
#if HAVE_USLEEP || HAVE_NAPMS || HAVE_POLL || HAVE_SELECT
|
||||
#undef HAVE_NAP
|
||||
#define HAVE_NAP 0
|
||||
#endif
|
||||
|
||||
#if HAVE_USLEEP || HAVE_NAPMS || HAVE_POLL
|
||||
#undef HAVE_SELECT
|
||||
#define HAVE_SELECT 0
|
||||
#endif
|
||||
|
||||
#if HAVE_USLEEP || HAVE_NAP || HAVE_NAPMS
|
||||
#if HAVE_USLEEP || HAVE_NAPMS
|
||||
#undef HAVE_POLL
|
||||
#define HAVE_POLL 0
|
||||
#endif
|
||||
|
||||
#if HAVE_USLEEP || HAVE_NAP
|
||||
#if HAVE_USLEEP
|
||||
#undef HAVE_NAPMS
|
||||
#define HAVE_NAPMS 0
|
||||
#endif
|
||||
|
||||
#if HAVE_USLEEP
|
||||
#undef HAVE_NAP
|
||||
#define HAVE_NAP 0
|
||||
#endif
|
||||
|
||||
#if HAVE_SELECT
|
||||
#if HAVE_SYS_TIME_H
|
||||
#include <sys/time.h>
|
||||
@ -81,6 +83,7 @@ usysdep_pause ()
|
||||
|
||||
/* We need to pass an unused pollfd structure because poll checks
|
||||
the address before checking the number of elements. */
|
||||
memset (&sdummy, 0, sizeof sdummy);
|
||||
poll (&sdummy, 0, 500);
|
||||
#endif /* HAVE_POLL */
|
||||
#if HAVE_SELECT
|
||||
|
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char picksb_rcsid[] = "$Id: picksb.c,v 1.2 1994/05/07 18:10:54 ache Exp $";
|
||||
const char picksb_rcsid[] = "$Id: picksb.c,v 1.10 1995/06/21 19:19:54 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "uudefs.h"
|
||||
@ -219,7 +219,7 @@ zsysdep_uupick_local_file (zfile, pfbadname)
|
||||
if (zfile[0] != '~'
|
||||
|| (zfile[1] != '/' && zfile[1] != '\0'))
|
||||
return zsysdep_local_file_cwd (zfile, (const char *) NULL, pfbadname);
|
||||
|
||||
|
||||
q = getpwuid (getuid ());
|
||||
if (q == NULL)
|
||||
{
|
||||
|
@ -18,16 +18,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char pipe_rcsid[] = "$Id: pipe.c,v 1.4 1994/03/25 04:09:30 ian Rel $";
|
||||
const char pipe_rcsid[] = "$Id: pipe.c,v 1.6 1995/06/21 19:19:57 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "uudefs.h"
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* recep.c
|
||||
See whether a file has already been received.
|
||||
|
||||
Copyright (C) 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -50,7 +50,7 @@ static char *zsreceived_name P((const struct uuconf_system *qsys,
|
||||
/* These routines are used to see whether we have already received a
|
||||
file in a previous UUCP connection. It is possible for the
|
||||
acknowledgement of a received file to be lost. The sending system
|
||||
will then now know that the file was correctly received, and will
|
||||
will then not know that the file was correctly received, and will
|
||||
send it again. This can be a problem particularly with protocols
|
||||
which support channels, since they may send several small files in
|
||||
a single window, all of which may be received correctly although
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -68,7 +68,7 @@ ixsysdep_get_sequence (qsys)
|
||||
ubuffree (zname);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
e = fopen (zname, "r+");
|
||||
if (e == NULL)
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* serial.c
|
||||
The serial port communication routines for Unix.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1994, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char serial_rcsid[] = "$Id: serial.c,v 1.4 1994/05/07 18:11:09 ache Exp $";
|
||||
const char serial_rcsid[] = "$Id: serial.c,v 1.65 1995/08/10 00:53:54 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "uudefs.h"
|
||||
@ -82,7 +82,7 @@ const char serial_rcsid[] = "$Id: serial.c,v 1.4 1994/05/07 18:11:09 ache Exp $"
|
||||
#include <sys/ioctl.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_BSD_TTY
|
||||
#if HAVE_SELECT
|
||||
#if HAVE_SYS_TIME_H
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
@ -92,7 +92,7 @@ const char serial_rcsid[] = "$Id: serial.c,v 1.4 1994/05/07 18:11:09 ache Exp $"
|
||||
#endif
|
||||
|
||||
#if HAVE_TIME_H
|
||||
#if ! HAVE_SYS_TIME_H || ! HAVE_BSD_TTY || TIME_WITH_SYS_TIME
|
||||
#if ! HAVE_SYS_TIME_H || ! HAVE_SELECT || TIME_WITH_SYS_TIME
|
||||
#include <time.h>
|
||||
#endif
|
||||
#endif
|
||||
@ -517,6 +517,9 @@ boolean
|
||||
fsysdep_stdin_init (qconn)
|
||||
struct sconnection *qconn;
|
||||
{
|
||||
/* chmod /dev/tty to prevent other users from writing messages to
|
||||
it. This is essentially `mesg n'. */
|
||||
(void) chmod ("/dev/tty", S_IRUSR | S_IWUSR);
|
||||
return fsserial_init (qconn, &sstdincmds, (const char *) NULL);
|
||||
}
|
||||
|
||||
@ -647,7 +650,7 @@ fsserial_lockfile (flok, qconn)
|
||||
strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
zalc = zbufalc (sizeof "LK.123.123.123");
|
||||
zalc = zbufalc (sizeof "LK.1234567890.1234567890.1234567890");
|
||||
sprintf (zalc, "LK.%03d.%03d.%03d", major (s.st_dev),
|
||||
major (s.st_rdev), minor (s.st_rdev));
|
||||
z = zalc;
|
||||
@ -860,7 +863,7 @@ fsserial_unlock (qconn)
|
||||
}
|
||||
qsysdep->o = -1;
|
||||
}
|
||||
|
||||
|
||||
if (! fsserial_lockfile (FALSE, qconn))
|
||||
fret = FALSE;
|
||||
|
||||
@ -1748,7 +1751,7 @@ fsmodem_carrier (qconn, fcarrier)
|
||||
return FALSE;
|
||||
|
||||
#ifdef TIOCNCAR
|
||||
/* Tell the modem to ignore carrier. */
|
||||
/* Tell the modem to ignore carrier. */
|
||||
if (ioctl (q->o, TIOCNCAR, 0) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "ioctl (TIOCNCAR): %s", strerror (errno));
|
||||
@ -1782,19 +1785,19 @@ fsmodem_carrier (qconn, fcarrier)
|
||||
ulog (LOG_ERROR, "Can't set CLOCAL: %s", strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
#if HAVE_CLOCAL_BUG
|
||||
/* On SCO and AT&T UNIX PC you have to reopen the port. */
|
||||
{
|
||||
int onew;
|
||||
|
||||
|
||||
onew = open (q->zdevice, O_RDWR);
|
||||
if (onew < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "open (%s): %s", q->zdevice, strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (fcntl (onew, F_SETFD,
|
||||
fcntl (onew, F_GETFD, 0) | FD_CLOEXEC) < 0)
|
||||
{
|
||||
@ -1817,8 +1820,9 @@ fsmodem_carrier (qconn, fcarrier)
|
||||
/* Tell the port to use hardware flow control. There is no standard
|
||||
mechanism for controlling this. This implementation supports
|
||||
CRTSCTS on SunOS, RTS/CTSFLOW on 386(ish) unix, CTSCD on the 3b1,
|
||||
and TXADDCD/TXDELCD on AIX. If you know how to do it on other
|
||||
systems, please implement it and send me the patches. */
|
||||
CCTS_OFLOW/CRTS_IFLOW on BSDI, TXADDCD/TXDELCD on AIX, and IRTS on
|
||||
NCR Tower. If you know how to do it on other systems, please
|
||||
implement it and send me the patches. */
|
||||
|
||||
static boolean
|
||||
fsserial_hardflow (qconn, fhardflow)
|
||||
@ -1841,12 +1845,16 @@ fsserial_hardflow (qconn, fhardflow)
|
||||
#ifndef CRTSFL
|
||||
#ifndef CRTSCTS
|
||||
#ifndef CTSCD
|
||||
#ifndef CCTS_OFLOW
|
||||
#ifndef IRTS
|
||||
#define HAVE_HARDFLOW 0
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_HARDFLOW
|
||||
#define HAVE_HARDFLOW 1
|
||||
@ -1871,6 +1879,12 @@ fsserial_hardflow (qconn, fhardflow)
|
||||
#ifdef CTSCD
|
||||
q->snew.c_cflag |= CTSCD;
|
||||
#endif /* defined (CTSCD) */
|
||||
#ifdef CCTS_OFLOW
|
||||
q->snew.c_cflag |= CCTS_OFLOW | CRTS_IFLOW;
|
||||
#endif
|
||||
#ifdef IRTS
|
||||
q->snew.c_iflag |= IRTS;
|
||||
#endif
|
||||
#endif /* HAVE_SYSV_TERMIO || HAVE_POSIX_TERMIOS */
|
||||
if (! fsetterminfo (q->o, &q->snew))
|
||||
{
|
||||
@ -1898,6 +1912,12 @@ fsserial_hardflow (qconn, fhardflow)
|
||||
#ifdef CTSCD
|
||||
q->snew.c_cflag &=~ CTSCD;
|
||||
#endif /* defined (CTSCD) */
|
||||
#ifdef CCTS_OFLOW
|
||||
q->snew.c_cflag &=~ (CCTS_OFLOW | CRTS_IFLOW);
|
||||
#endif
|
||||
#ifdef IRTS
|
||||
q->snew.c_iflag &=~ IRTS;
|
||||
#endif
|
||||
#endif /* HAVE_SYSV_TERMIO || HAVE_POSIX_TERMIOS */
|
||||
if (! fsetterminfo (q->o, &q->snew))
|
||||
{
|
||||
@ -2001,7 +2021,7 @@ fsysdep_modem_end_dial (qconn, qdial)
|
||||
errors. */
|
||||
{
|
||||
int onew;
|
||||
|
||||
|
||||
onew = open (q->zdevice, O_RDWR);
|
||||
if (onew >= 0)
|
||||
{
|
||||
@ -2039,7 +2059,7 @@ fsysdep_modem_end_dial (qconn, qdial)
|
||||
#endif /* ! defined (TIOCWONLINE) */
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Read data from a connection, with a timeout. This routine handles
|
||||
@ -2562,7 +2582,10 @@ fsysdep_conn_io (qconn, zwrite, pcwrite, zread, pcread)
|
||||
write up to SINGLE_WRITE bytes
|
||||
if all data written, return
|
||||
if no data written
|
||||
blocked write of up to SINGLE_WRITE bytes
|
||||
if select works
|
||||
select on the write descriptor with a ten second timeout
|
||||
else
|
||||
blocked write of one byte with a ten second alarm
|
||||
|
||||
This algorithm should work whether the system supports
|
||||
unblocked writes on terminals or not. If the system supports
|
||||
@ -2572,7 +2595,28 @@ fsysdep_conn_io (qconn, zwrite, pcwrite, zread, pcread)
|
||||
then the write may hang so long that incoming data is lost.
|
||||
This is actually possible at high baud rates on any system
|
||||
when a blocking write is done; there is no solution, except
|
||||
hardware handshaking. */
|
||||
hardware handshaking.
|
||||
|
||||
If we were not able to write any data, then we need to block
|
||||
until we can write something. The code used to simply do a
|
||||
blocking write. However, that fails when a bidirectional
|
||||
protocol is permitted to push out enough bytes to fill the
|
||||
entire pipe between the two communicating uucico processes.
|
||||
They can both block on writing, because neither is reading.
|
||||
|
||||
In this case, we use select. We could select on both the
|
||||
read and write descriptor, but on some systems that would
|
||||
lead to calling read on each byte, which would be very
|
||||
inefficient. Instead, we select only on the write
|
||||
descriptor. After the select succeeds or times out, we retry
|
||||
the read.
|
||||
|
||||
Of course, some systems don't have select, and on some
|
||||
systems that have it it doesn't work on terminal devices. If
|
||||
we can't use select, then we do a blocked write of a single
|
||||
byte after setting an alarm. We only write a single byte to
|
||||
avoid any confusion as to whether or not the byte was
|
||||
actually written. */
|
||||
|
||||
/* If we are running on standard input, we switch the file
|
||||
descriptors by hand. */
|
||||
@ -2717,38 +2761,105 @@ fsysdep_conn_io (qconn, zwrite, pcwrite, zread, pcread)
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We didn't write any data. Do a blocking write. */
|
||||
#if HAVE_SELECT
|
||||
struct timeval stime;
|
||||
int imask;
|
||||
int c;
|
||||
|
||||
if (q->ord >= 0)
|
||||
q->o = q->ord;
|
||||
/* We didn't write any data. Call select. We use a timeout
|
||||
long enough for 1024 bytes to be sent.
|
||||
secs/kbyte == (1024 bytes/kbyte * 10 bits/byte) / baud bits/sec
|
||||
usecs/kbyte == (((1024 bytes/kbyte * 1000000 usecs/sec)
|
||||
/ baud bits/sec)
|
||||
* 10 bits/byte)
|
||||
*/
|
||||
stime.tv_sec = (long) 10240 / q->ibaud;
|
||||
stime.tv_usec = ((((long) 1024000000 / q->ibaud) * (long) 10)
|
||||
% (long) 1000000);
|
||||
|
||||
if (! fsblock (q, TRUE))
|
||||
imask = 1 << q->o;
|
||||
if (imask == 0)
|
||||
ulog (LOG_FATAL, "fsysdep_conn_io: File descriptors too large");
|
||||
|
||||
/* If we've received a signal, don't continue. */
|
||||
if (FGOT_QUIT_SIGNAL ())
|
||||
return FALSE;
|
||||
|
||||
cdo = cwrite;
|
||||
if (cdo > SINGLE_WRITE)
|
||||
cdo = SINGLE_WRITE;
|
||||
DEBUG_MESSAGE0 (DEBUG_PORT, "fsysdep_conn_io: Calling select");
|
||||
|
||||
DEBUG_MESSAGE1 (DEBUG_PORT,
|
||||
"fsysdep_conn_io: Blocking write of %lu",
|
||||
(unsigned long) cdo);
|
||||
|
||||
if (q->owr >= 0)
|
||||
q->o = q->owr;
|
||||
|
||||
/* Loop until we get something besides EINTR. */
|
||||
while (TRUE)
|
||||
/* We don't bother to loop on EINTR. If we get a signal, we
|
||||
just loop around and try the read and write again. */
|
||||
c = select (q->o + 1, (pointer) NULL, (pointer) &imask,
|
||||
(pointer) NULL, &stime);
|
||||
if (c < 0 && errno == EINTR)
|
||||
{
|
||||
/* We got interrupted by a signal. Log it. */
|
||||
ulog (LOG_ERROR, (const char *) NULL);
|
||||
}
|
||||
else if (c >= 0)
|
||||
{
|
||||
/* The select either discovered that we could write
|
||||
something, or it timed out. Either way, we go around
|
||||
the main read/write loop again. */
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_SELECT */
|
||||
{
|
||||
int ierr;
|
||||
|
||||
/* Either the select failed for some reason other than
|
||||
EINTR, or the system does not support select at all.
|
||||
Fall back on a timed write. We don't worry about why
|
||||
the select might have failed, we just assume that it
|
||||
will not succeed on this descriptor. */
|
||||
|
||||
#if HAVE_RESTARTABLE_SYSCALLS
|
||||
/* If HAVE_RESTARTABLE_SYSCALLS, then receiving an alarm
|
||||
signal in the middle of a write will not cause the
|
||||
write to return EINTR, and the only way to interrupt
|
||||
the write is to longjmp out of it (see sysh.unx).
|
||||
That is unreliable, because it means that we won't
|
||||
know whether the byte was actually written or not.
|
||||
However, I believe that the only system on which we
|
||||
need to do this longjmp is BSD 4.2, and that system
|
||||
supports select, so we should never execute this
|
||||
case. */
|
||||
ulog (LOG_FATAL, "fsysdep_conn_io: Unsupported case; see code");
|
||||
#endif
|
||||
|
||||
if (q->ord >= 0)
|
||||
q->o = q->ord;
|
||||
|
||||
if (! fsblock (q, TRUE))
|
||||
return FALSE;
|
||||
|
||||
DEBUG_MESSAGE0 (DEBUG_PORT, "fsysdep_conn_io: Blocking write");
|
||||
|
||||
if (q->owr >= 0)
|
||||
q->o = q->owr;
|
||||
|
||||
/* If we've received a signal, don't continue. */
|
||||
if (FGOT_QUIT_SIGNAL ())
|
||||
return FALSE;
|
||||
|
||||
/* Start up an alarm to interrupt the write. Note that
|
||||
we don't need to use the catch stuff, since we know
|
||||
that HAVE_RESTARTABLE_SYSCALLS is 0. */
|
||||
usset_signal (SIGALRM, usalarm, TRUE, (boolean *) NULL);
|
||||
alarm ((int) ((long) 10240 / q->ibaud) + 1);
|
||||
|
||||
/* There is a race condition here: on a severely loaded
|
||||
system, we could get the alarm before we start the
|
||||
write call. This would not be a disaster; often the
|
||||
write will succeed anyhow. */
|
||||
#if HAVE_TLI
|
||||
if (q->ftli)
|
||||
{
|
||||
cdid = t_snd (q->o, (char *) zwrite, cdo, 0);
|
||||
cdid = t_snd (q->o, (char *) zwrite, 1, 0);
|
||||
if (cdid < 0 && t_errno != TSYSERR)
|
||||
{
|
||||
usset_signal (SIGALRM, SIG_IGN, TRUE, (boolean *) NULL);
|
||||
alarm (0);
|
||||
ulog (LOG_ERROR, "t_snd: %s",
|
||||
(t_errno >= 0 && t_errno < t_nerr
|
||||
? t_errlist[t_errno]
|
||||
@ -2758,44 +2869,54 @@ fsysdep_conn_io (qconn, zwrite, pcwrite, zread, pcread)
|
||||
}
|
||||
else
|
||||
#endif
|
||||
cdid = write (q->o, zwrite, cdo);
|
||||
cdid = write (q->o, zwrite, 1);
|
||||
|
||||
if (cdid >= 0)
|
||||
break;
|
||||
if (errno != EINTR)
|
||||
break;
|
||||
ierr = errno;
|
||||
|
||||
/* We got interrupted by a signal. Log it. */
|
||||
ulog (LOG_ERROR, (const char *) NULL);
|
||||
}
|
||||
/* Note that we don't really care whether the write
|
||||
finished because the byte was written out or whether
|
||||
it finished because the alarm was triggered. Either
|
||||
way, we are going to loop around and try another
|
||||
read. */
|
||||
|
||||
if (cdid < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "write: %s", strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
usset_signal (SIGALRM, SIG_IGN, TRUE, (boolean *) NULL);
|
||||
alarm (0);
|
||||
|
||||
if (cdid == 0)
|
||||
{
|
||||
/* On some systems write will return 0 if carrier is
|
||||
lost. If we fail to write anything ten times in a
|
||||
row, we assume that this has happened. This is
|
||||
hacked in like this because there seems to be no
|
||||
reliable way to tell exactly why the write returned
|
||||
0. */
|
||||
++czero;
|
||||
if (czero >= 10)
|
||||
if (cdid < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "Line disconnected");
|
||||
return FALSE;
|
||||
if (ierr == EINTR)
|
||||
{
|
||||
/* We got interrupted by a signal. Log it. */
|
||||
ulog (LOG_ERROR, (const char *) NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
ulog (LOG_ERROR, "write: %s", strerror (ierr));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else if (cdid == 0)
|
||||
{
|
||||
/* On some systems write will return 0 if carrier is
|
||||
lost. If we fail to write anything ten times in
|
||||
a row, we assume that this has happened. This is
|
||||
hacked in like this because there seems to be no
|
||||
reliable way to tell exactly why the write
|
||||
returned 0. */
|
||||
++czero;
|
||||
if (czero >= 10)
|
||||
{
|
||||
ulog (LOG_ERROR, "Line disconnected");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cwrite -= cdid;
|
||||
zwrite += cdid;
|
||||
*pcwrite += cdid;
|
||||
czero = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cwrite -= cdid;
|
||||
zwrite += cdid;
|
||||
*pcwrite += cdid;
|
||||
czero = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2937,7 +3058,7 @@ fsserial_set (qconn, tparity, tstrip, txonxoff)
|
||||
/* Not supported. */
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (fdo)
|
||||
{
|
||||
if ((q->snew.c_cflag & iset) != iset
|
||||
@ -2973,7 +3094,7 @@ fsserial_set (qconn, tparity, tstrip, txonxoff)
|
||||
}
|
||||
#endif
|
||||
|
||||
#else /* ! HAVE_BSD_TTY */
|
||||
#else /* ! HAVE_BSD_TTY */
|
||||
|
||||
fdo = FALSE;
|
||||
switch (tstrip)
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* spawn.c
|
||||
Spawn a program securely.
|
||||
|
||||
Copyright (C) 1992, 1993, 1994 Ian Lance Taylor
|
||||
Copyright (C) 1992, 1993, 1994, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -147,7 +147,7 @@ ixsspawn (pazargs, aidescs, fkeepuid, fkeepenv, zchdir, fnosigs, fshell,
|
||||
zspace = azenv[0] + sizeof "PATH=" - 1;
|
||||
while ((zspace = strchr (zspace, ' ')) != NULL)
|
||||
*zspace = ':';
|
||||
|
||||
|
||||
azenv[1] = zbufalc (sizeof "HOME=" + strlen (zSspooldir));
|
||||
sprintf (azenv[1], "HOME=%s", zSspooldir);
|
||||
|
||||
@ -158,7 +158,7 @@ ixsspawn (pazargs, aidescs, fkeepuid, fkeepenv, zchdir, fnosigs, fshell,
|
||||
sprintf (azenv[2], "TERM=%s", zterm);
|
||||
|
||||
azenv[3] = zbufcpy ("SHELL=/bin/sh");
|
||||
|
||||
|
||||
azenv[4] = zbufalc (sizeof "USER=" + strlen (OWNER));
|
||||
sprintf (azenv[4], "USER=%s", OWNER);
|
||||
|
||||
@ -275,7 +275,7 @@ ixsspawn (pazargs, aidescs, fkeepuid, fkeepenv, zchdir, fnosigs, fshell,
|
||||
ierr = errno;
|
||||
ferr = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -360,12 +360,22 @@ ixsspawn (pazargs, aidescs, fkeepuid, fkeepenv, zchdir, fnosigs, fshell,
|
||||
{
|
||||
/* Try to force the UUCP uid to be both real and effective user
|
||||
ID, in order to present a consistent environment regardless
|
||||
of the invoking user. This won't work on System V based
|
||||
systems, but it will do no harm. It would be possible to use
|
||||
a setuid root program to force the UID setting, but I don't
|
||||
think the efficiency loss is worth it. */
|
||||
of the invoking user. This won't work on older System V
|
||||
based systems, where it can cause trouble if ordinary users
|
||||
wind up executing uuxqt, perhaps via uucico; any program
|
||||
which uuxqt executes will have an arbitrary real user ID, so
|
||||
if the program is itself a setuid program, any security
|
||||
checks it does based on the real user ID will be incorrect.
|
||||
Fixing this problem would seem to require a special setuid
|
||||
root program; I have not used this approach because
|
||||
modern systems should not suffer from it. */
|
||||
#if HAVE_SETREUID
|
||||
(void) setreuid (geteuid (), -1);
|
||||
(void) setregid (getegid (), -1);
|
||||
#else
|
||||
(void) setuid (geteuid ());
|
||||
(void) setgid (getegid ());
|
||||
#endif
|
||||
}
|
||||
|
||||
if (zchdir != NULL)
|
||||
@ -406,7 +416,7 @@ ixsspawn (pazargs, aidescs, fkeepuid, fkeepenv, zchdir, fnosigs, fshell,
|
||||
{
|
||||
char *zto;
|
||||
const char *azshargs[4];
|
||||
|
||||
|
||||
pazargs[0] = zcmd;
|
||||
zto = zshcmd;
|
||||
for (i = 0; pazargs[i] != NULL; i++)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* splcmd.c
|
||||
Spool a command.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -104,6 +104,14 @@ zsysdep_spool_commands (qsys, bgrade, ccmds, pascmds)
|
||||
}
|
||||
}
|
||||
|
||||
if (! fstdiosync (e, ztemp))
|
||||
{
|
||||
(void) fclose (e);
|
||||
(void) remove (ztemp);
|
||||
ubuffree (ztemp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (fclose (e) != 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "fclose: %s", strerror (errno));
|
||||
@ -112,23 +120,37 @@ zsysdep_spool_commands (qsys, bgrade, ccmds, pascmds)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
z = zscmd_file (qsys, bgrade);
|
||||
if (z == NULL)
|
||||
/* The filename returned by zscmd_file is subject to some unlikely
|
||||
race conditions, so keep trying the link until the destination
|
||||
file does not already exist. Each call to zscmd_file should
|
||||
return a file name which does not already exist, so we don't have
|
||||
to do anything special before calling it again. */
|
||||
while (TRUE)
|
||||
{
|
||||
(void) remove (ztemp);
|
||||
ubuffree (ztemp);
|
||||
return NULL;
|
||||
}
|
||||
z = zscmd_file (qsys, bgrade);
|
||||
if (z == NULL)
|
||||
{
|
||||
(void) remove (ztemp);
|
||||
ubuffree (ztemp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (link (ztemp, z) >= 0)
|
||||
break;
|
||||
|
||||
if (errno != EEXIST)
|
||||
{
|
||||
ulog (LOG_ERROR, "link (%s, %s): %s", ztemp, z, strerror (errno));
|
||||
(void) remove (ztemp);
|
||||
ubuffree (ztemp);
|
||||
ubuffree (z);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (! fsysdep_move_file (ztemp, z, FALSE, FALSE, FALSE,
|
||||
(const char *) NULL))
|
||||
{
|
||||
(void) remove (ztemp);
|
||||
ubuffree (ztemp);
|
||||
ubuffree (z);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
(void) remove (ztemp);
|
||||
ubuffree (ztemp);
|
||||
|
||||
zjobid = zsfile_to_jobid (qsys, z, bgrade);
|
||||
|
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char spool_rcsid[] = "$Id: spool.c,v 1.2 1994/05/07 18:11:24 ache Exp $";
|
||||
const char spool_rcsid[] = "$Id: spool.c,v 1.11 1995/06/30 21:22:54 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "uudefs.h"
|
||||
@ -41,7 +41,7 @@ const char spool_rcsid[] = "$Id: spool.c,v 1.2 1994/05/07 18:11:24 ache Exp $";
|
||||
Command files
|
||||
These contain instructions for uucico indicating what files to transfer
|
||||
to and from what systems. Each line of a work file is a command
|
||||
beginning with S, R or X.
|
||||
beginning with S, R, X, or E.
|
||||
#if ! SPOOLDIR_TAYLOR
|
||||
They are named C.ssssssgqqqq, where ssssss is the system name to
|
||||
transfer to or from, g is the grade and qqqq is the sequence number.
|
||||
@ -55,15 +55,17 @@ const char spool_rcsid[] = "$Id: spool.c,v 1.2 1994/05/07 18:11:24 ache Exp $";
|
||||
#elif SPOOLDIR_ULTRIX
|
||||
If the directory sys/ssssss exists, they are put in the directory
|
||||
sys/ssssss/C; otherwise, they are put in the directory sys/DEFAULT/C.
|
||||
#endif
|
||||
#elif SPOOLDIR_SVR4
|
||||
They are put in the directory sys/g, where sys is the system name
|
||||
and g is the grade.
|
||||
#endif
|
||||
#else SPOOLDIR_TAYLOR
|
||||
They are named C.gqqqq, where g is the grade and qqqq is the sequence
|
||||
number, and are placed in the directory ssssss/C. where ssssss is
|
||||
the system name to transfer to or from.
|
||||
They are named C.gqqqq, where g is the grade and qqqq is the
|
||||
sequence number, and are placed in the directory ssssss/C. where
|
||||
ssssss is the system name to transfer to or from. The sequence
|
||||
number for a C. file is actually a long string; it is not based on
|
||||
the sequence number file, but is generated via a process which
|
||||
attempts to produce a unique string each time it is run.
|
||||
#endif
|
||||
|
||||
Data files
|
||||
@ -287,7 +289,7 @@ zsfind_file (zsimple, zsystem, bgrade)
|
||||
{
|
||||
size_t c;
|
||||
boolean ftruncated;
|
||||
|
||||
|
||||
/* D.LOCAL in D.LOCAL/, others in D./. If BSD43, D.LOCALX in
|
||||
D.LOCALX/. */
|
||||
ftruncated = TRUE;
|
||||
@ -336,7 +338,7 @@ zsfind_file (zsimple, zsystem, bgrade)
|
||||
char *zfree;
|
||||
const char *zdir;
|
||||
char *zret;
|
||||
|
||||
|
||||
/* D.LOCALX in D.LOCALX/, D.LOCAL in D.LOCAL/, others in D./. */
|
||||
ftruncated = TRUE;
|
||||
if (strncmp (zsimple + 2, zSlocalname, strlen (zSlocalname)) == 0)
|
||||
@ -380,7 +382,7 @@ zsfind_file (zsimple, zsystem, bgrade)
|
||||
zfree = NULL;
|
||||
zdir = "D.";
|
||||
}
|
||||
|
||||
|
||||
zret = zsappend4 ("sys",
|
||||
(fsultrix_has_spool (zsystem)
|
||||
? zsystem
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -69,7 +69,7 @@ fsysdep_rmdir (zdir)
|
||||
while (q != NULL)
|
||||
{
|
||||
struct sdirlist *qnext;
|
||||
|
||||
|
||||
if (rmdir (q->zdir) != 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "rmdir (%s): %s", q->zdir, strerror (errno));
|
||||
|
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char statsb_rcsid[] = "$Id: statsb.c,v 1.17 1994/04/10 22:06:10 ian Rel $";
|
||||
const char statsb_rcsid[] = "$Id: statsb.c,v 1.19 1995/06/21 19:20:39 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "uudefs.h"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* status.c
|
||||
Routines to get and set the status for a system.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -31,6 +31,7 @@
|
||||
#include "system.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#if SPOOLDIR_HDB || SPOOLDIR_SVR4
|
||||
|
||||
@ -104,6 +105,7 @@ fsysdep_get_status (qsys, qret, pfnone)
|
||||
qret->cretries = 0;
|
||||
qret->ilast = 0;
|
||||
qret->cwait = 0;
|
||||
qret->zstring = NULL;
|
||||
if (pfnone != NULL)
|
||||
*pfnone = TRUE;
|
||||
ubuffree (zname);
|
||||
@ -157,6 +159,33 @@ fsysdep_get_status (qsys, qret, pfnone)
|
||||
if (zend == znext)
|
||||
fbad = TRUE;
|
||||
|
||||
if (! fbad)
|
||||
{
|
||||
znext = zend;
|
||||
while (isspace (BUCHAR (*znext)))
|
||||
++znext;
|
||||
if (*znext == '\0')
|
||||
qret->zstring = NULL;
|
||||
else
|
||||
{
|
||||
if (*znext == '"')
|
||||
++znext;
|
||||
qret->zstring = zbufcpy (znext);
|
||||
zend = qret->zstring + strlen (qret->zstring);
|
||||
while (zend != qret->zstring && *zend != ' ')
|
||||
--zend;
|
||||
if (*zend == '"' && zend != qret->zstring)
|
||||
--zend;
|
||||
if (zend != qret->zstring)
|
||||
*zend = '\0';
|
||||
else
|
||||
{
|
||||
ubuffree (qret->zstring);
|
||||
qret->zstring = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
xfree ((pointer) zline);
|
||||
|
||||
if (fbad)
|
||||
@ -199,9 +228,16 @@ fsysdep_set_status (qsys, qset)
|
||||
istat = aiMapstatus[istat];
|
||||
#endif /* MAP_STATUS */
|
||||
|
||||
fprintf (e, "%d %d %ld %d %s %s\n", istat, qset->cretries,
|
||||
qset->ilast, qset->cwait, azStatus[(int) qset->ttype],
|
||||
qsys->uuconf_zname);
|
||||
fprintf (e, "%d %d %ld %d ", istat, qset->cretries, qset->ilast,
|
||||
qset->cwait);
|
||||
|
||||
#if SPOOLDIR_SVR4
|
||||
fprintf (e, "\"%s\"", azStatus[(int) qset->ttype]);
|
||||
#else
|
||||
fprintf (e, "%s", azStatus[(int) qset->ttype]);
|
||||
#endif
|
||||
|
||||
fprintf (e, " %s\n", qsys->uuconf_zname);
|
||||
if (fclose (e) != 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "fclose: %s", strerror (errno));
|
||||
|
42
gnu/libexec/uucp/libunix/sync.c
Normal file
42
gnu/libexec/uucp/libunix/sync.c
Normal file
@ -0,0 +1,42 @@
|
||||
/* sync.c
|
||||
Sync a file to disk, if FSYNC_ON_CLOSE is set. */
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#include "uudefs.h"
|
||||
#include "sysdep.h"
|
||||
#include "system.h"
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
boolean
|
||||
fsysdep_sync (e, zmsg)
|
||||
openfile_t e;
|
||||
const char *zmsg;
|
||||
{
|
||||
int o;
|
||||
|
||||
#if USE_STDIO
|
||||
if (fflush (e) == EOF)
|
||||
{
|
||||
ulog (LOG_ERROR, "%s: fflush: %s", zmsg, strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if USE_STDIO
|
||||
o = fileno (e);
|
||||
#else
|
||||
o = e;
|
||||
#endif
|
||||
|
||||
#if FSYNC_ON_CLOSE
|
||||
if (fsync (o) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "%s: fsync: %s", zmsg, strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
return TRUE;
|
||||
}
|
444
gnu/libexec/uucp/libunix/tcp.c
Normal file
444
gnu/libexec/uucp/libunix/tcp.c
Normal file
@ -0,0 +1,444 @@
|
||||
/* tcp.c
|
||||
Code to handle TCP connections.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char tcp_rcsid[] = "$Id: tcp.c,v 1.5 1995/06/21 19:20:46 ian Rel $";
|
||||
#endif
|
||||
|
||||
#if HAVE_TCP
|
||||
|
||||
#include "uudefs.h"
|
||||
#include "uuconf.h"
|
||||
#include "sysdep.h"
|
||||
#include "conn.h"
|
||||
#include "system.h"
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#if HAVE_SYS_TYPES_TCP_H
|
||||
#include <sys/types.tcp.h>
|
||||
#endif
|
||||
#include <sys/socket.h>
|
||||
#include <netdb.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#if HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#else
|
||||
#if HAVE_SYS_FILE_H
|
||||
#include <sys/file.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef FD_CLOEXEC
|
||||
#define FD_CLOEXEC 1
|
||||
#endif
|
||||
|
||||
/* This code handles TCP connections. It assumes a Berkeley socket
|
||||
interface. */
|
||||
|
||||
/* The normal "uucp" port number. */
|
||||
#define IUUCP_PORT (540)
|
||||
|
||||
/* Local functions. */
|
||||
static void utcp_free P((struct sconnection *qconn));
|
||||
static boolean ftcp_open P((struct sconnection *qconn, long ibaud,
|
||||
boolean fwait));
|
||||
static boolean ftcp_close P((struct sconnection *qconn,
|
||||
pointer puuconf,
|
||||
struct uuconf_dialer *qdialer,
|
||||
boolean fsuccess));
|
||||
static boolean ftcp_dial P((struct sconnection *qconn, pointer puuconf,
|
||||
const struct uuconf_system *qsys,
|
||||
const char *zphone,
|
||||
struct uuconf_dialer *qdialer,
|
||||
enum tdialerfound *ptdialer));
|
||||
static int itcp_port_number P((const char *zport));
|
||||
|
||||
/* The command table for a TCP connection. */
|
||||
static const struct sconncmds stcpcmds =
|
||||
{
|
||||
utcp_free,
|
||||
NULL, /* pflock */
|
||||
NULL, /* pfunlock */
|
||||
ftcp_open,
|
||||
ftcp_close,
|
||||
ftcp_dial,
|
||||
fsysdep_conn_read,
|
||||
fsysdep_conn_write,
|
||||
fsysdep_conn_io,
|
||||
NULL, /* pfbreak */
|
||||
NULL, /* pfset */
|
||||
NULL, /* pfcarrier */
|
||||
fsysdep_conn_chat,
|
||||
NULL /* pibaud */
|
||||
};
|
||||
|
||||
/* Initialize a TCP connection. */
|
||||
|
||||
boolean
|
||||
fsysdep_tcp_init (qconn)
|
||||
struct sconnection *qconn;
|
||||
{
|
||||
struct ssysdep_conn *q;
|
||||
|
||||
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->iwr_flags = -1;
|
||||
q->fterminal = FALSE;
|
||||
q->ftli = FALSE;
|
||||
q->ibaud = 0;
|
||||
|
||||
qconn->psysdep = (pointer) q;
|
||||
qconn->qcmds = &stcpcmds;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Free a TCP connection. */
|
||||
|
||||
static void
|
||||
utcp_free (qconn)
|
||||
struct sconnection *qconn;
|
||||
{
|
||||
xfree (qconn->psysdep);
|
||||
}
|
||||
|
||||
/* Open a TCP connection. If the fwait argument is TRUE, we are
|
||||
running as a server. Otherwise we are just trying to reach another
|
||||
system. */
|
||||
|
||||
static boolean
|
||||
ftcp_open (qconn, ibaud, fwait)
|
||||
struct sconnection *qconn;
|
||||
long ibaud;
|
||||
boolean fwait;
|
||||
{
|
||||
struct ssysdep_conn *qsysdep;
|
||||
struct sockaddr_in s;
|
||||
const char *zport;
|
||||
uid_t ieuid;
|
||||
boolean fswap;
|
||||
|
||||
ulog_device ("TCP");
|
||||
|
||||
qsysdep = (struct ssysdep_conn *) qconn->psysdep;
|
||||
|
||||
qsysdep->o = socket (AF_INET, SOCK_STREAM, 0);
|
||||
if (qsysdep->o < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "socket: %s", strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (fcntl (qsysdep->o, F_SETFD,
|
||||
fcntl (qsysdep->o, F_GETFD, 0) | FD_CLOEXEC) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "fcntl (FD_CLOEXEC): %s", strerror (errno));
|
||||
(void) close (qsysdep->o);
|
||||
qsysdep->o = -1;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
qsysdep->iflags = fcntl (qsysdep->o, F_GETFL, 0);
|
||||
if (qsysdep->iflags < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "fcntl: %s", strerror (errno));
|
||||
(void) close (qsysdep->o);
|
||||
qsysdep->o = -1;
|
||||
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;
|
||||
|
||||
/* Run as a server and wait for a new connection. The code in
|
||||
uucico.c has already detached us from our controlling terminal.
|
||||
From this point on if the server gets an error we exit; we only
|
||||
return if we have received a connection. It would be more robust
|
||||
to respawn the server if it fails; someday. */
|
||||
bzero ((pointer) &s, sizeof s);
|
||||
s.sin_family = AF_INET;
|
||||
zport = qconn->qport->uuconf_u.uuconf_stcp.uuconf_zport;
|
||||
s.sin_port = itcp_port_number (zport);
|
||||
s.sin_addr.s_addr = htonl (INADDR_ANY);
|
||||
|
||||
/* Swap to our real user ID when doing the bind call. This will
|
||||
permit the server to use privileged TCP ports when invoked by
|
||||
root. We only swap if our effective user ID is not root, so that
|
||||
the program can also be made suid root in order to get privileged
|
||||
ports when invoked by anybody. */
|
||||
fswap = geteuid () != 0;
|
||||
if (fswap)
|
||||
{
|
||||
if (! fsuser_perms (&ieuid))
|
||||
{
|
||||
(void) close (qsysdep->o);
|
||||
qsysdep->o = -1;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (bind (qsysdep->o, (struct sockaddr *) &s, sizeof s) < 0)
|
||||
{
|
||||
if (fswap)
|
||||
(void) fsuucp_perms ((long) ieuid);
|
||||
ulog (LOG_FATAL, "bind: %s", strerror (errno));
|
||||
}
|
||||
|
||||
/* Now swap back to the uucp user ID. */
|
||||
if (fswap)
|
||||
{
|
||||
if (! fsuucp_perms ((long) ieuid))
|
||||
ulog (LOG_FATAL, "Could not swap back to UUCP user permissions");
|
||||
}
|
||||
|
||||
if (listen (qsysdep->o, 5) < 0)
|
||||
ulog (LOG_FATAL, "listen: %s", strerror (errno));
|
||||
|
||||
while (! FGOT_SIGNAL ())
|
||||
{
|
||||
size_t clen;
|
||||
int onew;
|
||||
pid_t ipid;
|
||||
|
||||
DEBUG_MESSAGE0 (DEBUG_PORT,
|
||||
"ftcp_open: Waiting for connections");
|
||||
|
||||
clen = sizeof s;
|
||||
onew = accept (qsysdep->o, (struct sockaddr *) &s, &clen);
|
||||
if (onew < 0)
|
||||
ulog (LOG_FATAL, "accept: %s", strerror (errno));
|
||||
|
||||
DEBUG_MESSAGE0 (DEBUG_PORT,
|
||||
"ftcp_open: Got connection; forking");
|
||||
|
||||
ipid = ixsfork ();
|
||||
if (ipid < 0)
|
||||
ulog (LOG_FATAL, "fork: %s", strerror (errno));
|
||||
if (ipid == 0)
|
||||
{
|
||||
(void) close (qsysdep->o);
|
||||
qsysdep->o = onew;
|
||||
|
||||
/* Now we fork and let our parent die, so that we become
|
||||
a child of init. This lets the main server code wait
|
||||
for its child and then continue without accumulating
|
||||
zombie children. */
|
||||
ipid = ixsfork ();
|
||||
if (ipid < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "fork: %s", strerror (errno));
|
||||
_exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (ipid != 0)
|
||||
_exit (EXIT_SUCCESS);
|
||||
|
||||
ulog_id (getpid ());
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
(void) close (onew);
|
||||
|
||||
/* Now wait for the child. */
|
||||
(void) ixswait ((unsigned long) ipid, (const char *) NULL);
|
||||
}
|
||||
|
||||
/* We got a signal. */
|
||||
usysdep_exit (FALSE);
|
||||
|
||||
/* Avoid compiler warnings. */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Close the port. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
static boolean
|
||||
ftcp_close (qconn, puuconf, qdialer, fsuccess)
|
||||
struct sconnection *qconn;
|
||||
pointer puuconf;
|
||||
struct uuconf_dialer *qdialer;
|
||||
boolean fsuccess;
|
||||
{
|
||||
struct ssysdep_conn *qsysdep;
|
||||
boolean fret;
|
||||
|
||||
qsysdep = (struct ssysdep_conn *) qconn->psysdep;
|
||||
fret = TRUE;
|
||||
if (qsysdep->o >= 0 && close (qsysdep->o) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "close: %s", strerror (errno));
|
||||
fret = FALSE;
|
||||
}
|
||||
qsysdep->o = -1;
|
||||
|
||||
/* 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. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
static boolean
|
||||
ftcp_dial (qconn, puuconf, qsys, zphone, qdialer, ptdialer)
|
||||
struct sconnection *qconn;
|
||||
pointer puuconf;
|
||||
const struct uuconf_system *qsys;
|
||||
const char *zphone;
|
||||
struct uuconf_dialer *qdialer;
|
||||
enum tdialerfound *ptdialer;
|
||||
{
|
||||
struct ssysdep_conn *qsysdep;
|
||||
const char *zhost;
|
||||
struct hostent *q;
|
||||
struct sockaddr_in s;
|
||||
const char *zport;
|
||||
char **pzdialer;
|
||||
|
||||
qsysdep = (struct ssysdep_conn *) qconn->psysdep;
|
||||
|
||||
*ptdialer = DIALERFOUND_FALSE;
|
||||
|
||||
zhost = zphone;
|
||||
if (zhost == NULL)
|
||||
{
|
||||
if (qsys == NULL)
|
||||
{
|
||||
ulog (LOG_ERROR, "No address for TCP connection");
|
||||
return FALSE;
|
||||
}
|
||||
zhost = qsys->uuconf_zname;
|
||||
}
|
||||
|
||||
errno = 0;
|
||||
q = gethostbyname ((char *) zhost);
|
||||
if (q != NULL)
|
||||
{
|
||||
s.sin_family = q->h_addrtype;
|
||||
memcpy (&s.sin_addr.s_addr, q->h_addr, (size_t) q->h_length);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (errno != 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "gethostbyname (%s): %s", zhost, strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
s.sin_family = AF_INET;
|
||||
s.sin_addr.s_addr = inet_addr ((char *) zhost);
|
||||
if ((long) s.sin_addr.s_addr == (long) -1)
|
||||
{
|
||||
ulog (LOG_ERROR, "%s: unknown host name", zhost);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
zport = qconn->qport->uuconf_u.uuconf_stcp.uuconf_zport;
|
||||
s.sin_port = itcp_port_number (zport);
|
||||
|
||||
if (connect (qsysdep->o, (struct sockaddr *) &s, sizeof s) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "connect: %s", strerror (errno));
|
||||
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;
|
||||
}
|
||||
|
||||
/* Get the port number given a name. The argument will almost always
|
||||
be "uucp" so we cache that value. The return value is always in
|
||||
network byte order. This returns -1 on error. */
|
||||
|
||||
static int
|
||||
itcp_port_number (zname)
|
||||
const char *zname;
|
||||
{
|
||||
boolean fuucp;
|
||||
static int iuucp;
|
||||
int i;
|
||||
char *zend;
|
||||
struct servent *q;
|
||||
|
||||
fuucp = strcmp (zname, "uucp") == 0;
|
||||
if (fuucp && iuucp != 0)
|
||||
return iuucp;
|
||||
|
||||
/* Try it as a number first. */
|
||||
i = strtol ((char *) zname, &zend, 10);
|
||||
if (i != 0 && *zend == '\0')
|
||||
return htons (i);
|
||||
|
||||
q = getservbyname ((char *) zname, (char *) "tcp");
|
||||
if (q == NULL)
|
||||
{
|
||||
/* We know that the "uucp" service should be 540, even if isn't
|
||||
in /etc/services. */
|
||||
if (fuucp)
|
||||
{
|
||||
iuucp = htons (IUUCP_PORT);
|
||||
return iuucp;
|
||||
}
|
||||
ulog (LOG_ERROR, "getservbyname (%s): %s", zname, strerror (errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (fuucp)
|
||||
iuucp = q->s_port;
|
||||
|
||||
return q->s_port;
|
||||
}
|
||||
|
||||
#endif /* HAVE_TCP */
|
628
gnu/libexec/uucp/libunix/tli.c
Normal file
628
gnu/libexec/uucp/libunix/tli.c
Normal file
@ -0,0 +1,628 @@
|
||||
/* tli.c
|
||||
Code to handle TLI connections.
|
||||
|
||||
Copyright (C) 1992, 1993, 1994 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char tli_rcsid[] = "$Id: tli.c,v 1.4 1995/06/21 19:20:50 ian Rel $";
|
||||
#endif
|
||||
|
||||
#if HAVE_TLI
|
||||
|
||||
#include "sysdep.h"
|
||||
#include "uudefs.h"
|
||||
#include "uuconf.h"
|
||||
#include "conn.h"
|
||||
#include "system.h"
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#if HAVE_SYS_IOCTL_H
|
||||
#include <sys/ioctl.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_TIUSER_H
|
||||
#include <tiuser.h>
|
||||
#else
|
||||
#if HAVE_XTI_H
|
||||
#include <xti.h>
|
||||
#else
|
||||
#if HAVE_SYS_TLI_H
|
||||
#include <sys/tli.h>
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HAVE_STROPTS_H
|
||||
#include <stropts.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#else
|
||||
#if HAVE_SYS_FILE_H
|
||||
#include <sys/file.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef O_RDONLY
|
||||
#define O_RDONLY 0
|
||||
#define O_WRONLY 1
|
||||
#define O_RDWR 2
|
||||
#endif
|
||||
|
||||
#ifndef FD_CLOEXEC
|
||||
#define FD_CLOEXEC 1
|
||||
#endif
|
||||
|
||||
/* The arguments to t_alloca have two different names. I want the
|
||||
SVID ones, not the XPG3 ones. */
|
||||
#ifndef T_BIND
|
||||
#define T_BIND T_BIND_STR
|
||||
#endif
|
||||
#ifndef T_CALL
|
||||
#define T_CALL T_CALL_STR
|
||||
#endif
|
||||
|
||||
/* Hopefully these externs will not cause any trouble. This is how
|
||||
they are shown in the SVID. */
|
||||
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
|
||||
Stevens. */
|
||||
|
||||
/* Local functions. */
|
||||
static const char *ztlierror P((void));
|
||||
static void utli_free P((struct sconnection *qconn));
|
||||
static boolean ftli_push P((struct sconnection *qconn));
|
||||
static boolean ftli_open P((struct sconnection *qconn, long ibaud,
|
||||
boolean fwait));
|
||||
static boolean ftli_close P((struct sconnection *qconn,
|
||||
pointer puuconf,
|
||||
struct uuconf_dialer *qdialer,
|
||||
boolean fsuccess));
|
||||
static boolean ftli_dial P((struct sconnection *qconn, pointer puuconf,
|
||||
const struct uuconf_system *qsys,
|
||||
const char *zphone,
|
||||
struct uuconf_dialer *qdialer,
|
||||
enum tdialerfound *ptdialer));
|
||||
|
||||
/* The command table for a TLI connection. */
|
||||
static const struct sconncmds stlicmds =
|
||||
{
|
||||
utli_free,
|
||||
NULL, /* pflock */
|
||||
NULL, /* pfunlock */
|
||||
ftli_open,
|
||||
ftli_close,
|
||||
ftli_dial,
|
||||
fsysdep_conn_read,
|
||||
fsysdep_conn_write,
|
||||
fsysdep_conn_io,
|
||||
NULL, /* pfbreak */
|
||||
NULL, /* pfset */
|
||||
NULL, /* pfcarrier */
|
||||
fsysdep_conn_chat,
|
||||
NULL /* pibaud */
|
||||
};
|
||||
|
||||
/* Get a TLI error string. */
|
||||
|
||||
static const char *
|
||||
ztlierror ()
|
||||
{
|
||||
if (t_errno == TSYSERR)
|
||||
return strerror (errno);
|
||||
if (t_errno < 0 || t_errno >= t_nerr)
|
||||
return "Unknown TLI error";
|
||||
return t_errlist[t_errno];
|
||||
}
|
||||
|
||||
/* 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)
|
||||
struct sconnection *qconn;
|
||||
{
|
||||
struct ssysdep_conn *q;
|
||||
|
||||
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->iwr_flags = -1;
|
||||
q->fterminal = FALSE;
|
||||
q->ftli = TRUE;
|
||||
q->ibaud = 0;
|
||||
|
||||
qconn->psysdep = (pointer) q;
|
||||
qconn->qcmds = &stlicmds;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Free a TLI connection. */
|
||||
|
||||
static void
|
||||
utli_free (qconn)
|
||||
struct sconnection *qconn;
|
||||
{
|
||||
xfree (qconn->psysdep);
|
||||
}
|
||||
|
||||
/* Push all desired modules onto a TLI stream. If the user requests a
|
||||
STREAMS connection without giving a list of modules, we just push
|
||||
tirdwr. If the I_PUSH ioctl is not defined on this system, we just
|
||||
ignore any list of modules. */
|
||||
|
||||
static boolean
|
||||
ftli_push (qconn)
|
||||
struct sconnection *qconn;
|
||||
{
|
||||
#ifdef I_PUSH
|
||||
|
||||
struct ssysdep_conn *qsysdep;
|
||||
|
||||
qsysdep = (struct ssysdep_conn *) qconn->psysdep;
|
||||
|
||||
if (qconn->qport->uuconf_u.uuconf_stli.uuconf_pzpush != NULL)
|
||||
{
|
||||
char **pz;
|
||||
|
||||
for (pz = qconn->qport->uuconf_u.uuconf_stli.uuconf_pzpush;
|
||||
*pz != NULL;
|
||||
pz++)
|
||||
{
|
||||
if (ioctl (qsysdep->o, I_PUSH, *pz) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "ioctl (I_PUSH, %s): %s", *pz,
|
||||
strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qconn->qport->uuconf_u.uuconf_stli.uuconf_fstream)
|
||||
{
|
||||
if (ioctl (qsysdep->o, I_PUSH, "tirdwr") < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "ioctl (I_PUSH, tirdwr): %s",
|
||||
strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* If we have just put the connection into stream mode, we must turn
|
||||
off the TLI flag to avoid using TLI calls on it. */
|
||||
if (qconn->qport->uuconf_u.uuconf_stli.uuconf_fstream)
|
||||
qsysdep->ftli = FALSE;
|
||||
|
||||
#endif /* defined (I_PUSH) */
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Open a TLI connection. If the fwait argument is TRUE, we are
|
||||
running as a server. Otherwise we are just trying to reach another
|
||||
system. */
|
||||
|
||||
static boolean
|
||||
ftli_open (qconn, ibaud, fwait)
|
||||
struct sconnection *qconn;
|
||||
long ibaud;
|
||||
boolean fwait;
|
||||
{
|
||||
struct ssysdep_conn *qsysdep;
|
||||
const char *zdevice;
|
||||
char *zfreedev;
|
||||
const char *zservaddr;
|
||||
char *zfreeaddr;
|
||||
uid_t ieuid;
|
||||
boolean fswap;
|
||||
struct t_bind *qtbind;
|
||||
struct t_call *qtcall;
|
||||
|
||||
/* Unlike most other device types, we don't bother to call
|
||||
ulog_device here, because fconn_open calls it with the name of
|
||||
the port anyhow. */
|
||||
|
||||
qsysdep = (struct ssysdep_conn *) qconn->psysdep;
|
||||
|
||||
zdevice = qconn->qport->uuconf_u.uuconf_stli.uuconf_zdevice;
|
||||
if (zdevice == NULL)
|
||||
zdevice = qconn->qport->uuconf_zname;
|
||||
|
||||
zfreedev = NULL;
|
||||
if (*zdevice != '/')
|
||||
{
|
||||
zfreedev = zbufalc (sizeof "/dev/" + strlen (zdevice));
|
||||
sprintf (zfreedev, "/dev/%s", zdevice);
|
||||
zdevice = zfreedev;
|
||||
}
|
||||
|
||||
/* If we are acting as a server, swap to our real user ID before
|
||||
calling t_open. This will permit the server to use privileged
|
||||
TCP ports when invoked by root. We only swap if our effective
|
||||
user ID is not root, so that the program can also be made suid
|
||||
root in order to get privileged ports when invoked by anybody. */
|
||||
fswap = fwait && geteuid () != 0;
|
||||
if (fswap)
|
||||
{
|
||||
if (! fsuser_perms (&ieuid))
|
||||
{
|
||||
ubuffree (zfreedev);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
qsysdep->o = t_open (zdevice, O_RDWR, (struct t_info *) NULL);
|
||||
if (qsysdep->o < 0)
|
||||
{
|
||||
if (fswap)
|
||||
(void) fsuucp_perms ((long) ieuid);
|
||||
ulog (LOG_ERROR, "t_open (%s): %s", zdevice, ztlierror ());
|
||||
ubuffree (zfreedev);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (fcntl (qsysdep->o, F_SETFD,
|
||||
fcntl (qsysdep->o, F_GETFD, 0) | FD_CLOEXEC) < 0)
|
||||
{
|
||||
if (fswap)
|
||||
(void) fsuucp_perms ((long) ieuid);
|
||||
ulog (LOG_ERROR, "fcntl (FD_CLOEXEC): %s", strerror (errno));
|
||||
ubuffree (zfreedev);
|
||||
(void) t_close (qsysdep->o);
|
||||
qsysdep->o = -1;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
qsysdep->iflags = fcntl (qsysdep->o, F_GETFL, 0);
|
||||
if (qsysdep->iflags < 0)
|
||||
{
|
||||
if (fswap)
|
||||
(void) fsuucp_perms ((long) ieuid);
|
||||
ulog (LOG_ERROR, "fcntl: %s", strerror (errno));
|
||||
ubuffree (zfreedev);
|
||||
(void) t_close (qsysdep->o);
|
||||
qsysdep->o = -1;
|
||||
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)
|
||||
{
|
||||
/* fswap is known to be FALSE here. */
|
||||
ubuffree (zfreedev);
|
||||
if (t_bind (qsysdep->o, (struct t_bind *) NULL,
|
||||
(struct t_bind *) NULL) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "t_bind: %s", ztlierror ());
|
||||
(void) t_close (qsysdep->o);
|
||||
qsysdep->o = -1;
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Run as a server and wait for a new connection. The code in
|
||||
uucico.c has already detached us from our controlling terminal.
|
||||
From this point on if the server gets an error we exit; we only
|
||||
return if we have received a connection. It would be more robust
|
||||
to respawn the server if it fails; someday. */
|
||||
qtbind = (struct t_bind *) t_alloc (qsysdep->o, T_BIND, T_ALL);
|
||||
if (qtbind == NULL)
|
||||
{
|
||||
if (fswap)
|
||||
(void) fsuucp_perms ((long) ieuid);
|
||||
ulog (LOG_FATAL, "t_alloc (T_BIND): %s", ztlierror ());
|
||||
}
|
||||
|
||||
zservaddr = qconn->qport->uuconf_u.uuconf_stli.uuconf_zservaddr;
|
||||
if (zservaddr == NULL)
|
||||
{
|
||||
if (fswap)
|
||||
(void) fsuucp_perms ((long) ieuid);
|
||||
ulog (LOG_FATAL, "Can't run as TLI server; no server address");
|
||||
}
|
||||
|
||||
zfreeaddr = zbufcpy (zservaddr);
|
||||
qtbind->addr.len = cescape (zfreeaddr);
|
||||
if (qtbind->addr.len > qtbind->addr.maxlen)
|
||||
{
|
||||
if (fswap)
|
||||
(void) fsuucp_perms ((long) ieuid);
|
||||
ulog (LOG_FATAL, "%s: TLI server address too long (max %d)",
|
||||
zservaddr, qtbind->addr.maxlen);
|
||||
}
|
||||
memcpy (qtbind->addr.buf, zfreeaddr, qtbind->addr.len);
|
||||
ubuffree (zfreeaddr);
|
||||
|
||||
qtbind->qlen = 5;
|
||||
|
||||
if (t_bind (qsysdep->o, qtbind, (struct t_bind *) NULL) < 0)
|
||||
{
|
||||
if (fswap)
|
||||
(void) fsuucp_perms ((long) ieuid);
|
||||
ulog (LOG_FATAL, "t_bind (%s): %s", zservaddr, ztlierror ());
|
||||
}
|
||||
|
||||
if (fswap)
|
||||
{
|
||||
if (! fsuucp_perms ((long) ieuid))
|
||||
ulog (LOG_FATAL, "Could not swap back to UUCP user permissions");
|
||||
}
|
||||
|
||||
(void) t_free ((pointer) qtbind, T_BIND);
|
||||
|
||||
qtcall = (struct t_call *) t_alloc (qsysdep->o, T_CALL, T_ALL);
|
||||
if (qtcall == NULL)
|
||||
ulog (LOG_FATAL, "t_alloc (T_CALL): %s", ztlierror ());
|
||||
|
||||
while (! FGOT_SIGNAL ())
|
||||
{
|
||||
int onew;
|
||||
pid_t ipid;
|
||||
|
||||
DEBUG_MESSAGE0 (DEBUG_PORT,
|
||||
"ftli_open: Waiting for connections");
|
||||
|
||||
if (t_listen (qsysdep->o, qtcall) < 0)
|
||||
ulog (LOG_FATAL, "t_listen: %s", ztlierror ());
|
||||
|
||||
onew = t_open (zdevice, O_RDWR, (struct t_info *) NULL);
|
||||
if (onew < 0)
|
||||
ulog (LOG_FATAL, "t_open (%s): %s", zdevice, ztlierror ());
|
||||
|
||||
if (fcntl (onew, F_SETFD,
|
||||
fcntl (onew, F_GETFD, 0) | FD_CLOEXEC) < 0)
|
||||
ulog (LOG_FATAL, "fcntl (FD_CLOEXEC): %s", strerror (errno));
|
||||
|
||||
if (t_bind (onew, (struct t_bind *) NULL, (struct t_bind *) NULL) < 0)
|
||||
ulog (LOG_FATAL, "t_bind: %s", ztlierror ());
|
||||
|
||||
if (t_accept (qsysdep->o, onew, qtcall) < 0)
|
||||
{
|
||||
/* We may have received a disconnect. */
|
||||
if (t_errno != TLOOK)
|
||||
ulog (LOG_FATAL, "t_accept: %s", ztlierror ());
|
||||
if (t_rcvdis (qsysdep->o, (struct t_discon *) NULL) < 0)
|
||||
ulog (LOG_FATAL, "t_rcvdis: %s", ztlierror ());
|
||||
(void) t_close (onew);
|
||||
continue;
|
||||
}
|
||||
|
||||
DEBUG_MESSAGE0 (DEBUG_PORT,
|
||||
"ftli_open: Got connection; forking");
|
||||
|
||||
ipid = ixsfork ();
|
||||
if (ipid < 0)
|
||||
ulog (LOG_FATAL, "fork: %s", strerror (errno));
|
||||
if (ipid == 0)
|
||||
{
|
||||
ulog_close ();
|
||||
|
||||
(void) t_close (qsysdep->o);
|
||||
qsysdep->o = onew;
|
||||
|
||||
/* Push any desired modules. */
|
||||
if (! ftli_push (qconn))
|
||||
_exit (EXIT_FAILURE);
|
||||
|
||||
/* Now we fork and let our parent die, so that we become
|
||||
a child of init. This lets the main server code wait
|
||||
for its child and then continue without accumulating
|
||||
zombie children. */
|
||||
ipid = ixsfork ();
|
||||
if (ipid < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "fork: %s", strerror (errno));
|
||||
_exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (ipid != 0)
|
||||
_exit (EXIT_SUCCESS);
|
||||
|
||||
ulog_id (getpid ());
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
(void) t_close (onew);
|
||||
|
||||
/* Now wait for the child. */
|
||||
(void) ixswait ((unsigned long) ipid, (const char *) NULL);
|
||||
}
|
||||
|
||||
/* We got a signal. */
|
||||
usysdep_exit (FALSE);
|
||||
|
||||
/* Avoid compiler warnings. */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Close the port. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
static boolean
|
||||
ftli_close (qconn, puuconf, qdialer, fsuccess)
|
||||
struct sconnection *qconn;
|
||||
pointer puuconf;
|
||||
struct uuconf_dialer *qdialer;
|
||||
boolean fsuccess;
|
||||
{
|
||||
struct ssysdep_conn *qsysdep;
|
||||
boolean fret;
|
||||
|
||||
qsysdep = (struct ssysdep_conn *) qconn->psysdep;
|
||||
|
||||
fret = TRUE;
|
||||
if (qsysdep->o >= 0)
|
||||
{
|
||||
if (qsysdep->ftli)
|
||||
{
|
||||
if (t_close (qsysdep->o) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "t_close: %s", ztlierror ());
|
||||
fret = FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (close (qsysdep->o) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "close: %s", strerror (errno));
|
||||
fret = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
qsysdep->o = -1;
|
||||
}
|
||||
|
||||
/* 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 TLI port, so to speak: connect to a remote computer. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
static boolean
|
||||
ftli_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;
|
||||
{
|
||||
struct ssysdep_conn *qsysdep;
|
||||
char **pzdialer;
|
||||
const char *zaddr;
|
||||
struct t_call *qtcall;
|
||||
char *zescape;
|
||||
|
||||
qsysdep = (struct ssysdep_conn *) qconn->psysdep;
|
||||
|
||||
*ptdialerfound = DIALERFOUND_FALSE;
|
||||
|
||||
pzdialer = qconn->qport->uuconf_u.uuconf_stli.uuconf_pzdialer;
|
||||
if (*pzdialer == NULL)
|
||||
pzdialer = NULL;
|
||||
|
||||
/* If the first dialer is "TLI" or "TLIS", we use the first token
|
||||
(pzdialer[1]) as the address to connect to. */
|
||||
zaddr = zphone;
|
||||
if (pzdialer != NULL
|
||||
&& (strcmp (pzdialer[0], "TLI") == 0
|
||||
|| strcmp (pzdialer[0], "TLIS") == 0))
|
||||
{
|
||||
if (pzdialer[1] == NULL)
|
||||
++pzdialer;
|
||||
else
|
||||
{
|
||||
if (strcmp (pzdialer[1], "\\D") != 0
|
||||
&& strcmp (pzdialer[1], "\\T") != 0)
|
||||
zaddr = pzdialer[1];
|
||||
pzdialer += 2;
|
||||
}
|
||||
}
|
||||
|
||||
if (zaddr == NULL)
|
||||
{
|
||||
ulog (LOG_ERROR, "No address for TLI connection");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
qtcall = (struct t_call *) t_alloc (qsysdep->o, T_CALL, T_ADDR);
|
||||
if (qtcall == NULL)
|
||||
{
|
||||
ulog (LOG_ERROR, "t_alloc (T_CALL): %s", ztlierror ());
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
zescape = zbufcpy (zaddr);
|
||||
qtcall->addr.len = cescape (zescape);
|
||||
if (qtcall->addr.len > qtcall->addr.maxlen)
|
||||
{
|
||||
ulog (LOG_ERROR, "%s: TLI address too long (max %d)", zaddr,
|
||||
qtcall->addr.maxlen);
|
||||
ubuffree (zescape);
|
||||
return FALSE;
|
||||
}
|
||||
memcpy (qtcall->addr.buf, zescape, qtcall->addr.len);
|
||||
ubuffree (zescape);
|
||||
|
||||
if (t_connect (qsysdep->o, qtcall, (struct t_call *) NULL) < 0)
|
||||
{
|
||||
if (t_errno != TLOOK)
|
||||
ulog (LOG_ERROR, "t_connect: %s", ztlierror ());
|
||||
else
|
||||
{
|
||||
if (t_rcvdis (qsysdep->o, (struct t_discon *) NULL) < 0)
|
||||
ulog (LOG_ERROR, "t_rcvdis: %s", ztlierror ());
|
||||
else
|
||||
ulog (LOG_ERROR, "Connection refused");
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* We've connected to the remote. Push any desired modules. */
|
||||
if (! ftli_push (qconn))
|
||||
return FALSE;
|
||||
|
||||
/* Handle the rest of the dialer sequence. */
|
||||
if (pzdialer != NULL && *pzdialer != NULL)
|
||||
{
|
||||
if (! fconn_dial_sequence (qconn, puuconf, pzdialer, qsys, zphone,
|
||||
qdialer, ptdialerfound))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#endif /* HAVE_TLI */
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* ufopen.c
|
||||
Open a file with the permissions of the invoking user.
|
||||
|
||||
Copyright (C) 1992 Ian Lance Taylor
|
||||
Copyright (C) 1992, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -53,89 +53,6 @@
|
||||
#define FD_CLOEXEC 1
|
||||
#endif
|
||||
|
||||
/* Local functions. */
|
||||
|
||||
static boolean fsuser_perms P((uid_t *pieuid));
|
||||
static boolean fsuucp_perms P((long ieuid));
|
||||
|
||||
/* Switch to permissions of the invoking user. */
|
||||
|
||||
static boolean
|
||||
fsuser_perms (pieuid)
|
||||
uid_t *pieuid;
|
||||
{
|
||||
uid_t ieuid, iuid;
|
||||
|
||||
ieuid = geteuid ();
|
||||
iuid = getuid ();
|
||||
if (pieuid != NULL)
|
||||
*pieuid = ieuid;
|
||||
|
||||
#if HAVE_SETREUID
|
||||
/* Swap the effective user id and the real user id. We can then
|
||||
swap them back again when we want to return to the uucp user's
|
||||
permissions. */
|
||||
if (setreuid (ieuid, iuid) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "setreuid (%ld, %ld): %s",
|
||||
(long) ieuid, (long) iuid, strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
#else /* ! HAVE_SETREUID */
|
||||
#if HAVE_SAVED_SETUID
|
||||
/* Set the effective user id to the real user id. Since the
|
||||
effective user id is saved (it's the saved setuid) we will able
|
||||
to set back to it later. If the real user id is root we will not
|
||||
be able to switch back and forth, so don't even try. */
|
||||
if (iuid != 0)
|
||||
{
|
||||
if (setuid (iuid) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "setuid (%ld): %s", (long) iuid, strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
#else /* ! HAVE_SAVED_SETUID */
|
||||
/* There's no way to switch between real permissions and effective
|
||||
permissions. Just try to open the file with the uucp
|
||||
permissions. */
|
||||
#endif /* ! HAVE_SAVED_SETUID */
|
||||
#endif /* ! HAVE_SETREUID */
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Restore the uucp permissions. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
static boolean
|
||||
fsuucp_perms (ieuid)
|
||||
long ieuid;
|
||||
{
|
||||
#if HAVE_SETREUID
|
||||
/* Swap effective and real user id's back to what they were. */
|
||||
if (! fsuser_perms ((uid_t *) NULL))
|
||||
return FALSE;
|
||||
#else /* ! HAVE_SETREUID */
|
||||
#if HAVE_SAVED_SETUID
|
||||
/* Set ourselves back to our original effective user id. */
|
||||
if (setuid ((uid_t) ieuid) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "setuid (%ld): %s", (long) ieuid, strerror (errno));
|
||||
/* Is this error message helpful or confusing? */
|
||||
if (errno == EPERM)
|
||||
ulog (LOG_ERROR,
|
||||
"Probably HAVE_SAVED_SETUID in policy.h should be set to 0");
|
||||
return FALSE;
|
||||
}
|
||||
#else /* ! HAVE_SAVED_SETUID */
|
||||
/* We didn't switch, no need to switch back. */
|
||||
#endif /* ! HAVE_SAVED_SETUID */
|
||||
#endif /* ! HAVE_SETREUID */
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Open a file with the permissions of the invoking user. Ignore the
|
||||
fbinary argument since Unix has no distinction between text and
|
||||
binary files. */
|
||||
|
109
gnu/libexec/uucp/libunix/uid.c
Normal file
109
gnu/libexec/uucp/libunix/uid.c
Normal file
@ -0,0 +1,109 @@
|
||||
/* uid.c
|
||||
Switch back and forth between UUCP and user permissions.
|
||||
|
||||
Copyright (C) 1992, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#include "uudefs.h"
|
||||
#include "sysdep.h"
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
/* Switch to permissions of the invoking user. */
|
||||
|
||||
boolean
|
||||
fsuser_perms (pieuid)
|
||||
uid_t *pieuid;
|
||||
{
|
||||
uid_t ieuid, iuid;
|
||||
|
||||
ieuid = geteuid ();
|
||||
iuid = getuid ();
|
||||
if (pieuid != NULL)
|
||||
*pieuid = ieuid;
|
||||
|
||||
#if HAVE_SETREUID
|
||||
/* Swap the effective user id and the real user id. We can then
|
||||
swap them back again when we want to return to the uucp user's
|
||||
permissions. */
|
||||
if (setreuid (ieuid, iuid) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "setreuid (%ld, %ld): %s",
|
||||
(long) ieuid, (long) iuid, strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
#else /* ! HAVE_SETREUID */
|
||||
#if HAVE_SAVED_SETUID
|
||||
/* Set the effective user id to the real user id. Since the
|
||||
effective user id is saved (it's the saved setuid) we will able
|
||||
to set back to it later. If the real user id is root we will not
|
||||
be able to switch back and forth, so don't even try. */
|
||||
if (iuid != 0)
|
||||
{
|
||||
if (setuid (iuid) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "setuid (%ld): %s", (long) iuid, strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
#else /* ! HAVE_SAVED_SETUID */
|
||||
/* There's no way to switch between real permissions and effective
|
||||
permissions. Just try to open the file with the uucp
|
||||
permissions. */
|
||||
#endif /* ! HAVE_SAVED_SETUID */
|
||||
#endif /* ! HAVE_SETREUID */
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Restore the uucp permissions. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
boolean
|
||||
fsuucp_perms (ieuid)
|
||||
long ieuid;
|
||||
{
|
||||
#if HAVE_SETREUID
|
||||
/* Swap effective and real user id's back to what they were. */
|
||||
if (! fsuser_perms ((uid_t *) NULL))
|
||||
return FALSE;
|
||||
#else /* ! HAVE_SETREUID */
|
||||
#if HAVE_SAVED_SETUID
|
||||
/* Set ourselves back to our original effective user id. */
|
||||
if (setuid ((uid_t) ieuid) < 0)
|
||||
{
|
||||
ulog (LOG_ERROR, "setuid (%ld): %s", (long) ieuid, strerror (errno));
|
||||
/* Is this error message helpful or confusing? */
|
||||
if (errno == EPERM)
|
||||
ulog (LOG_ERROR,
|
||||
"Probably HAVE_SAVED_SETUID in policy.h should be set to 0");
|
||||
return FALSE;
|
||||
}
|
||||
#else /* ! HAVE_SAVED_SETUID */
|
||||
/* We didn't switch, no need to switch back. */
|
||||
#endif /* ! HAVE_SAVED_SETUID */
|
||||
#endif /* ! HAVE_SETREUID */
|
||||
|
||||
return TRUE;
|
||||
}
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
@ -167,7 +167,7 @@ zsysdep_wildcard (zfile)
|
||||
zret = zbufcpy (sSglob.gl_pathv[iSglob]);
|
||||
++iSglob;
|
||||
return zret;
|
||||
|
||||
|
||||
#else /* ! HAVE_GLOB */
|
||||
|
||||
char *zret;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* work.c
|
||||
Routines to read command files.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char work_rcsid[] = "$Id: work.c,v 1.2 1994/05/07 18:11:41 ache Exp $";
|
||||
const char work_rcsid[] = "$Id: work.c,v 1.20 1995/06/30 21:35:14 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "uudefs.h"
|
||||
@ -189,7 +189,7 @@ fswork_file (zsystem, zfile, pbgrade)
|
||||
*pbgrade = zfile[2];
|
||||
return (zfile[0] == 'C'
|
||||
&& zfile[1] == '.'
|
||||
&& strlen (zfile) == 7);
|
||||
&& zfile[2] != '\0');
|
||||
#endif /* SPOOLDIR_TAYLOR */
|
||||
}
|
||||
|
||||
@ -426,13 +426,12 @@ fsysdep_get_work_init (qsys, bgrade)
|
||||
|
||||
/* Get the next work entry for a system. This must parse the next
|
||||
line in the next work file. The type of command is set into
|
||||
qcmd->bcmd; if there are no more commands we call
|
||||
fsysdep_get_work_init to rescan, in case any came in since the last
|
||||
call. If there are still no commands, qcmd->bcmd is set to 'H'.
|
||||
qcmd->bcmd If there are no more commands, qcmd->bcmd is set to 'H'.
|
||||
Each field in the structure is set to point to a spot in an
|
||||
malloced string. The only time we use the grade here is when
|
||||
calling fsysdep_get_work_init to rescan. */
|
||||
malloced string. The grade argument is never used; it has been
|
||||
used by fsysdep_get_work_init. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
boolean
|
||||
fsysdep_get_work (qsys, bgrade, qcmd)
|
||||
const struct uuconf_system *qsys;
|
||||
@ -471,18 +470,9 @@ fsysdep_get_work (qsys, bgrade, qcmd)
|
||||
{
|
||||
if (iSwork_file >= cSwork_files)
|
||||
{
|
||||
/* Rescan the work directory. */
|
||||
if (! fsysdep_get_work_init (qsys, bgrade))
|
||||
{
|
||||
ubuffree (zdir);
|
||||
return FALSE;
|
||||
}
|
||||
if (iSwork_file >= cSwork_files)
|
||||
{
|
||||
qcmd->bcmd = 'H';
|
||||
ubuffree (zdir);
|
||||
return TRUE;
|
||||
}
|
||||
qcmd->bcmd = 'H';
|
||||
ubuffree (zdir);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (zdir == NULL)
|
||||
@ -506,7 +496,7 @@ fsysdep_get_work (qsys, bgrade, qcmd)
|
||||
}
|
||||
}
|
||||
while (e == NULL);
|
||||
|
||||
|
||||
qfile = (struct ssfile *) xmalloc (sizeof (struct ssfile));
|
||||
callocated = CFILELINES;
|
||||
iline = 0;
|
||||
@ -561,7 +551,7 @@ fsysdep_get_work (qsys, bgrade, qcmd)
|
||||
while (TRUE)
|
||||
{
|
||||
int iline;
|
||||
|
||||
|
||||
if (qSwork_file->cdid >= qSwork_file->clines)
|
||||
{
|
||||
/* We don't want to free qSwork_file here, since it must
|
||||
@ -628,7 +618,7 @@ fsysdep_did_work (pseq)
|
||||
struct ssfile *qfile;
|
||||
struct ssline *qline;
|
||||
int i;
|
||||
|
||||
|
||||
qline = (struct ssline *) pseq;
|
||||
|
||||
ubuffree (qline->zline);
|
||||
@ -745,7 +735,7 @@ zsysdep_save_temp_file (pseq)
|
||||
ubuffree (zto);
|
||||
return "Could not move file to preservation directory";
|
||||
}
|
||||
|
||||
|
||||
cwant = sizeof "File saved as\n\t/" + strlen (zSspooldir) + strlen (zto);
|
||||
if (cwant > cbuf)
|
||||
{
|
||||
@ -787,10 +777,14 @@ bsgrade (pseq)
|
||||
|
||||
zfile = ((struct ssline *) pseq)->qfile->zfile;
|
||||
|
||||
#if SPOOLDIR_TAYLOR
|
||||
bgrade = *(strrchr (zfile, '/') + 3);
|
||||
#else
|
||||
#if ! SPOOLDIR_SVR4
|
||||
bgrade = zfile[strlen (zfile) - CSEQLEN - 1];
|
||||
#else
|
||||
bgrade = *(strchr (zfile, '/') + 1);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return bgrade;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* xqtfil.c
|
||||
Routines to read execute files.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char xqtfil_rcsid[] = "$Id: xqtfil.c,v 1.2 1994/05/07 18:11:42 ache Exp $";
|
||||
const char xqtfil_rcsid[] = "$Id: xqtfil.c,v 1.10 1995/07/19 04:18:37 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "uudefs.h"
|
||||
@ -78,6 +78,7 @@ static DIR *qSxqt_topdir;
|
||||
#if ! SUBDIRS
|
||||
static const char *zSdir;
|
||||
#else /* SUBDIRS */
|
||||
static boolean fSone_dir;
|
||||
static char *zSdir;
|
||||
static DIR *qSxqt_dir;
|
||||
static char *zSsystem;
|
||||
@ -89,9 +90,36 @@ static char *zSsystem;
|
||||
|
||||
/*ARGSUSED*/
|
||||
boolean
|
||||
fsysdep_get_xqt_init ()
|
||||
fsysdep_get_xqt_init (zsystem)
|
||||
const char *zsystem;
|
||||
{
|
||||
usysdep_get_xqt_free ();
|
||||
usysdep_get_xqt_free ((const char *) NULL);
|
||||
|
||||
#if SUBDIRS
|
||||
if (zsystem != NULL)
|
||||
{
|
||||
#if SPOOLDIR_HDB || SPOOLDIR_SVR4
|
||||
zSdir = zbufcpy (zsystem);
|
||||
#endif
|
||||
#if SPOOLDIR_ULTRIX
|
||||
zSdir = zsappend3 ("sys", zsystem, "X.");
|
||||
#endif
|
||||
#if SPOOLDIR_TAYLOR
|
||||
zSdir = zsysdep_in_dir (zsystem, "X.");
|
||||
#endif
|
||||
|
||||
qSxqt_dir = opendir ((char *) zSdir);
|
||||
if (qSxqt_dir != NULL)
|
||||
{
|
||||
qSxqt_topdir = qSxqt_dir;
|
||||
fSone_dir = TRUE;
|
||||
zSsystem = zbufcpy (zsystem);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
fSone_dir = FALSE;
|
||||
#endif
|
||||
|
||||
qSxqt_topdir = opendir ((char *) ZDIR);
|
||||
if (qSxqt_topdir == NULL)
|
||||
@ -111,8 +139,10 @@ fsysdep_get_xqt_init ()
|
||||
*pzsystem will be set to the system for which the execute file was
|
||||
created. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
char *
|
||||
zsysdep_get_xqt (pzsystem, pferr)
|
||||
zsysdep_get_xqt (zsystem, pzsystem, pferr)
|
||||
const char *zsystem;
|
||||
char **pzsystem;
|
||||
boolean *pferr;
|
||||
{
|
||||
@ -220,20 +250,22 @@ zsysdep_get_xqt (pzsystem, pferr)
|
||||
#endif
|
||||
return zret;
|
||||
}
|
||||
|
||||
|
||||
/* If we've reached the end of the directory, then if we are
|
||||
using subdirectories loop around to read the next one,
|
||||
otherwise we are finished. */
|
||||
if (q == NULL)
|
||||
{
|
||||
(void) closedir (qdir);
|
||||
|
||||
#if SUBDIRS
|
||||
qSxqt_dir = NULL;
|
||||
continue;
|
||||
#else
|
||||
if (! fSone_dir)
|
||||
continue;
|
||||
#endif
|
||||
|
||||
qSxqt_topdir = NULL;
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -243,7 +275,8 @@ zsysdep_get_xqt (pzsystem, pferr)
|
||||
|
||||
/*ARGSUSED*/
|
||||
void
|
||||
usysdep_get_xqt_free ()
|
||||
usysdep_get_xqt_free (zsystem)
|
||||
const char *zsystem;
|
||||
{
|
||||
if (qSxqt_topdir != NULL)
|
||||
{
|
||||
@ -260,5 +293,6 @@ usysdep_get_xqt_free ()
|
||||
zSdir = NULL;
|
||||
ubuffree (zSsystem);
|
||||
zSsystem = NULL;
|
||||
fSone_dir = FALSE;
|
||||
#endif
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* xqtsub.c
|
||||
System dependent functions used only by uuxqt.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993 Ian Lance Taylor
|
||||
Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor
|
||||
|
||||
This file is part of the Taylor UUCP package.
|
||||
|
||||
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucp.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char xqtsub_rcsid[] = "$Id: xqtsub.c,v 1.2 1994/05/07 18:11:43 ache Exp $";
|
||||
const char xqtsub_rcsid[] = "$Id: xqtsub.c,v 1.18 1995/06/21 20:21:14 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "uudefs.h"
|
||||
@ -263,9 +263,9 @@ fsysdep_execute (qsys, zuser, pazargs, zfullcmd, zinput, zoutput,
|
||||
{
|
||||
ulog (LOG_ERROR, "fcntl (FD_CLOEXEC): %s", strerror (errno));
|
||||
ferr = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (! ferr && zoutput != NULL)
|
||||
{
|
||||
aidescs[1] = creat ((char *) zoutput, IPRIVATE_FILE_MODE);
|
||||
@ -280,7 +280,7 @@ fsysdep_execute (qsys, zuser, pazargs, zfullcmd, zinput, zoutput,
|
||||
{
|
||||
ulog (LOG_ERROR, "fcntl (FD_CLOEXEC): %s", strerror (errno));
|
||||
ferr = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (! ferr)
|
||||
@ -312,7 +312,7 @@ fsysdep_execute (qsys, zuser, pazargs, zfullcmd, zinput, zoutput,
|
||||
{
|
||||
ulog (LOG_ERROR, "fcntl (FD_CLOEXEC): %s", strerror (errno));
|
||||
ferr = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (iseq == 0)
|
||||
@ -545,7 +545,8 @@ fsysdep_lock_uuxqt_dir (iseq)
|
||||
}
|
||||
|
||||
if (mkdir (zxqtdir, S_IRWXU) < 0
|
||||
&& errno != EEXIST)
|
||||
&& errno != EEXIST
|
||||
&& errno != EISDIR)
|
||||
{
|
||||
ulog (LOG_ERROR, "mkdir (%s): %s", zxqtdir, strerror (errno));
|
||||
return FALSE;
|
||||
@ -658,7 +659,7 @@ fsysdep_move_uuxqt_files (cfiles, pzfrom, pzto, fto, iseq, pzinput)
|
||||
if (! fto)
|
||||
{
|
||||
const char *ztemp;
|
||||
|
||||
|
||||
ztemp = zfrom;
|
||||
zfrom = zto;
|
||||
zto = ztemp;
|
||||
@ -682,7 +683,7 @@ fsysdep_move_uuxqt_files (cfiles, pzfrom, pzto, fto, iseq, pzinput)
|
||||
break;
|
||||
}
|
||||
|
||||
if (! fcopy_file (zfrom, zto, FALSE, FALSE))
|
||||
if (! fcopy_file (zfrom, zto, FALSE, FALSE, FALSE))
|
||||
{
|
||||
ubuffree (zfree);
|
||||
break;
|
||||
|
@ -67,6 +67,7 @@ snams.c
|
||||
split.c
|
||||
spool.c
|
||||
stafil.c
|
||||
strip.c
|
||||
syssub.c
|
||||
tcalou.c
|
||||
tdial.c
|
||||
|
@ -1,5 +1,5 @@
|
||||
# This is the Makefile for the Taylor UUCP uuconf library
|
||||
# $Id: Makefile,v 1.1 1993/08/05 18:24:52 conklin Exp $
|
||||
# $Id: Makefile,v 1.2 1994/05/07 18:11:49 ache Exp $
|
||||
|
||||
LIB= uuconf
|
||||
SRCS = addblk.c addstr.c allblk.c alloc.c base.c bool.c callin.c \
|
||||
@ -10,10 +10,11 @@ SRCS = addblk.c addstr.c allblk.c alloc.c base.c bool.c callin.c \
|
||||
hsys.c hunk.c iniglb.c init.c int.c lckdir.c lineno.c llocnm.c \
|
||||
local.c locnm.c logfil.c maxuxq.c mrgblk.c paramc.c port.c \
|
||||
prtsub.c pubdir.c rdlocs.c rdperm.c reliab.c remunk.c runuxq.c \
|
||||
sinfo.c snams.c split.c spool.c stafil.c syssub.c tcalou.c \
|
||||
tdial.c tdialc.c tdnams.c tgcmp.c thread.c time.c tinit.c \
|
||||
tlocnm.c tport.c tportc.c tsinfo.c tsnams.c tsys.c tval.c \
|
||||
ugtlin.c unk.c val.c vinit.c vport.c vsinfo.c vsnams.c vsys.c
|
||||
sinfo.c snams.c split.c spool.c stafil.c strip.c syssub.c \
|
||||
tcalou.c tdial.c tdialc.c tdnams.c tgcmp.c thread.c time.c \
|
||||
tinit.c tlocnm.c tport.c tportc.c tsinfo.c tsnams.c tsys.c \
|
||||
tval.c ugtlin.c unk.c val.c vinit.c vport.c vsinfo.c vsnams.c \
|
||||
vsys.c
|
||||
CFLAGS+= -I$(.CURDIR)/../common_sources \
|
||||
-DNEWCONFIGLIB=\"$(newconfigdir)\"\
|
||||
-DOLDCONFIGLIB=\"$(oldconfigdir)\"
|
||||
|
@ -1,8 +1,8 @@
|
||||
This is the README file for the beta release of the uuconf library.
|
||||
|
||||
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,
|
||||
48 Grove Street, Somerville, MA, 02144, USA.
|
||||
|
||||
This package is covered by the Gnu Library General Public License.
|
||||
See the file COPYING.LIB for details. If you would like to do
|
||||
|
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucnfi.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char _uuconf_addblk_rcsid[] = "$Id: addblk.c,v 1.3 1994/01/30 21:14:29 ian Rel $";
|
||||
const char _uuconf_addblk_rcsid[] = "$Id: addblk.c,v 1.5 1995/06/21 19:21:23 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "alloc.h"
|
||||
|
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucnfi.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char _uuconf_addstr_rcsid[] = "$Id: addstr.c,v 1.5 1994/01/30 21:14:29 ian Rel $";
|
||||
const char _uuconf_addstr_rcsid[] = "$Id: addstr.c,v 1.7 1995/06/21 19:21:26 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
|
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucnfi.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char _uuconf_allblk_rcsid[] = "$Id: allblk.c,v 1.3 1994/01/30 21:14:29 ian Rel $";
|
||||
const char _uuconf_allblk_rcsid[] = "$Id: allblk.c,v 1.5 1995/06/21 19:21:28 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "alloc.h"
|
||||
|
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucnfi.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char _uuconf_alloc_rcsid[] = "$Id: alloc.c,v 1.3 1994/01/30 21:14:29 ian Rel $";
|
||||
const char _uuconf_alloc_rcsid[] = "$Id: alloc.c,v 1.5 1995/06/21 19:21:31 ian Rel $";
|
||||
#endif
|
||||
|
||||
#include "alloc.h"
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
/* This header file is private to the uuconf memory allocation
|
||||
|
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucnfi.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char _uuconf_base_rcsid[] = "$Id: base.c,v 1.3 1994/01/30 21:14:29 ian Rel $";
|
||||
const char _uuconf_base_rcsid[] = "$Id: base.c,v 1.5 1995/06/21 19:21:36 ian Rel $";
|
||||
#endif
|
||||
|
||||
/* This turns a cmdtab_offset table into a uuconf_cmdtab table. Each
|
||||
|
@ -17,16 +17,16 @@
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
The author of the program may be contacted at ian@airs.com or
|
||||
c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
|
||||
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||||
*/
|
||||
|
||||
#include "uucnfi.h"
|
||||
|
||||
#if USE_RCS_ID
|
||||
const char _uuconf_bool_rcsid[] = "$Id: bool.c,v 1.2 1994/05/07 18:11:58 ache Exp $";
|
||||
const char _uuconf_bool_rcsid[] = "$Id: bool.c,v 1.5 1995/06/21 19:21:39 ian Rel $";
|
||||
#endif
|
||||
|
||||
/* Parse a boolean string into a variable. This is called by
|
||||
@ -61,4 +61,4 @@ _uuconf_iboolean (qglobal, zval, pi)
|
||||
}
|
||||
|
||||
return UUCONF_CMDTABRET_CONTINUE;
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user