Annotation of researchv10no/cmd/uucp/uucheck.c, revision 1.1.1.1

1.1       root        1: /*     /sccs/src/cmd/uucp/s.uucheck.c
                      2:        uucheck.c       1.5     8/30/84 17:37:48
                      3: */
                      4: #define UUCHECK
                      5: int Uerrors = 0;       /* error count */
                      6: 
                      7: /* This unusual include (#include "permission.c") is done because
                      8:  * uucheck wants to use the global static variable in permission.c
                      9:  */
                     10: 
                     11: #include "uucp.h"
                     12: VERSION(@(#)uucheck.c  1.5);
                     13: #include "permission.c"
                     14: 
                     15: /* These are here because uucpdefs.c is not used, and
                     16:  * some routines are referenced (never called within uucheck execution)
                     17:  * and not included.
                     18:  */
                     19: 
                     20: #define USAGE  "[-v] [-xNUM]"
                     21: 
                     22: int Debug=0;
                     23: mkdirs(){}
                     24: canPath(){}
                     25: char RemSpool[] = SPOOL; /* this is a dummy for chkpth() -- never used here */
                     26: char *Spool = SPOOL;
                     27: char *Pubdir = PUBDIR;
                     28: char *Bnptr;
                     29: char   Progname[NAMESIZE];
                     30: /* used for READANY and READSOME macros */
                     31: struct stat __s_;
                     32: 
                     33: /* This is stuff for uucheck */
                     34: 
                     35: struct tab
                     36:    {
                     37:     char *name;
                     38:     char *value;
                     39:    } tab[] =
                     40:    {
                     41: #ifdef CORRUPTDIR
                     42:     "CORRUPT", CORRUPTDIR,
                     43: #endif
                     44:     "LOGUUCP", LOGUUCP,
                     45:     "LOGUUX",  LOGUUX,
                     46:     "LOGUUXQT",        LOGUUXQT,
                     47:     "LOGCICO", LOGCICO,
                     48:     "SEQDIR",  SEQDIR,
                     49:     "STATDIR", STATDIR,
                     50:     "PFILE",   PFILE,
                     51: #ifndef MANYSYS
                     52:     "SYSFILE", SYSFILE,
                     53: #endif
                     54:     "DEVFILE", DEVFILE ,
                     55:     "DIALFILE",        DIALFILE,
                     56:     "DIALERFILE",      DIALERFILE,
                     57: #ifdef USRSPOOLLOCKS
                     58:     "USRSPOOLLOCKS",   "/usr/spool/locks",
                     59: #endif
                     60: #ifdef NOSTRANGERS
                     61:     "NOSTRANGERS",     NOSTRANGERS,
                     62: #endif
                     63:     "LMTUUXQT",        LMTUUXQT, /* if not defined we'll stat NULL, it's not a bug */
                     64:     "LMTUUSCHED",      LMTUUSCHED, /* if not defined we'll stat NULL, it's not a bug */
                     65:     "XQTDIR",  XQTDIR,
                     66:     "WORKSPACE",       WORKSPACE,
                     67:     "admin directory", ADMIN,
                     68:     NULL,
                     69:    };
                     70: 
                     71: extern char *nextarg();
                     72: int verbose = 0;       /* fsck-like verbosity */
                     73: 
                     74: main(argc, argv)
                     75: char *argv[];
                     76: {
                     77:     struct stat statbuf;
                     78:     struct tab *tabptr;
                     79:     int i;
                     80: 
                     81:        (void) strcpy(Progname, "uucheck");
                     82:        while ((i = getopt(argc, argv, "vx:")) != EOF) {
                     83:                switch(i){
                     84: 
                     85:                case 'v':
                     86:                        verbose++;
                     87:                        break;
                     88: 
                     89:                case 'x':
                     90:                        Debug = atoi(optarg);
                     91:                        if (Debug <= 0)
                     92:                                Debug = 1;
                     93:                        break;
                     94: 
                     95:                default:
                     96:                        (void) fprintf(stderr, "\tusage: %s %s\n",
                     97:                            Progname, USAGE);
                     98:                        exit(1);
                     99:                }
                    100:        }
                    101:        if (argc != optind) {
                    102:                (void) fprintf(stderr, "\tusage: %s %s\n", Progname, USAGE);
                    103:                exit(1);
                    104:        }
                    105: 
                    106:     if (verbose) printf("*** uucheck:  Check Required Files and Directories\n");
                    107:     for (tabptr = tab; tabptr->name != NULL; tabptr++) {
                    108:         if (stat(tabptr->value, &statbuf) < 0) { 
                    109:            fprintf(stderr, "%s - ", tabptr->name);
                    110:            perror(tabptr->value);
                    111:            Uerrors++;
                    112:        }
                    113:     }
                    114: #if MANYSYS
                    115:        if (badsys())
                    116:                Uerrors++;
                    117: #endif
                    118: 
                    119:     if (verbose) printf("*** uucheck:  Directories Check Complete\n\n");
                    120: 
                    121:     /* check the permissions file */
                    122: 
                    123:     if (verbose) printf("*** uucheck:  Check %s file\n", PFILE);
                    124:     Uerrors += checkPerm();
                    125:     if (verbose) printf("*** uucheck:  %s Check Complete\n\n", PFILE);
                    126: 
                    127:     exit(Uerrors);
                    128: 
                    129: }
                    130: 
                    131: #if MANYSYS
                    132: 
                    133: badsys()
                    134: {
                    135:        FILE *fp;
                    136:        FILE *sysopen();
                    137:        int n;
                    138: 
                    139:        for (n = 0; (fp = sysopen("r")) != NULL; n++)
                    140:                fclose(fp);
                    141:        if (n)
                    142:                return (0);
                    143:        fprintf(stderr, "No readable Systems files\n");
                    144:        return (0);
                    145: }
                    146: 
                    147: #endif
                    148: 
                    149: char *Name[] = {
                    150: "U_LOGNAME", 
                    151: "U_MACHINE", 
                    152: "U_CALLBACK", 
                    153: "U_REQUEST", 
                    154: "U_SENDFILES", 
                    155: "U_READPATH", 
                    156: "U_WRITEPATH", 
                    157: "U_NOREADPATH", 
                    158: "U_NOWRITEPATH", 
                    159: "U_PROTOCOL", 
                    160: "U_COMMANDS",
                    161: "U_VALIDATE",
                    162: };
                    163: 
                    164: int
                    165: checkPerm ()
                    166: {
                    167:     int type;
                    168:     int error=0;
                    169:     char defaults[BUFSIZ];
                    170: 
                    171:     for (type=0; type<2; type++) {
                    172:        /* type = 0 for LOGNAME, 1 for MACHINE */
                    173: 
                    174:        if (verbose) printf("** %s \n\n",
                    175:            type == U_MACHINE
                    176:                ?"MACHINE PHASE (when we call or execute their uux requests)"
                    177:                :"LOGNAME PHASE (when they call us)" );
                    178: 
                    179:        Fp = fopen(PFILE, "r");
                    180:        if (Fp == NULL) {
                    181:                if (verbose) printf("can't open %s\n", PFILE);
                    182:                exit(1);
                    183:        }
                    184: 
                    185:        for (;;) {
                    186:            if (parse_tokens (_Flds) != 0) {
                    187:                fclose(Fp);
                    188:                break;
                    189:            }
                    190:            if (_Flds[type] == NULL)
                    191:                continue;
                    192: 
                    193:            fillFlds();
                    194:            /* if no ReadPath set num to 1--Path already set */
                    195:            fillList(U_READPATH, _RPaths);
                    196:            fillList(U_WRITEPATH, _WPaths);
                    197:            fillList(U_NOREADPATH, _NoRPaths);
                    198:            fillList(U_NOWRITEPATH, _NoWPaths);
                    199:            if (_Flds[U_COMMANDS] == NULL) {
                    200:                strcpy(defaults, DEFAULTCMDS);
                    201:                _Flds[U_COMMANDS] = defaults;
                    202:            }
                    203:            fillList(U_COMMANDS, _Commands);
                    204:            error += outLine(type);
                    205:        }
                    206:     if (verbose) printf("\n");
                    207:     }
                    208:     return(error);
                    209: }
                    210: 
                    211: int
                    212: outLine(type)
                    213: int type;
                    214: {
                    215:        register int i;
                    216:        register char *p;
                    217:        char *arg, cmd[BUFSIZ];
                    218:        int error = 0;
                    219:        char myname[MAXBASENAME+1];
                    220: 
                    221:        if (_Flds[type][0] == 0)
                    222:            return(0);
                    223: 
                    224:        if (type == U_LOGNAME) { /* for LOGNAME */
                    225:            p = _Flds[U_LOGNAME];
                    226:            if (verbose) printf("When a system logs in as: ");
                    227:            while (*p != '\0') {
                    228:                p = nextarg(p, &arg);
                    229:                if (verbose)    printf("(%s) ", arg);
                    230:            }
                    231:            if (verbose) printf("\n");
                    232: 
                    233:            if (callBack()) {
                    234:                if (verbose) printf("\tWe will call them back.\n\n");
                    235:                return(0);
                    236:            }
                    237:        }
                    238:        else {  /* MACHINE */
                    239:            p = _Flds[U_MACHINE];
                    240:            if (verbose) printf("When we call system(s): ");
                    241:            while (*p != '\0') {
                    242:                p = nextarg(p, &arg);
                    243:                if (verbose) printf("(%s) ", arg);
                    244:            }
                    245:            if (verbose) printf("\n");
                    246: 
                    247:        }
                    248: 
                    249:        if (verbose) printf("\tWe %s allow them to request files.\n",
                    250:            requestOK()? "DO" : "DO NOT");
                    251: 
                    252:        if (type == U_LOGNAME) {
                    253:                if (verbose) printf("\tWe %s send files queued for them on this call.\n",
                    254:                    switchRole()? "WILL" : "WILL NOT");
                    255:        }
                    256: 
                    257:        if (verbose) printf("\tThey can send files to\n");
                    258:        if (_Flds[U_WRITEPATH] == NULL) {
                    259:            if (verbose) printf("\t    %s (DEFAULT)\n", Pubdir);
                    260:        }
                    261:        else {
                    262:            for (i=0; _WPaths[i] != NULL; i++)
                    263:                if (verbose) printf("\t    %s\n", _WPaths[i]);
                    264:        }
                    265: 
                    266:        if (_Flds[U_NOWRITEPATH] != NULL) {
                    267:            if (verbose) printf("\tExcept\n");
                    268:            for (i=0; _NoWPaths[i] != NULL; i++)
                    269:                if (verbose) printf("\t    %s\n", _NoWPaths[i]);
                    270:        }
                    271: 
                    272:        if (requestOK()) {
                    273:            if (verbose) printf("\tThey can request files from\n");
                    274:            if (_Flds[U_READPATH] == NULL) {
                    275:                if (verbose) printf("\t    %s (DEFAULT)\n", Pubdir);
                    276:            }
                    277:            else {
                    278:                for (i=0; _RPaths[i] != NULL; i++)
                    279:                    if (verbose) printf("\t    %s\n", _RPaths[i]);
                    280:            }
                    281: 
                    282:            if (_Flds[U_NOREADPATH] != NULL) {
                    283:                if (verbose) printf("\tExcept\n");
                    284:                for (i=0; _NoRPaths[i] != NULL; i++)
                    285:                    if (verbose) printf("\t    %s\n", _NoRPaths[i]);
                    286:            }
                    287:        }
                    288: 
                    289:        myName(myname);
                    290:        if (verbose) printf("\tMyname for the conversation will be %s.\n",
                    291:            myname);
                    292:        if (verbose) printf("\tPUBDIR for the conversation will be %s.\n",
                    293:            Pubdir);
                    294: 
                    295:        if (verbose) printf("\n");
                    296: 
                    297:        if (type == U_MACHINE) {
                    298:            if (verbose) printf("Machine(s): ");
                    299:            p = _Flds[U_MACHINE];
                    300:            while (*p != '\0') {
                    301:                p = nextarg(p, &arg);
                    302:                if (verbose) printf("(%s) ", arg);
                    303:            }
                    304:            if (verbose) printf("\nCAN execute the following commands:\n");
                    305:            for (i=0; _Commands[i] != NULL; i++) {
                    306:                if (cmdOK(BASENAME(_Commands[i], '/'), cmd) == FALSE) {
                    307:                    if (verbose) printf("Software Error in permission.c\n");
                    308:                    error++;
                    309:                }
                    310:                if (verbose) printf("command (%s), fullname (%s)\n",
                    311:                    BASENAME(_Commands[i], '/'), cmd);
                    312:            }
                    313:            if (verbose) printf("\n");
                    314:        }
                    315: 
                    316:        return(error);
                    317: }

unix.superglobalmegacorp.com

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