Changes From Previous Versions This file summarizes most changes made to UUPC/extended since release 1.11w. Please contact Drew Derbyshire, help@kew.com, for information on changes previous to the scope of this document or other questions. Versions 1.12a through 1.12b Revision Summary David M. Watt tested many of the new functions in the release and provided numerous bug fixes, including all the Windows NT fixes. Kai Uwe Rommel also provided many bug fixes, and keeps threatening us with more, especially for RNEWS. Special credit for 1.12a also goes to Robert Denny for the Windows support discussed below. Bug Fixes The mail routing functions cheerfully routed mail to a non-local system by writing mail in an invalid spool directory if routing overrides existed for the target system. Corrected various interactions in file ADDRESS.C to clear up the improper routing and an associated problem with the non-detection of aliased systems. RMAIL sometimes throws an internal error (reporting not enough mail delivered) after calling Bounce() to bounce mail. Corrected by insuring Bounce()'s deliveries are counted. RMAIL would fail to bounce mail properly if the program had been renamed to other than RMAIL. Corrected by saving the program name for recursive invocations by Bounce(). The MAIL short help (?) command incorrectly reported that the minus sign (-) was an alias for the non-existent "previous" command when in fact it is an alias for the alive and well "up" command. When running MAIL, users defined in the PASSWD file with no name would be entered into the local nickname table anyway, causing their name to appear as "????" when replying to them. Changed LoadAlias() to suppress such addresses. If the UUPC/extended configuration directory was the root directory of a drive, such as a network drive set aside for UUPC/extended, then derived directory names were incorrectly made relative directories by omitting the first slash (/) in the name. Corrected normalize() to not drop the required slash. If the run time library _fullpath() function failed to return the full path of a file, normalize() returned a NULL even though its callers did not check for this special value. Corrected normalize() to call panic() if the full path of a file could not be determined. In version 1.11z only, if a file was transferred to other than the spool directory (normally using the UUCP command on the local or remote system), UUCICO changed directories for the transfer and then did not restore the original working directory. This resulted in files for mail and news being delivered to the Public directory rather than the Spool directory. Corrected in expand_path() to pop all directory pushes. If a file to be opened for reading was temporarily busy and the multitask flag was active, FOPEN() failed to wait for the file to become free. Corrected to spin for the same length of time as a file to be opened for writing. Temporary files names were always generated starting with a sequence number of zero. This guaranteed extra overhead when multitasking because of duplicate file names. Corrected mktempname() to begin sequencing file names with the program's process id obtained from getpid(). [This getpid() call actually works out to be the address of the program under DOS. However, this at least allows programs invoking one another (RMAIL from MAIL, for example) to use different sequnce numbers.] If the sequence file for the spool directory job identifier was unavailable, the job id generated was always 1; this could cause duplicate jobs to be generated in a multitasking system. Corrected getseq() to use the program's process id obtained from getpid() for the next sequence id if the sequence file was unavailable. A known host in the local domain was not recognized if the case of the host's domain did not match the local domain case. Made host comparison case insensitive in checkname(). Under Windows NT, the host status file was generated with a different format than under DOS. Corrected via MS C #pragma statement in HOSTABLE.H to pack data structures. Under Windows NT, attempts to abort any UUPC/extended program which was trapping Ctrl-C, prompting for permission to abort, and which had its standard input redirected met with dismal failure. Corrected in SAFEIO.C and SAFEOUT.C by explicitly opening the console to ask permission to abort. If a program could not open a log file, it reported this interesting fact with a NULL pointer for the file name. Corrected to use the real file name. Under OS/2, over length invalid mailbox names could be generated if the directory option was set. Corrected by limiting the mail box name to eight characters in mkmailbox(). Non-existent directories listed in the PERMISSN file caused security initialization to abort for UUCICO or UUXQT, even when those directories would be automatically created by UUCICO. Changed messages in InitDir() for such missing directories from errors to warnings. The creation time of files was incorrectly reported by stater(), affecting when news files were expired after a restore of a directory under OS/2. Corrected stater() to return the last update time. UUCICO prioritized outgoing packets over incoming acknowledgments, resulting in a possible backup of requests to resend data. gsendpkt() is corrected to always look for at least one acknowledgment. (Fix by Robert Denny.) If invoked without a time to terminate, UUCICO printed a nonsense time for when it would exit. Corrected message in callin() to indicate UUCICO would run until explicitly killed. UUSTAT loaded the host status file before processing its command line options, making it difficult to debug problems detected during the loading. Moved the host status load to after the options are parsed. The OS/2 version of UUCLEAN.CMD failed to age files if one or more generations of the file was under the length to age files. Corrected to merge larger files with the under length files. The login script processor wrote to the communications driver layer one character at time. While this was as efficient as any other method with the DOS COMMFIFO driver, it requires additional system calls for blocked I/O drivers such as FOSSIL, OS/2 and Windows NT. It was highly inefficient for network communications drivers such as TCP/IP or named pipes. The script processor has been modified to buffer writes unless the user has requested a delay between each character. Errors caused by multiple programs trying concurrently open the same log file were corrected. Applied patch to Borland C++ 3.1 library to cause system stat() call to release memory after use. Also added new debugging information to ndir.c to assist tracing network related failures of UUXQT. UUX failed to format commands properly for execution on remote UNIX systems. Corrected by Richard H. Gumpertz, . Note: For another UUPC/extended system to execute most UUX commands, UUXQT must perform additional processing which is not yet implemented. Thus, the UUX command remains unsupported. Enhancements Katherine Derbyshire, Dave Watt, and Drew Derbyshire rewrote and expanded the documentation into a large manual. The simplified installation is documented with additional examples, various configuration file formats are documented in a new section, a new section on advanced configuration topics has been added, and the entire manual has been reorganized. Please send comments on the documentation to docs@kew.com. Kai-Uwe Rommel supplied code to cause a 16 Bit OS/2 UUCICO listening on port to give up the port to either another UUCICO processing dialing out. The port can also be released and restored through a newly supplied utility program, UUPORT. Dave Watt wrote TCP/IP support for Windows 3.x and Windows NT. Ported OS/2 version to 32 bit API's using Borland C++ for OS/2. The 16 bit version continues to be available. Added "t" protocol for TCP/IP connections. Added OS/2 named pipe support. Added support for Windows 3.x via Borland C++ 3.1 EasyWin environment provided by Robert C. Denny . Changes include native Windows communications driver for UUCICO, Windows external program invocation support, Windows directory search functions, Windows delay functions, and numerous small changes in support of these enhancements. Additional changes including required MAKEFILE support, isolating external program invocation, support for Win16. prefix in configuration files, and other minor clean up performed by Drew Derbyshire. Also added new Boolean option windows, which when used in Windows environment causes RMAIL and RNEWS to be invoked with file input (-f ) flag to allow invoking without file redirection. Added support for Universal Naming Convention (UNC) path names and Lantastic Networks. Specifically, normalize() is modified to allow double leading slashes indicating a UNC name and to pre- pend the logical UNC name as required to file names. In addition, various file opens are modified to revert slashes to backslashes for system and/or routines which cannot handle forward slashes in names. Added new -B command option to UUPOLL. When used, the specified command is executed before each active poll out. If this command exits with a non-zero return code, UUPOLL itself immediately exits. UUPC/extended distribution archives are now being packed with the public domain ZIP 1.9 program. Previously, the first generation PKZIP was used. Due to the explosion in the number of versions, the archives have also been renamed as documented in the revised HOWTOGET to include a letter identifying the environment each archive is for. A new documentation archive with the documents pre-formatted for a PostScript printer now exists. Long names are now better supported under OS/2 and Windows NT HPFS and NTFS file systems. Added (actually further modified undocumented) supported for Universal Naming Convention (UNC) names. Version 1.11z Revision Summary Bug Fixes When UUSUB was invoked with the clear (-c) option, it wrote the cleared status file to the SpoolDir rather than the new directory for the file, the ConfDir. Corrected this oversight in hostrset.c. Also corrected reset of start of the collection time. RNEWS snews mode processing failed to process input files in binary mode. Corrected by forcing all input to be read in binary mode. Corrected expand_path() so that path names beginning with tilde (~) need not end with a slash (/). This mostly affects UUCP file transfers. Corrected scrsize() to sanity check BIOS values for the screen size on systems running versions of DOS previous to DOS 4.0. Previously, invalid screen sizes were not trapped on such older systems, causing the internal pager to require input after every line. Corrected address parser to include the percent sign (%) in an address as an indicator of a non-local address. Previously, such addresses were handled as invalid local users. Corrected bounce() processing to not recursively deliver mail to an invalid address such as the local postmaster. Corrected system alias processing to use configuration directory as current directory rather than a possibly invalid user home directory pointer. Also inserted altered system alias processing to call expand_path() to allow using ~user syntax in system alias include files. Correct RMAIL to not use a debug level less than zero when initializing, which caused configuration failure messages to be suppressed (resulting in RMAIL beeping and dying without offering a clue as to why). Corrected bug in UUPOLL which caused the program to spin for one second spitting out messages about waiting for zero seconds before running the daily clean up command. Bill Plummer provided fix to COMMFIFO.ASM serial port driver to provide delay after selected modem command operations to allow slow modems to respond. Corrected bug in syslog processing which caused the file to be prematurely closed and never reopened if multitask was not set. When UUX generated a command for a remote system, it requested the command file be sent before any data the command needed. Corrected this to sent the data first. Enhancements Added -t option UUCICO to cause tracing of data received or sent to various communications drivers to the file LINEDATA.LOG in the Spool directory. Previously, an undocumented feature would cause this tracing to be performed if the file already existed. Added multiple parallel communications drivers support to UUCICO, and added new drivers for via FOSSIL and ArtiComm controlled ports under DOS. The FOSSIL support is enabled by installing a FOSSIL port driver (not supplied) and adding the keyword: suite=fossil To the modem (*.MDM) file for the affected port. Likewise, an ARTICOMM supported port is enabled by providing a suite=articomm keyword in the modem file for the port. Rewrote syslog processing to display requester of a file, the remote system involved, and host (UNIX format) name. The local (DOS) name is dropped from the log file. [Many thanks to Mark W. Schumann , who provided the articomm driver.] Added optional global keywords: Systems= and Passwd= to UUPC.RC file. These keywords define non-default locations of SYSTEMS and PASSWD files. This allows unique (dummy) copies of these files to be used for client workstations without passwords on shared network environments. The default location for these files remain in the UUPC/extended configuration directory. Added new option keywords senddebug and honordebug. In their default state, UUCICO neither transmits the current debug level to the remote system when calling, nor does it use the debug level sent by the remote system called. Note: The previous behavior was to not send the current debugging level but to honor the remote system's debug level. Renamed hpfs option to longname, which more accurately describes its (as yet unimplemented) processing in support of longer file names on any file system which supports them. Added new UUPC.RC keywords banner= and motd=, which define files displayed to remote users by UUCICO. If defined, the file named as the banner is displayed before the login prompt. Likewise, if defined the file named as the motd (message of the day) is displayed after a successful login only if the login shell is not UUCICO. Modified loading of the PASSWD file to use the configuration directory drive as the default when determining the drive letter for home directories. This allows omitting the drive letter within the PASSWD file. Added new OS/2 command file, GETUUPC.CMD, which is called by the other OS/2 scripts to determine UUPC/extended configuration information. Made post-login startup message time out configurable. Version 1.11y Revision Summary Bless Snuffles for she has sinned. She failed to keep track of all the contributors of bug fixes and enhancements for the 1.11y release. But you know who you are, bless you all ... Bug Fixes Dropped the beta test port of RN 4.3. We're working on porting the newer RN 4.4, but neither source nor object for this is included in 1.11y. Corrected bug in configuration processor which assumed all tables (i.e. the modem configuration table) were as long as the master configuration table. Added specific error message for when local host name was improperly added to SYSTEMS file. Formerly, UUCICO died gloriously with a (incorrect) message about a memory shortage in dcpsys.c. Corrected configuration processing to load UUCP spool related variables for RNEWS. Previously, RNEWS failed to load such information and thus ignored overrides of the default character set. Modified directory search functions to support longer file names used by non-FAT (non-DOS) file systems and to return file time and size information to the caller. This implicitly fixes problems with programs such as EXPIRE running out of memory when running on network drives due to bugs in the Borland C++ stat() call, which no longer has to be used as much. Modified UUCICO status file processing to lock the status file to avoid overlapping updates. Previously, race conditions could cause the file to be reset by mistake. Corrected printmsg() to use unique buffer for time stamp information in log file. Formerly, the default static buffer used by various subroutines would be overwritten with the current time when logging. Made return codes from RMAIL more unique to allow better debugging of failed mail. In RNEWS, redid processing performed by SNEWS option to make it even dumber. Rewrote RNEWS batched news processing to correctly process files under 512 bytes. Formerly, such articles and all articles following were dropped. Upped maximum length of news group names in RNEWS to keep it from dying when brain dead lusers create news groups with excessive length names. Corrected OS/2 WAITING command to load needed subroutine packages before using them. Corrected UUPOLL bug which caused it to exit with a return code 0 no matter how it was terminated. Corrected UUPOLL bug which caused it to not terminate at the correct time if both the -e and -f flags were specified. Added fix to COMMFIFO.ASM from William Plummer to fix incorrect assembly of references to COMMFIFO error counts. Modified UUCICO 'g' protocol processor to use FAR memory for packet buffers to reduce number of out of memory errors under 16 bit DOS and OS/2 compilers. Modified UUCICO 'g' protocol processor to correctly negotiate packet sizes with remote systems, thus allowing the remote system to send the local system larger packet than the local system can send the remote. (Error pointed out by Ian Taylor.) Corrected sample modem files to NOT enable VariablePacket processing by default. Corrected UUCICO to not update host status if host information was not initialized during a passive poll. Corrected syslog option to only set buffering once for the log file if not multi-tasking. This bug caused 1.11x to repeatedly report that SYSLOG file was not found when, in fact, it was fine. Corrected UUCICO modem processing to flag that graceful shutdown was needed for OS/2 versions of UUCICO. Previously, it exited immediately without closing the serial port. Corrected UUCICO modem processing to invoke carrier detect processing whenever the modem connects. This was previously missed for hot logins invoked using the UUCICO -w flag. Corrected UUCICO carrier detection processing for OS/2 communications driver. It previously OR'ed modem status information rather than AND'ing it, allowing a half-ready modem to appear ready. Modified UUCICO to trap unique error code returned by SIO serial port driver under OS/2 when interrupted. Interruptions of the DosRead() system call are not really errors, and the default error message alarmed Snuffles. Corrected UUSTAT to not de-reference NULL pointers when killing queued jobs. Enhancements Dave Watt , with assistance from Evan Ross , made numerous additional changes to round out the Windows NT support. One visible change is that lines in UUPC.RC and [userid].RC can be prefixed with WIN32. to cause the line to take effect only under Windows NT. The ConfDir variable is now optional. If the ConfDir is omitted from UUPC.RC, its value is taken from the directory for the UUPC.RC file specified in the UUPCSYSRC environment variable. The directories (except the user's home directory) in the UUPC.RC and [userid].RC file can now be omitted or made relative to the ConfDir. If omitted, they are assumed be sub-directories of the ConfDir with default names. The user's home directory may be relative to the ConfDir, but it must not be omitted. Added new configuration variables OS2.priority and OS2.prioritydelta. These specify the OS/2 priority of UUCICO when connected in the range 1 through 4, and a sub-priority of 0 through 62. Added new Boolean option bounce. When enabled, this causes undeliverable mail to be returned to the sender (as determined by UUXQT and/or by the UUCP From line) with a copy to the local Postmaster. William Plummer made various additional changes to the test driver for DOS COMMFIFO package. Per request of Katherine Derbyshire , modified GENSIG to print out a more useful message about the quote selected, specifically including the output file name. Versions 1.11w through 1.11x Revision Summary Bug Fixes Corrected bug in local delivery routine which failed to detect a letter followed by a colon in a FORWARD file was the beginning of a path name. This fix was supplied by Russ Nelson. Modified internal pager to not scroll top line off the screen when the display is aborted. Corrected RMAIL usage message to display all the operands allowed by the command's rich syntax. Fix supplied by Russ Nelson. Modified chdir() to attempt directory change before invoking mkdir() to build the directory to change to. This should be faster, since a directory will always exist after the first chdir() to it. import_path() mangled valid paths under certain conditions. Modified the routine to properly convert path names with a single character in the path and/or terminated by a slash. Corrected import_newsgroup() to not pad the numbers generated as part of names of DOS news articles. Fix provided by Kai-Uwe Rommel. Corrected via spool directory search routines to correctly handle interrupted searches when a connection to a host is lost. Previously, if a search was not determined to be interrupted, export_path() would catch the bad file name and abort the program ... usually. Corrected included strlwr() function to lower case the string, not upper case it. This problem only affected users using unsupported compilers which lacked this function in their run time library. Modified RNEWS to not shadow or otherwise process an empty compressed input file. Also corrected the file name in various error messages related to uncompress processing. Modified RNEWS to report when it has to delete an article, and to summarize number of articles dropped. Modified RNEWS to report specific error messages via printerr() when it is unable to process a file. Modified RNEWS to write news in the proper news directory when the snews flag is set. Fix supplied by Kai-Uwe Rommel. Applied numerous minor fixes to RNEWS supplied by Kai-Uwe Rommel. Corrected EXPIRE to properly expire one news group via the -n flag. Fix supplied by Kai-Uwe Rommel. 10/04/93 - 183 - UUPC/extended 1.12b Installation and User's Reference UUPOLL would be confused by 25 hour days caused by the end of Daylight Savings Time and attempt to poll continuously during the last hour of such a day. Corrected UUPOLL to realize not all days are created equal, and to correctly compute the next poll as the first poll of the following day. Altered numerous files to be unbuffered, saving on memory and reducing memory to memory copying of data. Deleting extra lock files was a major performance hit under OS/2 with UNDELETE processing enabled. Corrected UUCICO and UUXQT lock processing to not lock systems without reason. Suppressed closing UUCICO warning message about unable to connect to remote when the program was only answering the phone. Made UUCICO 'G' protocol use packets of fixed size to be more compatible with System V Release 4 UUCP. Made unique entries in the modem (*.MDM) file for entries for the ''g", "G", and "v" protocol options. Also added largepacket modem file option for "g" protocol to enable large packet processing under this protocol. Added new UUCICO 'v' protocol, which is 'g' protocol with optionally large (512) byte variable length packets. This protocol is only supported by other UUPC/extended systems. Corrected two problem with 'g' protocol start-up, from problem descriptions provided by Ian Lance Taylor, author of Taylor UUCP. Both fixes provide for insuring one system does not get ahead of the other, that is one system thinks it has initialized the connection when the other has not. Corrected UUCICO to not abort when fields are missing from the SYSTEMS file. This was based on an original fix by Eugene Nesterenko, Moscow, Russia. Corrected various UUCICO start-up error messages to display at debug level 0, not 1. Thanks to Bill Plummer for pointing this out. UUCICO would previously reject anonymous UUCP connections if the local system was running a high debug level. Corrected UUCICO to not confuse local and remote debug levels. Modified UUCICO to use a single data transfer buffer for data input and output as well as a command buffer, thus allowing this buffer to be bigger. Modified UUNAME to accept the debug level (-x) option. This was embarrassing since the upgrade instructions specifically said to use this option to determine obsolete keywords in the UUPC.RC file. Corrected UUXQT to send mail to the originator of a UUX job, not the local postmaster. Also corrected UUXQT to not mangle the dummy input file name NUL and then be unable to open the mangled name. Fixes supplied by Charles R. (C. R.) Oldham of Arizona State University. Corrected UUSUB to reset the starting time of statistics collection when clearing all totals. Corrected UUXQT to report why RMAIL dies, not just that it failed. Corrected RMAIL to not close its own log file, instead leaving this task to the common logging functions. Enhancements Dave Watt ported the entire source to Windows NT. Note this platform has been not been tested, and executables are not supplied at this time. Problems are specifically known to exist in creation of the HOSTSTATUS file. Dave Watt also wrote DESQView support. UUPOLL and UUCICO give up the CPU when idle. Added a number of new sample configuration sample files, including a sample PERMISSN file and copies of several files used on kendra. Modified configuration file routines and expand_path() to use run time library supplied functions to normalize directory paths. This allows determining the path on drives other than the current drive. Note: Because of this change, placing floppy diskette drive letters in the PERMISSN file can cause the system to hang when it attempts to determine the current directory on the drive. Rewrote the OS/2 versions of UUIO, UUCLEAN and WAITING commands into REXX, made enhancements including using the UUPC/extended environment variables and aging files based on size. Added MAILCHEK command from Evan Champion to provide running report of mail waiting in an OS/2 window using Visual REXX. (This command does not exist under DOS.) Modified FOPEN() to automatically retry failed file opens for 20 seconds if the error is a sharing violation. Also modified openline() and lock_system() to not use this retry processing. Moved HOSTATUS file from spool directory to configuration directory, and moved news ACTIVE file from news directory to configuration directory. This allows easily backing up these files without backing up the news or spool directories. Modified majority of permanent string allocations to use newly written routine strpool(), which allocates memory in larger blocks, thus bypassing malloc() space overhead. Routine also searches duplicates in strings to avoid allocating the same string twice. If running at debug level 2 or above, a summary message of the memory used (and saved) is printed. Also, added new boolean option SpeedOverMemory to bypass the duplicate string scan on slower systems. Wrote support for a system wide user aliases file. This file, used only by RMAIL, allows forwarding for users and/or mailing lists to be defined without adding the local address to the PASSWD file, resulting in improved efficiency for other programs which use the PASSWD file such as MAIL and UUCICO. Use of the system wide alias file also eliminates the need for dummy home directories containing forward files, resulting in 4 kilobytes disk savings per forwarded user. This support was based on a prototype supplied by Russ Nelson. Modified MAIL to print the numbers of items deleted by the delete command on one line to keep the screen from scrolling madly. Also, items previously deleted are not listed a second time. Added number items in the mailbox to the MAIL status command. Added "Path:", "Lines:", and "References:" to the list of items ignored by the internal mail pager used by the print command. Under OS/2 and DOS 4.0 or above, the internal pager now uses the true screen size to determine the number of lines to scroll. This allows exploiting 50 line VGA screens or odd-sized OS/2 windows. Modified loading of ACTIVE file by news processing to not build directories for empty news groups. So long as the target directories are built by the routine posting news (i.e. RNEWS uses fopen()), then the directories will be created on demand. Enhanced EXPIRE to report bytes and articles processed, including totals for data purged, moved, or left eating disk space. Running EXPIRE at debug level 2 (-x 2) will report this information on a per group level. Modified UUPOLL to report when the UUCLEAN command is scheduled to next run at startup. Modified UUCICO processing enabled by the syslog option to work with the multitask option. Specifically, the SYSLOG is only opened when needed in multitasking mode and closed immediately. Modified OS/2 communications support to show communications port errors in English. Also added a ShowModem() function to OS/2 communications support to show modem status in English. Under OS/2, increased modem recover time from 0.5 seconds to 2.0 seconds after hanging up the telephone.