X-Git-Url: https://git.distorted.org.uk/~mdw/become/blobdiff_plain/afce951bf49ff63b726810860a29ebeec534146c..af4f4d6a77aceba8e2d6f58d15e894df320e7c24:/src/netg.c diff --git a/src/netg.c b/src/netg.c index 87afce0..b92e83a 100644 --- a/src/netg.c +++ b/src/netg.c @@ -1,10 +1,10 @@ /* -*-c-*- * - * $Id: netg.c,v 1.1 1997/08/07 09:45:00 mdw Exp $ + * $Id: netg.c,v 1.7 2004/04/08 01:36:20 mdw Exp $ * * A local database of netgroups * - * (c) 1997 EBI + * (c) 1998 EBI */ /*----- Licensing notice --------------------------------------------------* @@ -26,14 +26,6 @@ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: netg.c,v $ - * Revision 1.1 1997/08/07 09:45:00 mdw - * New source file added to maintain a netgroups database. - * - */ - /*----- Header files ------------------------------------------------------*/ /* --- ANSI headers --- */ @@ -49,12 +41,6 @@ #include -#ifdef HAVE_YP -# include -# include -# include -#endif - #include #include @@ -63,14 +49,20 @@ #include #include +/* --- mLib headers --- */ + +#include +#include +#include +#include + /* --- Local headers --- */ #include "become.h" #include "config.h" #include "netg.h" -#include "sym.h" #include "userdb.h" -#include "utils.h" +#include "ypstuff.h" /*----- Type definitions --------------------------------------------------*/ @@ -338,6 +330,8 @@ static int netg__foreach(int st, char *k, int ksz, goto duff_restart; } + free(c->car.atom); + free(c); free(kc); free(vc); return (0); @@ -353,7 +347,7 @@ static int netg__foreach(int st, char *k, int ksz, * Use: Dumps the netgroup given. */ -#ifdef TRACING +#ifndef NTRACE static void netg__dumpGroup(netg__cons *c, int lev) { @@ -402,21 +396,23 @@ static void netg__dumpGroup(netg__cons *c, int lev) * Use: Dumps the netgroups table. */ +#ifndef NTRACE + static void netg__dump(void) { sym_iter i; netg__sym *sng; -#ifdef TRACING trace(TRACE_DEBUG, "debug: dumping netgroups file"); - for (sym_createIter(&i, &netg__table); (sng = sym_next(&i)) != 0; ) { + for (sym_mkiter(&i, &netg__table); (sng = sym_next(&i)) != 0; ) { trace(TRACE_DEBUG, "debug: netgroup `%s'...", sng->_base.name); sng->cons->f &= ~f_visit; netg__dumpGroup(sng->cons, 1); } -#endif } +#endif + /* --- @netg_iterate@, @netg_iterate_r@ --- * * * Arguments: @netg_iter *i@ = pointer to a netgroup iterator object @@ -427,7 +423,7 @@ static void netg__dump(void) */ void netg_iterate(void) { netg_iterate_r(&netg__iter); } -void netg_iterate_r(netg_iter *i) { sym_createIter(i, &netg__table); } +void netg_iterate_r(netg_iter *i) { sym_mkiter(i, &netg__table); } /* --- @netg_next@, @netg_next_r@ --- * * @@ -546,29 +542,23 @@ static void netg__breakCycle(netg__cons *c) void netg_init(void) { - char *ypdom; - /* --- Initialise my symbol table --- */ - sym_createTable(&netg__table); + sym_create(&netg__table); /* --- Bind myself unto a YP server --- */ - if (yp_get_default_domain(&ypdom) || - yp_bind(ypdom)) + ypstuff_bind(); + if (!yp_domain) return; /* --- Now try to read all the netgroup entries --- */ { static struct ypall_callback ncb = { netg__foreach, 0 }; - yp_all(ypdom, "netgroup", &ncb); + yp_all(yp_domain, "netgroup", &ncb); } - /* --- Unbind from the server --- */ - - yp_unbind(ypdom); - /* --- Dump the table --- */ IF_TRACING(TRACE_DEBUG, netg__dump(); ) @@ -581,7 +571,7 @@ void netg_init(void) netg__cons *c; netg__atom *a; - for (sym_createIter(&i, &netg__table); (sng = sym_next(&i)) != 0; ) { + for (sym_mkiter(&i, &netg__table); (sng = sym_next(&i)) != 0; ) { for (c = sng->cons; c; c = c->cdr) { if ((c->f & f_cons) == 0 && c->car.atom->n) { a = c->car.atom; @@ -606,9 +596,9 @@ void netg_init(void) sym_iter i; netg__sym *sng; - for (sym_createIter(&i, &netg__table); (sng = sym_next(&i)) != 0; ) + for (sym_mkiter(&i, &netg__table); (sng = sym_next(&i)) != 0; ) sng->cons->f &= ~f_uncycled; - for (sym_createIter(&i, &netg__table); (sng = sym_next(&i)) != 0; ) + for (sym_mkiter(&i, &netg__table); (sng = sym_next(&i)) != 0; ) netg__breakCycle(sng->cons); } @@ -617,16 +607,16 @@ void netg_init(void) IF_TRACING(TRACE_DEBUG, netg__dump(); ) } -/* --- @netg_reinit@ --- * +/* --- @netg_end@ --- * * * Arguments: --- * * Returns: --- * - * Use: Forces a re-read of the netgroups file. + * Use: Empties the netgroups database. */ -void netg_reinit(void) +void netg_end(void) { sym_iter i; netg__sym *sng; @@ -634,7 +624,7 @@ void netg_reinit(void) /* --- Remove all the old netgroups rubbish --- */ - for (sym_createIter(&i, &netg__table); (sng = sym_next(&i)) != 0; ) { + for (sym_mkiter(&i, &netg__table); (sng = sym_next(&i)) != 0; ) { c = sng->cons; while (c) { cc = c->cdr; @@ -643,6 +633,7 @@ void netg_reinit(void) if (c->car.atom->h) free(c->car.atom->h); if (c->car.atom->u) free(c->car.atom->u); if (c->car.atom->d) free(c->car.atom->d); + free(c->car.atom); } free(c); c = cc; @@ -650,9 +641,7 @@ void netg_reinit(void) sym_remove(&netg__table, sng); } - /* --- Now rebuild the world --- */ - - netg_init(); + sym_destroy(&netg__table); } /*----- Test driver -------------------------------------------------------*/ @@ -670,7 +659,7 @@ int main(void) { netg *n; ego("netg-test"); - traceon(stderr, TRACE_ALL); + trace_on(stderr, TRACE_ALL); netg_init(); for (netg_iterate(); (n = netg_next()) != 0; ) { fprintf(stderr, "netgroup %s\n", netg_name(n));