X-Git-Url: https://git.distorted.org.uk/~mdw/become/blobdiff_plain/fe59d3d70fc7337b7a50c4fcff72d20967672157..f60a34341fee6aafd5b878dce23b80af7c60064d:/src/class.c diff --git a/src/class.c b/src/class.c index 31d6de6..f41e17e 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.9 2003/10/12 00:14:55 mdw Exp $ * * Handling classes of things nicely * @@ -29,6 +29,10 @@ /*----- Revision history --------------------------------------------------* * * $Log: class.c,v $ + * Revision 1.9 2003/10/12 00:14:55 mdw + * Major overhaul. Now uses DSA signatures rather than the bogus symmetric + * encrypt-and-hope thing. Integrated with mLib and Catacomb. + * * Revision 1.8 1998/06/08 11:20:36 mdw * (class__wildMatch) Fixed bug which overran pattern string, spotted by * Mark Rison. @@ -74,12 +78,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 +221,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 +257,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 +271,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 +308,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 +320,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 +473,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 +494,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 +523,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 +543,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 +551,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 +780,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 +828,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 +896,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 +984,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);