Rdist Version 6.1 May 2, 1994 Michael Cooper University Computing Services University of Southern California mcooper@usc.edu GENERAL INFORMATION This is version 6.1 of Rdist from USC. It is based on rdist from 4.3BSD (classic). It includes all fixes for all bugs known to the CSRG Berkeley folks. It has been running at USC and numerous other sites for some time now on a wide variety of platforms. This version of rdist is not directly compatible with rdist distributed with 4.3BSD and subsequent vendor releases, but does indirectly provide full backward compatibility. See COMPATIBILITY below for details. The current official version of rdist is available via anonymous ftp on usc.edu under /pub/rdist. The current version is always retrievable as file "/pub/rdist/rdist.tar.gz". CHANGES/FEATURES This version of rdist does not need to be setuid "root" at all. Rdist now uses the rsh(1c) [remote command] program to make connections to remote hosts, instead of making the connection directly. This eliminates the need to be run as "root". Many thanks to Chris Siebenmann and John DiMarco who came up with an rsh version of rcmd() that makes this possible. This version supports automatic system determination and configuration for pre-ported platforms. This means that rdist knows how to completely configure and compile itself for a number of platforms. Users don't need to worry about modifying any files to compile on a supported platform. See the ChangeLog file for the real details. The end of that file contains the major new features compared to rdist classic. A paper titled "Overhauling Rdist for the '90s" from USENIX LISA VI is available for anonymous ftp on usc.edu as "/pub/rdist/overhaul.ps.gz". PLATFORMS This version of rdist has been ported to most major and a number of not so major platforms. The list below is only a partial list. The complete list of supported platforms can be found by looking at all the config/os-*.h files. MACHINE TYPE OPERATING SYSTEM --------------- ---------------------------------- DEC MIPS Ultrix 4.2 DG AviiON DG/UX 5.4.x HP 9000/300 HP/UX 7.05 (HP cc) HP 9000/400 HP/UX 7.05 (HP cc) HP 9000/700 HP/UX 8.07 (HP cc, GCC 2.3.1) IBM RS6000 AIX 3.2 NeXTStep Mach 3.1 Sun-3 SunOS 4.1.1 Sun-4/SPARC SunOS 4.1.3, SunOS 5.3 (Solaris 2.3) COMPATIBILITY This version of rdist differs greatly from older versions (as distributed with 4.3BSD) in that the client and the server portions are seperated into two distinct programs, rdist and rdistd, respectively. The protocol used to communicate between the client and server has also been extensively modified. These two items make providing "builtin" compatibility very difficult. However, backwards compatibility is possible, provided you have a binary or source copy of the old rdist. The way the old rdist started a server rdist is to run "rdist -Server". If the new rdist is run with the "-Server" option, then it will exec a copy of the old rdist (usually /usr/old/rdist or /usr/ucb/oldrdist). In this way, you get compatibility with hosts running the old rdist attempting to rdist to a machine running new rdist. If your host running new rdist wants to rdist to a host running the old rdist, then it must run the old rdist program (/usr/old/rdist or /usr/ucb/oldrdist). The definition _PATH_OLDRDIST in "config/config.h" controls the location of the old rdist. If this is not defined, or the defined program does not exist at runtime, then rdist will print an error when run with the "-Server" option. INSTALLATION 1) Determine whether the local machine is running a supported OS by running the command "config/os-type". If the command reports the local OS is "unknown", then you cannot proceed until rdist is ported to the local system OS. (See the PORTING section). 2) Edit "Makefile.local" to override any of the default Makefile variables as defined in "mf/Makefile.var". Usually you just want to change BIN_DIR to be appropriate for your system. 3) You may also want to check "config/config.h" for any local changes you would like to make. 4) Run "make" to compile everything. 5) Run "make install" to install the binaries and "make install.man" to install the manual pages. BUG REPORTS Bug reports should be sent to "rdist-bugs@usc.edu". All bug reports should include: 1) The version of the rdist client and server you are running (use the -V option to rdist and rdistd) 2) The platform (machine + OS name + OS version) 3) A full description of the problem, including sample distfiles. 4) If you have a patch to fix the problem, a context diff (diff -c) of the original files vs. the fixed files RDIST MAIL LISTS There are two rdist mailling lists described below. PLEASE DO NOT SEND GENERAL QUESTIONS TO ANY OF THESE LISTS. LIST NAME SUBSCRIPTION ADDRESS DESCRIPTION --------------- ----------------------- ------------------------------------ rdist-announce rdist-announce-request Announcements about new versions of Rdist. rdist-dev rdist-dev-request Rdist developers mailling list. Discussion about rdist features, suggestions, bugs, etc. Will also receive all rdist-announce mail. Only those who are _SERIOUS_ about being an rdist developer should be on this list. To subscribe or unsubscribe, send email to the appropriate SUBSCRIPTION ADDRESS from above "@usc.edu". i.e. "rdist-dev-request@usc.edu" for the "rdist-dev" list. Archives are available for anonymous ftp from usc.edu as /pub/rdist/.archive PORTING There are a number of steps to take when porting rdist to a new OS. Here are some very rough guidelines for what to do. 1) Modify "config/os-type" to determine your OS type. Make sure you use a string that's not more than 9 characters so we don't exceed the 14 character filename limits on certain systems. 2) Copy "config/os-TEMPLATE.h" to "config/os-YOUR_OS.h" (YOUR_OS should be whatever you modified os-type to print) and modify it according to its comments. Consult "config/config-def.h" for lists of possible values. 3) Copy "config/mf.TEMPLATE" to "config/mf.YOUR_OS" and modify it according to the comments found there in. 4) Optionally modify "src/isexec.c" to add your OS specific code for determining if a file is a local binary executable. 5) Test it! 6) Send me your "os-YOUR_OS.h" and "mf.YOUR_OS" files, along with context diffs to any other files you changed. NOTES rcmd() vs. rsh(1c) By default rdist uses rsh(1c) to make connections to remote hosts. This has the advantage that rdist does not need to be setuid to "root". This eliminates most potential security holes. It has the disadvantage that it takes slightly more time for rdist to connect to a remote host due to the added overhead of doing a fork() and then running the rsh(1c) command. If you wish to have rdist call the rcmd() function directly and avoid using rsh(1c) all together, then you should add "-DDIRECT_RCMD" to $(DEFS_LOCAL) and "RDIST_MODE = 4555" in "Makefile.local". You may need to do this if your system does not have the rsh(1c) command. HP/UX All of this information on HP/UX is third-hand. I don't have access to any HP/UX machines to test rdist on. Unlike HPUX version 7, version 8 does not come standard with yacc which is now part of the C/ANSI C Development Bundle. If that bundle is on the system, then rdist compiles fine with the changes to the Makefile to include regex.o and strcasecmp.o. If you don't have yacc and instead use the GNU bison in the yacc mode (-y option) it compiles fine but needs to have the PW library included (-lPW) in order to find an alloca.o when linking. The regex that is part of the HPUX C library is not compatible with the BSD style regex that rdist uses. Someone who leaves regex.o out of the MISSINGOBJS line in the Makefile because they noticed a regex(3) in the HPUX manual set is going to have a problem. OLD rcmd() LIBRARY BUG Very Old 4.2BSD-based Unix systems may have a bug in their rcmd() library function. The bug allowed a user process to run out of file descriptors if too many connection attempts failed. The problem is that the socket would never be closed if the connect() failed. This could eventually lead to running out of file descriptors if enough connections failed. Most current Unix's like SunOS 4.0.3 and later have this fixed. Here is a diff to (I think) the SunOS 3.5 rcmd() to fix the problem: *************** *** 51,56 **** --- 65,71 ---- timo *= 2; goto retry; } + (void) close(s); perror(hp->h_name); return (-1); } RCS INFO This is rcs info for this file: $Id: README,v 6.20 1994/05/02 18:01:39 mcooper Exp $