From ebda105cf21f429f1e4a41dcc8b3a1a6c4eb6524 Mon Sep 17 00:00:00 2001
From: Mark Linimon <linimon@FreeBSD.org>
Date: Sun, 19 Dec 2004 01:54:41 +0000
Subject: As previously announced, remove due to unfixed security problems
 (nearly 6 months).

---
 net/sup/Makefile                 |   25 -
 net/sup/distinfo                 |    2 -
 net/sup/files/patch-aa           | 3114 --------------------------------------
 net/sup/files/patch-ab           |  384 -----
 net/sup/files/patch-ac           |  140 --
 net/sup/files/patch-quit.c       |   25 -
 net/sup/files/patch-run.c        |   79 -
 net/sup/files/patch-supcmeat.c   |   35 -
 net/sup/files/patch-supfilesrv.c |  107 --
 net/sup/files/patch-vprintf.c    |   28 -
 net/sup/pkg-descr                |    5 -
 net/sup/pkg-plist                |    3 -
 12 files changed, 3947 deletions(-)
 delete mode 100644 net/sup/Makefile
 delete mode 100644 net/sup/distinfo
 delete mode 100644 net/sup/files/patch-aa
 delete mode 100644 net/sup/files/patch-ab
 delete mode 100644 net/sup/files/patch-ac
 delete mode 100644 net/sup/files/patch-quit.c
 delete mode 100644 net/sup/files/patch-run.c
 delete mode 100644 net/sup/files/patch-supcmeat.c
 delete mode 100644 net/sup/files/patch-supfilesrv.c
 delete mode 100644 net/sup/files/patch-vprintf.c
 delete mode 100644 net/sup/pkg-descr
 delete mode 100644 net/sup/pkg-plist

(limited to 'net/sup')

diff --git a/net/sup/Makefile b/net/sup/Makefile
deleted file mode 100644
index 0988ed49fdb7..000000000000
--- a/net/sup/Makefile
+++ /dev/null
@@ -1,25 +0,0 @@
-# New ports collection makefile for:	sup
-# Date created:		21 August 1994
-# Whom:			jkh
-#
-# $FreeBSD$
-#
-
-PORTNAME=	sup
-PORTVERSION=	2.0
-CATEGORIES=	net
-MASTER_SITES=	${MASTER_SITE_LOCAL}
-MASTER_SITE_SUBDIR=	trevor
-DISTNAME=	sup
-
-MAINTAINER=	ports@FreeBSD.org
-COMMENT=	CMU's Software Update Protocol package
-
-FORBIDDEN=	"Unmaintained, potential security issues (CAN-2004-0451)"
-DEPRECATED=	${FORBIDDEN}
-EXPIRATION_DATE=2004-12-07
-
-MAN1=		sup.1
-MAN8=		supservers.8
-
-.include <bsd.port.mk>
diff --git a/net/sup/distinfo b/net/sup/distinfo
deleted file mode 100644
index 73c6e6381c32..000000000000
--- a/net/sup/distinfo
+++ /dev/null
@@ -1,2 +0,0 @@
-MD5 (sup.tar.gz) = 13643cdf21f2357cf392c3423d09c0d8
-SIZE (sup.tar.gz) = 98931
diff --git a/net/sup/files/patch-aa b/net/sup/files/patch-aa
deleted file mode 100644
index 141fcc3bfd80..000000000000
--- a/net/sup/files/patch-aa
+++ /dev/null
@@ -1,3114 +0,0 @@
-diff -c /var/tmp/sup/Makefile sup/Makefile
-*** Makefile	Mon Apr 11 08:02:04 1994
---- sup/Makefile	Sun Aug 13 19:40:26 1995
-***************
-*** 42,54 ****
-  #
-  SITE			= NETBSD
-  #SITE			= CMUCS
-  NETBSD_DEFINES		= -UMACH -DVAR_TMP -DHAS_DAEMON
-  AFS_DEFINES		= -DAFS -I/usr/afsws/include
-  OSF_DEFINES		= -UMACH -DOSF -D_BSD -noshrlib -g -DNEED_VSNPRINTF -DVAR_TMP
-  CMUCS_DEFINES		= -DMACH -DDOPRINT_VA -DNEED_VPRINTF
-  NON_MACH_DEFINES	= -UMACH
-  #DEFS			= -UCMUCS -UCMU  ${${SITE}_DEFINES}
-! DEFS			= -UCMUCS -UCMU  ${NETBSD_DEFINES}
-  
-  #INSTALLATION PARAMETERS
-  NETBSD_BINDIR		= /usr/local/bin
---- 42,55 ----
-  #
-  SITE			= NETBSD
-  #SITE			= CMUCS
-+ RENAMELOG		= \"/usr/local/etc/sup.moved\"
-  NETBSD_DEFINES		= -UMACH -DVAR_TMP -DHAS_DAEMON
-  AFS_DEFINES		= -DAFS -I/usr/afsws/include
-  OSF_DEFINES		= -UMACH -DOSF -D_BSD -noshrlib -g -DNEED_VSNPRINTF -DVAR_TMP
-  CMUCS_DEFINES		= -DMACH -DDOPRINT_VA -DNEED_VPRINTF
-  NON_MACH_DEFINES	= -UMACH
-  #DEFS			= -UCMUCS -UCMU  ${${SITE}_DEFINES}
-! DEFS			= -UCMUCS -UCMU  ${NETBSD_DEFINES} -DRENAMELOG=${RENAMELOG}
-  
-  #INSTALLATION PARAMETERS
-  NETBSD_BINDIR		= /usr/local/bin
-***************
-*** 60,67 ****
-  SUPCL			= supcmain.o supcvers.o supcparse.o supcname.o \
-  			  supcmisc.o supcmeat.o
-  SUPS			= scm.o scmio.o stree.o log.o supmsg.o netcrypt.o
-! EXTRA			= atoo.o errmsg.o expand.o ffilecopy.o filecopy.o nxtarg.o  \
-! 			  path.o quit.o run.o salloc.o skipto.o  vprintf.o
-  
-  
-  PROGRAMS		= sup supscan supfilesrv
---- 61,69 ----
-  SUPCL			= supcmain.o supcvers.o supcparse.o supcname.o \
-  			  supcmisc.o supcmeat.o
-  SUPS			= scm.o scmio.o stree.o log.o supmsg.o netcrypt.o
-! EXTRA			= atoo.o errmsg.o expand.o ffilecopy.o filecopy.o \
-! 			  nxtarg.o path.o quit.o run.o salloc.o skipto.o  \
-! 			  vprintf.o
-  
-  
-  PROGRAMS		= sup supscan supfilesrv
-***************
-*** 76,84 ****
-  .endif
-  
-  .if defined(USE_CRYPT)
-! NETBSD_LIBS		= -lcrypt -lutil
-  .else
-! NETBSD_LIBS		= -lutil
-  .endif
-  CMUCS_LIBS		= -lsys
-  OSF_LIBS		= -lbsd
---- 78,86 ----
-  .endif
-  
-  .if defined(USE_CRYPT)
-! NETBSD_LIBS		= -lcipher -lcrypt -lutil
-  .else
-! NETBSD_LIBS		= -lcrypt -lutil
-  .endif
-  CMUCS_LIBS		= -lsys
-  OSF_LIBS		= -lbsd
-diff -c /var/tmp/sup/ffilecopy.c sup/ffilecopy.c
-*** ffilecopy.c	Fri Aug 20 17:46:33 1993
---- sup/ffilecopy.c	Wed Apr  5 11:46:38 1995
-***************
-*** 58,64 ****
-  	if (fflush (there) == EOF)		/* flush pending output */
-  		return (EOF);
-  
-! #ifdef __386BSD__
-  	if ((here->_r) > 0) {			/* flush buffered input */
-  		i = write (therefile, here->_p, here->_r);
-  		if (i != here->_r)  return (EOF);
---- 58,64 ----
-  	if (fflush (there) == EOF)		/* flush pending output */
-  		return (EOF);
-  
-! #ifdef __FreeBSD__
-  	if ((here->_r) > 0) {			/* flush buffered input */
-  		i = write (therefile, here->_p, here->_r);
-  		if (i != here->_r)  return (EOF);
-***************
-*** 76,82 ****
-  	i = filecopy (herefile, therefile);	/* fast file copy */
-  	if (i < 0)  return (EOF);
-  
-! #ifdef __386BSD__
-  	(here->_flags) |= __SEOF;		/* indicate EOF */
-  #else
-  	(here->_flag) |= _IOEOF;		/* indicate EOF */
---- 76,82 ----
-  	i = filecopy (herefile, therefile);	/* fast file copy */
-  	if (i < 0)  return (EOF);
-  
-! #ifdef __FreeBSD__
-  	(here->_flags) |= __SEOF;		/* indicate EOF */
-  #else
-  	(here->_flag) |= _IOEOF;		/* indicate EOF */
-diff -c /var/tmp/sup/libc.h sup/libc.h
-*** libc.h	Fri Aug 20 17:46:33 1993
---- sup/libc.h	Sun Aug 13 19:03:32 1995
-***************
-*** 81,86 ****
---- 81,90 ----
-  #ifndef	_LIBC_H_
-  #define	_LIBC_H_ 1
-  
-+ #if defined(__hpux)
-+ #define __P(x) x
-+ #endif
-+ 
-  #ifndef _TYPES_
-  #include <sys/types.h>
-  #endif	/* _TYPES_ */
-***************
-*** 195,200 ****
---- 199,224 ----
-  #if defined(c_plusplus)
-  typedef int (*PFI2)(...);
-  #endif /* c_plusplus */
-+ 
-+ #if defined(__hpux)
-+ extern int utimes(char *, struct timeval *);
-+ 
-+ #ifndef LOCK_SH
-+ #define LOCK_SH 1
-+ #endif
-+ #ifndef LOCK_EX
-+ #define LOCK_EX 2
-+ #endif
-+ #ifndef LOCK_NB
-+ #define LOCK_NB 4
-+ #endif
-+ #ifndef LOCK_UN
-+ #define LOCK_UN 8
-+ #endif
-+ 
-+ extern int flock(int, int);
-+ #endif /* __hpux */
-+ 
-  #if 0
-  extern void abort(void);
-  extern int abs(int);
-diff -c /var/tmp/sup/log.c sup/log.c
-*** log.c	Fri Aug 20 17:46:33 1993
---- sup/log.c	Sun Aug 13 19:43:12 1995
-***************
-*** 52,59 ****
---- 52,64 ----
-   */
-  
-  #include <stdio.h>
-+ #ifdef __hpux
-+ #include <syslog.h>
-+ #include <stdlib.h>
-+ #else
-  #include <sys/syslog.h>
-  #include <c.h>
-+ #endif
-  #if __STDC__
-  #include <stdarg.h>
-  #else
-***************
-*** 72,78 ****
-  char *program;
-  {
-  	if (opened)  return;
-! 	openlog(program,LOG_PID,LOG_DAEMON);
-  	opened++;
-  }
-  
---- 77,83 ----
-  char *program;
-  {
-  	if (opened)  return;
-! 	openlog(program,LOG_PID,LOG_LOCAL1);
-  	opened++;
-  }
-  
-diff -c /var/tmp/sup/scan.c sup/scan.c
-*** scan.c	Fri Aug 20 17:46:33 1993
---- sup/scan.c	Sun Aug 13 18:44:51 1995
-***************
-*** 122,134 ****
-  typedef enum {			/* <collection>/list file lines */
-  	LUPGRADE,	LOMIT,		LBACKUP,	LEXECUTE,
-  	LINCLUDE,	LNOACCT,	LOMITANY,	LALWAYS,
-! 	LSYMLINK,	LRSYMLINK
-  } LISTTYPE;
-  
-  static char *ltname[] = {
-  	"upgrade",	"omit",		"backup",	"execute",
-  	"include",	"noaccount",	"omitany",	"always",
-! 	"symlink",	"rsymlink",
-  	0
-  };
-  
---- 122,134 ----
-  typedef enum {			/* <collection>/list file lines */
-  	LUPGRADE,	LOMIT,		LBACKUP,	LEXECUTE,
-  	LINCLUDE,	LNOACCT,	LOMITANY,	LALWAYS,
-! 	LSYMLINK,	LRSYMLINK,	LRENAME
-  } LISTTYPE;
-  
-  static char *ltname[] = {
-  	"upgrade",	"omit",		"backup",	"execute",
-  	"include",	"noaccount",	"omitany",	"always",
-! 	"symlink",	"rsymlink",	"rename",
-  	0
-  };
-  
-***************
-*** 365,373 ****
-  
-  	if (newonly && (t->Tflags&FNEW) == 0)
-  		return (SCMOK);
-! 	newt = Tinsert (&listT,t->Tname,FALSE);
-  	if (newt == NULL)
-  		return (SCMOK);
-  	newt->Tmode = t->Tmode;
-  	newt->Tflags = t->Tflags;
-  	newt->Tmtime = t->Tmtime;
---- 365,375 ----
-  
-  	if (newonly && (t->Tflags&FNEW) == 0)
-  		return (SCMOK);
-! 	newt = Tinsert (&listT,t->Tname,t->Tflags&FRENAME ? TRUE : FALSE);
-  	if (newt == NULL)
-  		return (SCMOK);
-+ 	if(t->Tnewname)
-+ 	  newt->Tnewname = salloc(t->Tnewname);
-  	newt->Tmode = t->Tmode;
-  	newt->Tflags = t->Tflags;
-  	newt->Tmtime = t->Tmtime;
-***************
-*** 473,478 ****
---- 475,484 ----
-  		case LUPGRADE:
-  			t = &upgT;
-  			break;
-+ 		case LRENAME:
-+ 			t = &flagsT;
-+ 			flags = FRENAME;
-+ 			break;
-  		case LBACKUP:
-  			t = &flagsT;
-  			flags = FBACKUP;
-***************
-*** 522,528 ****
-  					if (*q == 0)
-  						_argbreak = ')';
-  					else
-! 						expTinsert (q,&execT,0,r);
-  				} while (_argbreak != ')');
-  				continue;
-  			}
---- 528,534 ----
-  					if (*q == 0)
-  						_argbreak = ')';
-  					else
-! 						expTinsert (q,&execT,0,r,NULL);
-  				} while (_argbreak != ')');
-  				continue;
-  			}
-***************
-*** 533,554 ****
-  		while (*(q=nxtarg(&p," \t"))) {
-  			if (lt == LOMITANY)
-  				(void) Tinsert (t,q,FALSE);
-  			else
-! 				expTinsert (q,t,flags,(char *)NULL);
-  		}
-  	}
-  	(void) fclose (f);
-  }
-  
-  static
-! expTinsert (p,t,flags,exec)
-  char *p;
-  TREE **t;
-  int flags;
-  char *exec;
-  {
-  	register int n, i;
-! 	register TREE *newt;
-  	char *speclist[SPECNUMBER];
-  	char buf[STRINGLENGTH];
-  
---- 539,575 ----
-  		while (*(q=nxtarg(&p," \t"))) {
-  			if (lt == LOMITANY)
-  				(void) Tinsert (t,q,FALSE);
-+ 			else if( lt == LRENAME )
-+ 				if(*(r=nxtarg(&p," \t")))
-+ 				{
-+ 					expTinsert (q,t,flags,(char *)NULL,r);
-+ 					/*
-+ 					 * Omit the file it is being
-+ 					 * renamed to, to avoid confusion
-+ 					 */
-+ 					expTinsert (r,&omitT,0,
-+ 						   (char *)NULL, (char *)NULL);
-+ 				}
-+ 				else
-+ 					printf("Rename %s without destination "
-+ 					       "file.  Skipping...\n", q);
-  			else
-! 				expTinsert (q,t,flags,(char *)NULL,(char *)NULL);
-  		}
-  	}
-  	(void) fclose (f);
-  }
-  
-  static
-! expTinsert (p,t,flags,exec, q)
-  char *p;
-+ char *q;
-  TREE **t;
-  int flags;
-  char *exec;
-  {
-  	register int n, i;
-! 	register TREE *newt, *ts;
-  	char *speclist[SPECNUMBER];
-  	char buf[STRINGLENGTH];
-  
-***************
-*** 557,574 ****
-  		newt = Tinsert (t,speclist[i],TRUE);
-  		newt->Tflags |= flags;
-  		if (exec) {
-! 			(void) sprintf (buf,exec,speclist[i]);
-  			(void) Tinsert (&newt->Texec,buf,FALSE);
-  		}
-  		free (speclist[i]);
-  	}
-  }
-  
-  static
-! listone (t)		/* expand and add one name from upgrade list */
-  TREE *t;
-  {
-! 	listentry(t->Tname,t->Tname,(char *)NULL,(t->Tflags&FALWAYS) != 0);
-  	return (SCMOK);
-  }
-  
---- 578,602 ----
-  		newt = Tinsert (t,speclist[i],TRUE);
-  		newt->Tflags |= flags;
-  		if (exec) {
-! 			if((ts = Tsearch(flagsT, speclist[i])) 
-! 			   && ts->Tflags&FRENAME)
-! 				(void) sprintf (buf,exec,ts->Tnewname);
-! 			else
-! 				(void) sprintf (buf,exec,speclist[i]);
-  			(void) Tinsert (&newt->Texec,buf,FALSE);
-  		}
-+ 		if (q)
-+ 			newt->Tnewname = salloc(q);
-  		free (speclist[i]);
-  	}
-  }
-  
-  static
-! listone(t)		/* expand and add one name from upgrade list */
-  TREE *t;
-  {
-! 	listentry(t->Tname,t->Tname,(char *)NULL,
-! 		  (t->Tflags&FALWAYS) != 0);
-  	return (SCMOK);
-  }
-  
-***************
-*** 644,651 ****
-  	t->Tctime = st->st_ctime;
-  	t->Tmtime = st->st_mtime;
-  	if (new)  t->Tflags |= FNEW;
-! 	if (ts = Tsearch (flagsT,name))
-  		t->Tflags |= ts->Tflags;
-  	if (ts = Tsearch (execT,name)) {
-  		t->Texec = ts->Texec;
-  		ts->Texec = NULL;
---- 672,682 ----
-  	t->Tctime = st->st_ctime;
-  	t->Tmtime = st->st_mtime;
-  	if (new)  t->Tflags |= FNEW;
-! 	if (ts = Tsearch (flagsT,name)){
-  		t->Tflags |= ts->Tflags;
-+ 		if(t->Tflags&FRENAME)
-+ 			t->Tnewname = salloc(ts->Tnewname);
-+ 	}
-  	if (ts = Tsearch (execT,name)) {
-  		t->Texec = ts->Texec;
-  		ts->Texec = NULL;
-***************
-*** 831,836 ****
---- 862,871 ----
-  			p++;
-  			ts.Tflags |= FNOACCT;
-  		}
-+ 		if (*p == 'R') {
-+ 			p++;
-+ 			ts.Tflags |= FRENAME;
-+ 		}
-  		if ((q = index (p,' ')) == NULL)
-  			goaway ("scanfile format inconsistant");
-  		*q++ = '\0';
-***************
-*** 845,850 ****
---- 880,894 ----
-  			goaway ("scanfile format inconsistant");
-  		*q++ = 0;
-  		ts.Tmtime = atoi (p);
-+ 		p = q;
-+ 		ts.Tnewname = NULL;
-+ 		if (ts.Tflags & FRENAME){
-+ 			if ((q = index (p,' ')) == NULL)
-+ 				goaway ("scanfile format inconsistant");
-+ 			*q++ = '\0';
-+ 			ts.Tnewname = salloc(q);
-+ 			q = p;
-+ 		}
-  		if (ts.Tctime > lasttime)
-  			ts.Tflags |= FNEW;
-  		else if (newonly) {
-***************
-*** 863,868 ****
---- 907,913 ----
-  		t->Tflags = ts.Tflags;
-  		t->Tctime = ts.Tctime;
-  		t->Tmtime = ts.Tmtime;
-+ 		t->Tnewname = ts.Tnewname;
-  	}
-  	(void) fclose (f);
-  	return (TRUE);
-***************
-*** 925,932 ****
-  
-  	if (t->Tflags&FBACKUP)  fprintf (*scanF,"B");
-  	if (t->Tflags&FNOACCT)  fprintf (*scanF,"N");
-! 	fprintf (*scanF,"%o %d %d %s\n",
-  		t->Tmode,t->Tctime,t->Tmtime,t->Tname);
-  	(void) Tprocess (t->Texec,recordexec,*scanF);
-  	return (SCMOK);
-  }
---- 970,983 ----
-  
-  	if (t->Tflags&FBACKUP)  fprintf (*scanF,"B");
-  	if (t->Tflags&FNOACCT)  fprintf (*scanF,"N");
-! 	if (t->Tflags&FRENAME)  fprintf (*scanF,"R");
-! 
-! 	fprintf (*scanF,"%o %d %d",
-  		t->Tmode,t->Tctime,t->Tmtime,t->Tname);
-+ 	if ( t->Tflags&FRENAME)
-+ 		fprintf (*scanF," %s %s\n",t->Tname, t->Tnewname);
-+ 	else
-+ 		fprintf (*scanF," %s\n", t->Tname);
-  	(void) Tprocess (t->Texec,recordexec,*scanF);
-  	return (SCMOK);
-  }
-diff -c /var/tmp/sup/scm.c sup/scm.c
-*** scm.c	Sun Jun 19 23:04:04 1994
---- sup/scm.c	Thu Apr  6 13:53:57 1995
-***************
-*** 208,214 ****
-   * PROTOTYPES
-   */
-  #if __STDC__
-! int	scmerr	__P((int, char *,...));
-  #endif
-  /*************************
-   ***    M A C R O S    ***
---- 208,214 ----
-   * PROTOTYPES
-   */
-  #if __STDC__
-! int   scmerr  __P((int, FILE *, char *,...));
-  #endif
-  /*************************
-   ***    M A C R O S    ***
-***************
-*** 245,275 ****
-  	int one = 1;
-  
-  	if (myhost () == NULL)
-! 		return (scmerr (-1,"Local hostname not known"));
-  	if ((sp = getservbyname(server,"tcp")) == 0) {
-  		if (strcmp(server, FILEPORT) == 0)
-  			port = htons((u_short)FILEPORTNUM);
-  		else if (strcmp(server, DEBUGFPORT) == 0)
-  			port = htons((u_short)DEBUGFPORTNUM);
-  		else
-! 			return (scmerr (-1,"Can't find %s server description",server));
-! 		(void) scmerr (-1,"%s/tcp: unknown service: using port %d",
-  					server,port);
-  	} else
-  		port = sp->s_port;
-  	endservent ();
-  	sock = socket (AF_INET,SOCK_STREAM,0);
-  	if (sock < 0)
-! 		return (scmerr (errno,"Can't create socket for connections"));
-  	if (setsockopt (sock,SOL_SOCKET,SO_REUSEADDR,(char *)&one,sizeof(int)) < 0)
-! 		(void) scmerr (errno,"Can't set SO_REUSEADDR socket option");
-  	(void) bzero ((char *)&sin,sizeof(sin));
-  	sin.sin_family = AF_INET;
-  	sin.sin_port = port;
-  	if (bind (sock,(struct sockaddr *)&sin,sizeof(sin)) < 0)
-! 		return (scmerr (errno,"Can't bind socket for connections"));
-  	if (listen (sock,NCONNECTS) < 0)
-! 		return (scmerr (errno,"Can't listen on socket"));
-  	return (SCMOK);
-  }
-  
---- 245,275 ----
-  	int one = 1;
-  
-  	if (myhost () == NULL)
-! 		return (scmerr (-1, stderr, "Local hostname not known"));
-  	if ((sp = getservbyname(server,"tcp")) == 0) {
-  		if (strcmp(server, FILEPORT) == 0)
-  			port = htons((u_short)FILEPORTNUM);
-  		else if (strcmp(server, DEBUGFPORT) == 0)
-  			port = htons((u_short)DEBUGFPORTNUM);
-  		else
-! 			return (scmerr (-1, stderr, "Can't find %s server description",server));
-! 		(void) scmerr (-1, stderr, "%s/tcp: unknown service: using port %d",
-  					server,port);
-  	} else
-  		port = sp->s_port;
-  	endservent ();
-  	sock = socket (AF_INET,SOCK_STREAM,0);
-  	if (sock < 0)
-! 		return (scmerr (errno, stderr, "Can't create socket for connections"));
-  	if (setsockopt (sock,SOL_SOCKET,SO_REUSEADDR,(char *)&one,sizeof(int)) < 0)
-! 		(void) scmerr (errno, stderr, "Can't set SO_REUSEADDR socket option");
-  	(void) bzero ((char *)&sin,sizeof(sin));
-  	sin.sin_family = AF_INET;
-  	sin.sin_port = port;
-  	if (bind (sock,(struct sockaddr *)&sin,sizeof(sin)) < 0)
-! 		return (scmerr (errno, stderr, "Can't bind socket for connections"));
-  	if (listen (sock,NCONNECTS) < 0)
-! 		return (scmerr (errno, stderr, "Can't listen on socket"));
-  	return (SCMOK);
-  }
-  
-***************
-*** 284,299 ****
-  		netfile = accept (sock,(struct sockaddr *)&from,&len);
-  	} while (netfile < 0 && errno == EINTR);
-  	if (netfile < 0)
-! 		return (scmerr (errno,"Can't accept connections"));
-  	remoteaddr = from.sin_addr;
-  	if (read(netfile,(char *)&x,sizeof(int)) != sizeof(int))
-! 		return (scmerr (errno,"Can't transmit data on connection"));
-  	if (x == 0x01020304)
-  		swapmode = 0;
-  	else if (x == 0x04030201)
-  		swapmode = 1;
-  	else
-! 		return (scmerr (-1,"Unexpected byteswap mode %x",x));
-  	return (SCMOK);
-  }
-  
---- 284,299 ----
-  		netfile = accept (sock,(struct sockaddr *)&from,&len);
-  	} while (netfile < 0 && errno == EINTR);
-  	if (netfile < 0)
-! 		return (scmerr (errno, stderr, "Can't accept connections"));
-  	remoteaddr = from.sin_addr;
-  	if (read(netfile,(char *)&x,sizeof(int)) != sizeof(int))
-! 		return (scmerr (errno, stderr, "Can't transmit data on connection"));
-  	if (x == 0x01020304)
-  		swapmode = 0;
-  	else if (x == 0x04030201)
-  		swapmode = 1;
-  	else
-! 		return (scmerr (-1, stderr, "Unexpected byteswap mode %x",x));
-  	return (SCMOK);
-  }
-  
-***************
-*** 354,360 ****
-  			s = *t;
-  		*t -= s;
-  	}
-! 	(void) scmerr (-1,"Will retry in %d seconds",s);
-  	sleep (s);
-  	return (1);
-  }
---- 354,360 ----
-  			s = *t;
-  		*t -= s;
-  	}
-! 	(void) scmerr (-1, stdout, "Will retry in %d seconds",s);
-  	sleep (s);
-  	return (1);
-  }
-***************
-*** 376,384 ****
-  		else if (strcmp(server, DEBUGFPORT) == 0)
-  			port = htons((u_short)DEBUGFPORTNUM);
-  		else
-! 			return (scmerr (-1,"Can't find %s server description",
-  					server));
-! 		(void) scmerr (-1,"%s/tcp: unknown service: using port %d",
-  					server,port);
-  	} else
-  		port = sp->s_port;
---- 376,384 ----
-  		else if (strcmp(server, DEBUGFPORT) == 0)
-  			port = htons((u_short)DEBUGFPORTNUM);
-  		else
-! 			return (scmerr (-1, stderr, "Can't find %s server description",
-  					server));
-! 		(void) scmerr (-1, stderr, "%s/tcp: unknown service: using port %d",
-  					server,port);
-  	} else
-  		port = sp->s_port;
-***************
-*** 387,393 ****
-  	sin.sin_addr.s_addr = inet_addr (hostname);
-  	if (sin.sin_addr.s_addr == (u_long) INADDR_NONE) {
-  		if ((h = gethostbyname (hostname)) == NULL)
-! 			return (scmerr (-1,"Can't find host entry for %s",
-  					hostname));
-  		hostname = h->h_name;
-  		(void) bcopy (h->h_addr,(char *)&sin.sin_addr,h->h_length);
---- 387,393 ----
-  	sin.sin_addr.s_addr = inet_addr (hostname);
-  	if (sin.sin_addr.s_addr == (u_long) INADDR_NONE) {
-  		if ((h = gethostbyname (hostname)) == NULL)
-! 			return (scmerr (-1, stderr, "Can't find host entry for %s",
-  					hostname));
-  		hostname = h->h_name;
-  		(void) bcopy (h->h_addr,(char *)&sin.sin_addr,h->h_length);
-***************
-*** 397,407 ****
-  	for (;;) {
-  		netfile = socket (AF_INET,SOCK_STREAM,0);
-  		if (netfile < 0)
-! 			return (scmerr (errno,"Can't create socket"));
-  		tin = sin;
-  		if (connect(netfile,(struct sockaddr *)&tin,sizeof(tin)) >= 0)
-  			break;
-! 		(void) scmerr (errno,"Can't connect to server for %s",server);
-  		(void) close(netfile);
-  		if (!dobackoff (retry,&backoff))
-  			return (SCMERR);
---- 397,407 ----
-  	for (;;) {
-  		netfile = socket (AF_INET,SOCK_STREAM,0);
-  		if (netfile < 0)
-! 			return (scmerr (errno, stderr, "Can't create socket"));
-  		tin = sin;
-  		if (connect(netfile,(struct sockaddr *)&tin,sizeof(tin)) >= 0)
-  			break;
-! 		(void) scmerr (errno, stderr, "Can't connect to server for %s",server);
-  		(void) close(netfile);
-  		if (!dobackoff (retry,&backoff))
-  			return (SCMERR);
-***************
-*** 522,527 ****
---- 522,529 ----
-  	struct hostent *h;
-  	struct in_addr addr;
-  	char **ap;
-+ 	if(!strcmp(name,"*"))
-+ 		return (1);
-  	if ((addr.s_addr = inet_addr(name)) != (u_long) INADDR_NONE)
-  		return (addr.s_addr == remoteaddr.s_addr);
-  	if ((h = gethostbyname (name)) == 0)
-***************
-*** 535,541 ****
-  }
-  
-  #if __STDC__
-! int scmerr (int errno,char *fmt,...)
-  #else
-  /*VARARGS*//*ARGSUSED*/
-  int scmerr (va_alist)
---- 537,543 ----
-  }
-  
-  #if __STDC__
-! int scmerr (int eno,FILE *filedes,char *fmt,...)
-  #else
-  /*VARARGS*//*ARGSUSED*/
-  int scmerr (va_alist)
-***************
-*** 543,569 ****
-  #endif
-  {
-  #if !__STDC__
-! 	int errno;
-  	char *fmt;
-  #endif
-  	va_list ap;
-  
-! 	(void) fflush (stdout);
-  	if (progpid > 0)
-! 		fprintf (stderr,"%s %d: ",program,progpid);
-  	else
-! 		fprintf (stderr,"%s: ",program);
-  #if __STDC__
-  	va_start(ap,fmt);
-  #else
-  	va_start(ap);
-! 	errno = va_arg(ap,int);
-  	fmt = va_arg(ap,char *);
-  #endif
-  	vfprintf(stderr, fmt, ap);
-  	va_end(ap);
-! 	if (errno >= 0)
-! 		fprintf (stderr,": %s\n",errmsg(errno));
-  	else
-  		fprintf (stderr,"\n");
-  	(void) fflush (stderr);
---- 545,572 ----
-  #endif
-  {
-  #if !__STDC__
-! 	int eno;
-! 	FILE *filedes;
-  	char *fmt;
-  #endif
-  	va_list ap;
-  
-! 	(void) fflush (filedes);
-  	if (progpid > 0)
-! 		fprintf (filedes,"%s %d: ",program,progpid);
-  	else
-! 		fprintf (filedes,"%s: ",program);
-  #if __STDC__
-  	va_start(ap,fmt);
-  #else
-  	va_start(ap);
-! 	eno = va_arg(ap,int);
-  	fmt = va_arg(ap,char *);
-  #endif
-  	vfprintf(stderr, fmt, ap);
-  	va_end(ap);
-! 	if (eno >= 0)
-! 		fprintf (stderr,": %s\n",errmsg(eno));
-  	else
-  		fprintf (stderr,"\n");
-  	(void) fflush (stderr);
-diff -c /var/tmp/sup/scmio.c sup/scmio.c
-*** scmio.c	Fri Aug 20 17:46:33 1993
---- sup/scmio.c	Sun Aug 13 19:12:45 1995
-***************
-*** 249,261 ****
-  	}
-  	if (x <= 0) {
-  		if (errno == EPIPE)
-! 			return (scmerr (-1,"Network write timed out"));
-  		if (errno)
-! 			return (scmerr (errno,"Write error on network"));
-! 		return (scmerr (-1,"Write retries failed"));
-  	}
-  	if (x != count)
-! 		return (scmerr (-1,"Write error on network returned %d on write of %d",x,count));
-  	return (SCMOK);
-  }
-  
---- 249,261 ----
-  	}
-  	if (x <= 0) {
-  		if (errno == EPIPE)
-! 			return (scmerr (-1,stderr,"Network write timed out"));
-  		if (errno)
-! 			return (scmerr (errno,stderr,"Write error on network"));
-! 		return (scmerr (-1,stderr,"Write retries failed"));
-  	}
-  	if (x != count)
-! 		return (scmerr (-1,stderr,"Write error on network returned %d on write of %d",x,count));
-  	return (SCMOK);
-  }
-  
-***************
-*** 280,286 ****
-  	if (scmdebug > 1)
-  		loginfo ("SCM Writing message %d",msg);
-  	if (bufptr)
-! 		return (scmerr (-1,"Buffering already enabled"));
-  	bufptr = buffers;
-  	bufptr->b_ptr = bufptr->b_data;
-  	bufptr->b_cnt = 0;
---- 280,286 ----
-  	if (scmdebug > 1)
-  		loginfo ("SCM Writing message %d",msg);
-  	if (bufptr)
-! 		return (scmerr (-1,stderr,"Buffering already enabled"));
-  	bufptr = buffers;
-  	bufptr->b_ptr = bufptr->b_data;
-  	bufptr->b_cnt = 0;
-***************
-*** 298,304 ****
-  	x = writedata (sizeof(int),(char *)&x);
-  	if (x != SCMOK)  return (x);
-  	if (bufptr == NULL)
-! 		return (scmerr (-1,"Buffering already disabled"));
-  	if (bufptr->b_cnt == 0) {
-  		bufptr = NULL;
-  		return (SCMOK);
---- 298,304 ----
-  	x = writedata (sizeof(int),(char *)&x);
-  	if (x != SCMOK)  return (x);
-  	if (bufptr == NULL)
-! 		return (scmerr (-1,stderr,"Buffering already disabled"));
-  	if (bufptr->b_cnt == 0) {
-  		bufptr = NULL;
-  		return (SCMOK);
-***************
-*** 351,357 ****
-  	struct stat statbuf;
-  
-  	if (fstat(f,&statbuf) < 0)
-! 		return (scmerr (errno,"Can't access open file for message"));
-  	filesize = statbuf.st_size;
-  	y = byteswap(filesize);
-  	x = writedata (sizeof(int),(char *)&y);
---- 351,357 ----
-  	struct stat statbuf;
-  
-  	if (fstat(f,&statbuf) < 0)
-! 		return (scmerr (errno,stderr,"Can't access open file for message"));
-  	filesize = statbuf.st_size;
-  	y = byteswap(filesize);
-  	x = writedata (sizeof(int),(char *)&y);
-***************
-*** 375,383 ****
-  		} while (x == SCMOK && number > 0);
-  	}
-  	if (sum != filesize)
-! 		return (scmerr (-1,"File size error on output message"));
-  	if (number < 0)
-! 		return (scmerr (errno,"Read error on file output message"));
-  	return (x);
-  }
-  
---- 375,383 ----
-  		} while (x == SCMOK && number > 0);
-  	}
-  	if (sum != filesize)
-! 		return (scmerr (-1,stderr,"File size error on output message"));
-  	if (number < 0)
-! 		return (scmerr (errno,stderr,"Read error on file output message"));
-  	return (x);
-  }
-  
-***************
-*** 431,437 ****
-  
-  	if (count < 0) {
-  		if (bufptr + count < buffer)
-! 			return (scmerr (-1,"No space in buffer %d",count));
-  		bufptr += count;
-  		bufcnt -= count;
-  		bcopy (data,bufptr,-count);
---- 431,437 ----
-  
-  	if (count < 0) {
-  		if (bufptr + count < buffer)
-! 			return (scmerr (-1,stderr,"No space in buffer %d",count));
-  		bufptr += count;
-  		bufcnt -= count;
-  		bcopy (data,bufptr,-count);
-***************
-*** 463,478 ****
-  		tries = 0;
-  		for (;;) {
-  			imask = 1 << netfile;
-  			if (select(32,(fd_set *)&imask,(fd_set *)0,(fd_set *)0,&timout) < 0)
-  				imask = 1;
-  			errno = 0;
-  			if (imask)
-  				x = read (netfile,p,n);
-  			else
-! 				return (scmerr (-1,"Timeout on network input"));
-  			if (x > 0)  break;
-  			if (x == 0)
-! 				return (scmerr (-1,"Premature EOF on network input"));
-  			if (errno)  break;
-  			if (++tries > RETRIES)  break;
-  			if (scmdebug > 0)
---- 463,483 ----
-  		tries = 0;
-  		for (;;) {
-  			imask = 1 << netfile;
-+ #if defined(__hpux)
-+ 			if (select(32,&imask,(int *)0,(int *)0,&timout) < 0)
-+ #else
-  			if (select(32,(fd_set *)&imask,(fd_set *)0,(fd_set *)0,&timout) < 0)
-+ #endif
-  				imask = 1;
-  			errno = 0;
-  			if (imask)
-  				x = read (netfile,p,n);
-  			else
-! 				return (scmerr (-1,stderr,"Timeout on network input"));
-  			if (x > 0)  break;
-  			if (x == 0)
-! 				return (scmerr (-1,stderr,"Premature EOF on network "
-! 						"input"));
-  			if (errno)  break;
-  			if (++tries > RETRIES)  break;
-  			if (scmdebug > 0)
-***************
-*** 480,487 ****
-  		}
-  		if (x < 0) {
-  			if (errno)
-! 				return (scmerr (errno,"Read error on network"));
-! 			return (scmerr (-1,"Read retries failed"));
-  		}
-  		p += x;
-  		n -= x;
---- 485,492 ----
-  		}
-  		if (x < 0) {
-  			if (errno)
-! 				return (scmerr (errno,stderr,"Read error on network"));
-! 			return (scmerr (-1,stderr,"Read retries failed"));
-  		}
-  		p += x;
-  		n -= x;
-***************
-*** 538,544 ****
-  
-  	/* check for MSGGOAWAY in case he noticed problems first */
-  	if (m != MSGGOAWAY)
-! 		return (scmerr (-1,"Received unexpected message %d",m));
-  	(void) netcrypt ((char *)NULL);
-  	(void) readstring (&goawayreason);
-  	(void) readmend ();
---- 543,549 ----
-  
-  	/* check for MSGGOAWAY in case he noticed problems first */
-  	if (m != MSGGOAWAY)
-! 		return (scmerr (-1,stderr,"Received unexpected message %d",m));
-  	(void) netcrypt ((char *)NULL);
-  	(void) readstring (&goawayreason);
-  	(void) readmend ();
-***************
-*** 555,561 ****
-  	x = readdata (sizeof(int),(char *)&y);
-  	y = byteswap(y);
-  	if (x == SCMOK && y != ENDCOUNT)
-! 		return (scmerr (-1,"Error reading end of message"));
-  	return (x);
-  }
-  
---- 560,566 ----
-  	x = readdata (sizeof(int),(char *)&y);
-  	y = byteswap(y);
-  	if (x == SCMOK && y != ENDCOUNT)
-! 		return (scmerr (-1,stderr,"Error reading end of message"));
-  	return (x);
-  }
-  
-***************
-*** 567,573 ****
-  	x = readcount (&n);
-  	if (x != SCMOK)  return (x);
-  	if (n < 0)
-! 		return (scmerr (-1,"Invalid message count %d",n));
-  	while (x == SCMOK && n > 0) {
-  		x = readdata (XFERSIZE(n),buf);
-  		n -= XFERSIZE(n);
---- 572,578 ----
-  	x = readcount (&n);
-  	if (x != SCMOK)  return (x);
-  	if (n < 0)
-! 		return (scmerr (-1,stderr,"Invalid message count %d",n));
-  	while (x == SCMOK && n > 0) {
-  		x = readdata (XFERSIZE(n),buf);
-  		n -= XFERSIZE(n);
-***************
-*** 583,591 ****
-  	x = readcount (&y);
-  	if (x != SCMOK)  return (x);
-  	if (y < 0)
-! 		return (scmerr (-1,"Invalid message count %d",y));
-  	if (y != sizeof(int))
-! 		return (scmerr (-1,"Size error for int message is %d",y));
-  	x = readdata (sizeof(int),(char *)&y);
-  	(*buf) = byteswap(y);
-  	if (scmdebug > 2)
---- 588,596 ----
-  	x = readcount (&y);
-  	if (x != SCMOK)  return (x);
-  	if (y < 0)
-! 		return (scmerr (-1,stderr,"Invalid message count %d",y));
-  	if (y != sizeof(int))
-! 		return (scmerr (-1,stderr,"Size error for int message is %d",y));
-  	x = readdata (sizeof(int),(char *)&y);
-  	(*buf) = byteswap(y);
-  	if (scmdebug > 2)
-***************
-*** 609,619 ****
-  		return (SCMOK);
-  	}
-  	if (count < 0)
-! 		return (scmerr (-1,"Invalid message count %d",count));
-  	if (scmdebug > 3)
-  		loginfo ("SCM Reading string count %d",count);
-  	if ((p = (char *)malloc ((unsigned)count+1)) == NULL)
-! 		return (scmerr (-1,"Can't malloc %d bytes for string",count));
-  	if (cryptflag) {
-  		x = getcryptbuf (count+1);
-  		if (x == SCMOK)  x = readdata (count,cryptbuf);
---- 614,624 ----
-  		return (SCMOK);
-  	}
-  	if (count < 0)
-! 		return (scmerr (-1,stderr,"Invalid message count %d",count));
-  	if (scmdebug > 3)
-  		loginfo ("SCM Reading string count %d",count);
-  	if ((p = (char *)malloc ((unsigned)count+1)) == NULL)
-! 		return (scmerr (-1,stderr,"Can't malloc %d bytes for string",count));
-  	if (cryptflag) {
-  		x = getcryptbuf (count+1);
-  		if (x == SCMOK)  x = readdata (count,cryptbuf);
-***************
-*** 647,653 ****
-  	x = readcount (&count);
-  	if (x != SCMOK)  return (x);
-  	if (count < 0)
-! 		return (scmerr (-1,"Invalid message count %d",count));
-  	while (x == SCMOK && count > 0) {
-  		if (cryptflag) {
-  			x = readdata (XFERSIZE(count),cryptbuf);
---- 652,658 ----
-  	x = readcount (&count);
-  	if (x != SCMOK)  return (x);
-  	if (count < 0)
-! 		return (scmerr (-1,stderr,"Invalid message count %d",count));
-  	while (x == SCMOK && count > 0) {
-  		if (cryptflag) {
-  			x = readdata (XFERSIZE(count),cryptbuf);
-***************
-*** 709,715 ****
---- 714,724 ----
-  		FD_ZERO (&xbits);
-  		FD_SET (0,&ibits);
-  		FD_SET (netfile,&ibits);
-+ #if defined(__hpux)
-+ 		if ((c = select(16, (int *)&ibits, (int *)&obits, (int *)&xbits,
-+ #else
-  		if ((c = select(16, &ibits, &obits, &xbits,
-+ #endif
-  				(struct timeval *)NULL)) < 1) {
-  			if (c == -1) {
-  				if (errno == EINTR) {
-diff -c /var/tmp/sup/stree.c sup/stree.c
-*** stree.c	Fri Aug 20 17:46:34 1993
---- sup/stree.c	Wed Apr  5 12:36:58 1995
-***************
-*** 77,82 ****
---- 77,83 ----
-  	Tfree (&((*t)->Tlo));
-  	Tfree (&((*t)->Thi));
-  	if ((*t)->Tname)  free ((*t)->Tname);
-+ 	if ((*t)->Tnewname)  free ((*t)->Tnewname);
-  	if ((*t)->Tuser)  free ((*t)->Tuser);
-  	if ((*t)->Tgroup)  free ((*t)->Tgroup);
-  	free (*(char **)t);
-***************
-*** 90,95 ****
---- 91,97 ----
-  	register TREE *t;
-  	t = (TREE *) malloc (sizeof (TREE));
-  	t->Tname = (p == NULL) ? NULL : salloc (p);
-+ 	t->Tnewname = NULL;
-  	t->Tflags = 0;
-  	t->Tuid = 0;
-  	t->Tgid = 0;
-diff -c /var/tmp/sup/sup.1 sup/sup.1
-*** sup.1	Thu Aug 11 06:24:44 1994
---- sup/sup.1	Wed Apr 12 00:22:06 1995
-***************
-*** 59,65 ****
-  .\" 04-Apr-85  Steven Shafer (sas) at Carnegie-Mellon University
-  .\" 	Created.
-  .\" 
-! .TH SUP 1 02/08/92
-  .CM 4
-  .SH "NAME"
-  sup \- software upgrade protocol
---- 59,65 ----
-  .\" 04-Apr-85  Steven Shafer (sas) at Carnegie-Mellon University
-  .\" 	Created.
-  .\" 
-! .TH SUP 1 03/15/95
-  .CM 4
-  .SH "NAME"
-  sup \- software upgrade protocol
-***************
-*** 247,252 ****
---- 247,287 ----
-  will be printed that indicate what would happen if
-  an actual upgrade were done.
-  .TP
-+ .B -i
-+ Normally, 
-+ .I sup 
-+ will fail to upgrade any files that are \fBETXTBSY\fR.
-+ The
-+ .B -i
-+ flag, or the
-+ .B unlinkbusy
-+ supfile option, will cause
-+ .I sup
-+ to try to upgrade a busy file by unlinking it before the 
-+ replacement file is installed.  The option is intended for
-+ environments where upgrades to possibly running binaries or 
-+ libraries will take place.  Some operating systems \fB(HPUX)\fR 
-+ do not allow the unlink system call to succeed on ETXTBSY files.
-+ If the unlink does not succeed, an attempt is made to rename the 
-+ file to filename.sup#sup-pid.moved.  The new name is logged in either 
-+ the system default rename log file, \fB/usr/local/etc/sup.moved\fR, 
-+ or in a logfile as set by the \fBrenamelog\fR supfile option.  The 
-+ logfile allows for easy deletion of ETXTBSY files once they are no 
-+ longer in use.  A typical time to perform the deletions is at system 
-+ boot time with something similar to:
-+ .TP
-+ .ce 1
-+ cat /usr/local/etc/sup.moved | xargs rm -rf
-+ .TP
-+ .B -I
-+ The
-+ .B -I
-+ flag overrides and disables the
-+ .B -i
-+ flag and the
-+ .B unlinkbusy
-+ supfile option.
-+ .TP
-  .B -k
-  .I Sup
-  will check the modification times of
-***************
-*** 537,542 ****
---- 572,590 ----
-  .I sup
-  to upgrade that collection.
-  .TP
-+ .BI renamelog= filename
-+ When the 
-+ .B
-+ unlinkbusy
-+ or
-+ .B
-+ -i
-+ option is enabled, but the system cannot unlink a busy file, it
-+ will rename it instead and log the new filename.  Logging will 
-+ occur to the system default rename log file or to the specified
-+ .IR filename
-+ in the renamelog entry of a supfile.
-+ .TP
-  .B backup
-  As described above under the
-  .B -b
-***************
-*** 562,567 ****
---- 610,620 ----
-  .B -o
-  flag.
-  .TP
-+ .B unlinkbusy
-+ As described above under the
-+ .B -i
-+ flag.
-+ .TP
-  .B noupdate
-  As described above under the
-  .B -u
-***************
-*** 729,734 ****
---- 782,793 ----
-  omitany commands do not affect filenames specified with the always
-  command.
-  .TP
-+ \fBrename\fR \fIfilename\fR \fIdest-filename\fR...
-+ The rename command allows for a file on the server to be placed on the
-+ client under a different name.  To prevent confusion and ease its use,
-+ the rename option implicitly omits any files on the server that have 
-+ the same name as \fIdest-filename\fR.
-+ .TP
-  \fBomit\fR \fIfilename\fR ...
-  The specified file(s) (or directories) will be excluded from the
-  list of files to be upgraded.
-***************
-*** 796,802 ****
-  .I sup
-  with the
-  .B -e
-! flag to allow the automatic execution of command files.
-  .TP
-  \fBinclude\fR \fIlistfile\fR ...
-  The specified
---- 855,863 ----
-  .I sup
-  with the
-  .B -e
-! flag to allow the automatic execution of command files.  The timestamp
-! of the upgraded file is maintained even if the executed command might
-! change it so as to prevent an upgrade with every \fIsup\fR.
-  .TP
-  \fBinclude\fR \fIlistfile\fR ...
-  The specified
-***************
-*** 861,866 ****
---- 922,930 ----
-  .TP
-  <\fIbase-directory\fR>\fB/sup/\fR<\fIcollection\fR>\fB/logfile
-  log file for a collection
-+ .TP
-+ \fB/usr/local/etc/sup.moved\fR 
-+ log file for files renamed by the \fBunlinkbusy\fR option
-  .TP
-  <\fIbase-directory\fR>\fB/sup/\fR<\fIcollection\fR>\fB/prefix
-  file containing the name of the prefix directory
-diff -c /var/tmp/sup/sup.h sup/sup.h
-*** sup.h	Fri Aug 20 17:46:34 1993
---- sup/sup.h	Thu Apr  6 14:08:06 1995
-***************
-*** 101,108 ****
-  
-  /* PGMVERSION is defined separately in each program */
-  extern char scmversion[];		/* string version of scm */
-! #define PROTOVERSION 8			/* version of network protocol */
-! #define SCANVERSION  2			/* version of scan file format */
-  
-  /* TCP servers for name server and file server */
-  #define FILEPORT	"supfilesrv"
---- 101,108 ----
-  
-  /* PGMVERSION is defined separately in each program */
-  extern char scmversion[];		/* string version of scm */
-! #define PROTOVERSION 9			/* version of network protocol */
-! #define SCANVERSION  3			/* version of scan file format */
-  
-  /* TCP servers for name server and file server */
-  #define FILEPORT	"supfilesrv"
-***************
-*** 182,187 ****
---- 182,188 ----
-  struct treestruct {
-  /* fields for file information */
-  	char *Tname;			/* path component name */
-+ 	char *Tnewname;			/* Used for renameing files */
-  	int Tflags;			/* flags of file */
-  	int Tmode;			/* st_mode of file */
-  	char *Tuser;			/* owner of file */
-***************
-*** 220,225 ****
---- 221,227 ----
-  #define FBACKUP		     02		/* backup of file is allowed */
-  #define FNOACCT		     04		/* don't set file information */
-  #define FUPDATE		    010		/* only set file information */
-+ #define FRENAME		    020		/* Rename this file while updating */
-  #define FNEEDED		0100000		/* file needed for upgrade */
-  
-  /* version 3 compatability */
-diff -c /var/tmp/sup/supcdefs.h sup/supcdefs.h
-*** supcdefs.h	Thu Aug 11 06:24:45 1994
---- supcdefs.h	Sun May 30 22:13:40 1999
-***************
-*** 98,104 ****
-  extern int errno;
-  extern uid_t getuid();
-  extern gid_t getgid();
-- extern long time();
-  
-  extern int PGMVERSION;
-  
---- 98,103 ----
-***************
-*** 118,123 ****
---- 117,123 ----
-  	char *Clogin;			/* remote login name */
-  	char *Cpswd;			/* remote password */
-  	char *Ccrypt;			/* data encryption key */
-+ 	char *Crenamelog;		/* Where to log files moved when busy */
-  	int Ctimeout;			/* timeout for backoff */
-  	int Cflags;			/* collection flags */
-  	int Cnogood;			/* upgrade no good, "when" unchanged */
-***************
-*** 126,144 ****
-  };
-  typedef struct collstruct COLLECTION;
-  
-! #define CFALL		00001
-! #define CFBACKUP	00002
-! #define CFDELETE	00004
-! #define CFEXECUTE	00010
-! #define CFLIST		00020
-! #define CFLOCAL		00040
-! #define CFMAIL		00100
-! #define CFOLD		00200
-! #define CFVERBOSE	00400
-! #define CFKEEP		01000
-! #define CFURELSUF	02000
-! #define CFCOMPRESS	04000
-! #define CFNOUPDATE     010000
-  
-  /*************************
-   ***	M A C R O S    ***
---- 126,145 ----
-  };
-  typedef struct collstruct COLLECTION;
-  
-! #define CFALL		0x0001
-! #define CFBACKUP	0x0002
-! #define CFDELETE	0x0004
-! #define CFEXECUTE	0x0008
-! #define CFLIST		0x0010
-! #define CFLOCAL		0x0020
-! #define CFMAIL		0x0040
-! #define CFOLD		0x0080
-! #define CFVERBOSE	0x0100
-! #define CFKEEP		0x0200
-! #define CFURELSUF	0x0400
-! #define CFCOMPRESS	0x0800
-! #define CFNOUPDATE	0x1000
-! #define CFUNLINKBUSY	0x2000
-  
-  /*************************
-   ***	M A C R O S    ***
-***************
-*** 149,155 ****
-   * C prototypes
-   */
-  #if __STDC__
-! void	done	__P((int value,char *fmt,...));
-! void	goaway	__P((char *fmt,...));
-! void	notify	__P((char *fmt,...));
-  #endif
---- 150,156 ----
-   * C prototypes
-   */
-  #if __STDC__
-! void  done    __P((int value,char *fmt,...));
-! void  goaway  __P((char *fmt,...));
-! void  notify  __P((char *fmt,...));
-  #endif
-diff -c /var/tmp/sup/supcmain.c sup/supcmain.c
-*** supcmain.c	Thu Aug 11 06:24:45 1994
---- sup/supcmain.c	Thu Apr  6 15:43:18 1995
-***************
-*** 418,424 ****
---- 418,428 ----
-  			int fd;
-  			loginfo ("SUP Restarting %s with new supfile %s",
-  				progname,supfname);
-+ #ifdef __hpux
-+ 			for (fd = 256; fd > 3; fd--)
-+ #else
-  			for (fd = getdtablesize (); fd > 3; fd--)
-+ #endif
-  				(void) close (fd);
-  			execv (progname,argv);
-  			logquit (1,"Restart failed");
-***************
-*** 550,555 ****
---- 554,567 ----
-  			break;
-  		case 'm':
-  			oflags |= CFMAIL;
-+ 			break;
-+ 		case 'i':
-+ 			oflags |= CFUNLINKBUSY;
-+ 			aflags &= ~CFUNLINKBUSY;
-+ 			break;
-+ 		case 'I':
-+ 			oflags &= ~CFUNLINKBUSY;
-+ 			aflags |= CFUNLINKBUSY;
-  			break;
-  		case 'o':
-  			oflags |= CFOLD;
-diff -c /var/tmp/sup/supcmeat.c sup/supcmeat.c
-*** supcmeat.c	Thu Aug 11 06:24:45 1994
---- sup/supcmeat.c	Sun Aug 13 18:44:26 1995
-***************
-*** 156,161 ****
---- 156,163 ----
-  int dontjump;				/* flag to void sjbuf */
-  int cancompress=FALSE;			/* Can we do compression? */
-  int docompress=FALSE;			/* Do we do compression? */
-+ int dounlinkbusy=FALSE;			/* Should we try to unlink busy files?*/
-+ FILE *renamelog=NULL;			/* Where we log renamed files */
-  
-  extern COLLECTION *thisC;		/* collection list pointer */
-  extern int rpauseflag;			/* don't disable resource pausing */
-***************
-*** 492,498 ****
-  	int needone(), denyone(), deleteone();
-  	char buf[STRINGLENGTH];
-  	char relsufix[STRINGLENGTH];
-! 	register char *p,*q;
-  	register FILE *f;
-  	register int x;
-  
---- 494,501 ----
-  	int needone(), denyone(), deleteone();
-  	char buf[STRINGLENGTH];
-  	char relsufix[STRINGLENGTH];
-! 	TREE *t;
-! 	register char *p,*q,*r;
-  	register FILE *f;
-  	register int x;
-  
-***************
-*** 506,513 ****
-  	if (f) {
-  		while (p = fgets (buf,STRINGLENGTH,f)) {
-  			if (q = index (p,'\n'))  *q = '\0';
-  			if (index ("#;:",*p))  continue;
-! 			(void) Tinsert (&lastT,p,FALSE);
-  		}
-  		(void) fclose (f);
-  	}
---- 509,522 ----
-  	if (f) {
-  		while (p = fgets (buf,STRINGLENGTH,f)) {
-  			if (q = index (p,'\n'))  *q = '\0';
-+ 			if (r = index (p,' '))  *r++ = '\0';
-  			if (index ("#;:",*p))  continue;
-! 			t = Tinsert (&lastT,p,FALSE);
-! 			if(t && r)
-! 			{
-! 				t->Tnewname = salloc(r);
-! 				t->Tflags = FRENAME;
-! 			}
-  		}
-  		(void) fclose (f);
-  	}
-***************
-*** 532,537 ****
---- 541,547 ----
-  		goaway ("Error reading file list from file server");
-  	if (thisC->Cprefix)  (void) chdir (thisC->Cprefix);
-  	needT = NULL;
-+ 	renameT = NULL;
-  	(void) Tprocess (listT,needone);
-  	Tfree (&listT);
-  	x = msgneed ();
-***************
-*** 548,553 ****
---- 558,565 ----
-  	if (thisC->Cflags&(CFALL|CFDELETE|CFOLD))
-  		(void) Trprocess (lastT,deleteone);
-  	Tfree (&refuseT);
-+ 	Tfree (&renameT);
-+ 	renameT = NULL;
-  }
-  
-  needone (t)
-***************
-*** 556,572 ****
-  	register TREE *newt;
-  	register int exists, fetch;
-  	struct stat sbuf;
-  
-  	newt = Tinsert (&lastT,t->Tname,TRUE);
-  	newt->Tflags |= FUPDATE;
-  	fetch = TRUE;
-  	if ((thisC->Cflags&CFALL) == 0) {
-  		if ((t->Tflags&FNEW) == 0 && (thisC->Cflags&CFOLD) == 0)
-  			return (SCMOK);
-  		if ((t->Tmode&S_IFMT) == S_IFLNK)
-! 			exists = (lstat (t->Tname,&sbuf) == 0);
-  		else
-! 			exists = (stat (t->Tname,&sbuf) == 0);
-  		/* This is moderately complicated:
-  		   If the file is the wrong type or doesn't exist, we need to
-  		   fetch the whole file.  If the file is a special file, we
---- 568,593 ----
-  	register TREE *newt;
-  	register int exists, fetch;
-  	struct stat sbuf;
-+ 	char *name;
-  
-  	newt = Tinsert (&lastT,t->Tname,TRUE);
-  	newt->Tflags |= FUPDATE;
-+ 	if(t->Tflags&FRENAME) {
-+ 	  newt->Tflags |= FRENAME;
-+ 	  newt->Tnewname = salloc(t->Tnewname);
-+ 	  name = t->Tnewname; 
-+ 	  Tinsert(&renameT,t->Tnewname);
-+ 	}
-+ 	else
-+ 	  name = t->Tname;
-  	fetch = TRUE;
-  	if ((thisC->Cflags&CFALL) == 0) {
-  		if ((t->Tflags&FNEW) == 0 && (thisC->Cflags&CFOLD) == 0)
-  			return (SCMOK);
-  		if ((t->Tmode&S_IFMT) == S_IFLNK)
-! 			exists = (lstat (name,&sbuf) == 0);
-  		else
-! 			exists = (stat (name,&sbuf) == 0);
-  		/* This is moderately complicated:
-  		   If the file is the wrong type or doesn't exist, we need to
-  		   fetch the whole file.  If the file is a special file, we
-***************
-*** 592,603 ****
-  				else return (SCMOK);
-  	}
-  	/* If we get this far, we're either doing an update or a full fetch. */
-  	if (!fetch && t->Tmode == sbuf.st_mode &&
-  	    (t->Tmode&S_IFMT) == S_IFREG && (thisC->Cflags&CFNOUPDATE)) {
-  		vnotify ("SUP update avoided for %s\n", t->Tname);
-! 		return (SCMOK);
-  	}
-- 	newt = Tinsert (&needT,t->Tname,TRUE);
-  	if (!fetch && (t->Tmode&S_IFMT) == S_IFREG)
-  		newt->Tflags |= FUPDATE;
-  	return (SCMOK);
---- 613,624 ----
-  				else return (SCMOK);
-  	}
-  	/* If we get this far, we're either doing an update or a full fetch. */
-+ 	newt = Tinsert (&needT,t->Tname,TRUE);
-  	if (!fetch && t->Tmode == sbuf.st_mode &&
-  	    (t->Tmode&S_IFMT) == S_IFREG && (thisC->Cflags&CFNOUPDATE)) {
-  		vnotify ("SUP update avoided for %s\n", t->Tname);
-! 		 return (SCMOK);
-  	}
-  	if (!fetch && (t->Tmode&S_IFMT) == S_IFREG)
-  		newt->Tflags |= FUPDATE;
-  	return (SCMOK);
-***************
-*** 615,626 ****
-  {
-  	struct stat sbuf;
-  	register int x;
-! 	register char *name = t->Tname;
-  
-  	if (t->Tflags&FUPDATE)		/* in current upgrade list */
-  		return (SCMOK);
-  	if (lstat(name,&sbuf) < 0)	/* doesn't exist */
-  		return (SCMOK);
-  	/* is it a symbolic link ? */
-  	if ((sbuf.st_mode & S_IFMT) == S_IFLNK) {
-  		if (Tlookup (refuseT,name)) {
---- 636,650 ----
-  {
-  	struct stat sbuf;
-  	register int x;
-! 	register char *name = t->Tflags & FRENAME ? t->Tnewname : t->Tname;
-  
-  	if (t->Tflags&FUPDATE)		/* in current upgrade list */
-  		return (SCMOK);
-  	if (lstat(name,&sbuf) < 0)	/* doesn't exist */
-  		return (SCMOK);
-+ 	if (Tlookup (renameT, name))    /* it is a file we're going to replace
-+ 	        return (SCMOK);          * by renaming another target.
-+ 		                         */
-  	/* is it a symbolic link ? */
-  	if ((sbuf.st_mode & S_IFMT) == S_IFLNK) {
-  		if (Tlookup (refuseT,name)) {
-***************
-*** 723,728 ****
---- 747,756 ----
-  		if (docompress)
-  			vnotify("SUP Using compressed file transfer\n");
-  	}
-+ 	/* Should we attempt to unlink files that are busy? */
-+ 	dounlinkbusy = (thisC->Cflags & CFUNLINKBUSY);
-+ 	if(dounlinkbusy)
-+ 		vnotify("SUP Will attempt to unlink busy files\n");
-  	recvmore = TRUE;
-  	upgradeT = NULL;
-  	do {
-***************
-*** 735,740 ****
---- 763,770 ----
-  			goaway ("Error receiving file from file server");
-  		Tfree (&upgradeT);
-  	} while (recvmore);
-+ 	if( renamelog )
-+ 	   fclose( renamelog );
-  }
-  
-  /* prepare the target, if necessary */
-***************
-*** 779,785 ****
-  	}
-  	if ((statp->st_mode&S_IFMT) == S_IFDIR) {
-  		if (rmdir (name) < 0)
-! 			runp ("rm","rm","-rf",name,0);
-  	} else
-  		(void) unlink (name);
-  	if (stat (name,statp) < 0) {
---- 809,815 ----
-  	}
-  	if ((statp->st_mode&S_IFMT) == S_IFDIR) {
-  		if (rmdir (name) < 0)
-! 			runp ("rm","rm","-rf",name,(char *)0);
-  	} else
-  		(void) unlink (name);
-  	if (stat (name,statp) < 0) {
-***************
-*** 799,805 ****
-  	struct stat sbuf;
-  	int linkone (),execone ();
-  	int *recvmore = va_arg(ap,int *);
-! 
-  	/* check for end of file list */
-  	if (t == NULL) {
-  		*recvmore = FALSE;
---- 829,835 ----
-  	struct stat sbuf;
-  	int linkone (),execone ();
-  	int *recvmore = va_arg(ap,int *);
-! 	char *name;
-  	/* check for end of file list */
-  	if (t == NULL) {
-  		*recvmore = FALSE;
-***************
-*** 812,819 ****
-  		thisC->Cnogood = TRUE;
-  		return (SCMOK);
-  	}
-! 	if (prepare (t->Tname,t->Tmode&S_IFMT,&new,&sbuf)) {
-! 		notify ("SUP: Can't prepare path for %s\n",t->Tname);
-  		if ((t->Tmode&S_IFMT) == S_IFREG) {
-  			x = readskip ();	/* skip over file */
-  			if (x != SCMOK)
---- 842,850 ----
-  		thisC->Cnogood = TRUE;
-  		return (SCMOK);
-  	}
-! 	name = t->Tflags & FRENAME ? t->Tnewname : t->Tname; 
-! 	if (prepare (name,t->Tmode&S_IFMT,&new,&sbuf)) {
-! 		notify ("SUP: Can't prepare path for %s\n",name);
-  		if ((t->Tmode&S_IFMT) == S_IFREG) {
-  			x = readskip ();	/* skip over file */
-  			if (x != SCMOK)
-***************
-*** 841,848 ****
-  		return (SCMOK);
-  	}
-  	if ((t->Tmode&S_IFMT) == S_IFREG)
-! 		(void) Tprocess (t->Tlink,linkone,t->Tname);
-! 	(void) Tprocess (t->Texec,execone);
-  	return (SCMOK);
-  }
-  
---- 872,879 ----
-  		return (SCMOK);
-  	}
-  	if ((t->Tmode&S_IFMT) == S_IFREG)
-! 		(void) Tprocess (t->Tlink,linkone,name);
-! 	(void) Tprocess (t->Texec,execone,name);
-  	return (SCMOK);
-  }
-  
-***************
-*** 852,866 ****
-  register struct stat *statp;
-  {
-  	struct timeval tbuf[2];
-  
-  	if (new) {
-  		if (thisC->Cflags&CFLIST) {
-! 			vnotify ("SUP Would create directory %s\n",t->Tname);
-  			return (FALSE);
-  		}
-! 		(void) mkdir (t->Tname,0755);
-! 		if (stat (t->Tname,statp) < 0) {
-! 			notify ("SUP: Can't create directory %s\n",t->Tname);
-  			return (TRUE);
-  		}
-  	}
---- 883,898 ----
-  register struct stat *statp;
-  {
-  	struct timeval tbuf[2];
-+ 	char *name = t->Tflags & FRENAME ? t->Tnewname : t->Tname;
-  
-  	if (new) {
-  		if (thisC->Cflags&CFLIST) {
-! 			vnotify ("SUP Would create directory %s\n",name);
-  			return (FALSE);
-  		}
-! 		(void) mkdir (name,0755);
-! 		if (stat (name,statp) < 0) {
-! 			notify ("SUP: Can't create directory %s\n",name);
-  			return (TRUE);
-  		}
-  	}
-***************
-*** 875,891 ****
-  			return (FALSE);
-  	}
-  	if (thisC->Cflags&CFLIST) {
-! 		vnotify ("SUP Would update directory %s\n",t->Tname);
-  		return (FALSE);
-  	}
-  	if ((t->Tflags&FNOACCT) == 0) {
-! 		(void) chown (t->Tname,t->Tuid,t->Tgid);
-! 		(void) chmod (t->Tname,t->Tmode&S_IMODE);
-  	}
-  	tbuf[0].tv_sec = time((long *)NULL);  tbuf[0].tv_usec = 0;
-  	tbuf[1].tv_sec = t->Tmtime;  tbuf[1].tv_usec = 0;
-! 	(void) utimes (t->Tname,tbuf);
-! 	vnotify ("SUP %s directory %s\n",new?"Created":"Updated",t->Tname);
-  	return (FALSE);
-  }
-  
---- 907,923 ----
-  			return (FALSE);
-  	}
-  	if (thisC->Cflags&CFLIST) {
-! 		vnotify ("SUP Would update directory %s\n",name);
-  		return (FALSE);
-  	}
-  	if ((t->Tflags&FNOACCT) == 0) {
-! 		(void) chown (name,t->Tuid,t->Tgid);
-! 		(void) chmod (name,t->Tmode&S_IMODE);
-  	}
-  	tbuf[0].tv_sec = time((long *)NULL);  tbuf[0].tv_usec = 0;
-  	tbuf[1].tv_sec = t->Tmtime;  tbuf[1].tv_usec = 0;
-! 	(void) utimes (name,tbuf);
-! 	vnotify ("SUP %s directory %s\n",new?"Created":"Updated",name);
-  	return (FALSE);
-  }
-  
-***************
-*** 897,925 ****
-  	char buf[STRINGLENGTH];
-  	int n;
-  	register char *linkname;
-  
-! 	if (t->Tlink == NULL || t->Tlink->Tname == NULL) {
-  		notify ("SUP: Missing linkname for symbolic link %s\n",
-  			t->Tname);
-  		return (TRUE);
-  	}
-  	linkname = t->Tlink->Tname;
-  	if (!new && (t->Tflags&FNEW) == 0 &&
-! 	    (n = readlink (t->Tname,buf,sizeof(buf))) >= 0 &&
-  	    (n == strlen (linkname)) && (strncmp (linkname,buf,n) == 0))
-  		return (FALSE);
-  	if (thisC->Cflags&CFLIST) {
-  		vnotify ("SUP Would %s symbolic link %s to %s\n",
-! 			new?"create":"update",t->Tname,linkname);
-  		return (FALSE);
-  	}
-  	if (!new)
-! 		(void) unlink (t->Tname);
-! 	if (symlink (linkname,t->Tname) < 0 || lstat(t->Tname,statp) < 0) {
-! 		notify ("SUP: Unable to create symbolic link %s\n",t->Tname);
-  		return (TRUE);
-  	}
-! 	vnotify ("SUP Created symbolic link %s to %s\n",t->Tname,linkname);
-  	return (FALSE);
-  }
-  
---- 929,958 ----
-  	char buf[STRINGLENGTH];
-  	int n;
-  	register char *linkname;
-+ 	char *name = t->Tflags & FRENAME ? t->Tnewname : t->Tname;
-  
-! 	if (t->Tlink == NULL || name == NULL) {
-  		notify ("SUP: Missing linkname for symbolic link %s\n",
-  			t->Tname);
-  		return (TRUE);
-  	}
-  	linkname = t->Tlink->Tname;
-  	if (!new && (t->Tflags&FNEW) == 0 &&
-! 	    (n = readlink (name,buf,sizeof(buf))) >= 0 &&
-  	    (n == strlen (linkname)) && (strncmp (linkname,buf,n) == 0))
-  		return (FALSE);
-  	if (thisC->Cflags&CFLIST) {
-  		vnotify ("SUP Would %s symbolic link %s to %s\n",
-! 			new?"create":"update",name,linkname);
-  		return (FALSE);
-  	}
-  	if (!new)
-! 		(void) unlink (name);
-! 	if (symlink (linkname,name) < 0 || lstat(name,statp) < 0) {
-! 		notify ("SUP: Unable to create symbolic link %s\n",name);
-  		return (TRUE);
-  	}
-! 	vnotify ("SUP Created symbolic link %s to %s\n",name,linkname);
-  	return (FALSE);
-  }
-  
-***************
-*** 934,939 ****
---- 967,973 ----
-  	struct timeval tbuf[2];
-  	register int x;
-  	register char *p;
-+ 	char *name = t->Tflags & FRENAME ? t->Tnewname : t->Tname;
-  
-  	if (t->Tflags&FUPDATE) {
-  		if ((t->Tflags&FNOACCT) == 0) {
-***************
-*** 950,966 ****
-  				return (FALSE);
-  		}
-  		if (thisC->Cflags&CFLIST) {
-! 			vnotify ("SUP Would update file %s\n",t->Tname);
-  			return (FALSE);
-  		}
-! 		vnotify ("SUP Updating file %s\n",t->Tname);
-  		if ((t->Tflags&FNOACCT) == 0) {
-! 			(void) chown (t->Tname,t->Tuid,t->Tgid);
-! 			(void) chmod (t->Tname,t->Tmode&S_IMODE);
-  		}
-  		tbuf[0].tv_sec = time((long *)NULL);  tbuf[0].tv_usec = 0;
-  		tbuf[1].tv_sec = t->Tmtime;  tbuf[1].tv_usec = 0;
-! 		(void) utimes (t->Tname,tbuf);
-  		return (FALSE);
-  	}
-  	if (thisC->Cflags&CFLIST) {
---- 984,1000 ----
-  				return (FALSE);
-  		}
-  		if (thisC->Cflags&CFLIST) {
-! 			vnotify ("SUP Would update file %s\n",name);
-  			return (FALSE);
-  		}
-! 		vnotify ("SUP Updating file %s\n",name);
-  		if ((t->Tflags&FNOACCT) == 0) {
-! 			(void) chown (name,t->Tuid,t->Tgid);
-! 			(void) chmod (name,t->Tmode&S_IMODE);
-  		}
-  		tbuf[0].tv_sec = time((long *)NULL);  tbuf[0].tv_usec = 0;
-  		tbuf[1].tv_sec = t->Tmtime;  tbuf[1].tv_usec = 0;
-! 		(void) utimes (name,tbuf);
-  		return (FALSE);
-  	}
-  	if (thisC->Cflags&CFLIST) {
-***************
-*** 972,993 ****
-  			p = "receive old";
-  		else
-  			p = "receive";
-! 		vnotify ("SUP Would %s file %s\n",p,t->Tname);
-  		return (FALSE);
-  	}
-! 	vnotify ("SUP Receiving file %s\n",t->Tname);
-  	if (!new && (t->Tmode&S_IFMT) == S_IFREG &&
-  	    (t->Tflags&FBACKUP) && (thisC->Cflags&CFBACKUP)) {
-! 		fin = fopen (t->Tname,"r");	/* create backup */
-  		if (fin == NULL) {
-  			x = readskip ();	/* skip over file */
-  			if (x != SCMOK)
-  				goaway ("Can't skip file transfer");
-  			notify ("SUP: Can't open %s to create backup\n",
-! 				t->Tname);
-  			return (TRUE);		/* mark upgrade as nogood */
-  		}
-! 		path (t->Tname,dirpart,filepart);
-  		(void) sprintf (filename,FILEBACKUP,dirpart,filepart);
-  		fout = fopen (filename,"w");
-  		if (fout == NULL) {
---- 1006,1027 ----
-  			p = "receive old";
-  		else
-  			p = "receive";
-! 		vnotify ("SUP Would %s file %s\n",p,name);
-  		return (FALSE);
-  	}
-! 	vnotify ("SUP Receiving file %s\n",name);
-  	if (!new && (t->Tmode&S_IFMT) == S_IFREG &&
-  	    (t->Tflags&FBACKUP) && (thisC->Cflags&CFBACKUP)) {
-! 		fin = fopen (name,"r");	/* create backup */
-  		if (fin == NULL) {
-  			x = readskip ();	/* skip over file */
-  			if (x != SCMOK)
-  				goaway ("Can't skip file transfer");
-  			notify ("SUP: Can't open %s to create backup\n",
-! 				name);
-  			return (TRUE);		/* mark upgrade as nogood */
-  		}
-! 		path (name,dirpart,filepart);
-  		(void) sprintf (filename,FILEBACKUP,dirpart,filepart);
-  		fout = fopen (filename,"w");
-  		if (fout == NULL) {
-***************
-*** 1006,1025 ****
-  		ffilecopy (fin,fout);
-  		(void) fclose (fin);
-  		(void) fclose (fout);
-! 		vnotify ("SUP Backup of %s created\n", t->Tname);
-  	}
-! 	x = copyfile (t->Tname,(char *)NULL);
-  	if (x)
-  		return (TRUE);
-  	if ((t->Tflags&FNOACCT) == 0) {
-  		/* convert user and group names to local ids */
-  		ugconvert (t->Tuser,t->Tgroup,&t->Tuid,&t->Tgid,&t->Tmode);
-! 		(void) chown (t->Tname,t->Tuid,t->Tgid);
-! 		(void) chmod (t->Tname,t->Tmode&S_IMODE);
-  	}
-  	tbuf[0].tv_sec = time((long *)NULL);  tbuf[0].tv_usec = 0;
-  	tbuf[1].tv_sec = t->Tmtime;  tbuf[1].tv_usec = 0;
-! 	(void) utimes (t->Tname,tbuf);
-  	return (FALSE);
-  }
-  
---- 1040,1059 ----
-  		ffilecopy (fin,fout);
-  		(void) fclose (fin);
-  		(void) fclose (fout);
-! 		vnotify ("SUP Backup of %s created\n", name);
-  	}
-! 	x = copyfile (name,(char *)NULL);
-  	if (x)
-  		return (TRUE);
-  	if ((t->Tflags&FNOACCT) == 0) {
-  		/* convert user and group names to local ids */
-  		ugconvert (t->Tuser,t->Tgroup,&t->Tuid,&t->Tgid,&t->Tmode);
-! 		(void) chown (name,t->Tuid,t->Tgid);
-! 		(void) chmod (name,t->Tmode&S_IMODE);
-  	}
-  	tbuf[0].tv_sec = time((long *)NULL);  tbuf[0].tv_usec = 0;
-  	tbuf[1].tv_sec = t->Tmtime;  tbuf[1].tv_usec = 0;
-! 	(void) utimes (name,tbuf);
-  	return (FALSE);
-  }
-  
-***************
-*** 1067,1075 ****
-  	return (SCMOK);
-  }
-  
-! execone (t)			/* execute command for file */
-  register TREE *t;
-  {
-  	union wait w;
-  
-  	if (thisC->Cflags&CFLIST) {
---- 1101,1112 ----
-  	return (SCMOK);
-  }
-  
-! execone (t,name)			/* execute command for file */
-  register TREE *t;
-+ register char **name;
-  {
-+ 	struct stat sbuf;
-+ 	struct timeval tbuf[2];
-  	union wait w;
-  
-  	if (thisC->Cflags&CFLIST) {
-***************
-*** 1082,1087 ****
---- 1119,1128 ----
-  	}
-  	vnotify ("SUP Executing %s\n",t->Tname);
-  
-+ 	if (lstat(*name,&sbuf)){
-+ 		notify ("SUP Unable to stat file %s\n", *name);
-+ 		sbuf.st_ino = 0;
-+ 	}
-  	w.w_status = system (t->Tname);
-  	if (WIFEXITED(w) && w.w_retcode != 0) {
-  		notify ("SUP: Execute command returned failure status %#o\n",
-***************
-*** 1096,1101 ****
---- 1137,1150 ----
-  			w.w_stopsig);
-  		thisC->Cnogood = TRUE;
-  	}
-+ 	if ((sbuf.st_ino != 0) && (sbuf.st_mode&S_IFMT) != S_IFLNK){
-+ 		(void) chown (*name,sbuf.st_uid,sbuf.st_gid);
-+ 		(void) chmod (*name,(sbuf.st_mode)&0x1ff);
-+ 		tbuf[0].tv_sec = time((long *)NULL);  tbuf[0].tv_usec = 0;
-+ 		tbuf[1].tv_sec = sbuf.st_mtime;  tbuf[1].tv_usec = 0;
-+ 		(void) utimes (*name,tbuf);
-+ 	}
-+ 
-  	return (SCMOK);
-  }
-  
-***************
-*** 1108,1113 ****
---- 1157,1163 ----
-  	char tname[STRINGLENGTH];
-  	char sys_com[STRINGLENGTH];
-  	struct stat sbuf;
-+ 	int retried = 0;
-  
-  	static int thispid = 0;		/* process id # */
-  
-***************
-*** 1241,1246 ****
---- 1291,1297 ----
-  		return (FALSE);
-  	}
-  	/* uncompress it first */
-+ retry:
-  	if (docompress) {
-  		/* make sure file permissions don't cause a problem */
-  		(void) unlink (to);
-***************
-*** 1274,1279 ****
---- 1325,1372 ----
-  	tof = open (to,(O_WRONLY|O_CREAT|O_TRUNC),0600);
-  	if (tof < 0) {
-  		(void) close (fromf);
-+ 		/* Here we can tell if it is ETXTBSY and try this loop
-+ 		   again */
-+ 		if( dounlinkbusy && errno == ETXTBSY && !retried ) {
-+ 		     /* Try to unlink the destination */
-+ 		     if( unlink(to) == 0 ){
-+ 			vnotify ("SUP: Removed busy file %s\n", to);
-+ 			retried = 1;
-+ 			goto retry;
-+ 		     }
-+ 		     /* 
-+ 		      * Some OSs (ie. HP-UX), return ETXTBUSY on unlinking
-+ 		      * a busy file.  We try to rename it instead and log
-+ 		      * the filename so it can be removed later.
-+ 		      */
-+ 		      else if( errno == ETXTBSY ) {
-+ 			char mname[STRINGLENGTH];
-+ 
-+ 			sprintf(mname, "%s.sup.#%d.moved", to, thispid);
-+ 
-+ 			if( rename(to, mname) == 0) {
-+ 			   vnotify ("SUP: Moved busy file %s to %s\n", to,
-+ 				    mname);
-+ 			   if(renamelog == NULL) {
-+ 			      renamelog = fopen(thisC->Crenamelog, "a");
-+ 			      if( renamelog == NULL ) {
-+ 				 notify ("SUP: Cannot open rename log file %s: "
-+ 					 "%s\n",thisC->Crenamelog,errmsg (-1));
-+ 			      }
-+ 			      else {
-+ 			   	fprintf(renamelog, "%s\n", mname);
-+ 				fflush(renamelog);
-+ 			      }
-+ 			   }
-+ 			   else {
-+ 			   	fprintf(renamelog, "%s\n", mname);
-+ 				fflush(renamelog);
-+ 			   }
-+ 			   retried = 1;
-+ 			   goto retry;
-+ 			}
-+ 		      }
-+ 		}
-  		notify ("SUP: Can't create %s from temp file: %s\n",
-  			to,errmsg (-1));
-  		(void) unlink (tname);
-***************
-*** 1399,1405 ****
-  FILE **finishfile;
-  {
-  	if ((thisC->Cflags&CFDELETE) == 0 || (t->Tflags&FUPDATE))
-! 		fprintf (*finishfile,"%s\n",t->Tname);
-  	return (SCMOK);
-  }
-  
---- 1492,1501 ----
-  FILE **finishfile;
-  {
-  	if ((thisC->Cflags&CFDELETE) == 0 || (t->Tflags&FUPDATE))
-! 		if(t->Tflags&FRENAME)
-! 			fprintf(*finishfile,"%s %s\n",t->Tname,t->Tnewname);
-! 		else
-! 			fprintf (*finishfile,"%s\n",t->Tname);
-  	return (SCMOK);
-  }
-  
-diff -c /var/tmp/sup/supcparse.c sup/supcparse.c
-*** supcparse.c	Thu Aug 11 06:24:46 1994
---- sup/supcparse.c	Tue Apr 11 15:18:57 1995
-***************
-*** 82,92 ****
-  extern char _argbreak;			/* break character from nxtarg */
-  #endif
-  
-  typedef enum {				/* supfile options */
-  	OHOST, OBASE, OHOSTBASE, OPREFIX, ORELEASE,
-! 	ONOTIFY, OLOGIN, OPASSWORD, OCRYPT,
-  	OBACKUP, ODELETE, OEXECUTE, OOLD, OTIMEOUT, OKEEP, OURELSUF,
-! 	OCOMPRESS, ONOUPDATE
-  } OPTION;
-  
-  struct option {
---- 82,94 ----
-  extern char _argbreak;			/* break character from nxtarg */
-  #endif
-  
-+ char default_renamelog[] = RENAMELOG;
-+ 
-  typedef enum {				/* supfile options */
-  	OHOST, OBASE, OHOSTBASE, OPREFIX, ORELEASE,
-! 	ONOTIFY, OLOGIN, OPASSWORD, OCRYPT, ORENAMELOG,
-  	OBACKUP, ODELETE, OEXECUTE, OOLD, OTIMEOUT, OKEEP, OURELSUF,
-! 	OCOMPRESS, ONOUPDATE, OUNLINKBUSY
-  } OPTION;
-  
-  struct option {
-***************
-*** 102,107 ****
---- 104,110 ----
-  	"login",	OLOGIN,
-  	"password",	OPASSWORD,
-  	"crypt",	OCRYPT,
-+ 	"renamelog",	ORENAMELOG,
-  	"backup",	OBACKUP,
-  	"delete",	ODELETE,
-  	"execute",	OEXECUTE,
-***************
-*** 110,116 ****
-  	"keep",		OKEEP,
-  	"use-rel-suffix", OURELSUF,
-   	"compress", 	OCOMPRESS,
-! 	"noupdate",	ONOUPDATE
-  };
-  
-  passdelim (ptr,delim)		/* skip over delimiter */
---- 113,120 ----
-  	"keep",		OKEEP,
-  	"use-rel-suffix", OURELSUF,
-   	"compress", 	OCOMPRESS,
-! 	"noupdate",	ONOUPDATE,
-! 	"unlinkbusy",	OUNLINKBUSY,
-  };
-  
-  passdelim (ptr,delim)		/* skip over delimiter */
-***************
-*** 143,148 ****
---- 147,153 ----
-  	c->Clogin = NULL;
-  	c->Cpswd = NULL;
-  	c->Ccrypt = NULL;
-+ 	c->Crenamelog = default_renamelog;
-  	c->Ctimeout = 3*60*60;	/* default to 3 hours instead of no timeout */
-  	c->Cflags = 0;
-  	c->Cnogood = FALSE;
-***************
-*** 209,214 ****
---- 214,224 ----
-  			arg = nxtarg (&args," \t");
-  			c->Ccrypt = salloc (arg);
-  			break;
-+ 		case ORENAMELOG:
-+ 			passdelim (&args,'=');
-+ 			arg = nxtarg (&args," \t");
-+ 			c->Crenamelog= salloc (arg);
-+ 			break;
-  		case OBACKUP:
-  			c->Cflags |= CFBACKUP;
-  			break;
-***************
-*** 232,237 ****
---- 242,250 ----
-  			break;
-  		case ONOUPDATE:
-  			c->Cflags |= CFNOUPDATE;
-+ 			break;
-+ 		case OUNLINKBUSY:
-+ 			c->Cflags |= CFUNLINKBUSY;
-  			break;
-  		case OTIMEOUT:
-  			passdelim (&args,'=');
-diff -c /var/tmp/sup/supfilesrv.c sup/supfilesrv.c
-*** supfilesrv.c	Thu Aug 11 06:24:46 1994
---- sup/supfilesrv.c	Sun Aug 13 18:44:09 1995
-***************
-*** 25,34 ****
-  /*
-   * supfilesrv -- SUP File Server
-   *
-!  * Usage:  supfilesrv [-l] [-P] [-N]
-   *	-l	"live" -- don't fork daemon
-   *	-P	"debug ports" -- use debugging network ports
-   *	-N	"debug network" -- print debugging messages for network i/o
-   *
-   **********************************************************************
-   * HISTORY
---- 25,35 ----
-  /*
-   * supfilesrv -- SUP File Server
-   *
-!  * Usage:  supfilesrv [-l] [-P] [-N] [-R]
-   *	-l	"live" -- don't fork daemon
-   *	-P	"debug ports" -- use debugging network ports
-   *	-N	"debug network" -- print debugging messages for network i/o
-+  *	-R	"RCS mode" -- if file is an rcs file, use co to get contents
-   *
-   **********************************************************************
-   * HISTORY
-***************
-*** 280,285 ****
---- 281,287 ----
-  uid_t getuid ();
-  
-  int maxchildren;
-+ int maxfriends = -1;
-  
-  /*
-   * These are used to save the stat information from the crosspatch crypt
-***************
-*** 327,344 ****
-  int dbgportsq;				/* -P flag */
-  extern int scmdebug;			/* -N flag */
-  extern int netfile;
-  
-  char *clienthost;			/* host name of client */
-  int nchildren;				/* number of children that exist */
-  char *prefix;				/* collection pathname prefix */
-  char *release;				/* collection release name */
-  char *cryptkey;				/* encryption key if non-null */
-  int lockfd;				/* descriptor of lock file */
-  
-  /* global variables for scan functions */
-  int trace = FALSE;			/* directory scan trace */
-! int cancompress=FALSE;			/* Can we compress files */
-! int docompress=FALSE;			/* Do we compress files */
-  
-  HASH *uidH[HASHSIZE];			/* for uid and gid lookup */
-  HASH *gidH[HASHSIZE];
---- 329,355 ----
-  int dbgportsq;				/* -P flag */
-  extern int scmdebug;			/* -N flag */
-  extern int netfile;
-+ #ifdef RCS
-+ int candorcs;				/* -R flag */
-+ int dorcs = FALSE;
-+ #endif
-  
-  char *clienthost;			/* host name of client */
-+ int friend;				/* The client is a friend of us */
-  int nchildren;				/* number of children that exist */
-  char *prefix;				/* collection pathname prefix */
-  char *release;				/* collection release name */
-  char *cryptkey;				/* encryption key if non-null */
-+ #ifdef CVS
-+ char *cvs_root;				/* RCS root */
-+ #endif
-+ char *rcs_branch;			/* RCS branch name */
-  int lockfd;				/* descriptor of lock file */
-  
-  /* global variables for scan functions */
-  int trace = FALSE;			/* directory scan trace */
-! int cancompress = FALSE;		/* Can we compress files */
-! int docompress = FALSE;			/* Do we compress files */
-  
-  HASH *uidH[HASHSIZE];			/* for uid and gid lookup */
-  HASH *gidH[HASHSIZE];
-***************
-*** 350,356 ****
-   * PROTOTYPES
-   */
-  #if __STDC__
-! void	goaway	__P((char *,...));
-  #endif
-  
-  #ifdef LOG_PID_PATHNAME
---- 361,367 ----
-   * PROTOTYPES
-   */
-  #if __STDC__
-! void  goaway  __P((char *,...));
-  #endif
-  
-  #ifdef LOG_PID_PATHNAME
-***************
-*** 442,454 ****
-  /*
-   * Child status signal handler
-   */
-- 
-  void
-  chldsig()
-  {
-  	int w;
-  
-  	while (wait3(&w, WNOHANG, (struct rusage *)0) > 0) {
-  		if (nchildren) nchildren--;
-  	}
-  }
---- 453,472 ----
-  /*
-   * Child status signal handler
-   */
-  void
-  chldsig()
-  {
-+ #if defined(__hpux) || defined(__FreeBSD__)
-  	int w;
-+ #else
-+ 	union wait w;
-+ #endif
-  
-+ #ifdef __hpux
-+ 	while (wait3(&w, WNOHANG, (int *)0) > 0) {
-+ #else
-  	while (wait3(&w, WNOHANG, (struct rusage *)0) > 0) {
-+ #endif
-  		if (nchildren) nchildren--;
-  	}
-  }
-***************
-*** 474,479 ****
---- 492,500 ----
-  	int maxsleep;
-  	register FILE *f;
-  
-+ #ifdef RCS
-+         candorcs = FALSE;
-+ #endif
-  	live = FALSE;
-  	dbgportsq = FALSE;
-  	scmdebug = 0;
-***************
-*** 500,505 ****
---- 521,532 ----
-  			argv++;
-  			maxchildren = atoi(argv[0]);
-  			break;
-+ 		case 'F':
-+ 			if (--argc < 1)
-+ 				quit (1,"Missing arg to -F\n");
-+ 			argv++;
-+ 			maxfriends = atoi(argv[0]);
-+ 			break;
-  		case 'H':
-  			if (--argc < 3)
-  				quit (1,"Missing args to -H\n");
-***************
-*** 510,515 ****
---- 537,547 ----
-  			argc -= 2;
-  			argv += 2;
-  			break;
-+ #ifdef RCS
-+                 case 'R':
-+                         candorcs = TRUE;
-+                         break;
-+ #endif
-  		default:
-  			fprintf (stderr,"Unknown flag %s ignored\n",argv[0]);
-  			break;
-***************
-*** 517,522 ****
---- 549,559 ----
-  		--argc;
-  		argv++;
-  	}
-+ 	if (maxfriends == -1)
-+ 		maxfriends = 2*maxchildren;
-+ 	else
-+ 		maxfriends += maxchildren; /* due to the way we check */
-+ 
-  	if (clienthost == NULL) {
-  		if (argc != 0)
-  			usage ();
-***************
-*** 621,626 ****
---- 658,667 ----
-  	basedir = NULL;
-  	prefix = NULL;
-  	release = NULL;
-+         rcs_branch = NULL;
-+ #ifdef CVS
-+         cvs_root = NULL;
-+ #endif
-  	goawayreason = NULL;
-  	donereason = NULL;
-  	lockfd = -1;
-***************
-*** 642,648 ****
---- 683,693 ----
-  			(void) dup2 (netfile,0);
-  			(void) dup2 (netfile,1);
-  			(void) dup2 (netfile,2);
-+ #ifdef __hpux
-+ 			fd = 256;
-+ #else
-  			fd = getdtablesize ();
-+ #endif
-  			while (--fd > 2)
-  				(void) close (fd);
-  			execv (xargv[0],xargv);
-***************
-*** 656,661 ****
---- 701,710 ----
-  	if (basedir)  free (basedir);
-  	if (prefix)  free (prefix);
-  	if (release)  free (release);
-+ 	if (rcs_branch)  free (rcs_branch);
-+ #ifdef CVS
-+ 	if (cvs_root)  free (cvs_root);
-+ #endif
-  	if (goawayreason) {
-  		if (donereason == goawayreason)
-  			donereason = NULL;
-***************
-*** 778,783 ****
---- 827,841 ----
-  			goaway ("Error sending setup reply to client");
-  		return;
-  	}
-+ #ifdef RCS
-+         if (candorcs && release != NULL &&
-+             (strncmp(release, "RCS.", 4) == 0)) {
-+                 rcs_branch = salloc(&release[4]);
-+                 free(release);
-+                 release = salloc("RCS");
-+                 dorcs = TRUE;
-+         }
-+ #endif
-  	if (release == NULL)
-  		release = salloc (DEFRELEASE);
-  	if (basedir == NULL || *basedir == '\0') {
-***************
-*** 824,830 ****
-  	if (prefix)  (void) chdir (basedir);
-  	if (x < 0)
-  		goaway ("Can't stat base/prefix directory");
-! 	if (nchildren >= maxchildren) {
-  		setupack = FSETUPBUSY;
-  		(void) msgsetupack ();
-  		if (protver >= 6)  longjmp (sjbuf,TRUE);
---- 882,888 ----
-  	if (prefix)  (void) chdir (basedir);
-  	if (x < 0)
-  		goaway ("Can't stat base/prefix directory");
-! 	if (nchildren >=  maxfriends) {
-  		setupack = FSETUPBUSY;
-  		(void) msgsetupack ();
-  		if (protver >= 6)  longjmp (sjbuf,TRUE);
-***************
-*** 861,867 ****
-  				q = nxtarg (&p," \t");
-  				if ((not = (*q == '!')) && *++q == '\0')
-  					q = nxtarg (&p," \t");
-! 				hostok = (not == (matchhost(q) == 0));
-  				if (hostok) {
-  					while ((*p == ' ') || (*p == '\t')) p++;
-  					if (*p)  cryptkey = salloc (p);
---- 919,934 ----
-  				q = nxtarg (&p," \t");
-  				if ((not = (*q == '!')) && *++q == '\0')
-  					q = nxtarg (&p," \t");
-! 				if ((friend = (*q == '+')) && *++q == '\0')
-! 					q = nxtarg (&p," \t");
-! 				hostok = matchhost(q);
-! 				if (hostok && not) {
-! 					setupack = FSETUPHOST;
-! 					(void) msgsetupack ();
-! 					if (protver >= 6)  longjmp (sjbuf,TRUE);
-! 					goaway ("Host blacklisted for %s",
-! 						collname);
-! 				}
-  				if (hostok) {
-  					while ((*p == ' ') || (*p == '\t')) p++;
-  					if (*p)  cryptkey = salloc (p);
-***************
-*** 878,883 ****
---- 945,956 ----
-  			}
-  		}
-  	}
-+ 	if (!friend && nchildren >= maxchildren) {
-+ 		setupack = FSETUPBUSY;
-+ 		(void) msgsetupack ();
-+ 		if (protver >= 6)  longjmp (sjbuf,TRUE);
-+ 		goaway ("Sup client told to try again later");
-+ 	}
-  	/* try to lock collection */
-  	(void) sprintf (buf,FILELOCK,collname);
-  	x = open (buf,O_RDONLY,0);
-***************
-*** 1111,1116 ****
---- 1184,1200 ----
-  	/* send all files */
-  	for (tl = listTL; tl != NULL; tl = tl->TLnext) {
-  		cdprefix (tl->TLprefix);
-+ #ifdef CVS
-+                 if (candorcs) {
-+                         cvs_root = getcwd(NULL, 256);
-+                         if (access("CVSROOT", F_OK) < 0)
-+                                 dorcs = FALSE;
-+                         else {
-+                                 loginfo("is a CVSROOT \"%s\"\n", cvs_root);
-+                                 dorcs = TRUE;
-+                         }
-+                 }
-+ #endif
-  		(void) Tprocess (tl->TLtree,sendone);
-  	}
-  	/* send directories in reverse order */
-***************
-*** 1132,1138 ****
-  {
-  	register int x,fd;
-  	register int fdtmp;
-! 	char sys_com[STRINGLENGTH], temp_file[STRINGLENGTH];
-  	char *uconvert(),*gconvert();
-  	int sendfile ();
-  
---- 1216,1223 ----
-  {
-  	register int x,fd;
-  	register int fdtmp;
-! 	char sys_com[STRINGLENGTH], temp_file[STRINGLENGTH], rcs_file[STRINGLENGTH];
-!         union wait status;
-  	char *uconvert(),*gconvert();
-  	int sendfile ();
-  
-***************
-*** 1146,1165 ****
-  	fd = -1;			/* no open file */
-  	if ((t->Tmode&S_IFMT) == S_IFREG) {
-  		if (!listonly && (t->Tflags&FUPDATE) == 0) {
-! 			if (docompress) {
-! 				tmpnam(temp_file);
-! 				sprintf(sys_com, "gzip -c < %s > %s\n", t->Tname, temp_file);
-! 				if (system(sys_com) < 0) {
-! 					/* Just in case */
-! 					unlink(temp_file);
-! 					goaway ("We died trying to compress");
-! 					t->Tmode = 0;
-! 				}
-! 				fd = open (temp_file,O_RDONLY,0);
-! 			}
-! 			else
-! 				fd = open (t->Tname,O_RDONLY,0);
-! 			if (fd < 0)  t->Tmode = 0;
-  		}
-  		if (t->Tmode) {
-  			t->Tuser = salloc (uconvert (t->Tuid));
---- 1231,1304 ----
-  	fd = -1;			/* no open file */
-  	if ((t->Tmode&S_IFMT) == S_IFREG) {
-  		if (!listonly && (t->Tflags&FUPDATE) == 0) {
-! #ifdef RCS
-!                         if (dorcs) {
-!                                 char rcs_release[STRINGLENGTH];
-! 
-! 				tmpnam(rcs_file);
-!                                 if (strcmp(&t->Tname[strlen(t->Tname)-2], ",v") == 0) {
-!                                         t->Tname[strlen(t->Tname)-2] = '\0';
-!                                         if (rcs_branch != NULL)
-! #ifdef CVS
-!                                                 sprintf(rcs_release, "-r %s", rcs_branch);
-! #else
-!                                                 sprintf(rcs_release, "-r%s", rcs_branch);
-! #endif
-!                                         else
-!                                                 rcs_release[0] = '\0';
-! #ifdef CVS
-!                                         sprintf(sys_com, "cvs -d %s -r -l -Q co -p %s %s > %s\n", cvs_root, rcs_release, t->Tname, rcs_file);
-! #else
-!                                         sprintf(sys_com, "co -q -p %s %s > %s 2> /dev/null\n", rcs_release, t->Tname, rcs_file);
-! #endif
-!                                         /*loginfo("using rcs mode \"%s\"\n", sys_com);*/
-!                                         status.w_status = system(sys_com);
-!                                         if (status.w_status < 0 || status.w_retcode) {
-!                                                 /* Just in case */
-!                                                 unlink(rcs_file);
-!                                                 if (status.w_status < 0) {
-!                                                         goaway ("We died trying to \"%s\"", sys_com);
-!                                                         t->Tmode = 0;
-!                                                 }
-!                                                 else {
-!                                                         /*logerr("rcs command failed \"%s\" = %d\n",
-!                                                                sys_com, status.w_retcode);*/
-!                                                         t->Tflags |= FUPDATE;
-!                                                 }
-!                                         }
-!                                         else if (docompress) {
-!                                                 tmpnam(temp_file);
-!                                                 sprintf(sys_com, "/usr/local/bin/gzip -c < %s > %s\n", rcs_file, temp_file);
-!                                                 if (system(sys_com) < 0) {
-!                                                         /* Just in case */
-!                                                         unlink(temp_file);
-!                                                         unlink(rcs_file);
-!                                                         goaway ("We died trying to \"%s\"", sys_com);
-!                                                         t->Tmode = 0;
-!                                                 }
-!                                                 fd = open (temp_file,O_RDONLY,0);
-!                                         }
-!                                         else
-!                                                 fd = open (rcs_file,O_RDONLY,0);
-!                                 }
-!                         }
-! #endif
-!                         if (fd == -1) {
-!                                 if (docompress) {
-!                                         tmpnam(temp_file);
-!                                         sprintf(sys_com, "gzip -c < %s > %s\n", t->Tname, temp_file);
-!                                         if (system(sys_com) != 0) {
-!                                                 /* Just in case */
-!                                                 unlink(temp_file);
-!                                                 goaway ("We died trying to \"%s\"", sys_com);
-!                                                 t->Tmode = 0;
-!                                         }
-!                                         fd = open (temp_file,O_RDONLY,0);
-!                                 }
-!                                 else
-!                                         fd = open (t->Tname,O_RDONLY,0);
-!                         }
-! 			if (fd < 0 && (t->Tflags&FUPDATE) == 0)  t->Tmode = 0;
-  		}
-  		if (t->Tmode) {
-  			t->Tuser = salloc (uconvert (t->Tuid));
-***************
-*** 1169,1174 ****
---- 1308,1317 ----
-  	x = msgrecv (sendfile,fd);
-  	if (docompress)
-  		unlink(temp_file);
-+ #ifdef RCS
-+ 	if (dorcs)
-+ 		unlink(rcs_file);
-+ #endif
-  	if (x != SCMOK)  goaway ("Error sending file to client");
-  	return (SCMOK);
-  }
-diff -c /var/tmp/sup/supmsg.c sup/supmsg.c
-*** supmsg.c	Fri Aug 20 17:46:35 1993
---- sup/supmsg.c	Thu Apr  6 15:17:07 1995
-***************
-*** 299,304 ****
---- 299,305 ----
-   * list files message
-   */
-  extern TREE	*listT;			/* tree of files to list */
-+ extern TREE     *renameT;               /* tree of rename target files */
-  extern long	scantime;		/* time that collection was scanned */
-  
-  static int listone (t)
-***************
-*** 307,312 ****
---- 308,315 ----
-  	register int x;
-  
-  	x = writestring (t->Tname);
-+ 	if ( protver > 8 )
-+ 		if (x == SCMOK)  x = writestring (t->Tnewname);
-  	if (x == SCMOK)  x = writeint ((int)t->Tmode);
-  	if (x == SCMOK)  x = writeint ((int)t->Tflags);
-  	if (x == SCMOK)  x = writeint (t->Tmtime);
-***************
-*** 323,341 ****
-  		if (x == SCMOK)  x = writeint ((int)scantime);
-  		if (x == SCMOK)  x = writemend ();
-  	} else {
-! 		char *name;
-  		int mode,flags,mtime;
-  		register TREE *t;
-  		x = readmsg (MSGLIST);
-  		if (x == SCMOK)  x = readstring (&name);
-  		while (x == SCMOK) {
-  			if (name == NULL)  break;
-! 			x = readint (&mode);
-  			if (x == SCMOK)  x = readint (&flags);
-  			if (x == SCMOK)  x = readint (&mtime);
-  			if (x != SCMOK)  break;
-  			t = Tinsert (&listT,name,TRUE);
-  			free (name);
-  			t->Tmode = mode;
-  			t->Tflags = flags;
-  			t->Tmtime = mtime;
---- 326,350 ----
-  		if (x == SCMOK)  x = writeint ((int)scantime);
-  		if (x == SCMOK)  x = writemend ();
-  	} else {
-! 		char *name, *newname = NULL;
-  		int mode,flags,mtime;
-  		register TREE *t;
-  		x = readmsg (MSGLIST);
-  		if (x == SCMOK)  x = readstring (&name);
-  		while (x == SCMOK) {
-  			if (name == NULL)  break;
-! 			if (protver > 8){
-! 				x = readstring (&newname);
-! 				if (x == SCMOK)  x = readint (&mode);
-! 			}
-! 			else
-! 				x = readint (&mode);
-  			if (x == SCMOK)  x = readint (&flags);
-  			if (x == SCMOK)  x = readint (&mtime);
-  			if (x != SCMOK)  break;
-  			t = Tinsert (&listT,name,TRUE);
-  			free (name);
-+ 			t->Tnewname = newname;
-  			t->Tmode = mode;
-  			t->Tflags = flags;
-  			t->Tmtime = mtime;
-***************
-*** 474,479 ****
---- 483,490 ----
-  			return (x);
-  		}
-  		if (x == SCMOK)  x = writestring (t->Tname);
-+ 		if (protver > 8)
-+ 			if (x == SCMOK)  x = writestring (t->Tnewname);
-  		if (x == SCMOK)  x = writeint (t->Tmode);
-  		if (t->Tmode == 0) {
-  			if (x == SCMOK)  x = writemend ();
-***************
-*** 499,504 ****
---- 510,517 ----
-  			if (x == SCMOK)  x = (*xferfile) (NULL,args);
-  			return (x);
-  		}
-+ 		if (protver > 8)
-+ 			if (x == SCMOK)  x = readstring (&t->Tnewname);
-  		if (x == SCMOK)  x = readint (&t->Tmode);
-  		if (t->Tmode == 0) {
-  			x = readmend ();
-diff -c /var/tmp/sup/supmsg.h sup/supmsg.h
-*** supmsg.h	Fri Aug 20 17:46:35 1993
---- sup/supmsg.h	Thu Apr  6 15:18:04 1995
-***************
-*** 170,175 ****
---- 170,176 ----
-  
-  /* msglist */
-  EXTERN	TREE	*listT;			/* tree of files to list */
-+ EXTERN	TREE	*renameT;		/* tree of file rename targets */
-  EXTERN	long	scantime;		/* time that collection was scanned */
-  
-  /* msgneed */
-*** /dev/null	Sun Aug 13 11:14:38 1995
---- daemon.c	Sun Aug 13 19:59:10 1995
-***************
-*** 0 ****
---- 1,68 ----
-+ /*-
-+  * Copyright (c) 1990 The Regents of the University of California.
-+  * All rights reserved.
-+  *
-+  * Redistribution and use in source and binary forms, with or without
-+  * modification, are permitted provided that the following conditions
-+  * are met:
-+  * 1. Redistributions of source code must retain the above copyright
-+  *    notice, this list of conditions and the following disclaimer.
-+  * 2. Redistributions in binary form must reproduce the above copyright
-+  *    notice, this list of conditions and the following disclaimer in the
-+  *    documentation and/or other materials provided with the distribution.
-+  * 3. All advertising materials mentioning features or use of this software
-+  *    must display the following acknowledgement:
-+  *	This product includes software developed by the University of
-+  *	California, Berkeley and its contributors.
-+  * 4. Neither the name of the University nor the names of its contributors
-+  *    may be used to endorse or promote products derived from this software
-+  *    without specific prior written permission.
-+  *
-+  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-+  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+  * SUCH DAMAGE.
-+  *
-+  *	from: "@(#)daemon.c	5.3 (Berkeley) 12/28/90
-+  *	$Id: patch-aa,v 1.3 1998/09/23 05:13:55 imp Exp $
-+  */
-+ 
-+ #if defined(LIBC_SCCS) && !defined(lint)
-+ static char sccsid[] = "@(#)daemon.c	5.3 (Berkeley) 12/28/90";
-+ #endif /* LIBC_SCCS and not lint */
-+ 
-+ #include <sys/fcntl.h>
-+ #include <unistd.h>
-+ 
-+ daemon(nochdir, noclose)
-+ 	int nochdir, noclose;
-+ {
-+ 	int cpid;
-+ 
-+ 	if ((cpid = fork()) == -1)
-+ 		return (-1);
-+ 	if (cpid)
-+ 		exit(0);
-+ 	(void) setsid();
-+ 	if (!nochdir)
-+ 		(void) chdir("/");
-+ 	if (!noclose) {
-+ 		int devnull = open("/dev/null", O_RDWR, 0);
-+ 
-+ 		if (devnull != -1) {
-+ 			(void) dup2(devnull, STDIN_FILENO);
-+ 			(void) dup2(devnull, STDOUT_FILENO);
-+ 			(void) dup2(devnull, STDERR_FILENO);
-+ 			if (devnull > 2)
-+ 				(void) close(devnull);
-+ 		}
-+ 	}
-+ 	return 0;
-+ }
-*** /dev/null	Sun Aug 13 11:14:38 1995
---- flock.c	Sun Aug 13 19:58:50 1995
-***************
-*** 0 ****
---- 1,112 ----
-+ /*
-+  * Copyright (c) 1991 Carnegie Mellon University
-+  * All Rights Reserved.
-+  * 
-+  * Permission to use, copy, modify and distribute this software and its
-+  * documentation is hereby granted, provided that both the copyright
-+  * notice and this permission notice appear in all copies of the
-+  * software, derivative works or modified versions, and any portions
-+  * thereof, and that both notices appear in supporting documentation.
-+  *
-+  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
-+  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
-+  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
-+  *
-+  * Carnegie Mellon requests users of this software to return to
-+  *
-+  *  Software Distribution Coordinator   or   Software.Distribution@CS.CMU.EDU
-+  *  School of Computer Science
-+  *  Carnegie Mellon University
-+  *  Pittsburgh PA 15213-3890
-+  *
-+  * any improvements or extensions that they make and grant Carnegie the rights
-+  * to redistribute these changes.
-+  */
-+ /*
-+  * flock (fd, operation)
-+  *
-+  * This routine performs some file locking like the BSD 'flock'
-+  * on the object described by the int file descriptor 'fd',
-+  * which must already be open.
-+  *
-+  * The operations that are available are:
-+  *
-+  * LOCK_SH  -  get a shared lock.
-+  * LOCK_EX  -  get an exclusive lock.
-+  * LOCK_NB  -  don't block (must be ORed with LOCK_SH or LOCK_EX).
-+  * LOCK_UN  -  release a lock.
-+  *
-+  * Return value: 0 if lock successful, -1 if failed.
-+  *
-+  * Note that whether the locks are enforced or advisory is
-+  * controlled by the presence or absence of the SETGID bit on
-+  * the executable.
-+  *
-+  * Note that there is no difference between shared and exclusive
-+  * locks, since the 'lockf' system call in SYSV doesn't make any
-+  * distinction.
-+  *
-+  * The file "<sys/file.h>" should be modified to contain the definitions
-+  * of the available operations, which must be added manually (see below
-+  * for the values).
-+  */
-+ 
-+ #include <unistd.h>
-+ #include <sys/file.h>
-+ #include <errno.h>
-+ 
-+ #ifndef LOCK_SH
-+ #define LOCK_SH 1
-+ #endif
-+ #ifndef LOCK_EX
-+ #define LOCK_EX 2
-+ #endif
-+ #ifndef LOCK_NB
-+ #define LOCK_NB 4
-+ #endif
-+ #ifndef LOCK_UN
-+ #define LOCK_UN 8
-+ #endif
-+ 
-+ /*extern int errno;*/
-+ 
-+ int
-+ flock (fd, operation)
-+      int fd, operation;
-+ {
-+ 	int i;
-+ 
-+ 	switch (operation) {
-+ 
-+ 	/* LOCK_SH - get a shared lock */
-+ 	case LOCK_SH:
-+ 	/* LOCK_EX - get an exclusive lock */
-+ 	case LOCK_EX:
-+ 		i = lockf (fd, F_LOCK, 0);
-+ 		break;
-+ 
-+ 	/* LOCK_SH|LOCK_NB - get a non-blocking shared lock */
-+ 	case LOCK_SH|LOCK_NB:
-+ 	/* LOCK_EX|LOCK_NB - get a non-blocking exclusive lock */
-+ 	case LOCK_EX|LOCK_NB:
-+ 		i = lockf (fd, F_TLOCK, 0);
-+ 		if (i == -1)
-+ 			if ((errno == EAGAIN) || (errno == EACCES))
-+ 				errno = EWOULDBLOCK;
-+ 		break;
-+ 
-+ 	/* LOCK_UN - unlock */
-+ 	case LOCK_UN:
-+ 		i = lockf (fd, F_ULOCK, 0);
-+ 		break;
-+ 
-+ 	/* Default - can't decipher operation */
-+ 	default:
-+ 		i = -1;
-+ 		errno = EINVAL;
-+ 		break;
-+ 	}
-+ 
-+ 	return (i);
-+ }
-+ 
-*** /dev/null	Sun Aug 13 11:14:38 1995
---- utimes.c	Sun Aug 13 19:58:43 1995
-***************
-*** 0 ****
---- 1,43 ----
-+ /*
-+  * Copyright (c) 1991 Carnegie Mellon University
-+  * All Rights Reserved.
-+  * 
-+  * Permission to use, copy, modify and distribute this software and its
-+  * documentation is hereby granted, provided that both the copyright
-+  * notice and this permission notice appear in all copies of the
-+  * software, derivative works or modified versions, and any portions
-+  * thereof, and that both notices appear in supporting documentation.
-+  *
-+  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
-+  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
-+  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
-+  *
-+  * Carnegie Mellon requests users of this software to return to
-+  *
-+  *  Software Distribution Coordinator   or   Software.Distribution@CS.CMU.EDU
-+  *  School of Computer Science
-+  *  Carnegie Mellon University
-+  *  Pittsburgh PA 15213-3890
-+  *
-+  * any improvements or extensions that they make and grant Carnegie the rights
-+  * to redistribute these changes.
-+  */
-+ #include <sys/types.h>
-+ #include <sys/time.h>
-+ #include <utime.h>
-+ 
-+ int utimes(file,tvp) char *file; struct timeval *tvp;
-+ {
-+         struct utimbuf ut;
-+         time_t now;
-+ 
-+         now = time((time_t *)NULL);
-+         if (tvp == (struct timeval *)NULL) {
-+                 ut.actime = now;
-+                 ut.modtime = now;
-+         } else {
-+                 ut.actime = tvp++->tv_sec;
-+                 ut.modtime = tvp->tv_sec;
-+         }
-+         return(utime(file,&ut));
-+ }
-*** /dev/null	Sun Aug 13 11:14:38 1995
---- Makefile.HP	Sun Aug 13 19:59:02 1995
-***************
-*** 0 ****
---- 1,127 ----
-+ # Copyright (c) 1992,1991 Carnegie Mellon University
-+ # All Rights Reserved.
-+ # 
-+ # Permission to use, copy, modify and distribute this software and its
-+ # documentation is hereby granted, provided that both the copyright
-+ # notice and this permission notice appear in all copies of the
-+ # software, derivative works or modified versions, and any portions
-+ # thereof, and that both notices appear in supporting documentation.
-+ #
-+ # CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
-+ # CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
-+ # ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
-+ #
-+ # Carnegie Mellon requests users of this software to return to
-+ #
-+ #  Software Distribution Coordinator   or   Software.Distribution@CS.CMU.EDU
-+ #  School of Computer Science
-+ #  Carnegie Mellon University
-+ #  Pittsburgh PA 15213-3890
-+ #
-+ # any improvements or extensions that they make and grant Carnegie the rights
-+ # to redistribute these changes.
-+ ######################################################################
-+ # Makefile to build sup (the client side), supfilesrv (the repository
-+ # side, and supscan (used by the repository. If you only want to sup
-+ # files from CMU, just build sup.
-+ # The header files: c.h, libc.h and sysent.h are only
-+ # necessary if you are compiling on a non-Mach system. Likewise the
-+ # files in libextra.a are normally found in libcs.a on a Mach system.
-+ # DOPRINT_VA is used by vprintf.c and should be defined if your version
-+ # of libc/doprnt.c defines the routine _doprnt_va. If it defines _doprnt
-+ # instead, leave DORPINT_VA undefined.
-+ ######################################################################
-+ #
-+ # If you need to build a sup for export outside of North America use
-+ # 	"make EXPORTABLE_SYSTEM=true"
-+ # this will remove (not use) any vestiges of crypt code that is present
-+ # on the system.
-+ #
-+ # If you have crypt/crypt.c and /usr/lib/libcrypt.a, you will be building
-+ # a system that uses the SUP crypt mechanism by default.
-+ #
-+ SITE			= NETBSD
-+ #SITE			= CMUCS
-+ RENAMELOG		= \"/usr/local/etc/sup.moved\"
-+ NETBSD_DEFINES		= -UMACH -DHAS_DAEMON -DNEED_VSNPRINTF
-+ AFS_DEFINES		= -DAFS -I/usr/afsws/include
-+ OSF_DEFINES		= -UMACH -DOSF -D_BSD -noshrlib -g -DNEED_VSNPRINTF -DVAR_TMP
-+ CMUCS_DEFINES		= -DMACH -DDOPRINT_VA -DNEED_VPRINTF
-+ NON_MACH_DEFINES	= -UMACH
-+ #DEFS			= -UCMUCS -UCMU  ${${SITE}_DEFINES}
-+ DEFS			= -UCMUCS -UCMU  ${NETBSD_DEFINES} -DRENAMELOG=${RENAMELOG} -D_BSD
-+ 
-+ #INSTALLATION PARAMETERS
-+ NETBSD_BINDIR		= /usr/local/etc
-+ NETBSD_MAN1		= /usr/local/man/man1
-+ NETBSD_MAN8		= /usr/local/man/man8
-+ EXPORTABLE_SYSTEM	= true
-+ CC			= gcc
-+ CFLAGS			= ${DEFS} -I. 
-+ 
-+ SUPCL			= supcmain.o supcvers.o supcparse.o supcname.o \
-+ 			  supcmisc.o supcmeat.o
-+ SUPS			= scm.o scmio.o stree.o log.o supmsg.o netcrypt.o
-+ EXTRA			= atoo.o errmsg.o expand.o ffilecopy.o filecopy.o \
-+ 			  nxtarg.o path.o quit.o run.o salloc.o skipto.o  \
-+ 			  vprintf.o flock.o utimes.o
-+ 
-+ PROGRAMS		= sup supscan supfilesrv
-+ MAN1			= sup.1
-+ MAN8			= supservers.8
-+ 
-+ AFS_LIBPATH		= /usr/afs/lib
-+ AFS_LIBS		= -L${AFS_LIBPATH}/afs -lkauth -lprot -L${AFS_LIBPATH} -lubik -lauth -lrxkad -lsys -ldes -lrx -llwp -lcmd -lcom_err -lc ${AFS_LIBPATH}/afs/util.a
-+ 
-+ USE_CRYPT		= no
-+ 
-+ LIBS			= libextra.a
-+ sup_OFILES		= ${SUPCL} ${SUPS}
-+ supfilesrv_OFILES	= supfilesrv.o scan.o daemon.o ${SUPS}
-+ supfilesrv_LIBS		= libextra.a 
-+ supscan_OFILES		= supscan.o stree.o scan.o
-+ 
-+ 
-+ all: ${PROGRAMS}
-+ 
-+ sup: ${sup_OFILES} ${LIBS}
-+ 	${CC} ${CFLAGS} -o sup ${sup_OFILES} ${LIBS} ${NETBSD_LIBS} -lBSD
-+ 
-+ supfilesrv: ${supfilesrv_OFILES} ${supfilesrv_LIBS}
-+ 	${CC} ${CFLAGS} -o supfilesrv ${supfilesrv_OFILES} ${supfilesrv_LIBS} ${NETBSD_LIBS} -lBSD
-+ 
-+ supscan:  ${supscan_OFILES} ${LIBS}
-+ 	${CC} ${CFLAGS} -o supscan ${supscan_OFILES} ${LIBS} ${NETBSD_LIBS} -lBSD
-+ 
-+ libextra.a: ${EXTRA}
-+ 	ar r libextra.a $?
-+ 	ranlib libextra.a
-+ 
-+ clean cleandir:
-+ 	rm -f ${PROGRAMS} libextra.a netcrypt.c *.o core a.out
-+ 
-+ install: ${PROGRAMS}
-+ 	install -m 500 -u bin -g bin -f ${NETBSD_BINDIR} supscan 
-+ 	install -m 500 -u bin -g bin -f ${NETBSD_BINDIR} sup 
-+ 	install -m 500 -u bin -g bin -f ${NETBSD_BINDIR} supfilesrv
-+ 	install -m 444 -u bin -g bin -f ${NETBSD_MAN1} ${MAN1} 
-+ 	install -m 444 -u bin -g bin -f ${NETBSD_MAN8} ${MAN8} 
-+ 
-+ #netcrypt.c: crypt.diffs
-+ netcrypt.c:	netcryptvoid.c
-+ 	cp netcryptvoid.c netcrypt.c
-+ 
-+ scan.o:	sup.h
-+ scm.o:	sup.h
-+ scmio.o: sup.h supmsg.h
-+ stree.o: sup.h
-+ supcmain.o: sup.h supmsg.h supcdefs.h
-+ supcmeat.o: sup.h supmsg.h supcdefs.h
-+ supcmisc.o: sup.h supmsg.h supcdefs.h
-+ supcname.o: sup.h supmsg.h supcdefs.h
-+ supcparse.o: sup.h supmsg.h supcdefs.h
-+ supfilesrv.o: sup.h supmsg.h
-+ supmsg.o: sup.h supmsg.h
-+ supscan.o: sup.h
-+ netcryptvoid.o: sup.h supmsg.h
-+ netcrypt.o: sup.h supmsg.h
diff --git a/net/sup/files/patch-ab b/net/sup/files/patch-ab
deleted file mode 100644
index 81ee00bc6d62..000000000000
--- a/net/sup/files/patch-ab
+++ /dev/null
@@ -1,384 +0,0 @@
-*** sup.1.orig	Sun Dec 10 14:50:16 1995
---- sup.1	Sun Dec 10 15:53:08 1995
-***************
-*** 716,723 ****
-  .I list=<listname>
-  to specify the list of files in the release.
-  .I scan=<scanfile>
-! must be used in multi-release collections that are scanned to keep
-! the scan files for the different releases separate.
-  .I host=<hostfile>
-  to allow different host restrictions for this release.
-  .I next=<release>
---- 716,725 ----
-  .I list=<listname>
-  to specify the list of files in the release.
-  .I scan=<scanfile>
-! tells supscan to generate 
-! .B scanfile
-! for this release.  Supscan will only generate scan files for releases that specify
-! a scanfile or for collections that do not have a releases file.
-  .I host=<hostfile>
-  to allow different host restrictions for this release.
-  .I next=<release>
-***************
-*** 725,731 ****
-  be a combination of serveral other releases. If the same file appears in
-  more than one chained release, the first one found will be used.
-  If these files are not specified for a release the default names:
-! prefix,list,scan and host will be used.
-  .TP
-  .B scan
-  This file, created by
---- 727,733 ----
-  be a combination of serveral other releases. If the same file appears in
-  more than one chained release, the first one found will be used.
-  If these files are not specified for a release the default names:
-! prefix, list and host will be used.
-  .TP
-  .B scan
-  This file, created by
-***************
-*** 931,937 ****
-  for a collection
-  .TP
-  <\fIbase-directory\fR>\fB/sup/\fR<\fIcollection\fR>\fB/scan
-! scan file for a collection
-  .TP
-  \fB/usr/\fR<\fIcollection\fR>
-  default base directory for a file collection
---- 933,939 ----
-  for a collection
-  .TP
-  <\fIbase-directory\fR>\fB/sup/\fR<\fIcollection\fR>\fB/scan
-! default scan file for a collection if no release file exists
-  .TP
-  \fB/usr/\fR<\fIcollection\fR>
-  default base directory for a file collection
-*** supservers.8.orig	Sun Dec 10 15:45:47 1995
---- supservers.8	Sun Dec 10 15:48:15 1995
-***************
-*** 167,172 ****
---- 167,180 ----
-  .I 
-  supscan
-  to produce output messages as it scans the files in the collection.
-+ The "release" option
-+ .I -r
-+ causes
-+ .I supscan
-+ to only update the scan file for the specified release.  More than one
-+ release may be specified by using
-+ .I -r
-+ multiple times.
-  The "system" flag
-  .I 
-  -s
-*** scan.c.orig	Mon Dec 11 23:52:54 1995
---- scan.c	Wed Dec 13 08:15:36 1995
-***************
-*** 183,189 ****
-  static omitanyone();
-  static anyglob();
-  static int getscanfile();
-! static chkscanfile();
-  static makescanfile();
-  static recordone();
-  static recordexec();
---- 183,189 ----
-  static omitanyone();
-  static anyglob();
-  static int getscanfile();
-! static int chkscanfile();
-  static makescanfile();
-  static recordone();
-  static recordexec();
-***************
-*** 322,334 ****
-  	return (TRUE);
-  }
-  
-! makescanlists ()
-  {
-  	TREELIST *tl;
-  	char buf[STRINGLENGTH];
-  	char *p,*q;
-  	FILE *f;
-  	char *saveprefix = prefix;
-  	int count = 0;
-  
-  	(void) sprintf (buf,FILERELEASES,collname);
---- 322,336 ----
-  	return (TRUE);
-  }
-  
-! makescanlists (releases)
-! 	char **releases;
-  {
-  	TREELIST *tl;
-  	char buf[STRINGLENGTH];
-  	char *p,*q;
-  	FILE *f;
-  	char *saveprefix = prefix;
-+ 	char **rel_index;
-  	int count = 0;
-  
-  	(void) sprintf (buf,FILERELEASES,collname);
-***************
-*** 347,360 ****
-  					goaway ("Can't chdir to %s",prefix);
-  				(void) chdir (basedir);
-  			}
-! 			makescan (tl->TLlist,tl->TLscan);
-  			free ((char *)tl);
-  			count++;
-  		}
-  		(void) fclose (f);
-  	}
-  	if (count == 0)
-! 		makescan ((char *)NULL,(char *)NULL);
-  }
-  
-  static
---- 349,374 ----
-  					goaway ("Can't chdir to %s",prefix);
-  				(void) chdir (basedir);
-  			}
-! 			if (releases)
-! 			{
-! 				rel_index = releases;
-! 				while (*rel_index) {
-! 					if (!strcmp (*rel_index, tl->TLname)) {
-! 						makescan (tl->TLlist,tl->TLscan);
-! 						break;
-! 					}
-! 					rel_index++;
-! 				}
-! 			}
-! 			else
-! 				makescan (tl->TLlist,tl->TLscan);
-  			free ((char *)tl);
-  			count++;
-  		}
-  		(void) fclose (f);
-  	}
-  	if (count == 0)
-! 		makescan ((char *)NULL,FILESCANDEF);
-  }
-  
-  static
-***************
-*** 400,409 ****
-  char *listfile,*scanfile;
-  {
-  	listT = NULL;
-! 	chkscanfile (scanfile);		/* can we can write a scan file? */
-! 	doscan (listfile);		/* read list file and scan disk */
-! 	makescanfile (scanfile);	/* record names in scan file */
-! 	Tfree (&listT);			/* free file list tree */
-  }
-  
-  static
---- 414,424 ----
-  char *listfile,*scanfile;
-  {
-  	listT = NULL;
-! 	if(chkscanfile (scanfile)) {	/* can we can write a scan file? */
-! 		doscan (listfile);	/* read list file and scan disk */
-! 		makescanfile (scanfile);/* record names in scan file */
-! 		Tfree (&listT);		/* free file list tree */
-! 	}
-  }
-  
-  static
-***************
-*** 816,822 ****
-  	register TREELIST *tl;
-  
-  	if (scanfile == NULL)
-! 		scanfile = FILESCANDEF;
-  	(void) sprintf (buf,FILESCAN,collname,scanfile);
-  	if (stat(buf,&sbuf) < 0)
-  		return (FALSE);
---- 831,837 ----
-  	register TREELIST *tl;
-  
-  	if (scanfile == NULL)
-! 		return(FALSE);
-  	(void) sprintf (buf,FILESCAN,collname,scanfile);
-  	if (stat(buf,&sbuf) < 0)
-  		return (FALSE);
-***************
-*** 924,930 ****
-  	FILE *f;
-  
-  	if (scanfile == NULL)
-! 		scanfile = FILESCANDEF;
-  	(void) sprintf (fname,FILESCAN,collname,scanfile);
-  	(void) sprintf (tname,"%s.temp",fname);
-  	if (NULL == (f = fopen (tname, "w")))
---- 939,945 ----
-  	FILE *f;
-  
-  	if (scanfile == NULL)
-! 		return(FALSE);
-  	(void) sprintf (fname,FILESCAN,collname,scanfile);
-  	(void) sprintf (tname,"%s.temp",fname);
-  	if (NULL == (f = fopen (tname, "w")))
-***************
-*** 933,938 ****
---- 948,954 ----
-  		(void) unlink (tname);
-  		(void) fclose (f);
-  	}
-+ 	return(TRUE);
-  }
-  
-  static makescanfile (scanfile)
-***************
-*** 943,950 ****
-  	FILE *scanF;			/* output file for scanned file list */
-  	int recordone ();
-  
-- 	if (scanfile == NULL)
-- 		scanfile = FILESCANDEF;
-  	(void) sprintf (fname,FILESCAN,collname,scanfile);
-  	(void) sprintf (tname,"%s.temp",fname);
-  	scanF = fopen (tname,"w");
---- 959,964 ----
-*** supscan.c.orig	Fri Aug 20 19:46:35 1993
---- supscan.c	Sun May 30 22:17:04 1999
-***************
-*** 25,40 ****
-  /*
-   * supscan -- SUP Scan File Builder
-   *
-!  * Usage: supscan [ -v ] collection [ basedir ]
-   *	  supscan [ -v ] -f dirfile
-   *	  supscan [ -v ] -s
-!  *	-f	"file" -- use dirfile instead of system coll.dir
-!  *	-s	"system" -- perform scan for system supfile
-!  *	-v	"verbose" -- print messages as you go
-!  *	collection	-- name of the desired collection if not -s
-!  *	basedir		-- name of the base directory, if not
-!  *			   the default or recorded in coll.dir
-!  *	dirfile		-- name of replacement for system coll.dir.
-   *
-   **********************************************************************
-   * HISTORY
---- 25,42 ----
-  /*
-   * supscan -- SUP Scan File Builder
-   *
-!  * Usage: supscan [ -v ] collection [ -r release ] [ basedir ]
-   *	  supscan [ -v ] -f dirfile
-   *	  supscan [ -v ] -s
-!  *	-f	"file"     -- use dirfile instead of system coll.dir
-!  *	-r	"release"  -- scan only the specified release. Multiple
-!  *			      releases can be specified.
-!  *	-s	"system"   -- perform scan for system supfile
-!  *	-v	"verbose"  -- print messages as you go
-!  *	collection	   -- name of the desired collection if not -s
-!  *	basedir		   -- name of the base directory, if not
-!  *			      the default or recorded in coll.dir
-!  *	dirfile		   -- name of replacement for system coll.dir.
-   *
-   **********************************************************************
-   * HISTORY
-***************
-*** 158,163 ****
---- 160,167 ----
-  char *collname;				/* collection name */
-  char *basedir;				/* base directory name */
-  char *prefix;				/* collection pathname prefix */
-+ char **releases = NULL;			/* releases to scan */
-+ int  numreleases = 0;			/* size of releases  */
-  long lasttime = 0;			/* time of last upgrade */
-  long scantime;				/* time of this scan */
-  int newonly = FALSE;			/* new files only */
-***************
-*** 167,174 ****
-  TREE *listT;		/* final list of files in collection */
-  TREE *refuseT = NULL;	/* list of all files specified by <coll>.list */
-  
-- long time ();
-- 
-  /*************************************
-   ***    M A I N   R O U T I N E    ***
-   *************************************/
---- 171,176 ----
-***************
-*** 190,196 ****
-  			ctime (&scantime));
-  		(void) fflush (stdout);
-  		if (!setjmp (sjbuf)) {
-! 			makescanlists (); /* record names in scan files */
-  			scantime = time ((long *)NULL);
-  			printf ("SUP Scan for %s completed at %s",collname,
-  				ctime (&scantime));
---- 192,199 ----
-  			ctime (&scantime));
-  		(void) fflush (stdout);
-  		if (!setjmp (sjbuf)) {
-! 			/* record names in scan files */
-! 			makescanlists (releases);
-  			scantime = time ((long *)NULL);
-  			printf ("SUP Scan for %s completed at %s",collname,
-  				ctime (&scantime));
-***************
-*** 215,223 ****
-  
-  usage ()
-  {
-! 	fprintf (stderr,"Usage: supscan [ -v ] collection [ basedir ]\n");
-! 	fprintf (stderr,"       supscan [ -v ] -f dirfile\n");
-! 	fprintf (stderr,"       supscan [ -v ] -s\n");
-  	exit (1);
-  }
-  
---- 218,236 ----
-  
-  usage ()
-  {
-! 	fprintf(stderr,"Usage: supscan [ -v ] [ -r release ] collection [ basedir ]\n"
-! 		"       supscan [ -v ] [ -r release ] -f dirfile\n"
-! 		"       supscan [ -v ] [ -r release ] -s\n"
-! 		"       supscan [ -v ] [ -r release ] -s\n"
-! 		"        -f \"file\"    -- use dirfile instead of system coll.dir\n"
-! 		"        -r \"release\" -- scan only the specified release. Multiple\n"
-! 		"                        releases can be specified.\n"
-! 		"        -s \"system\"  -- perform scan for system supfile\n"
-! 		"        -v \"verbose\" -- print messages as you go\n" 
-! 		"        collection   -- name of the desired collection if not -s\n"
-! 		"        basedir      -- name of the base directory, if not\n"
-! 		"                        the default or recorded in coll.dir\n"
-! 		"        dirfile      -- name of replacement for system coll.dir.\n");
-  	exit (1);
-  }
-  
-***************
-*** 243,248 ****
---- 256,278 ----
-  			--argc;
-  			argv++;
-  			filename = argv[1];
-+ 			break;
-+ 		case 'r':
-+ 			if (argc == 2)
-+ 				usage ();
-+ 			--argc;
-+ 			argv++;
-+ 			if (argv[1][0] == '-')
-+ 				usage ();
-+ 			numreleases++;
-+ 			releases = (char **)realloc(releases,
-+ 					   sizeof(*releases) * (numreleases+1));
-+ 			if (!releases) {
-+ 				fprintf(stderr,"supscan: cannot malloc!\n");
-+ 				exit(1);
-+ 			}
-+ 			releases[numreleases - 1] = argv[1];
-+ 			releases[numreleases] = NULL;
-  			break;
-  		case 'v':
-  			trace = TRUE;
diff --git a/net/sup/files/patch-ac b/net/sup/files/patch-ac
deleted file mode 100644
index 72885cc2183d..000000000000
--- a/net/sup/files/patch-ac
+++ /dev/null
@@ -1,140 +0,0 @@
-Index: expand.c
-===================================================================
-RCS file: /home/ncvs/src/usr.sbin/sup/lib/expand.c,v
-retrieving revision 1.1.1.1
-retrieving revision 1.2
-diff -u -r1.1.1.1 -r1.2
---- expand.c	1995/12/26 04:54:46	1.1.1.1
-+++ expand.c	1996/09/24 08:08:06	1.2
-@@ -61,7 +61,7 @@
-  */
- #include <sys/param.h>
- #include <sys/stat.h>
--#include <sys/dir.h>
-+#include <dirent.h>
- #include <pwd.h>
- #include <ctype.h>
- #include <libc.h>
-@@ -159,7 +159,7 @@
- static matchdir(pattern)
- 	char *pattern;
- {
--	register struct direct *dp;
-+	register struct dirent *dp;
- 	DIR *dirp;
- 
- 	dirp = opendir(path);
-Index: scan.c
-===================================================================
-RCS file: /home/ncvs/src/usr.sbin/sup/lib/scan.c,v
-retrieving revision 1.3
-retrieving revision 1.4
-diff -u -r1.3 -r1.4
---- scan.c	1995/12/26 05:10:59	1.3
-+++ scan.c	1996/09/24 08:08:11	1.4
-@@ -93,8 +93,8 @@
- #include <sys/types.h>
- #include <sys/time.h>
- #include <sys/stat.h>
--#include <sys/dir.h>
- #include <sys/file.h>
-+#include <dirent.h>
- #include "sup.h"
- 
- /*************************
-@@ -165,8 +165,6 @@
- extern int trace;			/* trace directories */
- extern int newonly;			/* new files only */
- 
--extern long time();
--
- /*************************************************
-  ***   STATIC   R O U T I N E S    ***
-  *************************************************/
-@@ -703,7 +701,7 @@
- char *name;
- int always;
- {
--	struct direct *dentry;
-+	struct dirent *dentry;
- 	register DIR *dirp;
- 	char ename[STRINGLENGTH],newname[STRINGLENGTH],filename[STRINGLENGTH];
- 	register char *p,*newp;
-Index: scm.c
-===================================================================
-RCS file: /home/ncvs/src/usr.sbin/sup/lib/scm.c,v
-retrieving revision 1.2
-retrieving revision 1.3
-diff -u -r1.2 -r1.3
---- scm.c	1995/12/26 05:02:49	1.2
-+++ scm.c	1996/09/06 16:08:32	1.3
-@@ -271,6 +280,8 @@
- 		return (scmerr (errno, stderr, "Can't create socket for connections"));
- 	if (setsockopt (sock,SOL_SOCKET,SO_REUSEADDR,(char *)&one,sizeof(int)) < 0)
- 		(void) scmerr (errno, stderr, "Can't set SO_REUSEADDR socket option");
-+	if (setsockopt (sock,SOL_SOCKET,SO_KEEPALIVE,(char *)&one,sizeof(int)) < 0)
-+		(void) scmerr (errno, stderr, "Can't set SO_KEEPALIVE socket option");
- 	(void) bzero ((char *)&sin,sizeof(sin));
- 	sin.sin_family = AF_INET;
- 	sin.sin_port = port;
-Index: supcmeat.c
-===================================================================
-RCS file: /home/ncvs/src/usr.sbin/sup/sup/supcmeat.c,v
-retrieving revision 1.2
-retrieving revision 1.3
-diff -u -r1.2 -r1.3
---- supcmeat.c	1995/12/26 05:03:05	1.2
-+++ supcmeat.c	1996/10/30 23:58:07	1.3
-@@ -325,7 +331,7 @@
- 	/* If protocol is > 7 then try compression */
- 	if (protver > 7) {
- 		cancompress = TRUE;
--		notify ("SUP Fileserver supports compression.\n");
-+		vnotify ("SUP Fileserver supports compression.\n");
- 	}
- 	return (FALSE);
- }
-@@ -635,7 +641,7 @@
- denyone (t)
- register TREE *t;
- {
--	vnotify ("SUP: Access denied to %s\n",t->Tname);
-+	notify ("SUP: Access denied to %s\n",t->Tname);
- 	return (SCMOK);
- }
- 
-Index: supcmisc.c
-===================================================================
-RCS file: /home/ncvs/src/usr.sbin/sup/sup/supcmisc.c,v
-retrieving revision 1.1.1.1
-retrieving revision 1.3
-diff -u -r1.1.1.1 -r1.3
---- supcmisc.c	1995/12/26 04:54:46	1.1.1.1
-+++ supcmisc.c	1996/10/31 00:03:14	1.3
-@@ -277,7 +287,7 @@
- #endif
- 	char buf[STRINGLENGTH];
- 	char collrelname[STRINGLENGTH];
--	long tloc;
-+	time_t tloc;
- 	static FILE *noteF = NULL;	/* mail program on pipe */
- 	va_list ap;
- 
-@@ -300,7 +310,7 @@
- 	
- 	if (noteF == NULL) {
- 		if ((thisC->Cflags&CFMAIL) && thisC->Cnotify) {
--			(void) sprintf (buf,"mail -s \"SUP Upgrade of %s\" %s >/dev/null",
-+			(void) sprintf (buf,"/usr/bin/mail -s \"SUP Upgrade of %s\" %s >/dev/null",
- 				collrelname,thisC->Cnotify);
- 			noteF = popen (buf,"w");
- 			if (noteF == NULL) {
-@@ -310,7 +320,7 @@
- 			}
- 		} else
- 			noteF = stdout;
--		tloc = time ((long *)NULL);
-+		tloc = time ((time_t *)NULL);
- 		fprintf (noteF,"SUP Upgrade of %s at %s",
- 			collrelname,ctime (&tloc));
- 		(void) fflush (noteF);
diff --git a/net/sup/files/patch-quit.c b/net/sup/files/patch-quit.c
deleted file mode 100644
index 85356a4a42cf..000000000000
--- a/net/sup/files/patch-quit.c
+++ /dev/null
@@ -1,25 +0,0 @@
---- quit.c.orig	Fri Jul 25 23:20:04 2003
-+++ quit.c	Fri Jul 25 23:22:08 2003
-@@ -50,17 +50,15 @@
-  */
- 
- #include <stdio.h>
--#include <varargs.h>
-+#include <stdarg.h>
- 
--quit (status, fmt, va_alist)
--int status;
--char *fmt;
--va_dcl
-+quit (char *fmt,...)
- {
-+	int status;
-+	char *fmt;
- 	va_list args;
--
- 	fflush(stdout);
--	va_start(args);
-+	va_start(args,fmt);
- 	(void) vfprintf(stderr, fmt, args);
- 	va_end(args);
- 	exit(status);
diff --git a/net/sup/files/patch-run.c b/net/sup/files/patch-run.c
deleted file mode 100644
index 7caf075f680e..000000000000
--- a/net/sup/files/patch-run.c
+++ /dev/null
@@ -1,79 +0,0 @@
---- run.c.orig	Sat Aug 21 02:46:33 1993
-+++ run.c	Fri Jul 25 23:23:43 2003
-@@ -94,18 +94,17 @@
- #include <stdio.h>
- #include <signal.h>
- #include <sys/wait.h>
--#include <varargs.h>
-+#include <stdarg.h>
-+#define MAXARGS 100
- 
- static int dorun();
- 
--int run (name,va_alist)
--char *name;
--va_dcl
-+int run (char *name,...)
- {
- 	int val;
- 	va_list ap;
- 
--	va_start(ap);
-+	va_start(ap,name);
- 	val = runv (name,ap);
- 	va_end(ap);
- 	return(val);
-@@ -117,16 +116,18 @@
- 	return (dorun (name, argv, 0));
- }
- 
--int runp (name,va_alist)
--char *name;
--va_dcl
-+int runp (char *name,...)
- {
- 	int val;
- 	va_list ap;
--
--	va_start(ap);
--	val = runvp (name,ap);
-+	char *args[MAXARGS];
-+	int argno=0;
-+	
-+	va_start(ap,name);
-+        while (argno < MAXARGS 
-+	       && (args[argno++] = va_arg(ap, char *)) != (char *)0);
- 	va_end(ap);
-+	val = runvp (name,args);
- 	return (val);
- }
- 
-@@ -144,7 +145,7 @@
- 	int wpid;
- 	register int pid;
- 	struct sigvec ignoresig,intsig,quitsig;
--	union wait status;
-+	int status;
- 	int execvp(), execv();
- 	int (*execrtn)() = usepath ? execvp : execv;
- 
-@@ -165,7 +166,7 @@
- 	sigvec (SIGINT,&ignoresig,&intsig);
- 	sigvec (SIGQUIT,&ignoresig,&quitsig);
- 	do {
--		wpid = wait3 (&status.w_status, WUNTRACED, 0);
-+		wpid = wait3 (&status, WUNTRACED, 0);
- 		if (WIFSTOPPED (status)) {
- 		    kill (0,SIGTSTP);
- 		    wpid = 0;
-@@ -174,8 +175,8 @@
- 	sigvec (SIGINT,&intsig,0);	/* restore signals */
- 	sigvec (SIGQUIT,&quitsig,0);
- 
--	if (WIFSIGNALED (status) || status.w_retcode == 0377)
-+	if (WIFSIGNALED (status) || WEXITSTATUS(status) == 0377)
- 		return (-1);
- 
--	return (status.w_retcode);
-+	return (WEXITSTATUS(status));
- }
diff --git a/net/sup/files/patch-supcmeat.c b/net/sup/files/patch-supcmeat.c
deleted file mode 100644
index 63e297ec9b45..000000000000
--- a/net/sup/files/patch-supcmeat.c
+++ /dev/null
@@ -1,35 +0,0 @@
---- supcmeat.c.orig	Fri Oct 25 10:27:43 2002
-+++ supcmeat.c	Fri Oct 25 10:27:43 2002
-@@ -1107,7 +1107,7 @@
- {
- 	struct stat sbuf;
- 	struct timeval tbuf[2];
--	union wait w;
-+	int w;
- 
- 	if (thisC->Cflags&CFLIST) {
- 		vnotify ("SUP Would execute %s\n",t->Tname);
-@@ -1123,18 +1123,18 @@
- 		notify ("SUP Unable to stat file %s\n", *name);
- 		sbuf.st_ino = 0;
- 	}
--	w.w_status = system (t->Tname);
--	if (WIFEXITED(w) && w.w_retcode != 0) {
-+	w = system (t->Tname);
-+	if (WIFEXITED(w) && WEXITSTATUS(w) != 0) {
- 		notify ("SUP: Execute command returned failure status %#o\n",
--			w.w_retcode);
-+			WEXITSTATUS(w));
- 		thisC->Cnogood = TRUE;
- 	} else if (WIFSIGNALED(w)) {
- 		notify ("SUP: Execute command killed by signal %d\n",
--			w.w_termsig);
-+			WTERMSIG(w));
- 		thisC->Cnogood = TRUE;
- 	} else if (WIFSTOPPED(w)) {
- 		notify ("SUP: Execute command stopped by signal %d\n",
--			w.w_stopsig);
-+			WSTOPSIG(w));
- 		thisC->Cnogood = TRUE;
- 	}
- 	if ((sbuf.st_ino != 0) && (sbuf.st_mode&S_IFMT) != S_IFLNK){
diff --git a/net/sup/files/patch-supfilesrv.c b/net/sup/files/patch-supfilesrv.c
deleted file mode 100644
index 0c1a646f5323..000000000000
--- a/net/sup/files/patch-supfilesrv.c
+++ /dev/null
@@ -1,107 +0,0 @@
---- supfilesrv.c.orig	Fri Oct 25 10:27:43 2002
-+++ supfilesrv.c	Fri Oct 25 10:30:55 2002
-@@ -254,7 +254,6 @@
- #include <sys/wait.h>
- #include <sys/stat.h>
- #include <sys/file.h>
--#include <sys/dir.h>
- #if	MACH
- #include <sys/ioctl.h>
- #endif
-@@ -277,7 +276,6 @@
- #endif	/* lint */
- 
- extern int errno;
--long time ();
- uid_t getuid ();
- 
- int maxchildren;
-@@ -1217,7 +1215,8 @@
- 	register int x,fd;
- 	register int fdtmp;
- 	char sys_com[STRINGLENGTH], temp_file[STRINGLENGTH], rcs_file[STRINGLENGTH];
--        union wait status;
-+        int status;
-+	int wstat;
- 	char *uconvert(),*gconvert();
- 	int sendfile ();
- 
-@@ -1252,11 +1251,11 @@
-                                         sprintf(sys_com, "co -q -p %s %s > %s 2> /dev/null\n", rcs_release, t->Tname, rcs_file);
- #endif
-                                         /*loginfo("using rcs mode \"%s\"\n", sys_com);*/
--                                        status.w_status = system(sys_com);
--                                        if (status.w_status < 0 || status.w_retcode) {
-+                                        status = system(sys_com);
-+                                        if (WTERMSIG(status) < 0 || WEXITSTATUS(status)) {
-                                                 /* Just in case */
-                                                 unlink(rcs_file);
--                                                if (status.w_status < 0) {
-+                                                if (WTERMSIG(status) < 0) {
-                                                         goaway ("We died trying to \"%s\"", sys_com);
-                                                         t->Tmode = 0;
-                                                 }
-@@ -1285,15 +1284,54 @@
- #endif
-                         if (fd == -1) {
-                                 if (docompress) {
--                                        tmpnam(temp_file);
--                                        sprintf(sys_com, "gzip -c < %s > %s\n", t->Tname, temp_file);
--                                        if (system(sys_com) != 0) {
--                                                /* Just in case */
--                                                unlink(temp_file);
--                                                goaway ("We died trying to \"%s\"", sys_com);
--                                                t->Tmode = 0;
--                                        }
--                                        fd = open (temp_file,O_RDONLY,0);
-+					FILE *tf;
-+					int pid;
-+					int i;
-+
-+					tf = tmpfile();
-+					if (tf == NULL) {
-+						goaway("no temp file");
-+						t->Tmode = 0;
-+						goto out;
-+					}
-+					pid = fork();
-+					switch (pid) {
-+					case -1:	/* fail */
-+						goaway("Could not fork");
-+						t->Tmode = 0;
-+						fclose(tf);
-+						break;
-+					case 0:		/* child */
-+						close(1);
-+						dup(fileno(tf));/* write end */
-+						for(i = 3; i < 64; i++)
-+							close(i);
-+						execl("/usr/bin/gzip", "sup-gzip", "-c", t->Tname, 0);
-+						execl("/usr/local/bin/gzip", "sup-gzip", "-c", t->Tname, 0);
-+						execlp("gzip", "sup-gzip", "-c", t->Tname, 0);
-+						perror("gzip");
-+						_exit(1); /* pipe breaks */
-+					default:	/* parent */
-+						wait(&wstat);
-+						if (WIFEXITED(wstat) &&
-+						    WEXITSTATUS(wstat) > 0) {
-+							fclose(tf);
-+							goaway("gzip failed!");
-+							t->Tmode = 0;
-+							goto out;
-+						}
-+						if (WIFSIGNALED(wstat)) {
-+							fclose(tf);
-+							goaway("gzip died!");
-+							t->Tmode = 0;
-+							goto out;
-+						}
-+						fd = dup(fileno(tf));
-+						fclose(tf);
-+						lseek(fd, 0, 0);
-+						break;
-+					}
-+			out:
-                                 }
-                                 else
-                                         fd = open (t->Tname,O_RDONLY,0);
diff --git a/net/sup/files/patch-vprintf.c b/net/sup/files/patch-vprintf.c
deleted file mode 100644
index 83308ae1fb49..000000000000
--- a/net/sup/files/patch-vprintf.c
+++ /dev/null
@@ -1,28 +0,0 @@
---- vprintf.c.orig	Sat Aug 21 02:46:35 1993
-+++ vprintf.c	Wed Jul 30 02:59:04 2003
-@@ -59,7 +59,7 @@
-  */
- 
- #include <stdio.h>
--#include <varargs.h>
-+#include <stdarg.h>
- 
- #ifdef DOPRINT_VA
- /* 
-@@ -118,9 +118,16 @@
- {
- 	FILE fakebuf;
- 
-+#ifdef __hpux
-+	fakebuf._flag = _IODUMMY+_IOWRT;/* no _IOWRT: avoid stdio bug */
-+	fakebuf._base = fakebuf._ptr = s;
-+	fakebuf._cnt = n-1;
-+	fakebuf.__fileL = fakebuf.__fileH = 0xff;
-+#else
- 	fakebuf._flag = _IOSTRG+_IOWRT;	/* no _IOWRT: avoid stdio bug */
- 	fakebuf._ptr = s;
- 	fakebuf._cnt = n-1;
-+#endif
- 	_doprnt(fmt, args, &fakebuf);
- 	fakebuf._cnt++;
- 	putc('\0', &fakebuf);
diff --git a/net/sup/pkg-descr b/net/sup/pkg-descr
deleted file mode 100644
index 4554c3dbbad6..000000000000
--- a/net/sup/pkg-descr
+++ /dev/null
@@ -1,5 +0,0 @@
-Sup is a program used for upgrading collections of files from other machines
-to your machine.  You execute sup, the client program, which talks over the
-network using IP/TCP to a file server process.  The file server process
-cooperates with sup to determine which files of the collection need to be
-upgraded on your machine.
diff --git a/net/sup/pkg-plist b/net/sup/pkg-plist
deleted file mode 100644
index 377717b82725..000000000000
--- a/net/sup/pkg-plist
+++ /dev/null
@@ -1,3 +0,0 @@
-bin/sup
-bin/supscan
-bin/supfilesrv
-- 
cgit debian/1.2.3+git2.25.1-1-2-gaceb0