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