1: # include <stdio.h> 2: # include <ingres.h> 3: # include <aux.h> 4: # include <sccs.h> 5: 6: SCCSID(@(#)getuser.c 8.1 12/31/84) 7: 8: /* 9: ** GET LINE FROM USER FILE 10: ** 11: ** Given a user code (a two byte string), this routine returns 12: ** the line from .../files/users into `buf'. The users 13: ** file is automatically opened, and it is closed if getperm 14: ** is called with `code' == 0. 15: ** 16: ** If `code' == -1 then getuser will reinitialize itself. 17: ** This will guarantee that getuser will reopen the file 18: ** if (for example) an interrupt occured during the previous 19: ** call. 20: */ 21: 22: getuser(code, buf) 23: char *code; 24: char buf[]; 25: { 26: static FILE *userf; 27: register char c; 28: register char *bp; 29: extern char *index(); 30: 31: if (code == 0) 32: { 33: if (userf != NULL) 34: fclose(userf); 35: userf = NULL; 36: return (0); 37: } 38: if (code == (char *) -1) 39: { 40: userf = NULL; 41: return (0); 42: } 43: if (userf == NULL) 44: { 45: userf = fopen(ztack(Pathname, "/files/users"), "r"); 46: if (userf == NULL) 47: syserr("getuser: open err"); 48: } 49: rewind(userf); 50: 51: for (;;) 52: { 53: bp = buf; 54: if (fgets(bp, MAXLINE, userf) == NULL) 55: return (1); 56: *index(bp, '\n') = '\0'; 57: while ((c = *bp++) != ':') 58: if (c == '\0') 59: return (1); 60: if (bequal(bp, code, 2)) 61: return (0); 62: } 63: }