1 #ifndef DEVFSCTL_H 2 #define DEVFSCTL_H 3 4 #include <sys/queue.h> 5 6 #define iswhitespace(X) ((((X) == ' ') || ((X) == '\t'))?1:0) 7 #define RULE_MAX_STACK 32 8 #define RULES_FILE 0x01 9 10 #if 0 11 #define RULETAB_FILE 0x02 12 #define RULETAB_ALL 0x01 13 #define RULETAB_ONLY_BOOT 0x02 14 #define RULETAB_SPECIFIC 0x03 15 #endif 16 17 struct groupdevid { 18 enum { 19 isGROUP = 1, 20 isNAME, 21 isTYPE 22 } type; 23 24 union { 25 char *name; 26 int devtype; 27 }; 28 29 struct groupdevid **list; 30 size_t listsize; 31 #if 0 32 struct groupdevid *next; 33 TAILQ_HEAD(, groupdevid) list; 34 #endif 35 TAILQ_ENTRY(groupdevid) link; 36 }; 37 38 struct rule { 39 enum { 40 rPERM = 1, 41 rLINK, 42 rHIDE, 43 rSHOW 44 } type; 45 46 struct groupdevid *id; 47 char *dest; 48 uid_t uid; 49 uid_t gid; 50 int mode; 51 int jail; 52 53 TAILQ_ENTRY(rule) link; 54 }; 55 56 #if 0 57 struct rule_tab { 58 const char *mntpoint; 59 const char *rule_file; 60 TAILQ_ENTRY(rule_tab) link; 61 }; 62 #endif 63 64 typedef int (rule_iterate_callback_t)(struct rule *rule, 65 struct groupdevid *id); 66 typedef int (rule_parser_t)(char **); 67 68 struct groupdevid *new_id(const char *, int); 69 struct groupdevid *get_id(const char *); 70 struct groupdevid *get_group(const char *, int); 71 struct rule *new_rule(int, struct groupdevid *); 72 void add_rule(struct rule *); 73 int rule_apply(void); 74 void dump_config(void); 75 int read_config(const char *, int); 76 int syntax_error(const char *fmt, ...); 77 void rule_tab(void); 78 void delete_rules(void); 79 #endif 80