X-Git-Url: https://git.distorted.org.uk/~mdw/become/blobdiff_plain/dd9ab0787fef016da7a4fea27d387ceaf2d90beb..af4f4d6a77aceba8e2d6f58d15e894df320e7c24:/src/class.c diff --git a/src/class.c b/src/class.c index 31d6de6..7285df7 100644 --- a/src/class.c +++ b/src/class.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: class.c,v 1.8 1998/06/08 11:20:36 mdw Exp $ + * $Id: class.c,v 1.10 2004/04/08 01:36:20 mdw Exp $ * * Handling classes of things nicely * @@ -26,35 +26,6 @@ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: class.c,v $ - * Revision 1.8 1998/06/08 11:20:36 mdw - * (class__wildMatch) Fixed bug which overran pattern string, spotted by - * Mark Rison. - * - * Revision 1.7 1998/01/12 16:45:50 mdw - * Fix copyright date. - * - * Revision 1.6 1997/09/17 10:14:56 mdw - * Complete rewrite to support class trees. Makes the behaviour of the set - * operators much more logical. - * - * Revision 1.5 1997/08/20 16:16:13 mdw - * Patch memory leak. Don't try to trace when tracing's turned off. - * - * Revision 1.4 1997/08/07 09:56:37 mdw - * (Log entry for previous version is bogus.) Minor changes to host - * checking code. - * - * Revision 1.2 1997/08/04 10:24:21 mdw - * Sources placed under CVS control. - * - * Revision 1.1 1997/07/21 13:47:52 mdw - * Initial revision - * - */ - /*----- Header files ------------------------------------------------------*/ /* --- ANSI headers --- */ @@ -74,12 +45,16 @@ #include +/* --- mLib headers --- */ + +#include +#include +#include + /* --- Local headers --- */ #include "become.h" #include "class.h" -#include "sym.h" -#include "utils.h" /*----- Global variables --------------------------------------------------*/ @@ -213,7 +188,7 @@ void class_dec(class_node *c) free(c->v.s); break; case clNode_hash: - sym_destroyTable(&c->v.t); + sym_destroy(&c->v.t); break; case clNode_union: case clNode_diff: @@ -249,7 +224,7 @@ class_node *class_mod(class_node *c) cc->ref = 1; switch (c->type & clNode_mask) { case clNode_any: - die("internal error: class_mod called on non-modifiable class node"); + die(1, "internal: class_mod called on non-modifiable class node"); break; case clNode_immed: @@ -263,8 +238,8 @@ class_node *class_mod(class_node *c) sym_iter i; sym_base *b; - sym_createTable(&cc->v.t); - for (sym_createIter(&i, &c->v.t); (b = sym_next(&i)) != 0; ) + sym_create(&cc->v.t); + for (sym_mkiter(&i, &c->v.t); (b = sym_next(&i)) != 0; ) sym_find(&cc->v.t, b->name, b->len, sizeof(sym_base), 0); } break; @@ -300,9 +275,9 @@ static class_node *class__hashify(class_node *c) /* --- Some sanity checking --- */ if (~c->type & clFlag_friendly) - die("internal error: class__hashify can't hashify unfriendly nodes"); + die(1, "internal: class__hashify can't hashify unfriendly nodes"); if ((c->type & clNode_mask) != clNode_immed) - die("internal error: class__hashify can't hashify non-immediate nodes"); + die(1, "internal: class__hashify can't hashify non-immediate nodes"); /* --- Split off a private copy of the node --- */ @@ -312,11 +287,11 @@ static class_node *class__hashify(class_node *c) if (c->type & clType_user) { uid_t u = c->v.u; - sym_createTable(&c->v.t); + sym_create(&c->v.t); sym_find(&c->v.t, (char *)&u, sizeof(u), sizeof(sym_base), 0); } else { char *s = c->v.s; - sym_createTable(&c->v.t); + sym_create(&c->v.t); sym_find(&c->v.t, s, -1, sizeof(sym_base), 0); free(s); } @@ -465,7 +440,7 @@ class_node *class__binop(class_node *l, class_node *r, int op) sym_iter i; sym_base *b; - for (sym_createIter(&i, &r->v.t); (b = sym_next(&i)) != 0; ) + for (sym_mkiter(&i, &r->v.t); (b = sym_next(&i)) != 0; ) sym_find(&l->v.t, b->name, b->len, sizeof(sym_base), 0); } break; @@ -486,7 +461,7 @@ class_node *class__binop(class_node *l, class_node *r, int op) sym_iter i; sym_base *b, *f; - for (sym_createIter(&i, &r->v.t); (b = sym_next(&i)) != 0; ) { + for (sym_mkiter(&i, &r->v.t); (b = sym_next(&i)) != 0; ) { if ((f = sym_find(&l->v.t, b->name, b->len, 0, 0)) != 0) sym_remove(&l->v.t, f); } @@ -515,7 +490,7 @@ class_node *class__binop(class_node *l, class_node *r, int op) sym_iter i; sym_base *b; - for (sym_createIter(&i, &l->v.t); (b = sym_next(&i)) != 0; ) { + for (sym_mkiter(&i, &l->v.t); (b = sym_next(&i)) != 0; ) { if (!sym_find(&r->v.t, b->name, b->len, 0, 0)) sym_remove(&l->v.t, b); } @@ -535,7 +510,7 @@ class_node *class__binop(class_node *l, class_node *r, int op) class_dec(r); - sym_createIter(&i, &l->v.t); + sym_mkiter(&i, &l->v.t); if ((b = sym_next(&i)) == 0) { class_dec(l); return (class_none); @@ -543,12 +518,12 @@ class_node *class__binop(class_node *l, class_node *r, int op) if (!sym_next(&i)) { if (type & clType_user) { uid_t u = *(uid_t *)b->name; - sym_destroyTable(&l->v.t); + sym_destroy(&l->v.t); l->type = (l->type & ~clNode_mask) | clNode_immed; l->v.u = u; } else { char *s = xstrdup(b->name); - sym_destroyTable(&l->v.t); + sym_destroy(&l->v.t); l->type = (l->type & ~clNode_mask) | clNode_immed; l->v.s = s; } @@ -772,7 +747,7 @@ int class_matchUser(class_node *c, uid_t u) } } - die("internal error: can't get here in class_matchUser"); + die(1, "internal: can't get here in class_matchUser"); return (0); } @@ -820,7 +795,7 @@ int class_matchCommand(class_node *c, const char *s) } } - die("internal error: can't get here in class_matchCommand"); + die(1, "internal: can't get here in class_matchCommand"); return (0); } @@ -888,7 +863,7 @@ static int class__doMatchHost(class_node *c, const char *ip, } } - die("internal error: can't get here in class_matchUser"); + die(1, "internal: can't get here in class_matchUser"); return (0); } @@ -976,7 +951,7 @@ void class_dump(class_node *c, int indent) sym_iter i; sym_base *b; - for (sym_createIter(&i, &c->v.t); (b = sym_next(&i)) != 0; ) { + for (sym_mkiter(&i, &c->v.t); (b = sym_next(&i)) != 0; ) { if (c->type & clType_user) { trace(TRACE_RULE, "rule:%*s user %lu", indent * 2, "", (unsigned long)*(uid_t *)b->name);