|
|
1.1 ! root 1: # include <stdio.h> ! 2: # include <ingres.h> ! 3: # include <aux.h> ! 4: # include <opsys.h> ! 5: # include <sccs.h> ! 6: ! 7: SCCSID(@(#)usersetup.c 7.1 2/5/81) ! 8: ! 9: /* ! 10: ** Initialize Users File From Passwd File ! 11: ** ! 12: ** Everyone in /etc/passwd is entered into the users file. All ! 13: ** users can access all databases. ! 14: ** ! 15: ** User codes are assigned sequentially. This should therefore ! 16: ** probably be run once only, when INGRES is first installed. ! 17: ** Otherwise, usercodes can change mysteriously. ! 18: ** ! 19: ** The optional parameter replaces the root of the INGRES subtree ! 20: ** as found in /etc/passwd. The INGRES user must be installed ! 21: ** (with that name) when usersetup is run. If this parameter ! 22: ** is a minus ("-"), output goes to the standard output. ! 23: ** ! 24: ** The initialization file is initialized to "<home>/.ingres", ! 25: ** where <home> is the home directory in the passwd file. ! 26: */ ! 27: ! 28: main(argc, argv) ! 29: int argc; ! 30: char **argv; ! 31: { ! 32: register int i; ! 33: char buf[MAXLINE + 1]; ! 34: char *pathname; ! 35: register char *code; ! 36: char *field[UF_NFIELDS]; ! 37: register int iop; ! 38: extern char *Proc_name; ! 39: char *stat = "000001"; ! 40: ! 41: Proc_name = "USERSETUP"; ! 42: pathname = NULL; ! 43: if (argc > 1) ! 44: { ! 45: argc--; ! 46: stat = *++argv; ! 47: } ! 48: ! 49: code = "aa"; ! 50: if ((iop = (int) fopen("/etc/passwd", "r")) == NULL) ! 51: syserr(0, "cannot open /etc/passwd for reading"); ! 52: ! 53: /* scan for INGRES in /etc/passwd */ ! 54: while (fgets(buf, MAXLINE, iop)) ! 55: { ! 56: i = decode(buf, field); ! 57: if (!sequal(USERINGRES, field[0])) ! 58: continue; ! 59: pathname = field[i - 1]; ! 60: ! 61: break; ! 62: } ! 63: ! 64: /* test for INGRES entry found */ ! 65: if (!pathname) ! 66: syserr(0, "USERINGRES not installed as UNIX user"); ! 67: ! 68: /* get override pathname */ ! 69: if (argc > 1) ! 70: pathname = argv[1]; ! 71: ! 72: /* rewind passwd file */ ! 73: if (fclose(iop)) ! 74: syserr("fclose"); ! 75: if ((iop = (int) fopen("/etc/passwd", "r")) == NULL) ! 76: syserr("open /etc/passwd 2"); ! 77: ! 78: /* open output file as needed */ ! 79: if (pathname[0] != '-') ! 80: { ! 81: concat(pathname, "/files/users", buf); ! 82: if ((i = open(buf, 0)) >= 0) ! 83: syserr(0, "%s already exists", buf); ! 84: if ((i = creat(buf, 0644)) < 0) ! 85: syserr("Cannot create %s", buf); ! 86: close(i); ! 87: if (freopen(buf, "w", stdout) == NULL) ! 88: syserr("cannot open %s", buf); ! 89: } ! 90: ! 91: while (fgets(buf, MAXLINE, iop)) ! 92: { ! 93: i = decode(buf, field); ! 94: /* print username & code */ ! 95: printf("%s:%s:%s:%s:%s:::%s/.ingres::\n", ! 96: field[0], /* user name */ ! 97: code, ! 98: field[2], /* user id */ ! 99: field[3], /* user group */ ! 100: sequal(field[0], USERINGRES) ? "177777" : stat, ! 101: field[i - 1]); /* working directory */ ! 102: next(code); ! 103: } ! 104: fflush(stdout); ! 105: } ! 106: /* ! 107: ** DECODE ! 108: */ ! 109: ! 110: decode(buf, field) ! 111: char *buf; ! 112: char *field[]; ! 113: { ! 114: register char *cp, c; ! 115: register int i; ! 116: ! 117: field[0] = buf; ! 118: for (i = 0, cp = buf; (c = *cp) != '\n' && c != '\0'; cp++) ! 119: { ! 120: if (c == ':') ! 121: { ! 122: *cp = '\0'; ! 123: i++; ! 124: field[i] = cp + 1; ! 125: } ! 126: } ! 127: ! 128: return (i); ! 129: } ! 130: /* ! 131: ** NEXT -- return successor to code. ! 132: */ ! 133: ! 134: next(code) ! 135: char code[2]; ! 136: { ! 137: register char *c; ! 138: register char a, b; ! 139: ! 140: c = code; ! 141: a = c[0]; ! 142: b = c[1]; ! 143: ! 144: if (++b > 'z') ! 145: { ! 146: b = '0'; ! 147: } ! 148: else if (b == '9' + 1) ! 149: { ! 150: b = 'a'; ! 151: if (a == 'Z') ! 152: { ! 153: write(2, "Too many users\n", 15); ! 154: exit(-1); ! 155: } ! 156: if (++a > 'z') ! 157: { ! 158: a = 'A'; ! 159: } ! 160: } ! 161: ! 162: c[0] = a; ! 163: c[1] = b; ! 164: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.