~mdw
/
become
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Major overhaul. Now uses DSA signatures rather than the bogus symmetric
[become]
/
src
/
class.c
diff --git
a/src/class.c
b/src/class.c
index
31d6de6
..
f41e17e
100644
(file)
--- a/
src/class.c
+++ b/
src/class.c
@@
-1,6
+1,6
@@
/* -*-c-*-
*
/* -*-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
*
*
* Handling classes of things nicely
*
@@
-29,6
+29,10
@@
/*----- Revision history --------------------------------------------------*
*
* $Log: class.c,v $
/*----- 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.
* 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 <netdb.h>
#include <netdb.h>
+/* --- mLib headers --- */
+
+#include <mLib/alloc.h>
+#include <mLib/report.h>
+#include <mLib/sym.h>
+
/* --- Local headers --- */
#include "become.h"
#include "class.h"
/* --- Local headers --- */
#include "become.h"
#include "class.h"
-#include "sym.h"
-#include "utils.h"
/*----- Global variables --------------------------------------------------*/
/*----- Global variables --------------------------------------------------*/
@@
-213,7
+221,7
@@
void class_dec(class_node *c)
free(c->v.s);
break;
case clNode_hash:
free(c->v.s);
break;
case clNode_hash:
- sym_destroy
Table
(&c->v.t);
+ sym_destroy(&c->v.t);
break;
case clNode_union:
case clNode_diff:
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:
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:
break;
case clNode_immed:
@@
-263,8
+271,8
@@
class_node *class_mod(class_node *c)
sym_iter i;
sym_base *b;
sym_iter i;
sym_base *b;
- sym_create
Table
(&cc->v.t);
- for (sym_
createI
ter(&i, &c->v.t); (b = sym_next(&i)) != 0; )
+ sym_create(&cc->v.t);
+ for (sym_
mki
ter(&i, &c->v.t); (b = sym_next(&i)) != 0; )
sym_find(&cc->v.t, b->name, b->len, sizeof(sym_base), 0);
} break;
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)
/* --- 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)
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 --- */
/* --- 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;
if (c->type & clType_user) {
uid_t u = c->v.u;
- sym_create
Table
(&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_find(&c->v.t, (char *)&u, sizeof(u), sizeof(sym_base), 0);
} else {
char *s = c->v.s;
- sym_create
Table
(&c->v.t);
+ sym_create(&c->v.t);
sym_find(&c->v.t, s, -1, sizeof(sym_base), 0);
free(s);
}
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;
sym_iter i;
sym_base *b;
- for (sym_
createI
ter(&i, &r->v.t); (b = sym_next(&i)) != 0; )
+ for (sym_
mki
ter(&i, &r->v.t); (b = sym_next(&i)) != 0; )
sym_find(&l->v.t, b->name, b->len, sizeof(sym_base), 0);
}
break;
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;
sym_iter i;
sym_base *b, *f;
- for (sym_
createI
ter(&i, &r->v.t); (b = sym_next(&i)) != 0; ) {
+ for (sym_
mki
ter(&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);
}
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;
sym_iter i;
sym_base *b;
- for (sym_
createI
ter(&i, &l->v.t); (b = sym_next(&i)) != 0; ) {
+ for (sym_
mki
ter(&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);
}
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);
class_dec(r);
- sym_
createI
ter(&i, &l->v.t);
+ sym_
mki
ter(&i, &l->v.t);
if ((b = sym_next(&i)) == 0) {
class_dec(l);
return (class_none);
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;
if (!sym_next(&i)) {
if (type & clType_user) {
uid_t u = *(uid_t *)b->name;
- sym_destroy
Table
(&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);
l->type = (l->type & ~clNode_mask) | clNode_immed;
l->v.u = u;
} else {
char *s = xstrdup(b->name);
- sym_destroy
Table
(&l->v.t);
+ sym_destroy(&l->v.t);
l->type = (l->type & ~clNode_mask) | clNode_immed;
l->v.s = s;
}
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);
}
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);
}
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);
}
return (0);
}
@@
-976,7
+984,7
@@
void class_dump(class_node *c, int indent)
sym_iter i;
sym_base *b;
sym_iter i;
sym_base *b;
- for (sym_
createI
ter(&i, &c->v.t); (b = sym_next(&i)) != 0; ) {
+ for (sym_
mki
ter(&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);
if (c->type & clType_user) {
trace(TRACE_RULE, "rule:%*s user %lu",
indent * 2, "", (unsigned long)*(uid_t *)b->name);