Annotation of 42BSD/usr.bin/uucp/expfile.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)expfile.c  5.1 (Berkeley) 7/2/83";
                      3: #endif
                      4: 
                      5: #include "uucp.h"
                      6: #include <sys/types.h>
                      7: #include <sys/stat.h>
                      8: 
                      9: /*******
                     10:  *     expfile(file)   expand file name
                     11:  *     char *file;
                     12:  *
                     13:  *     return codes: 0 - Ordinary spool area file
                     14:  *                   1 - Other normal file
                     15:  *                   FAIL - no Wrkdir name available
                     16:  */
                     17: 
                     18: expfile(file)
                     19: char *file;
                     20: {
                     21:        register char *fpart, *p;
                     22:        char user[20], *up;
                     23:        char full[100];
                     24:        int uid;
                     25: 
                     26:        switch(file[0]) {
                     27:        case '/':
                     28:                return(1);
                     29:        case '~':
                     30:                for (fpart = file + 1, up = user; *fpart != '\0'
                     31:                        && *fpart != '/'; fpart++)
                     32:                                *up++ = *fpart;
                     33:                *up = '\0';
                     34:                /* ll1b.105, mn, Mark Nettleingham, defend against
                     35:                 * null login name in /etc/passwd
                     36:                 */
                     37:                if (!*user || gninfo(user, &uid, full) != 0) {
                     38:                        strcpy(full, PUBDIR);
                     39:                }
                     40:        
                     41:                strcat(full, fpart);
                     42:                strcpy(file, full);
                     43:                return(1);
                     44:        default:
                     45:                p = index(file, '/');
                     46:                strcpy(full, Wrkdir);
                     47:                strcat(full, "/");
                     48:                strcat(full, file);
                     49:                strcpy(file, full);
                     50:                if (Wrkdir[0] == '\0')
                     51:                        return(FAIL);
                     52:                else if (p != NULL)
                     53:                        return(1);
                     54:                return(0);
                     55:        }
                     56: }
                     57: 
                     58: 
                     59: /***
                     60:  *     isdir(name)     check if directory name
                     61:  *     char *name;
                     62:  *
                     63:  *     return codes:  0 - not directory  |  1 - is directory
                     64:  */
                     65: 
                     66: isdir(name)
                     67: char *name;
                     68: {
                     69:        register int ret;
                     70:        struct stat s;
                     71: 
                     72:        ret = stat(subfile(name), &s);
                     73:        if (ret < 0)
                     74:                return(0);
                     75:        if ((s.st_mode & S_IFMT) == S_IFDIR)
                     76:                return(1);
                     77:        return(0);
                     78: }
                     79: 
                     80: 
                     81: /***
                     82:  *     mkdirs(name)    make all necessary directories
                     83:  *     char *name;
                     84:  *
                     85:  *     return 0  |  FAIL
                     86:  */
                     87: 
                     88: mkdirs(name)
                     89: char *name;
                     90: {
                     91:        int ret, mask;
                     92:        char cmd[100], dir[100];
                     93:        register char *p;
                     94: 
                     95:        for (p = dir + 1;; p++) {
                     96:                strcpy(dir, name);
                     97:                if ((p = index(p, '/')) == NULL)
                     98:                        return(0);
                     99:                *p = '\0';
                    100:                if (isdir(dir))
                    101:                        continue;
                    102: 
                    103:                /* rti!trt: add chmod ala 4.1c uucp */
                    104:                sprintf(cmd, "mkdir %s;chmod 0777 %s", dir, dir);
                    105:                DEBUG(4, "mkdir - %s\n", dir);
                    106:                mask = umask(0);
                    107:                ret = shio(cmd, CNULL, CNULL, User);
                    108:                umask(mask);
                    109:                if (ret != 0)
                    110:                        return(FAIL);
                    111:        }
                    112: }
                    113: 
                    114: /***
                    115:  *     ckexpf - expfile and check return
                    116:  *             print error if it failed.
                    117:  *
                    118:  *     return code - 0 - ok; FAIL if expfile failed
                    119:  */
                    120: 
                    121: ckexpf(file)
                    122: register char *file;
                    123: {
                    124: 
                    125:        if (expfile(file) != FAIL)
                    126:                return(0);
                    127: 
                    128:        /*  could not expand file name */
                    129:        /* the gwd routine failed */
                    130: 
                    131:        fprintf(stderr, "Can't expand filename (%s). Pwd failed.\n", file+1);
                    132:        return(FAIL);
                    133: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.