113644Ssam #ifndef lint 2*23598Sbloom static char sccsid[] = "@(#)expfile.c 5.5 (Berkeley) 06/19/85"; 313644Ssam #endif 413644Ssam 513644Ssam #include "uucp.h" 613644Ssam #include <sys/stat.h> 713644Ssam 8*23598Sbloom /*LINTLIBRARY*/ 9*23598Sbloom 1018620Sralph /* 1118620Sralph * expand file name 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; 2217835Sralph char user[WKDSIZE], *up; 2317131Sralph char full[MAXFULLNAME]; 2413644Ssam int uid; 2513644Ssam 2613644Ssam switch(file[0]) { 2713644Ssam case '/': 2818620Sralph return 1; 2913644Ssam case '~': 3013644Ssam for (fpart = file + 1, up = user; *fpart != '\0' 31*23598Sbloom && *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); 4017835Sralph return 1; 4113644Ssam default: 4213644Ssam p = index(file, '/'); 4317835Sralph strcpy(full, Wrkdir); 4417835Sralph strcat(full, "/"); 4517835Sralph strcat(full, file); 4613644Ssam strcpy(file, full); 4713644Ssam if (Wrkdir[0] == '\0') 4817835Sralph return FAIL; 4913644Ssam else if (p != NULL) 5017835Sralph return 1; 5117835Sralph return 0; 5213644Ssam } 5313644Ssam } 5413644Ssam 5513644Ssam 5618620Sralph /* 5718620Sralph * check if directory name 5813644Ssam * 5913644Ssam * return codes: 0 - not directory | 1 - is directory 6013644Ssam */ 6113644Ssam 6213644Ssam isdir(name) 6313644Ssam char *name; 6413644Ssam { 6513644Ssam register int ret; 6613644Ssam struct stat s; 6713644Ssam 6813644Ssam ret = stat(subfile(name), &s); 6913644Ssam if (ret < 0) 7017835Sralph return 0; 7113644Ssam if ((s.st_mode & S_IFMT) == S_IFDIR) 7217835Sralph return 1; 7317835Sralph return 0; 7413644Ssam } 7513644Ssam 7613644Ssam 7718620Sralph /* 7818620Sralph * make all necessary directories 7913644Ssam * 8018620Sralph * return SUCCESS | FAIL 8113644Ssam */ 8213644Ssam 8313644Ssam mkdirs(name) 8413644Ssam char *name; 8513644Ssam { 8613644Ssam int ret, mask; 8718620Sralph char dir[MAXFULLNAME]; 8813644Ssam register char *p; 8913644Ssam 9013644Ssam for (p = dir + 1;; p++) { 9113644Ssam strcpy(dir, name); 9213644Ssam if ((p = index(p, '/')) == NULL) 9318620Sralph return SUCCESS; 9413644Ssam *p = '\0'; 9513644Ssam if (isdir(dir)) 9613644Ssam continue; 9713644Ssam 9813644Ssam DEBUG(4, "mkdir - %s\n", dir); 9913644Ssam mask = umask(0); 10018620Sralph ret = mkdir(dir, 0777); 10113644Ssam umask(mask); 10213644Ssam if (ret != 0) 10317835Sralph return FAIL; 10413644Ssam } 10517835Sralph /* NOTREACHED */ 10613644Ssam } 10713644Ssam 10818620Sralph /* 10918620Sralph * expfile and check return 11013644Ssam * print error if it failed. 11113644Ssam * 11218620Sralph * return code - SUCCESS - ok; FAIL if expfile failed 11313644Ssam */ 11413644Ssam 11513644Ssam ckexpf(file) 11613644Ssam register char *file; 11713644Ssam { 11813644Ssam 11913644Ssam if (expfile(file) != FAIL) 12018620Sralph return SUCCESS; 12113644Ssam 12213644Ssam /* could not expand file name */ 12313644Ssam /* the gwd routine failed */ 12413644Ssam 12517835Sralph logent("CAN'T EXPAND FILENAME - PWD FAILED", file+1); 12617835Sralph return FAIL; 12713644Ssam } 128