xref: /dflybsd-src/sbin/devfsctl/devfsctl.h (revision a92dccf2f68888b6649e676eb322672fba722c21)
1488b1be5SSascha Wildner /*
2488b1be5SSascha Wildner  * Copyright (c) 2009 The DragonFly Project.  All rights reserved.
3488b1be5SSascha Wildner  *
4488b1be5SSascha Wildner  * This code is derived from software contributed to The DragonFly Project
5488b1be5SSascha Wildner  * by Alex Hornung <ahornung@gmail.com>
6488b1be5SSascha Wildner  *
7488b1be5SSascha Wildner  * Redistribution and use in source and binary forms, with or without
8488b1be5SSascha Wildner  * modification, are permitted provided that the following conditions
9488b1be5SSascha Wildner  * are met:
10488b1be5SSascha Wildner  *
11488b1be5SSascha Wildner  * 1. Redistributions of source code must retain the above copyright
12488b1be5SSascha Wildner  *    notice, this list of conditions and the following disclaimer.
13488b1be5SSascha Wildner  * 2. Redistributions in binary form must reproduce the above copyright
14488b1be5SSascha Wildner  *    notice, this list of conditions and the following disclaimer in
15488b1be5SSascha Wildner  *    the documentation and/or other materials provided with the
16488b1be5SSascha Wildner  *    distribution.
17488b1be5SSascha Wildner  * 3. Neither the name of The DragonFly Project nor the names of its
18488b1be5SSascha Wildner  *    contributors may be used to endorse or promote products derived
19488b1be5SSascha Wildner  *    from this software without specific, prior written permission.
20488b1be5SSascha Wildner  *
21488b1be5SSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22488b1be5SSascha Wildner  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23488b1be5SSascha Wildner  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24488b1be5SSascha Wildner  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
25488b1be5SSascha Wildner  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26488b1be5SSascha Wildner  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
27488b1be5SSascha Wildner  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28488b1be5SSascha Wildner  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29488b1be5SSascha Wildner  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30488b1be5SSascha Wildner  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
31488b1be5SSascha Wildner  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32488b1be5SSascha Wildner  * SUCH DAMAGE.
33488b1be5SSascha Wildner  */
34488b1be5SSascha Wildner 
3514f0742eSAlex Hornung #ifndef DEVFSCTL_H
3614f0742eSAlex Hornung #define DEVFSCTL_H
3714f0742eSAlex Hornung 
3814f0742eSAlex Hornung #include <sys/queue.h>
3914f0742eSAlex Hornung 
4014f0742eSAlex Hornung #define iswhitespace(X)	((((X) == ' ') || ((X) == '\t'))?1:0)
4114f0742eSAlex Hornung #define RULE_MAX_STACK	32
4214f0742eSAlex Hornung #define RULES_FILE		0x01
4314f0742eSAlex Hornung 
4414f0742eSAlex Hornung #if 0
4514f0742eSAlex Hornung #define RULETAB_FILE	0x02
4614f0742eSAlex Hornung #define RULETAB_ALL		0x01
4714f0742eSAlex Hornung #define RULETAB_ONLY_BOOT	0x02
4814f0742eSAlex Hornung #define RULETAB_SPECIFIC	0x03
4914f0742eSAlex Hornung #endif
5014f0742eSAlex Hornung 
5114f0742eSAlex Hornung struct groupdevid {
5214f0742eSAlex Hornung 	enum {
5314f0742eSAlex Hornung 		isGROUP = 1,
5414f0742eSAlex Hornung 		isNAME,
5514f0742eSAlex Hornung 		isTYPE
5614f0742eSAlex Hornung 	}		type;
5714f0742eSAlex Hornung 
5814f0742eSAlex Hornung 	union {
5914f0742eSAlex Hornung 		char		*name;
6014f0742eSAlex Hornung 		int		devtype;
6114f0742eSAlex Hornung 	};
6214f0742eSAlex Hornung 
6314f0742eSAlex Hornung 	struct groupdevid **list;
6414f0742eSAlex Hornung 	size_t	listsize;
6514f0742eSAlex Hornung #if 0
6614f0742eSAlex Hornung     struct groupdevid *next;
6714f0742eSAlex Hornung 	TAILQ_HEAD(, groupdevid) list;
6814f0742eSAlex Hornung #endif
6914f0742eSAlex Hornung 	TAILQ_ENTRY(groupdevid) link;
7014f0742eSAlex Hornung };
7114f0742eSAlex Hornung 
7214f0742eSAlex Hornung struct rule {
7314f0742eSAlex Hornung 	enum {
7414f0742eSAlex Hornung 		rPERM = 1,
7514f0742eSAlex Hornung 		rLINK,
7614f0742eSAlex Hornung 		rHIDE,
7714f0742eSAlex Hornung 		rSHOW
7814f0742eSAlex Hornung 	}		type;
7914f0742eSAlex Hornung 
8014f0742eSAlex Hornung 	struct groupdevid *id;
8114f0742eSAlex Hornung 	char		*dest;
8214f0742eSAlex Hornung 	uid_t		uid;
8314f0742eSAlex Hornung 	uid_t		gid;
8414f0742eSAlex Hornung 	int		mode;
8514f0742eSAlex Hornung 	int		jail;
8614f0742eSAlex Hornung 
8714f0742eSAlex Hornung 	TAILQ_ENTRY(rule) link;
8814f0742eSAlex Hornung };
8914f0742eSAlex Hornung 
9014f0742eSAlex Hornung #if 0
9114f0742eSAlex Hornung struct rule_tab {
9214f0742eSAlex Hornung 	const char	*mntpoint;
9314f0742eSAlex Hornung 	const char	*rule_file;
9414f0742eSAlex Hornung 	TAILQ_ENTRY(rule_tab) link;
9514f0742eSAlex Hornung };
9614f0742eSAlex Hornung #endif
9714f0742eSAlex Hornung 
9814f0742eSAlex Hornung typedef int (rule_iterate_callback_t)(struct rule *rule,
9914f0742eSAlex Hornung 		struct groupdevid *id);
10014f0742eSAlex Hornung typedef int (rule_parser_t)(char **);
10114f0742eSAlex Hornung 
10214f0742eSAlex Hornung struct groupdevid *new_id(const char *, int);
10314f0742eSAlex Hornung struct groupdevid *get_id(const char *);
10414f0742eSAlex Hornung struct groupdevid *get_group(const char *, int);
10514f0742eSAlex Hornung struct rule *new_rule(int, struct groupdevid *);
10614f0742eSAlex Hornung void add_rule(struct rule *);
10714f0742eSAlex Hornung int rule_apply(void);
10814f0742eSAlex Hornung void dump_config(void);
10914f0742eSAlex Hornung int read_config(const char *, int);
110*a92dccf2SSascha Wildner void syntax_error(const char *fmt, ...) __dead2 __printflike(1, 2);
11114f0742eSAlex Hornung void rule_tab(void);
11214f0742eSAlex Hornung void delete_rules(void);
11314f0742eSAlex Hornung #endif
114