6c339770f633cf59f89d368ec310fc7bdf9181f9
[dragonfly.git] / sbin / devfsctl / devfsctl.h
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