Annotation of coherent/b/conf/convert/lsys/rdperms.c, revision 1.1

1.1     ! root        1: /* readperm(): Read the Permissions file, looking for the entry that matches
        !             2:  *             our system. Continue reading and concatenating until we
        !             3:  *             hit EOF or the next MACHINE line.
        !             4:  */
        !             5: 
        !             6: #include <stdio.h>
        !             7: #include <string.h>
        !             8: #include <ctype.h>
        !             9: 
        !            10: #define MAX            175
        !            11: #define PERMISSIONS    "/usr/lib/uucp/Permissions"
        !            12: 
        !            13: /* fields needed for our sys file entry: */
        !            14: 
        !            15: extern char    request[];              /* REQUEST files from Permissions */
        !            16: extern char    transfer[];             /* SEND files from Permissions */
        !            17: extern char    readpath[];             /* READ from Permissions */
        !            18: extern char    no_readpath[];  /* NOREAD from Permissions */
        !            19: extern char    writepath[];            /* WRITE from Permissions */
        !            20: extern char    no_writepath[]; /* NOWRITE from Permissions */
        !            21: extern char    commands[];             /* COMMANDS from Permissions */
        !            22: extern char    myname[];               /* MYNAME from Permissions */
        !            23: 
        !            24: extern char    parseline[];    /* this will be our concatenated Permissions */
        !            25: 
        !            26: extern int getrest();                  /* complete concatenating Permissions string */
        !            27: extern int parseperm();                /* parse a field out of Permissions string */
        !            28: extern int cvnowritwe();               /* convert NOREAD and NOWRITE to useable format */
        !            29: 
        !            30: readperm(sys)
        !            31: char *sys;
        !            32: {
        !            33: 
        !            34:        FILE *infp;
        !            35:        char rdline[MAX];       /* line read from Permissions */
        !            36:        char chksys[15];        /* used to look for MACHINE= */
        !            37:        char chkmch[8];         /* holds MACHINE */
        !            38:        char *endname;          /* Points to end of parsed name */
        !            39: 
        !            40:        if( (infp = fopen(PERMISSIONS,"r")) == NULL){
        !            41:                printf("Error opening %s!\n",PERMISSIONS);
        !            42:                exit(1);
        !            43:        }
        !            44: 
        !            45:        /* initialize our stuff */
        !            46: 
        !            47:        strcpy(parseline,"");
        !            48:        strcpy(request,"");
        !            49:        strcpy(transfer,"");
        !            50:        strcpy(readpath,"");
        !            51:        strcpy(no_readpath,"");
        !            52:        strcpy(writepath,"");
        !            53:        strcpy(no_writepath,"");
        !            54:        strcpy(commands,"");
        !            55:        strcpy(myname,"");
        !            56: 
        !            57: 
        !            58:        /* Read Permissions one line at a time until we find a
        !            59:         * line that has MACHINE="SYSTEM".
        !            60:         */
        !            61:        strcpy(chkmch,"MACHINE=");
        !            62:        sprintf(chksys,"%s%s",chkmch,sys);
        !            63: 
        !            64:        while(fgets(rdline,MAX,infp)!= NULL){
        !            65:                if((endname = strstr(rdline, chksys)) != NULL
        !            66:                   && (isspace(endname[strlen(chksys)])
        !            67:                       || endname == '\0')
        !            68:                     ){ /* matched MACHINE=sys */
        !            69:                        strcpy(parseline, rdline);
        !            70:                        getrest(infp);          /* get rest of Permissions entrry */
        !            71:                        break;
        !            72:                }
        !            73:        }
        !            74: 
        !            75:        fclose(infp);
        !            76: 
        !            77:        if(parseline[0] == '\0'){       /* no line found */
        !            78:                printf("No Permissions entry for system %s found!\n",sys);
        !            79:                printf("Default settings will be assigned to this site.\n");
        !            80:                return;
        !            81:        }
        !            82: 
        !            83: 
        !            84:        /* we will now call parseperm(), giving it a pointer to the Permissions
        !            85:         * line, pointer to the Permissions field to find and pointer to
        !            86:         * sys field to fill. We pray that NOREAD and NOWRITE follow
        !            87:         * READ= and WRITE=, or we will not correctly parse this entry.
        !            88:         */
        !            89: 
        !            90:        parseperm(parseline, "MYNAME",myname);
        !            91:        parseperm(parseline, "COMMANDS", commands);
        !            92:        parseperm(parseline, "READ",readpath);
        !            93:        parseperm(parseline, "NOREAD",no_readpath);
        !            94:        parseperm(parseline, "WRITE",writepath);        
        !            95:        parseperm(parseline, "NOWRITE",no_writepath);   
        !            96:        parseperm(parseline, "REQUEST",request);
        !            97:        parseperm(parseline, "SENDFILES",transfer);
        !            98: 
        !            99: 
        !           100:        if(no_readpath[0] != '\0')
        !           101:                cvnowrite(no_readpath);
        !           102: 
        !           103:        if(no_writepath[0] != '\0')
        !           104:                cvnowrite(no_writepath);
        !           105: 
        !           106: 
        !           107: #ifdef DEBUG
        !           108:        printf("myname is {%s}  ",myname);
        !           109:        printf("commands are {%s}\n",commands);
        !           110:        printf("read paths are {%s} {%s}\n",readpath, no_readpath);
        !           111:        printf("write paths are {%s} {%s}\n",writepath, no_writepath);
        !           112:        printf("transfer {%s}  request {%s}\n",transfer, request);
        !           113: #endif
        !           114: 
        !           115: }
        !           116: 
        !           117: 
        !           118: /* getrest():  get the rest of the Permissions entry for the current
        !           119:  *             system. We will stop concatenating when we find the
        !           120:  *             next MACHINE line.
        !           121:  */
        !           122: 
        !           123: 
        !           124: getrest(infp)
        !           125: FILE *infp;
        !           126: {
        !           127:        char rdline[MAX];
        !           128: 
        !           129:        while((fgets(rdline, MAX, infp))!= NULL){
        !           130:                if(strstr(rdline,"MACHINE") == NULL){
        !           131:                        strcat(parseline, rdline);
        !           132:                }else{
        !           133:                        return;
        !           134:                }
        !           135:        }
        !           136: }
        !           137: 
        !           138: 
        !           139: 
        !           140: /* parseperm():        given a Permissions line, field to look for and field
        !           141:  *             to fill, find the field in the line and fill it for sys
        !           142:  */
        !           143: 
        !           144: parseperm(line, srchname, fillname)
        !           145: char *line;            /* master permissions entry */
        !           146: char *srchname;                /* Permissions field we are looking for */
        !           147: char *fillname;                /* sys field to fill with Permissions data */
        !           148: 
        !           149: {
        !           150:        char *fldptr;           /* point to field we will fill. */
        !           151:        char *lineptr;          /* point to master Permissions line */
        !           152: 
        !           153: 
        !           154:        /* set pointer to field to fill for sys file */
        !           155:        fldptr = fillname;
        !           156:        *fldptr = '\0';
        !           157: 
        !           158:        if((lineptr = strstr(line,srchname)) == NULL){
        !           159: #ifdef DEBUG
        !           160:                printf("No %s entry found.\n", srchname);
        !           161: #endif /* DEBUG */
        !           162:                return;
        !           163:        }else{
        !           164:                /* Check to make sure it's not a NOxxxxx variation */
        !           165:                if(!isspace(*(lineptr - 1)) && srchname[0] != 'N') {
        !           166:                    if((lineptr = strstr(lineptr + strlen(srchname) , srchname)) == NULL)
        !           167:                        return;
        !           168:                }
        !           169:                lineptr += strlen(srchname);
        !           170:                while(isspace(*lineptr))
        !           171:                    lineptr++;
        !           172:                if(*lineptr == '=')
        !           173:                        lineptr++;
        !           174:                while(isspace(*lineptr))
        !           175:                    lineptr++;
        !           176:                while(!isspace(*lineptr) && *lineptr != EOF){
        !           177:                        if(*lineptr == ':'){    /* convert colon to space */
        !           178:                                *lineptr = ' ';
        !           179:                        }
        !           180:                        *fldptr++ = *lineptr++;
        !           181:                }
        !           182:                *fldptr = '\0';
        !           183:        }
        !           184: 
        !           185:        return;
        !           186: }      
        !           187: 
        !           188: 
        !           189: /* cvnowrite(): convert the NOWRITE and NOREAD strings to something
        !           190:  *             useable in the sys file. In this instance, we are
        !           191:  *             going to walk down the string and convert SPACES
        !           192:  *             to SPACE! ( !)
        !           193:  */
        !           194: 
        !           195: cvnowrite(line)
        !           196: char *line;
        !           197: {
        !           198:        char *ptrline;
        !           199:        char *ptrnew;
        !           200:        char newline[MAX];
        !           201: 
        !           202:        ptrline = line;
        !           203:        ptrnew = newline;
        !           204:        *ptrnew++='!';          /* set up our string to begin with '!' */
        !           205: 
        !           206:        while(*ptrline != '\0'){
        !           207:                if(*ptrline == ' '){
        !           208:                        *ptrnew++ = ' ';
        !           209:                        *ptrnew++ = '!';
        !           210:                        *ptrline++;
        !           211:                }else{
        !           212:                        *ptrnew++ = *ptrline++;
        !           213:                }
        !           214:        }
        !           215:        *ptrnew = '\0';
        !           216: 
        !           217:        strcpy(line, newline);  /* copy new line over old one */
        !           218: }

unix.superglobalmegacorp.com

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