1/*
2 * Copyright (c) 1999-2005, 2008, 2010
3 *	Todd C. Miller <Todd.Miller@courtesan.com>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 *
17 * Sponsored in part by the Defense Advanced Research Projects
18 * Agency (DARPA) and Air Force Research Laboratory, Air Force
19 * Materiel Command, USAF, under agreement number F39502-99-1-0512.
20 */
21
22#ifndef _SUDO_DEFAULTS_H
23#define _SUDO_DEFAULTS_H
24
25#include <def_data.h>
26
27struct list_member {
28    char *value;
29    struct list_member *next;
30};
31
32struct def_values {
33    char *sval;		/* string value */
34    int ival;		/* actually an enum */
35};
36
37enum list_ops {
38    add,
39    delete,
40    freeall
41};
42
43/*
44 * Structure describing compile-time and run-time options.
45 */
46struct sudo_defs_types {
47    char *name;
48    int type;
49    char *desc;
50    struct def_values *values;
51    int (*callback) __P((const char *));
52    union {
53	int flag;
54	int ival;
55	double fval;
56	enum def_tupple tuple;
57	char *str;
58	mode_t mode;
59	struct list_member *list;
60    } sd_un;
61};
62
63/*
64 * Four types of defaults: strings, integers, and flags.
65 * Also, T_INT, T_FLOAT or T_STR may be ANDed with T_BOOL to indicate that
66 * a value is not required.  Flags are boolean by nature...
67 */
68#undef T_INT
69#define T_INT		0x001
70#undef T_UINT
71#define T_UINT		0x002
72#undef T_STR
73#define T_STR		0x003
74#undef T_FLAG
75#define T_FLAG		0x004
76#undef T_MODE
77#define T_MODE		0x005
78#undef T_LIST
79#define T_LIST		0x006
80#undef T_LOGFAC
81#define T_LOGFAC	0x007
82#undef T_LOGPRI
83#define T_LOGPRI	0x008
84#undef T_TUPLE
85#define T_TUPLE		0x009
86#undef T_FLOAT
87#define T_FLOAT		0x010
88#undef T_MASK
89#define T_MASK		0x0FF
90#undef T_BOOL
91#define T_BOOL		0x100
92#undef T_PATH
93#define T_PATH		0x200
94
95/*
96 * Argument to update_defaults() and check_defaults()
97 */
98#define SETDEF_GENERIC	0x01
99#define	SETDEF_HOST	0x02
100#define	SETDEF_USER	0x04
101#define	SETDEF_RUNAS	0x08
102#define	SETDEF_CMND	0x10
103#define SETDEF_ALL	(SETDEF_GENERIC|SETDEF_HOST|SETDEF_USER|SETDEF_RUNAS|SETDEF_CMND)
104
105/*
106 * Prototypes
107 */
108int set_default		__P((char *, char *, int));
109int update_defaults	__P((int));
110int check_defaults	__P((int, int));
111void dump_default	__P((void));
112void dump_defaults	__P((void));
113void init_defaults	__P((void));
114void list_options	__P((void));
115
116extern struct sudo_defs_types sudo_defs_table[];
117
118#endif /* _SUDO_DEFAULTS_H */
119