Patch-ID# 101570-01
Keywords: sccs delget delta nfs
Synopsis: SunOS 4.1.2, 4.1.3: sccs delget failed under heterogeneous NFS.
Date: Mar/07/94
 
Solaris Release: 1.0.1 1.1 1.1C

SunOS release: 4.1.2 4.1.3 4.1.3C
 
Unbundled Product: 
 
Unbundled Release: 

Topic: `sccs delget' failed under heterogeneous NFS client/server.
 
BugId's fixed with this patch: 1088308

Changes incorporated in this version: 

Relevant Architecture: sparc
    NOTE: sun4, sun4c, sun4m

Patches which may conflict with this patch: 

Obsoleted by: 

Files included with this patch: 

	/usr/sccs/admin
	/usr/sccs/cdc
	/usr/sccs/comb
	/usr/sccs/delta
	/usr/sccs/get
	/usr/sccs/help
	/usr/sccs/prs
	/usr/sccs/prt
	/usr/sccs/rmdel
	/usr/sccs/sact
	/usr/sccs/sccsdiff
	/usr/sccs/unget
	/usr/sccs/val
	/usr/sccs/what
	/usr/sccs/src/sccsdiff.sh
	/usr/sccs/helpdir

Problem Description: 

	1088308:

	The `sccs' subcommand `sccs delget' creates several temporary 
	history files during operations, eventually the history
	file `s.file' will be replaced by temporary file called `x.file'. 
	If user checks out a file to make certain changes, the `x.file' get 
	created under the name of current user, and then chown() get called 
	immediately with uid/gid set to be the user of s.file, which was the 
	owner of previous user who checked in the file, obviously chown() 
	failed with no error checking being done. Another place in delta() did 
	the same thing when rename() was called to replace s.file with
	x.file. All of above do not create any problems simply because 
	rename() already takes of the correct file ownership change, 
	until SGI reported a failure of `sccs delget' over NFS filesystem, 
	where the server is a SGI machine, the client is a 4.x Sun machine.
	The failure is because that SGI NFS server protocol allows non-root
	ownership change so that chown() was returned successfully in the above 
	scenario, which causes the write to x.file failed due to ownership get
	changed to previous owner. Current `sccs' code uses stat() to get
	both uid and gid from s.file, these two values was used by chown() later.
	The problem was corrected by taking out chown() in delta.c and ./lib/putline.c.


INSTALL:

	1. mv /usr/sccs/admin /usr/sccs/admin.FCS
	   mv /usr/sccs/cdc /usr/sccs/cdc.FCS
	   mv /usr/sccs/comb /usr/sccs/comb.FCS
	   mv /usr/sccs/delta /usr/sccs/delta.FCS
	   mv /usr/sccs/get /usr/sccs/get.FCS
	   mv /usr/sccs/help /usr/sccs/help.FCS
	   mv /usr/sccs/prs /usr/sccs/prs.FCS
	   mv /usr/sccs/prt /usr/sccs/prt.FCS
	   mv /usr/sccs/rmdel /usr/sccs/rmdel.FCS
	   mv /usr/sccs/sact /usr/sccs/sact.FCS
	   mv /usr/sccs/sccsdiff /usr/sccs/sccsdiff.FCS
	   mv /usr/sccs/unget /usr/sccs/unget.FCS
	   mv /usr/sccs/val /usr/sccs/val.FCS
	   mv /usr/sccs/what /usr/sccs/what.FCS

	2. save patch distribution under some working directory.

	3. cd to the working directory.

	4. su

	5. run `make install' to install all the commands.


