From 2e11036b730ebc95892951f5b03642fbc83e931b Mon Sep 17 00:00:00 2001 From: mdw Date: Wed, 17 Sep 1997 10:26:11 +0000 Subject: [PATCH] Use rewritten class handler. Support `none' class. --- src/name.c | 46 +++++++++++++++++++++++----------------------- src/name.h | 9 ++++++--- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/name.c b/src/name.c index 02e0241..91f045a 100644 --- a/src/name.c +++ b/src/name.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: name.c,v 1.4 1997/08/20 16:17:59 mdw Exp $ + * $Id: name.c,v 1.5 1997/09/17 10:26:11 mdw Exp $ * * Looking up of names in symbol tables * @@ -29,7 +29,10 @@ /*----- Revision history --------------------------------------------------* * * $Log: name.c,v $ - * Revision 1.4 1997/08/20 16:17:59 mdw + * Revision 1.5 1997/09/17 10:26:11 mdw + * Use rewritten class handler. Support `none' class. + * + * Revision 1.4 1997/08/20 16:17:59 mdw * Replace `name_reinit' by `name_end' for more sensible restart. * * Revision 1.3 1997/08/07 09:49:39 mdw @@ -99,12 +102,9 @@ static name *name__get(const char *p, unsigned type) { unsigned f; name *n = sym_find(&name__table, p, -1, sizeof(*n), &f); - if (!f) { - sym_table *t = xmalloc(sizeof(*t)); - sym_createTable(t); - n->c = class_create(type, t); - } - return (n->c->type == type ? n : 0); + if (!f) + n->c = 0; + return ((n->c && !(n->c->type & type)) ? 0 : n); } /* --- @name__sanitise@ --- * @@ -156,20 +156,20 @@ static void name__users(void) userdb_iterateUsers(); while ((pw = userdb_nextUser()) != 0) { name *n; - int u = pw->pw_uid; + uid_t u = pw->pw_uid; /* --- First, add the user to the table --- */ if (name__sanitise(pw->pw_name, buf, sizeof(buf)) && (n = name__get(buf, clType_user)) != 0) - sym_find(n->c->t, (char *)&u, sizeof(u), sizeof(sym_base), 0); + n->c = class_addUser(n->c, u); /* --- Now handle the user's default group --- */ if ((gr = userdb_groupById(pw->pw_gid)) != 0 && name__sanitise(gr->gr_name, buf, sizeof(buf)) && (n = name__get(buf, clType_user)) != 0) - sym_find(n->c->t, (char *)&u, sizeof(u), sizeof(sym_base), 0); + n->c = class_addUser(n->c, u); } } @@ -192,7 +192,6 @@ static void name__groups(void) userdb_iterateGroups(); while ((gr = userdb_nextGroup()) != 0) { name *n; - int u; if (name__sanitise(gr->gr_name, buf, sizeof(buf)) && (n = name__get(buf, clType_user)) != 0) { @@ -200,10 +199,8 @@ static void name__groups(void) /* --- Now add all of the members --- */ for (p = gr->gr_mem; *p; p++) { - if ((pw = userdb_userByName(*p)) != 0) { - u = pw->pw_uid; - sym_find(n->c->t, (char *)&u, sizeof(u), sizeof(sym_base), 0); - } + if ((pw = userdb_userByName(*p)) != 0) + n->c = class_addUser(n->c, pw->pw_uid); } } } @@ -269,7 +266,7 @@ static int name__scan(netg *n, const char *host, const char *user, memcpy(&in, h->h_addr, sizeof(in)); if ((a = inet_ntoa(in)) == 0) goto done_host; - sym_find(sc->h->c->t, a, -1, sizeof(sym_base), 0); + sc->h->c = class_addString(sc->h->c, a); done_host:; } @@ -277,7 +274,6 @@ static int name__scan(netg *n, const char *host, const char *user, if (sc->f & f_user && user) { struct passwd *pw; - int u; /* --- First ensure that I have a user class --- */ @@ -294,8 +290,7 @@ static int name__scan(netg *n, const char *host, const char *user, if ((pw = userdb_userByName(user)) == 0) goto done_user; - u = pw->pw_uid; - sym_find(sc->u->c->t, (char *)&u, sizeof(u), sizeof(sym_base), 0); + sc->u->c = class_addUser(sc->u->c, pw->pw_uid); done_user:; } @@ -354,9 +349,9 @@ void name_init(void) name__groups(); name__netgroups(); - /* --- Finally add in the `all' class --- * + /* --- Finally add in the `all' and `none' classes --- * * - * Do that now, to prevent it being overwritten by the above. + * Do that now, to prevent them being overwritten by the above. */ { @@ -367,6 +362,11 @@ void name_init(void) if (f) class_dec(n->c); n->c = class_all; + + n = sym_find(&name__table, "none", -1, sizeof(name), &f); + if (f) + class_dec(n->c); + n->c = class_none; } } @@ -438,7 +438,7 @@ void name_dump(void) trace(TRACE_DEBUG, "name: dumping names"); for (sym_createIter(&i, &name__table); (n = sym_next(&i)) != 0; ) { trace(TRACE_DEBUG, "name: dumping `%s'", n->base.name); - class_dump(n->c); + class_dump(n->c, 1); } #endif } diff --git a/src/name.h b/src/name.h index 85e170e..bc24d65 100644 --- a/src/name.h +++ b/src/name.h @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: name.h,v 1.3 1997/08/20 16:18:05 mdw Exp $ + * $Id: name.h,v 1.4 1997/09/17 10:26:11 mdw Exp $ * * Looking up of names in symbol tables * @@ -29,7 +29,10 @@ /*----- Revision history --------------------------------------------------* * * $Log: name.h,v $ - * Revision 1.3 1997/08/20 16:18:05 mdw + * Revision 1.4 1997/09/17 10:26:11 mdw + * Use rewritten class handler. Support `none' class. + * + * Revision 1.3 1997/08/20 16:18:05 mdw * Replace `name_reinit' by `name_end' for more sensible restart. * * Revision 1.2 1997/08/04 10:24:24 mdw @@ -61,7 +64,7 @@ typedef struct name { sym_base base; /* Base block for symbol table */ - classdef *c; /* Base class pointer */ + class_node *c; /* Base class pointer */ } name; /*----- Functions provided ------------------------------------------------*/ -- 2.11.0