=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/oldrdist/Attic/server.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** src/usr.bin/oldrdist/Attic/server.c 1996/06/26 05:37:41 1.3 --- src/usr.bin/oldrdist/Attic/server.c 1996/07/19 21:57:34 1.4 *************** *** 1,4 **** ! /* $OpenBSD: server.c,v 1.3 1996/06/26 05:37:41 deraadt Exp $ */ /* * Copyright (c) 1983, 1993 --- 1,4 ---- ! /* $OpenBSD: server.c,v 1.4 1996/07/19 21:57:34 millert Exp $ */ /* * Copyright (c) 1983, 1993 *************** *** 35,41 **** #ifndef lint /* from: static char sccsid[] = "@(#)server.c 8.1 (Berkeley) 6/9/93"; */ ! static char *rcsid = "$OpenBSD: server.c,v 1.3 1996/06/26 05:37:41 deraadt Exp $"; #endif /* not lint */ #include --- 35,41 ---- #ifndef lint /* from: static char sccsid[] = "@(#)server.c 8.1 (Berkeley) 6/9/93"; */ ! static char *rcsid = "$OpenBSD: server.c,v 1.4 1996/07/19 21:57:34 millert Exp $"; #endif /* not lint */ #include *************** *** 96,101 **** --- 96,106 ---- (void) sprintf(buf, "V%d\n", VERSION); (void) write(rem, buf, strlen(buf)); + if (getuid() != geteuid()) { + error("This version of rdist should not be installed setuid.\n"); + return; + } + for (;;) { cp = cmdbuf; if (read(rem, cp, 1) <= 0) *************** *** 267,277 **** rname++; destdir = 1; } else { ! rname = rindex(target, '/'); ! if (rname == NULL) ! rname = target; ! else ! rname++; } if (debug) printf("target = %s, rname = %s\n", target, rname); --- 272,278 ---- rname++; destdir = 1; } else { ! rname = xbasename(target); } if (debug) printf("target = %s, rname = %s\n", target, rname); *************** *** 796,802 **** if (catname) (void) sprintf(tp, "/%s", cp); ! cp = rindex(target, '/'); if (cp == NULL) strcpy(new, tempname); else if (cp == target) --- 797,803 ---- if (catname) (void) sprintf(tp, "/%s", cp); ! cp = strrchr(target, '/'); if (cp == NULL) strcpy(new, tempname); else if (cp == target) *************** *** 1008,1014 **** register char *cp; struct stat stb; ! cp = rindex(name, '/'); if (cp == NULL || cp == name) return(0); *cp = '\0'; --- 1009,1015 ---- register char *cp; struct stat stb; ! cp = strrchr(name, '/'); if (cp == NULL || cp == name) return(0); *cp = '\0'; *************** *** 1342,1349 **** --- 1343,1352 ---- (void) dup(fd[1]); (void) close(fd[0]); (void) close(fd[1]); + #if defined(DIRECT_RCMD) setgid(groupid); setuid(userid); + #endif /* DIRECT_RCMD */ execl(_PATH_BSHELL, "sh", "-c", cmd, 0); _exit(127); } *************** *** 1435,1443 **** #endif ++nerrs; - if (!fp && !(fp = fdopen(rem, "w"))) - return; if (iamremote) { (void)fprintf(fp, "%crdist: ", 0x01); (void)vfprintf(fp, fmt, ap); fflush(fp); --- 1438,1446 ---- #endif ++nerrs; if (iamremote) { + if (!fp && (rem < 0 || !(fp = fdopen(rem, "w")))) + return; (void)fprintf(fp, "%crdist: ", 0x01); (void)vfprintf(fp, fmt, ap); fflush(fp);