[BACK]Return to getnetgrent.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / gen

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libc/gen/getnetgrent.c between version 1.10 and 1.11

version 1.10, 1996/12/20 20:46:19 version 1.11, 1997/01/17 07:26:19
Line 44  static char *rcsid = "$NetBSD$";
Line 44  static char *rcsid = "$NetBSD$";
 #include <err.h>  #include <err.h>
 #include <ctype.h>  #include <ctype.h>
 #include <stdlib.h>  #include <stdlib.h>
   #include <stringlist.h>
 #include <db.h>  #include <db.h>
 #ifdef YP  #ifdef YP
 #include <rpcsvc/ypclnt.h>  #include <rpcsvc/ypclnt.h>
Line 59  static struct netgroup *_nghead = (struc
Line 60  static struct netgroup *_nghead = (struc
 static struct netgroup *_nglist = (struct netgroup *)NULL;  static struct netgroup *_nglist = (struct netgroup *)NULL;
 static DB *_ng_db;  static DB *_ng_db;
   
 /*  
  * Simple string list  
  */  
 struct stringlist {  
         char            **sl_str;  
         size_t            sl_max;  
         size_t            sl_cur;  
 };  
   
 static int              getstring __P((char **, int, char **));  static int              getstring __P((char **, int, char **));
 static struct netgroup  *getnetgroup __P((char **));  static struct netgroup  *getnetgroup __P((char **));
 static int               lookup __P((const char *, char *, char **, int));  static int               lookup __P((const char *, char *, char **, int));
 static void              addgroup __P((char *, struct stringlist *, char *));  static void              addgroup __P((char *, StringList *, char *));
 static int               in_check __P((const char *, const char *,  static int               in_check __P((const char *, const char *,
                                        const char *, struct netgroup *));                                         const char *, struct netgroup *));
 static int               in_find __P((char *, struct stringlist *,  static int               in_find __P((char *, StringList *,
                                       char *, const char *,                                        char *, const char *,
                                       const char *, const char *));                                        const char *, const char *));
 static char             *in_lookup1 __P((const char *, const char *,  static char             *in_lookup1 __P((const char *, const char *,
Line 83  static int   in_lookup __P((const char *
Line 75  static int   in_lookup __P((const char *
                                         const char *, const char *, int));                                          const char *, const char *, int));
   
 /*  /*
  * _ng_sl_init(): Initialize a string list  
  */  
 struct stringlist *  
 _ng_sl_init()  
 {  
         struct stringlist *sl = malloc(sizeof(struct stringlist));  
         if (sl == NULL)  
                 _err(1, _ngoomem);  
   
         sl->sl_cur = 0;  
         sl->sl_max = 20;  
         sl->sl_str = malloc(sl->sl_max * sizeof(char *));  
         if (sl->sl_str == NULL)  
                 _err(1, _ngoomem);  
         return sl;  
 }  
   
   
 /*  
  * _ng_sl_add(): Add an item to the string list  
  */  
 void  
 _ng_sl_add(sl, name)  
         struct stringlist       *sl;  
         char                    *name;  
 {  
         if (sl->sl_cur == sl->sl_max - 1) {  
                 sl->sl_max += 20;  
                 sl->sl_str = realloc(sl->sl_str, sl->sl_max * sizeof(char *));  
                 if (sl->sl_str == NULL)  
                         _err(1, _ngoomem);  
         }  
         sl->sl_str[sl->sl_cur++] = name;  
 }  
   
   
 /*  
  * _ng_sl_free(): Free a stringlist  
  */  
 void  
 _ng_sl_free(sl, all)  
         struct stringlist       *sl;  
         int                      all;  
 {  
         size_t  i;  
   
         if (all)  
                 for (i = 0; i < sl->sl_cur; i++)  
                         free(sl->sl_str[i]);  
         free(sl->sl_str);  
         free(sl);  
 }  
   
   
 /*  
  * sl_find(): Find a name in the string list  
  */  
 char *  
 _ng_sl_find(sl, name)  
         struct stringlist       *sl;  
         char                    *name;  
 {  
         size_t  i;  
   
         for (i = 0; i < sl->sl_cur; i++)  
                 if (strcmp(sl->sl_str[i], name) == 0)  
                         return sl->sl_str[i];  
   
         return NULL;  
 }  
   
   
 /*  
  * getstring(): Get a string delimited by the character, skipping leading and   * getstring(): Get a string delimited by the character, skipping leading and
  * trailing blanks and advancing the pointer   * trailing blanks and advancing the pointer
  */   */
Line 372  _ng_parse(p, name, ng)
Line 291  _ng_parse(p, name, ng)
  */   */
 static void  static void
 addgroup(ypdom, sl, grp)  addgroup(ypdom, sl, grp)
         char                    *ypdom;          char            *ypdom;
         struct stringlist       *sl;          StringList      *sl;
         char                    *grp;          char            *grp;
 {  {
         char            *line, *p;          char            *line, *p;
         struct netgroup *ng;          struct netgroup *ng;
Line 384  addgroup(ypdom, sl, grp)
Line 303  addgroup(ypdom, sl, grp)
         (void) fprintf(stderr, "addgroup(%s)\n", grp);          (void) fprintf(stderr, "addgroup(%s)\n", grp);
 #endif  #endif
         /* check for cycles */          /* check for cycles */
         if (_ng_sl_find(sl, grp) != NULL) {          if (sl_find(sl, grp) != NULL) {
                 free(grp);                  free(grp);
                 _warnx("netgroup: Cycle in group `%s'", grp);                  _warnx("netgroup: Cycle in group `%s'", grp);
                 return;                  return;
         }          }
         _ng_sl_add(sl, grp);          sl_add(sl, grp);
   
         /* Lookup this netgroup */          /* Lookup this netgroup */
         if (!lookup(ypdom, grp, &line, _NG_KEYBYNAME))          if (!lookup(ypdom, grp, &line, _NG_KEYBYNAME))
Line 458  in_check(host, user, domain, ng)
Line 377  in_check(host, user, domain, ng)
  */   */
 static int  static int
 in_find(ypdom, sl, grp, host, user, domain)  in_find(ypdom, sl, grp, host, user, domain)
         char                    *ypdom;          char            *ypdom;
         struct stringlist       *sl;          StringList      *sl;
         char                    *grp;          char            *grp;
         const char              *host;          const char      *host;
         const char              *user;          const char      *user;
         const char              *domain;          const char      *domain;
 {  {
         char            *line, *p;          char            *line, *p;
         int              i;          int              i;
Line 474  in_find(ypdom, sl, grp, host, user, doma
Line 393  in_find(ypdom, sl, grp, host, user, doma
         (void) fprintf(stderr, "in_find(%s)\n", grp);          (void) fprintf(stderr, "in_find(%s)\n", grp);
 #endif  #endif
         /* check for cycles */          /* check for cycles */
         if (_ng_sl_find(sl, grp) != NULL) {          if (sl_find(sl, grp) != NULL) {
                 free(grp);                  free(grp);
                 _warnx("netgroup: Cycle in group `%s'", grp);                  _warnx("netgroup: Cycle in group `%s'", grp);
                 return 0;                  return 0;
         }          }
         _ng_sl_add(sl, grp);          sl_add(sl, grp);
   
         /* Lookup this netgroup */          /* Lookup this netgroup */
         if (!lookup(ypdom, grp, &line, _NG_KEYBYNAME))          if (!lookup(ypdom, grp, &line, _NG_KEYBYNAME))
Line 654  void
Line 573  void
 setnetgrent(ng)  setnetgrent(ng)
         const char      *ng;          const char      *ng;
 {  {
         struct stringlist       *sl = _ng_sl_init();          StringList      *sl = sl_init();
 #ifdef YP  #ifdef YP
         char                    *line;          char            *line;
 #endif  #endif
         char                    *ng_copy, *ypdom = NULL;          char            *ng_copy, *ypdom = NULL;
   
         /* Cleanup any previous storage */          /* Cleanup any previous storage */
         if (_nghead != NULL)          if (_nghead != NULL)
Line 682  setnetgrent(ng)
Line 601  setnetgrent(ng)
                 _err(1, _ngoomem);                  _err(1, _ngoomem);
         addgroup(ypdom, sl, ng_copy);          addgroup(ypdom, sl, ng_copy);
         _nghead = _nglist;          _nghead = _nglist;
         _ng_sl_free(sl, 1);          sl_free(sl, 1);
 }  }
   
   
Line 714  innetgr(grp, host, user, domain)
Line 633  innetgr(grp, host, user, domain)
         char    *line;          char    *line;
 #endif  #endif
         int      found;          int      found;
         struct stringlist *sl;          StringList *sl;
   
         if (_ng_db == NULL)          if (_ng_db == NULL)
                 _ng_db = dbopen(_PATH_NETGROUP_DB, O_RDONLY, 0, DB_HASH, NULL);                  _ng_db = dbopen(_PATH_NETGROUP_DB, O_RDONLY, 0, DB_HASH, NULL);
Line 745  innetgr(grp, host, user, domain)
Line 664  innetgr(grp, host, user, domain)
                 return 0;                  return 0;
   
         /* Too bad need the slow recursive way */          /* Too bad need the slow recursive way */
         sl = _ng_sl_init();          sl = sl_init();
         found = in_find(ypdom, sl, strdup(grp), host, user, domain);          found = in_find(ypdom, sl, strdup(grp), host, user, domain);
         _ng_sl_free(sl, 1);          sl_free(sl, 1);
   
         return found;          return found;
 }  }

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.11

CVSweb <webmaster@jp.NetBSD.org>