From b992d20a86be3e262be1c790738f0f5c2806bed7 Mon Sep 17 00:00:00 2001 From: Oliver Lehmann Date: Wed, 5 Apr 1989 09:39:16 +0000 Subject: [PATCH] ING_DB --- WEGA/contrib/ingres/dbs/src/sys/usersetup.c | 202 ++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 WEGA/contrib/ingres/dbs/src/sys/usersetup.c diff --git a/WEGA/contrib/ingres/dbs/src/sys/usersetup.c b/WEGA/contrib/ingres/dbs/src/sys/usersetup.c new file mode 100644 index 0000000..52d7c05 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/sys/usersetup.c @@ -0,0 +1,202 @@ +# include +# include "../conf/gen.h" +# include "../h/dbs.h" +# include "../h/aux.h" +# include "../h/bs.h" + +/* +** Initialize Users File From Passwd File +** +** Everyone in AA_PASSWD is entered into the AA_USERS. All +** users can access all databases. +** +** User codes are assigned sequentially. This should therefore +** probably be run once only, when DBS is first installed. +** Otherwise, usercodes can change mysteriously. +** +** The optional parameter replaces the root of the DBS subtree +** as found in AA_PASSWD. The DBS user must be installed +** (with that name) when usersetup is run. If this parameter +** is a minus ("-"), output goes to the standard output. +** +** The initialization file is initialized to "/.ql", +** where is the home directory in the AA_PASSWD. +*/ + +char *AApath; +char AA_USERS[] = "/sys/etc/users"; +# ifdef ESER_PSU +char AA_PASSWD[] = "/SYS/PASSWD"; +# else +char AA_PASSWD[] = "/etc/passwd"; +# endif + +main(argc, argv) +int argc; +char **argv; +{ + register int i; + char buf[MAXLINE + 1]; + char *pathname; + register char *code; + char *field[UF_NFIELDS]; +# ifdef SETBUF + char iobuf[BUFSIZ]; +# endif + register FILE *iop; + extern char *AAproc_name; + + AAproc_name = "USERSETUP"; + pathname = (char *) 0; + + code = "aa"; + if ((iop = fopen(AA_PASSWD, "r")) == (FILE *) 0) + AAsyserr(0, "/ETC/PASSWD nicht lesbar"); +# ifdef SETBUF + setbuf(iop, iobuf); +# endif + + /* scan for DBS in AA_PASSWD */ + while (fgetline(buf, MAXLINE, iop)) + { + i = decode(buf, field); + if (!AAsequal(USERDBS, field[PF_NAME])) + continue; + + /* check for enough fields for valid entry */ + if (i < PF_HOME) + AAsyserr(0, "Zu wenig Felder in dem Eintrag \"%s\"", buf); + + pathname = field[PF_HOME]; + + break; + } + + /* test for DBS entry found */ + if (!pathname) + AAsyserr(0, "%s ist kein eingetragener BS-Nutzer", USERDBS); + + /* get override pathname */ + if (argc > 1) + pathname = argv[1]; + AApath = pathname; + + /* rewind AA_PASSWD */ + if (fclose(iop)) + AAsyserr(22137); + if ((iop = fopen(AA_PASSWD, "r")) == (FILE *) 0) + AAsyserr(22138); +# ifdef SETBUF + setbuf(iop, iobuf); +# endif + + /* open output file as needed */ + if (pathname[0] != '-') + { + AAconcat(pathname, AA_USERS, buf); + if ((i = open(buf, 0)) >= 0) + AAsyserr(0, "Das Nutzerverzeichnis '%s' existiert bereits", buf); + if ((i = creat(buf, 0644)) < 0) + AAsyserr(22140, buf); + close(i); + if (freopen(buf, "w", stdout) == (FILE *) 0) + AAsyserr(22141, buf); + } + + while (fgetline(buf, MAXLINE, iop)) + { + i = decode(buf, field); + /* check for enough fields for valid entry */ + if (i < PF_HOME) + { + fprintf(stderr, "Zu wenig Felder in dem Eintrag \"%s\"\n", buf); + continue; + } + /* print username & code */ + printf("%s:%s:%s:%s:%s:::%s/.ql::\n", + field[PF_NAME], /* user name */ + code, + field[PF_UID], /* user id */ + field[PF_GID], /* user group */ + AAsequal(field[PF_NAME], USERDBS)? "177777": "000000", + field[PF_HOME]); /* working directory */ + next(code); + } + flush(); + sync(); +} + + +decode(buf, field) +char *buf; +char *field[]; +{ + register char *cp; + register int c; + register int i; + + field[PF_NAME] = buf; + for (i = 0, cp = buf; (c = *cp) != '\0'; cp++) + { + if (c == ':') + { + *cp = '\0'; + field[++i] = cp + 1; + } + } + + return (i); +} + + + + +next(code) +char code[2]; +{ + register char *c; + register int a; + register int b; + + c = code; + a = c[0]; + b = c[1]; + + if (++b == 'z' + 1) + b = '0'; +# ifdef EBCDIC + else if (b == 'i' + 1) + b = 'j'; + else if (b == 'r' + 1) + b = 's'; +# endif + else if (b == '9' + 1) + { + b = 'a'; + if (a++ == 'Z') + { + write(2, "Zu viele Nutzer\n", 16); + exit(-1); + } + if (a == 'z' + 1) + a = 'A'; +# ifdef EBCDIC + else if (a == 'i' + 1) + a = 'j'; + else if (a == 'r' + 1) + a = 's'; + else if (a == 'I' + 1) + a = 'J'; + else if (a == 'R' + 1) + a = 'S'; +# endif + } + + c[0] = a; + c[1] = b; +} + + +AAunlall() +{ +}