113644Ssam #ifndef lint 2*17835Sralph static char sccsid[] = "@(#)expfile.c 5.3 (Berkeley) 01/22/85"; 313644Ssam #endif 413644Ssam 513644Ssam #include "uucp.h" 613644Ssam #include <sys/types.h> 713644Ssam #include <sys/stat.h> 813644Ssam 913644Ssam /******* 1013644Ssam * expfile(file) expand file name 1113644Ssam * char *file; 1213644Ssam * 1313644Ssam * return codes: 0 - Ordinary spool area file 1413644Ssam * 1 - Other normal file 1513644Ssam * FAIL - no Wrkdir name available 1613644Ssam */ 1713644Ssam 1813644Ssam expfile(file) 1913644Ssam char *file; 2013644Ssam { 2113644Ssam register char *fpart, *p; 22*17835Sralph char user[WKDSIZE], *up; 2317131Sralph char full[MAXFULLNAME]; 2413644Ssam int uid; 2513644Ssam 2613644Ssam switch(file[0]) { 2713644Ssam case '/': 2813644Ssam return(1); 2913644Ssam case '~': 3013644Ssam for (fpart = file + 1, up = user; *fpart != '\0' 31*17835Sralph && *fpart != '/'; fpart++) 3213644Ssam *up++ = *fpart; 3313644Ssam *up = '\0'; 3413644Ssam if (!*user || gninfo(user, &uid, full) != 0) { 3513644Ssam strcpy(full, PUBDIR); 3613644Ssam } 3713644Ssam 3813644Ssam strcat(full, fpart); 3913644Ssam strcpy(file, full); 40*17835Sralph return 1; 4113644Ssam default: 4213644Ssam p = index(file, '/'); 43*17835Sralph strcpy(full, Wrkdir); 44*17835Sralph strcat(full, "/"); 45*17835Sralph strcat(full, file); 4613644Ssam strcpy(file, full); 4713644Ssam if (Wrkdir[0] == '\0') 48*17835Sralph return FAIL; 4913644Ssam else if (p != NULL) 50*17835Sralph return 1; 51*17835Sralph return 0; 5213644Ssam } 5313644Ssam } 5413644Ssam 5513644Ssam 5613644Ssam /*** 5713644Ssam * isdir(name) check if directory name 5813644Ssam * char *name; 5913644Ssam * 6013644Ssam * return codes: 0 - not directory | 1 - is directory 6113644Ssam */ 6213644Ssam 6313644Ssam isdir(name) 6413644Ssam char *name; 6513644Ssam { 6613644Ssam register int ret; 6713644Ssam struct stat s; 6813644Ssam 6913644Ssam ret = stat(subfile(name), &s); 7013644Ssam if (ret < 0) 71*17835Sralph return 0; 7213644Ssam if ((s.st_mode & S_IFMT) == S_IFDIR) 73*17835Sralph return 1; 74*17835Sralph return 0; 7513644Ssam } 7613644Ssam 7713644Ssam 7813644Ssam /*** 7913644Ssam * mkdirs(name) make all necessary directories 8013644Ssam * char *name; 8113644Ssam * 8213644Ssam * return 0 | FAIL 8313644Ssam */ 8413644Ssam 8513644Ssam mkdirs(name) 8613644Ssam char *name; 8713644Ssam { 8813644Ssam int ret, mask; 89*17835Sralph char cmd[MAXFULLNAME], dir[MAXFULLNAME]; 9013644Ssam register char *p; 9113644Ssam 9213644Ssam for (p = dir + 1;; p++) { 9313644Ssam strcpy(dir, name); 9413644Ssam if ((p = index(p, '/')) == NULL) 95*17835Sralph return 0; 9613644Ssam *p = '\0'; 9713644Ssam if (isdir(dir)) 9813644Ssam continue; 9913644Ssam 10013644Ssam sprintf(cmd, "mkdir %s;chmod 0777 %s", dir, dir); 10113644Ssam DEBUG(4, "mkdir - %s\n", dir); 10213644Ssam mask = umask(0); 10313644Ssam ret = shio(cmd, CNULL, CNULL, User); 10413644Ssam umask(mask); 10513644Ssam if (ret != 0) 106*17835Sralph return FAIL; 10713644Ssam } 108*17835Sralph /* NOTREACHED */ 10913644Ssam } 11013644Ssam 11113644Ssam /*** 11213644Ssam * ckexpf - expfile and check return 11313644Ssam * print error if it failed. 11413644Ssam * 11513644Ssam * return code - 0 - ok; FAIL if expfile failed 11613644Ssam */ 11713644Ssam 11813644Ssam ckexpf(file) 11913644Ssam register char *file; 12013644Ssam { 12113644Ssam 12213644Ssam if (expfile(file) != FAIL) 123*17835Sralph return 0; 12413644Ssam 12513644Ssam /* could not expand file name */ 12613644Ssam /* the gwd routine failed */ 12713644Ssam 128*17835Sralph logent("CAN'T EXPAND FILENAME - PWD FAILED", file+1); 129*17835Sralph return FAIL; 13013644Ssam } 131