-#ifdef DO_KERBEROS
- else if (!strcmp(name, "KERBEROS")) {
- if (!(u = (struct entry *)hash_lookup(strings, id))) {
- char *p;
-
- EXEC SQL SELECT string INTO :string
- FROM strings WHERE string_id = :id;
-
- aid = 0;
- strtrim(string);
-
- if (p = (char *)index(string, '@')) {
- *p = 0;
- if (strcmp(p+1, "ATHENA.MIT.EDU")) aid = -1;
- } else aid = -1;
-
- if ((p = (char *)index(string, '.')) && (p-string) < 9 &&
- !strcmp(p+1, "root"))
- {
- strncpy(name, string, p-string);
- name[p-string] = 0;
- } else aid = -1;
-
- if (aid == 0) {
- EXEC SQL DECLARE k_cursor2 CURSOR FOR
- SELECT unix_uid, status
- FROM users
- WHERE login = :name
- ORDER BY unix_uid;
- EXEC SQL OPEN k_cursor2;
- while (1) {
- if (sqlca.sqlcode) break;
- EXEC SQL FETCH k_cursor2 INTO :lid, :ustatus;
- if (ustatus==1 || ustatus==2) aid = lid+65536;
- }
- EXEC SQL CLOSE k_cursor2;
- }
-
- if (aid > 0) {
- if (FindByID(0,aid))
- status = PRIDEXIST;
- else
- status = CreateEntry(0, string, &aid, 1 /*idflag*/,
- 0 /*gflag*/, SYSADMINID /*oid*/,
- SYSADMINID /*cid */);
- if (status) {
- fprintf(stderr, "Error adding %s (id %d): %s\n",
- string, aid, error_message(status));
- if (status != PRIDEXIST) aid = 0;
- }
- } else
- aid = 0;
-
- u = (struct entry *)malloc(sizeof(struct entry));
- u->id = aid;
- u->members = 0;
- hash_store(strings, id, u);
- if (aid) kcount++;
- }
- if (u->id == 0) continue;
-
- m = (struct member *)malloc(sizeof(struct member));
- m->user = u;
- m->group = g;
- m->unext = u->members;
- m->gnext = g->members;
- u->members = g->members = m;
- mcount++;
- }
-#endif