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 #include -#include +#include #include #include #include @@ -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 @@ -104,8 +110,8 @@ #include #include #include -#include #include +#include #include "sup.h" /************************* @@ -714,7 +720,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); Index: supfilesrv.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/sup/supfilesrv/supfilesrv.c,v retrieving revision 1.4 retrieving revision 1.6 diff -u -r1.4 -r1.6 --- supfilesrv.c 1996/02/06 19:03:58 1.4 +++ supfilesrv.c 1996/09/24 08:43:04 1.6 @@ -268,7 +288,6 @@ #include #include #include -#include #if MACH #include #endif @@ -1233,6 +1252,7 @@ register int fdtmp; char sys_com[STRINGLENGTH], temp_file[STRINGLENGTH], rcs_file[STRINGLENGTH]; union wait status; + int wstat; char *uconvert(),*gconvert(); int sendfile (); @@ -1300,15 +1320,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);