Rdist Version 6.1.4
			    July 19, 1996

			    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 <cks@utcc.utoronto.ca> and John DiMarco
<jdd@cdf.toronto.edu> 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 complete list of supported platforms can
be found by looking at all the config/os-*.h files.


			    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/<LIST>.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:
	Old Id: README,v 6.23 1996/07/19 17:22:49 michaelc Exp