/* -*-c-*-
*
- * $Id: rule.c,v 1.3 1997/08/20 16:22:36 mdw Exp $
+ * $Id: rule.c,v 1.6 1998/04/23 13:27:31 mdw Exp $
*
* Managing rule sets
*
- * (c) 1997 EBI
+ * (c) 1998 EBI
*/
/*----- Licensing notice --------------------------------------------------*
/*----- Revision history --------------------------------------------------*
*
* $Log: rule.c,v $
- * Revision 1.3 1997/08/20 16:22:36 mdw
+ * Revision 1.6 1998/04/23 13:27:31 mdw
+ * Export structure of the rule list, for `bcquery's benefit.
+ *
+ * Revision 1.5 1998/01/12 16:46:25 mdw
+ * Fix copyright date.
+ *
+ * Revision 1.4 1997/09/17 10:27:17 mdw
+ * Use rewritten class handler.
+ *
+ * Revision 1.3 1997/08/20 16:22:36 mdw
* Rename `rule_reinit' to `rule_end' for more sensible restart. Don't try
* to trace when tracing's turned off.
*
#include "userdb.h"
#include "utils.h"
-/*----- Type definitions --------------------------------------------------*/
-
-/* --- Rule block --- */
-
-typedef struct rule {
- struct rule *next; /* Next rule in the list */
- classdef *host; /* Hosts this rule applies to */
- classdef *from; /* From users in this class */
- classdef *to; /* To users in this class */
- classdef *cmd; /* To run commands in this class */
-} rule;
-
/*----- Static variables --------------------------------------------------*/
static rule *rule__list; /* List of rules */
}
}
+/* --- @rule_list@ --- *
+ *
+ * Arguments: ---
+ *
+ * Returns: The list of rules.
+ *
+ * Use: Returns the address of the first node in the rule list.
+ */
+
+rule *rule_list(void)
+{
+ return (rule__list);
+}
+
/* --- @rule_add@ --- *
*
- * Arguments: @classdef *host@ = class of hosts this rule applies to
- * @classdef *from@ = class of users allowed to change
- * @classdef *to@ = class of users allowed to be changed to
- * @classdef *cmd@ = class of commands allowed
+ * Arguments: @class_node *host@ = class of hosts this rule applies to
+ * @class_node *from@ = class of users allowed to change
+ * @class_node *to@ = class of users allowed to be changed to
+ * @class_node *cmd@ = class of commands allowed
*
* Returns: ---
*
* Use: Registers another rule.
*/
-void rule_add(classdef *host, classdef *from, classdef *to, classdef *cmd)
+void rule_add(class_node *host, class_node *from,
+ class_node *to, class_node *cmd)
{
rule *r = xmalloc(sizeof(*r));
IF_TRACING(TRACE_RULE, {
trace(TRACE_RULE, "rule: check against rule...");
- trace(TRACE_RULE, " from"); class_dump(rr->from);
- trace(TRACE_RULE, " to"); class_dump(rr->to);
- trace(TRACE_RULE, " cmd"); class_dump(rr->cmd);
- trace(TRACE_RULE, " host"); class_dump(rr->host);
+ trace(TRACE_RULE, "rule: from"); class_dump(rr->from, 2);
+ trace(TRACE_RULE, "rule: to"); class_dump(rr->to, 2);
+ trace(TRACE_RULE, "rule: cmd"); class_dump(rr->cmd, 2);
+ trace(TRACE_RULE, "rule: host"); class_dump(rr->host, 2);
})
/* --- Check the rule --- */
- if (class_userMatch(rr->from, r->from) &&
- class_userMatch(rr->to, r->to) &&
- class_commandMatch(rr->cmd, r->cmd) &&
- class_hostMatch(rr->host, r->host)) {
+ if (class_matchUser(rr->from, r->from) &&
+ class_matchUser(rr->to, r->to) &&
+ class_matchCommand(rr->cmd, r->cmd) &&
+ class_matchHost(rr->host, r->host)) {
T( trace(TRACE_CHECK, "check: rule matched -- granting permission"); )
return (1);
}
trace(TRACE_RULE, "rule: dumping rules");
while (rr) {
- trace(TRACE_RULE, "rule dump...");
- trace(TRACE_RULE, " from"); class_dump(rr->from);
- trace(TRACE_RULE, " to"); class_dump(rr->to);
- trace(TRACE_RULE, " cmd"); class_dump(rr->cmd);
- trace(TRACE_RULE, " host"); class_dump(rr->host);
+ trace(TRACE_RULE, "rule: rule dump...");
+ trace(TRACE_RULE, "rule: from"); class_dump(rr->from, 2);
+ trace(TRACE_RULE, "rule: to"); class_dump(rr->to, 2);
+ trace(TRACE_RULE, "rule: cmd"); class_dump(rr->cmd, 2);
+ trace(TRACE_RULE, "rule: host"); class_dump(rr->host, 2);
rr = rr->next;
}
trace(TRACE_RULE, "rule: dump finished");