xref: /netbsd-src/external/ibm-public/postfix/dist/src/global/mail_conf.h (revision 33881f779a77dce6440bdc44610d94de75bebefe)
1 /*	$NetBSD: mail_conf.h,v 1.3 2020/03/18 19:05:16 christos Exp $	*/
2 
3 #ifndef _MAIL_CONF_H_INCLUDED_
4 #define _MAIL_CONF_H_INCLUDED_
5 
6 /*++
7 /* NAME
8 /*	mail_conf 3h
9 /* SUMMARY
10 /*	global configuration parameter management
11 /* SYNOPSIS
12 /*	#include <mail_conf.h>
13 /* DESCRIPTION
14 /* .nf
15 
16  /*
17   * Well known names. These are not configurable. One has to start somewhere.
18   */
19 #define CONFIG_DICT	"mail_dict"	/* global Postfix dictionary */
20 
21  /*
22   * Environment variables.
23   */
24 #define CONF_ENV_PATH	"MAIL_CONFIG"	/* config database */
25 #define CONF_ENV_VERB	"MAIL_VERBOSE"	/* verbose mode on */
26 #define CONF_ENV_DEBUG	"MAIL_DEBUG"	/* live debugging */
27 #define CONF_ENV_LOGTAG	"MAIL_LOGTAG"	/* instance name */
28 
29  /*
30   * External representation for booleans.
31   */
32 #define CONFIG_BOOL_YES	"yes"
33 #define CONFIG_BOOL_NO	"no"
34 
35  /*
36   * Basic configuration management.
37   */
38 extern void mail_conf_read(void);
39 extern void mail_conf_suck(void);
40 extern void mail_conf_flush(void);
41 extern void mail_conf_checkdir(const char *);
42 
43 extern void mail_conf_update(const char *, const char *);
44 extern const char *mail_conf_lookup(const char *);
45 extern const char *mail_conf_eval(const char *);
46 extern const char *mail_conf_eval_once(const char *);
47 extern const char *mail_conf_lookup_eval(const char *);
48 
49  /*
50   * Specific parameter lookup routines.
51   */
52 extern char *get_mail_conf_str(const char *, const char *, int, int);
53 extern int get_mail_conf_int(const char *, int, int, int);
54 extern long get_mail_conf_long(const char *, long, long, long);
55 extern int get_mail_conf_bool(const char *, int);
56 extern int get_mail_conf_time(const char *, const char *, int, int);
57 extern int get_mail_conf_nint(const char *, const char *, int, int);
58 extern char *get_mail_conf_raw(const char *, const char *, int, int);
59 extern int get_mail_conf_nbool(const char *, const char *);
60 
61 extern char *get_mail_conf_str2(const char *, const char *, const char *, int, int);
62 extern int get_mail_conf_int2(const char *, const char *, int, int, int);
63 extern long get_mail_conf_long2(const char *, const char *, long, long, long);
64 extern int get_mail_conf_time2(const char *, const char *, int, int, int, int);
65 extern int get_mail_conf_nint2(const char *, const char *, int, int, int);
66 extern void check_mail_conf_str(const char *, const char *, int, int);
67 extern void check_mail_conf_time(const char *, int, int, int);
68 extern void check_mail_conf_int(const char *, int, int, int);
69 
70  /*
71   * Lookup with function-call defaults.
72   */
73 extern char *get_mail_conf_str_fn(const char *, const char *(*) (void), int, int);
74 extern int get_mail_conf_int_fn(const char *, int (*) (void), int, int);
75 extern long get_mail_conf_long_fn(const char *, long (*) (void), long, long);
76 extern int get_mail_conf_bool_fn(const char *, int (*) (void));
77 extern int get_mail_conf_time_fn(const char *, const char *(*) (void), int, int, int);
78 extern int get_mail_conf_nint_fn(const char *, const char *(*) (void), int, int);
79 extern char *get_mail_conf_raw_fn(const char *, const char *(*) (void), int, int);
80 extern int get_mail_conf_nbool_fn(const char *, const char *(*) (void));
81 
82  /*
83   * Update dictionary.
84   */
85 extern void set_mail_conf_str(const char *, const char *);
86 extern void set_mail_conf_int(const char *, int);
87 extern void set_mail_conf_long(const char *, long);
88 extern void set_mail_conf_bool(const char *, int);
89 extern void set_mail_conf_time(const char *, const char *);
90 extern void set_mail_conf_time_int(const char *, int);
91 extern void set_mail_conf_nint(const char *, const char *);
92 extern void set_mail_conf_nint_int(const char *, int);
93 extern void set_mail_conf_nbool(const char *, const char *);
94 
95 #define set_mail_conf_nbool_int(name, value) \
96     set_mail_conf_nbool((name), (value) ? CONFIG_BOOL_YES : CONFIG_BOOL_NO)
97 
98  /*
99   * Tables that allow us to selectively copy values from the global
100   * configuration file to global variables.
101   */
102 typedef struct {
103     const char *name;			/* config variable name */
104     const char *defval;			/* default value or null */
105     char  **target;			/* pointer to global variable */
106     int     min;			/* min length or zero */
107     int     max;			/* max length or zero */
108 } CONFIG_STR_TABLE;
109 
110 typedef struct {
111     const char *name;			/* config variable name */
112     const char *defval;			/* default value or null */
113     char  **target;			/* pointer to global variable */
114     int     min;			/* min length or zero */
115     int     max;			/* max length or zero */
116 } CONFIG_RAW_TABLE;
117 
118 typedef struct {
119     const char *name;			/* config variable name */
120     int     defval;			/* default value */
121     int    *target;			/* pointer to global variable */
122     int     min;			/* lower bound or zero */
123     int     max;			/* upper bound or zero */
124 } CONFIG_INT_TABLE;
125 
126 typedef struct {
127     const char *name;			/* config variable name */
128     long    defval;			/* default value */
129     long   *target;			/* pointer to global variable */
130     long    min;			/* lower bound or zero */
131     long    max;			/* upper bound or zero */
132 } CONFIG_LONG_TABLE;
133 
134 typedef struct {
135     const char *name;			/* config variable name */
136     int     defval;			/* default value */
137     int    *target;			/* pointer to global variable */
138 } CONFIG_BOOL_TABLE;
139 
140 typedef struct {
141     const char *name;			/* config variable name */
142     const char *defval;			/* default value + default unit */
143     int    *target;			/* pointer to global variable */
144     int     min;			/* lower bound or zero */
145     int     max;			/* upper bound or zero */
146 } CONFIG_TIME_TABLE;
147 
148 typedef struct {
149     const char *name;			/* config variable name */
150     const char *defval;			/* default value + default unit */
151     int    *target;			/* pointer to global variable */
152     int     min;			/* lower bound or zero */
153     int     max;			/* upper bound or zero */
154 } CONFIG_NINT_TABLE;
155 
156 typedef struct {
157     const char *name;			/* config variable name */
158     const char *defval;			/* default value */
159     int    *target;			/* pointer to global variable */
160 } CONFIG_NBOOL_TABLE;
161 
162 extern void get_mail_conf_str_table(const CONFIG_STR_TABLE *);
163 extern void get_mail_conf_int_table(const CONFIG_INT_TABLE *);
164 extern void get_mail_conf_long_table(const CONFIG_LONG_TABLE *);
165 extern void get_mail_conf_bool_table(const CONFIG_BOOL_TABLE *);
166 extern void get_mail_conf_time_table(const CONFIG_TIME_TABLE *);
167 extern void get_mail_conf_nint_table(const CONFIG_NINT_TABLE *);
168 extern void get_mail_conf_raw_table(const CONFIG_RAW_TABLE *);
169 extern void get_mail_conf_nbool_table(const CONFIG_NBOOL_TABLE *);
170 
171  /*
172   * Tables to initialize parameters from the global configuration file or
173   * from function calls.
174   */
175 typedef struct {
176     const char *name;			/* config variable name */
177     const char *(*defval) (void);	/* default value provider */
178     char  **target;			/* pointer to global variable */
179     int     min;			/* lower bound or zero */
180     int     max;			/* upper bound or zero */
181 } CONFIG_STR_FN_TABLE;
182 
183 typedef struct {
184     const char *name;			/* config variable name */
185     const char *(*defval) (void);	/* default value provider */
186     char  **target;			/* pointer to global variable */
187     int     min;			/* lower bound or zero */
188     int     max;			/* upper bound or zero */
189 } CONFIG_RAW_FN_TABLE;
190 
191 typedef struct {
192     const char *name;			/* config variable name */
193     int     (*defval) (void);		/* default value provider */
194     int    *target;			/* pointer to global variable */
195     int     min;			/* lower bound or zero */
196     int     max;			/* upper bound or zero */
197 } CONFIG_INT_FN_TABLE;
198 
199 typedef struct {
200     const char *name;			/* config variable name */
201     long    (*defval) (void);		/* default value provider */
202     long   *target;			/* pointer to global variable */
203     long    min;			/* lower bound or zero */
204     long    max;			/* upper bound or zero */
205 } CONFIG_LONG_FN_TABLE;
206 
207 typedef struct {
208     const char *name;			/* config variable name */
209     int     (*defval) (void);		/* default value provider */
210     int    *target;			/* pointer to global variable */
211 } CONFIG_BOOL_FN_TABLE;
212 
213 typedef struct {
214     const char *name;			/* config variable name */
215     const char *(*defval) (void);	/* default value provider */
216     int    *target;			/* pointer to global variable */
217     int     min;			/* lower bound or zero */
218     int     max;			/* upper bound or zero */
219 } CONFIG_NINT_FN_TABLE;
220 
221 typedef struct {
222     const char *name;			/* config variable name */
223     const char *(*defval) (void);	/* default value provider */
224     int    *target;			/* pointer to global variable */
225 } CONFIG_NBOOL_FN_TABLE;
226 
227 extern void get_mail_conf_str_fn_table(const CONFIG_STR_FN_TABLE *);
228 extern void get_mail_conf_int_fn_table(const CONFIG_INT_FN_TABLE *);
229 extern void get_mail_conf_long_fn_table(const CONFIG_LONG_FN_TABLE *);
230 extern void get_mail_conf_bool_fn_table(const CONFIG_BOOL_FN_TABLE *);
231 extern void get_mail_conf_raw_fn_table(const CONFIG_RAW_FN_TABLE *);
232 extern void get_mail_conf_nint_fn_table(const CONFIG_NINT_FN_TABLE *);
233 extern void get_mail_conf_nbool_fn_table(const CONFIG_NBOOL_FN_TABLE *);
234 
235 /* LICENSE
236 /* .ad
237 /* .fi
238 /*	The Secure Mailer license must be distributed with this software.
239 /* AUTHOR(S)
240 /*	Wietse Venema
241 /*	IBM T.J. Watson Research
242 /*	P.O. Box 704
243 /*	Yorktown Heights, NY 10598, USA
244 /*
245 /*	Wietse Venema
246 /*	Google, Inc.
247 /*	111 8th Avenue
248 /*	New York, NY 10011, USA
249 /*--*/
250 
251 #endif
252