(class__wildMatch) Fixed bug which overran pattern string, spotted by
[become] / src / userdb.c
index db5e44b..05ace82 100644 (file)
@@ -1,10 +1,10 @@
 /* -*-c-*-
  *
- * $Id: userdb.c,v 1.4 1997/08/20 16:24:58 mdw Exp $
+ * $Id: userdb.c,v 1.7 1998/04/23 13:27:46 mdw Exp $
  *
  * User database management
  *
- * (c) 1997 EBI
+ * (c) 1998 EBI
  */
 
 /*----- Licensing notice --------------------------------------------------*
 /*----- Revision history --------------------------------------------------*
  *
  * $Log: userdb.c,v $
- * Revision 1.4  1997/08/20 16:24:58  mdw
+ * Revision 1.7  1998/04/23 13:27:46  mdw
+ * Switch to using the ypstuff interface to YP server.
+ *
+ * Revision 1.6  1998/01/12 16:46:33  mdw
+ * Fix copyright date.
+ *
+ * Revision 1.5  1997/09/17  10:24:08  mdw
+ * Use `uid_t' instead of `int' for uids and gids.  Not quite sure why I
+ * didn't do this before.
+ *
+ * Revision 1.4  1997/08/20  16:24:58  mdw
  * Patch memory leak.  Rename `userdb_reinit' to `userdb_end' for more
  * sensible restart.
  *
 
 #include <sys/types.h>
 
-#ifdef HAVE_YP
-#  include <rpc/rpc.h>
-#  include <rpcsvc/ypclnt.h>
-#  include <rpcsvc/yp_prot.h>
-#endif
-
 #include <grp.h>
 #include <pwd.h>
 #include <unistd.h>
@@ -77,6 +81,7 @@
 #include "sym.h"
 #include "userdb.h"
 #include "utils.h"
+#include "ypstuff.h"
 
 /*----- Type definitions --------------------------------------------------*/
 
@@ -131,7 +136,7 @@ static void userdb__createMap(userdb__map *m)
  *
  * Arguments:  @userdb__map *m@ = pointer to the map block
  *             @const char *name@ = pointer to the item's name
- *             @int id@ = the item's id number
+ *             @uid_t id@ = the item's id number
  *             @void *rec@ = pointer to the actual record
  *
  * Returns:    ---
@@ -141,7 +146,7 @@ static void userdb__createMap(userdb__map *m)
 
 static void userdb__addToMap(userdb__map *m,
                             const char *name,
-                            int id, void *rec)
+                            uid_t id, void *rec)
 {
   unsigned f;
   userdb__sym *s;
@@ -180,14 +185,14 @@ static void *userdb__byName(userdb__map *m, const char *name)
 /* --- @userdb__byId@ --- *
  *
  * Arguments:  @userdb__map *m@ = pointer to a map block
- *             @int id@ = id number to find
+ *             @uid_t id@ = id number to find
  *
  * Returns:    A pointer to the appropriate block, or zero if not found.
  *
  * Use:                Looks up an ID in a mapping, and returns the result.
  */
 
-static void *userdb__byId(userdb__map *m, int id)
+static void *userdb__byId(userdb__map *m, uid_t id)
 {
   userdb__sym *s = sym_find(&m->idmap, (char *)&id, sizeof(id), 0, 0);
   return (s ? s->rec : 0);
@@ -291,8 +296,8 @@ static struct passwd *userdb__buildUser(char *s)
 
   s = strtok(s, ":"); if (!s) goto tidy_0; pw->pw_name = xstrdup(s);
   s = strtok(0, ":"); if (!s) goto tidy_1; pw->pw_passwd = xstrdup(s);
-  s = strtok(0, ":"); if (!s) goto tidy_2; pw->pw_uid = atoi(s);
-  s = strtok(0, ":"); if (!s) goto tidy_2; pw->pw_gid = atoi(s);
+  s = strtok(0, ":"); if (!s) goto tidy_2; pw->pw_uid = (uid_t)atol(s);
+  s = strtok(0, ":"); if (!s) goto tidy_2; pw->pw_gid = (gid_t)atol(s);
   s = strtok(0, ":"); if (!s) goto tidy_2; pw->pw_gecos = xstrdup(s);
   s = strtok(0, ":"); if (!s) goto tidy_3; pw->pw_dir = xstrdup(s);
   s = strtok(0, ":"); if (!s) goto tidy_4; pw->pw_shell = xstrdup(s);
@@ -419,7 +424,7 @@ static struct group *userdb__buildGroup(char *s)
 
   s = strtok(s, ":"); if (!s) goto tidy_0; gr->gr_name = xstrdup(s);
   s = strtok(0, ":"); if (!s) goto tidy_1; gr->gr_passwd = xstrdup(s);
-  s = strtok(0, ":"); if (!s) goto tidy_2; gr->gr_gid = atoi(s);
+  s = strtok(0, ":"); if (!s) goto tidy_2; gr->gr_gid = (gid_t)atol(s);
 
   /* --- Find the start of the member list --- */
 
@@ -676,12 +681,10 @@ static int userdb__foreachGroup(int st, char *k, int ksz,
 
 void userdb_yp(void)
 {
-  char *ypdom;
-
   /* --- Bind to a server --- */
 
-  if (yp_get_default_domain(&ypdom) ||
-      yp_bind(ypdom))
+  ypstuff_bind();
+  if (!yp_domain)
     return;
 
   T( trace(TRACE_DEBUG, "debug: adding NIS users"); )
@@ -690,17 +693,15 @@ void userdb_yp(void)
 
   {
     static struct ypall_callback ucb = { userdb__foreachUser, 0 };
-    yp_all(ypdom, "passwd.byuid", &ucb);
+    yp_all(yp_domain, "passwd.byuid", &ucb);
   }
 
   /* --- Fetch the groups map --- */
 
   {
     static struct ypall_callback gcb = { userdb__foreachGroup, 0 };
-    yp_all(ypdom, "group.bygid", &gcb);
+    yp_all(yp_domain, "group.bygid", &gcb);
   }
-
-  yp_unbind(ypdom);
 }
 
 #else
@@ -809,20 +810,21 @@ void dumpit(const char *msg)
 int main(void)
 {
   ego("userdb-test");
-/*   traceon(stdout, TRACE_ALL); */
+  traceon(stdout, TRACE_ALL);
   userdb_init();
   userdb_local();
   userdb_yp();
-  printf("loaded (%lu)\n", track_memused());
+  dumpit("spong");
+/*  printf("loaded (%lu)\n", track_memused()); */
   getchar();
   for (;;) {
     userdb_end();
-    printf("cleared (%lu)\n", track_memused());
+/*    printf("cleared (%lu)\n", track_memused()); */
 /*    track_memlist(); */
     userdb_init();
     userdb_local();
     userdb_yp();
-    printf("reloaded (%lu)\n", track_memused());
+/*    printf("reloaded (%lu)\n", track_memused()); */
     getchar();
   }
   return (0);