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