|
|
1.1 ! root 1: #include "uucp.h" ! 2: #include <sys/types.h> ! 3: #include <sys/stat.h> ! 4: ! 5: ! 6: /******* ! 7: * expfile(file) expand file name ! 8: * char *file; ! 9: * ! 10: * return codes: none ! 11: */ ! 12: ! 13: expfile(file) ! 14: char *file; ! 15: { ! 16: char *fpart; ! 17: char user[20], *up; ! 18: char full[100]; ! 19: int uid; ! 20: ! 21: switch(file[0]) { ! 22: case '/': ! 23: return; ! 24: case '~': ! 25: for (fpart = file + 1, up = user; *fpart != '\0' ! 26: && *fpart != '/'; fpart++) ! 27: *up++ = *fpart; ! 28: *up = '\0'; ! 29: if (gninfo(user, &uid, full) != 0) { ! 30: strcpy(full, PUBDIR); ! 31: } ! 32: ! 33: strcat(full, fpart); ! 34: strcpy(file, full); ! 35: return; ! 36: default: ! 37: strcpy(full, Wrkdir); ! 38: strcat(full, "/"); ! 39: strcat(full, file); ! 40: strcpy(file, full); ! 41: return; ! 42: } ! 43: } ! 44: ! 45: ! 46: /*** ! 47: * isdir(name) check if directory name ! 48: * char *name; ! 49: * ! 50: * return codes: 0 - not directory | 1 - is directory ! 51: */ ! 52: ! 53: isdir(name) ! 54: char *name; ! 55: { ! 56: int ret; ! 57: struct stat s; ! 58: ! 59: ret = stat(name, &s); ! 60: if (ret < 0) ! 61: return(0); ! 62: if ((s.st_mode & S_IFMT) == S_IFDIR) ! 63: return(1); ! 64: return(0); ! 65: } ! 66: ! 67: ! 68: /*** ! 69: * mkdirs(name) make all necessary directories ! 70: * char *name; ! 71: * ! 72: * return 0 | FAIL ! 73: */ ! 74: ! 75: mkdirs(name) ! 76: char *name; ! 77: { ! 78: int ret; ! 79: char cmd[100], dir[100], *p; ! 80: ! 81: for (p = dir + 1;; p++) { ! 82: strcpy(dir, name); ! 83: if ((p = index(p, '/')) == NULL) ! 84: return(0); ! 85: *p = '\0'; ! 86: if (isdir(dir)) ! 87: continue; ! 88: sprintf(cmd, "mkdir %s;chmod 0777 %s", dir, dir); ! 89: DEBUG(4, "mkdir - %s\n", dir); ! 90: ret = shio(cmd, NULL, NULL, User); ! 91: if (ret != 0) ! 92: return(FAIL); ! 93: } ! 94: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.