|
|
1.1 ! root 1: /* /sccs/src/cmd/uucp/s.gwd.c ! 2: gwd.c 1.3 8/30/84 17:37:28 ! 3: */ ! 4: #include "uucp.h" ! 5: VERSION(@(#)gwd.c 1.3); ! 6: ! 7: /* ! 8: * gwd - get working directory ! 9: * Uid and Euid are global ! 10: * return ! 11: * 0 - ok ! 12: * FAIL - failed ! 13: */ ! 14: ! 15: gwd(wkdir) ! 16: char *wkdir; ! 17: { ! 18: FILE *fp; ! 19: char cmd[BUFSIZ]; ! 20: ! 21: *wkdir = '\0'; ! 22: (void) sprintf(cmd, "%s pwd 2>&-", PATH); ! 23: ! 24: #ifndef V7 ! 25: (void) setuid(Uid); ! 26: fp = popen(cmd, "r"); ! 27: (void) setuid(Euid); ! 28: #else ! 29: fp = popen(cmd, "r"); ! 30: #endif ! 31: ! 32: if (fp == NULL || fgets(wkdir, MAXFULLNAME, fp) == NULL) { ! 33: (void) pclose(fp); ! 34: return(FAIL); ! 35: } ! 36: if (wkdir[strlen(wkdir)-1] == '\n') ! 37: wkdir[strlen(wkdir)-1] = '\0'; ! 38: (void) pclose(fp); ! 39: return(0); ! 40: } ! 41: ! 42: ! 43: /* ! 44: * uidstat(file, &statbuf) ! 45: * This is a stat call with the uid set from Euid to Uid. ! 46: * Used from uucp.c and uux.c to permit file copies ! 47: * from directories that may not be searchable by other. ! 48: * return: ! 49: * same as stat() ! 50: */ ! 51: ! 52: int ! 53: uidstat(file, buf) ! 54: char *file; ! 55: struct stat *buf; ! 56: { ! 57: #ifndef V7 ! 58: register ret; ! 59: ! 60: (void) setuid(Uid); ! 61: ret = stat(file, buf); ! 62: (void) setuid(Euid); ! 63: return(ret); ! 64: #else V7 ! 65: int ret; ! 66: ! 67: if (vfork() == 0) { ! 68: (void) setuid(Uid); ! 69: _exit(stat(file, buf)); ! 70: } ! 71: wait(&ret); ! 72: return(ret); ! 73: #endif V7 ! 74: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.