chiark / gitweb /
Use rewritten class handler. Support `none' class.
authormdw <mdw>
Wed, 17 Sep 1997 10:26:11 +0000 (10:26 +0000)
committermdw <mdw>
Wed, 17 Sep 1997 10:26:11 +0000 (10:26 +0000)
src/name.c
src/name.h

index 02e02417fedb616fcfd8390bbad7c0bb336b4d38..91f045ad515ca67c60b4fd40511405138b57dd7b 100644 (file)
@@ -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
  *
 /*----- 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
 }  
index 85e170e241f6bbd5383deb9350753e0c8deb581b..bc24d650d3d8c841a6fa01fc672ec9727d0eb267 100644 (file)
@@ -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
  *
 /*----- 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 ------------------------------------------------*/