diff options
-rw-r--r-- | lib/libc/gen/Makefile.inc | 12 | ||||
-rw-r--r-- | lib/libc/gen/getnetgrent.c | 135 | ||||
-rw-r--r-- | lib/libc/gen/stringlist.c | 121 |
3 files changed, 157 insertions, 111 deletions
diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc index 98edb860442..3a352bf015d 100644 --- a/lib/libc/gen/Makefile.inc +++ b/lib/libc/gen/Makefile.inc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.inc,v 1.7 1996/09/15 23:16:13 tholo Exp $ +# $OpenBSD: Makefile.inc,v 1.8 1997/02/02 23:27:53 millert Exp $ # gen sources .PATH: ${.CURDIR}/arch/${MACHINE_ARCH}/gen ${.CURDIR}/gen @@ -13,11 +13,11 @@ SRCS+= alarm.c assert.c clock.c closedir.c confstr.c ctermid.c \ nice.c nlist.c opendir.c pause.c popen.c psignal.c pwcache.c raise.c \ readdir.c rewinddir.c scandir.c seekdir.c setdomainname.c \ sethostname.c setjmperr.c setmode.c setproctitle.c siginterrupt.c \ - siglist.c signal.c signame.c sigsetops.c sleep.c sysconf.c sysctl.c \ - syslog.c telldir.c time.c times.c timezone.c tolower_.c ttyname.c \ - ttyslot.c toupper_.c ualarm.c uname.c unvis.c usleep.c utime.c \ - valloc.c vis.c wait.c wait3.c waitpid.c warn.c warnx.c vwarn.c \ - vwarnx.c verr.c verrx.c + siglist.c signal.c signame.c sigsetops.c sleep.c stringlist.c \ + sysconf.c sysctl.c syslog.c telldir.c time.c times.c timezone.c \ + tolower_.c ttyname.c ttyslot.c toupper_.c ualarm.c uname.c unvis.c \ + usleep.c utime.c valloc.c vis.c wait.c wait3.c waitpid.c warn.c \ + warnx.c vwarn.c vwarnx.c verr.c verrx.c # indirect reference stubs, to be removed soon. SRCS+= _err.c _errx.c _sys_errlist.c _sys_nerr.c _sys_siglist.c \ diff --git a/lib/libc/gen/getnetgrent.c b/lib/libc/gen/getnetgrent.c index 661f457b4fe..137f9bbd616 100644 --- a/lib/libc/gen/getnetgrent.c +++ b/lib/libc/gen/getnetgrent.c @@ -1,3 +1,6 @@ +/* $OpenBSD: getnetgrent.c,v 1.4 1997/02/02 23:27:52 millert Exp $ */ +/* $NetBSD: getnetgrent.c,v 1.11 1997/01/17 07:26:19 lukem Exp $ */ + /* * Copyright (c) 1994 Christos Zoulas * All rights reserved. @@ -30,7 +33,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static char *rcsid = "$OpenBSD: getnetgrent.c,v 1.3 1996/08/19 08:23:49 tholo Exp $"; +static char *rcsid = "$OpenBSD: getnetgrent.c,v 1.4 1997/02/02 23:27:52 millert Exp $"; #endif /* LIBC_SCCS and not lint */ #include <sys/types.h> @@ -42,7 +45,11 @@ static char *rcsid = "$OpenBSD: getnetgrent.c,v 1.3 1996/08/19 08:23:49 tholo Ex #include <err.h> #include <ctype.h> #include <stdlib.h> +#include <stringlist.h> #include <db.h> +#ifdef YP +#include <rpcsvc/ypclnt.h> +#endif #define _NG_STAR(s) (((s) == NULL || *(s) == '\0') ? _ngstar : s) #define _NG_EMPTY(s) ((s) == NULL ? "" : s) @@ -54,22 +61,13 @@ static struct netgroup *_nghead = (struct netgroup *)NULL; static struct netgroup *_nglist = (struct netgroup *)NULL; 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 struct netgroup *getnetgroup __P((char **)); 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 *, const char *, struct netgroup *)); -static int in_find __P((char *, struct stringlist *, +static int in_find __P((char *, StringList *, char *, const char *, const char *, const char *)); static char *in_lookup1 __P((const char *, const char *, @@ -78,79 +76,6 @@ static int in_lookup __P((const char *, const char *, 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 * trailing blanks and advancing the pointer */ @@ -367,9 +292,9 @@ _ng_parse(p, name, ng) */ static void addgroup(ypdom, sl, grp) - char *ypdom; - struct stringlist *sl; - char *grp; + char *ypdom; + StringList *sl; + char *grp; { char *line, *p; struct netgroup *ng; @@ -379,12 +304,12 @@ addgroup(ypdom, sl, grp) (void) fprintf(stderr, "addgroup(%s)\n", grp); #endif /* check for cycles */ - if (_ng_sl_find(sl, grp) != NULL) { + if (sl_find(sl, grp) != NULL) { free(grp); _warnx("netgroup: Cycle in group `%s'", grp); return; } - _ng_sl_add(sl, grp); + sl_add(sl, grp); /* Lookup this netgroup */ if (!lookup(ypdom, grp, &line, _NG_KEYBYNAME)) @@ -453,12 +378,12 @@ in_check(host, user, domain, ng) */ static int in_find(ypdom, sl, grp, host, user, domain) - char *ypdom; - struct stringlist *sl; - char *grp; - const char *host; - const char *user; - const char *domain; + char *ypdom; + StringList *sl; + char *grp; + const char *host; + const char *user; + const char *domain; { char *line, *p; int i; @@ -469,12 +394,12 @@ in_find(ypdom, sl, grp, host, user, domain) (void) fprintf(stderr, "in_find(%s)\n", grp); #endif /* check for cycles */ - if (_ng_sl_find(sl, grp) != NULL) { + if (sl_find(sl, grp) != NULL) { free(grp); _warnx("netgroup: Cycle in group `%s'", grp); return 0; } - _ng_sl_add(sl, grp); + sl_add(sl, grp); /* Lookup this netgroup */ if (!lookup(ypdom, grp, &line, _NG_KEYBYNAME)) @@ -649,11 +574,11 @@ void setnetgrent(ng) const char *ng; { - struct stringlist *sl = _ng_sl_init(); + StringList *sl = sl_init(); #ifdef YP - char *line; + char *line; #endif - char *ng_copy, *ypdom = NULL; + char *ng_copy, *ypdom = NULL; /* Cleanup any previous storage */ if (_nghead != NULL) @@ -677,7 +602,7 @@ setnetgrent(ng) _err(1, _ngoomem); addgroup(ypdom, sl, ng_copy); _nghead = _nglist; - _ng_sl_free(sl, 1); + sl_free(sl, 1); } @@ -709,7 +634,7 @@ innetgr(grp, host, user, domain) char *line; #endif int found; - struct stringlist *sl; + StringList *sl; if (_ng_db == NULL) _ng_db = dbopen(_PATH_NETGROUP_DB, O_RDONLY, 0, DB_HASH, NULL); @@ -740,9 +665,9 @@ innetgr(grp, host, user, domain) return 0; /* Too bad need the slow recursive way */ - sl = _ng_sl_init(); + sl = sl_init(); found = in_find(ypdom, sl, strdup(grp), host, user, domain); - _ng_sl_free(sl, 1); + sl_free(sl, 1); return found; } diff --git a/lib/libc/gen/stringlist.c b/lib/libc/gen/stringlist.c new file mode 100644 index 00000000000..372ecad8fb2 --- /dev/null +++ b/lib/libc/gen/stringlist.c @@ -0,0 +1,121 @@ +/* $OpenBSD: stringlist.c,v 1.1 1997/02/02 23:27:53 millert Exp $ */ +/* $NetBSD: stringlist.c,v 1.2 1997/01/17 07:26:20 lukem Exp $ */ + +/* + * Copyright (c) 1994 Christos Zoulas + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Christos Zoulas. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char *rcsid = "$NetBSD: stringlist.c,v 1.2 1997/01/17 07:26:20 lukem Exp $"; +#endif /* LIBC_SCCS and not lint */ + +#include <stdio.h> +#include <string.h> +#include <err.h> +#include <stdlib.h> +#include <stringlist.h> + +#define _SL_CHUNKSIZE 20 + +/* + * sl_init(): Initialize a string list + */ +StringList * +sl_init() +{ + StringList *sl = malloc(sizeof(StringList)); + if (sl == NULL) + _err(1, "stringlist: %m"); + + sl->sl_cur = 0; + sl->sl_max = _SL_CHUNKSIZE; + sl->sl_str = malloc(sl->sl_max * sizeof(char *)); + if (sl->sl_str == NULL) + _err(1, "stringlist: %m"); + return (sl); +} + + +/* + * sl_add(): Add an item to the string list + */ +void +sl_add(sl, name) + StringList *sl; + char *name; +{ + if (sl->sl_cur == sl->sl_max - 1) { + sl->sl_max += _SL_CHUNKSIZE; + sl->sl_str = realloc(sl->sl_str, sl->sl_max * sizeof(char *)); + if (sl->sl_str == NULL) + _err(1, "stringlist: %m"); + } + sl->sl_str[sl->sl_cur++] = name; +} + + +/* + * sl_free(): Free a stringlist + */ +void +sl_free(sl, all) + StringList *sl; + int all; +{ + size_t i; + + if (sl == NULL) + return; + if (sl->sl_str) { + 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 * +sl_find(sl, name) + 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); +} |