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: Architectures for which this patch is available: 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.