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 */ 36extern void mail_conf_read(void); 37extern void mail_conf_suck(void); 38extern void mail_conf_flush(void); 39 40extern void mail_conf_update(const char *, const char *); 41extern const char *mail_conf_lookup(const char *); 42extern const char *mail_conf_eval(const char *); 43extern const char *mail_conf_eval_once(const char *); 44extern const char *mail_conf_lookup_eval(const char *); 45 46 /* 47 * Specific parameter lookup routines. 48 */ 49extern char *get_mail_conf_str(const char *, const char *, int, int); 50extern int get_mail_conf_int(const char *, int, int, int); 51extern long get_mail_conf_long(const char *, long, long, long); 52extern int get_mail_conf_bool(const char *, int); 53extern int get_mail_conf_time(const char *, const char *, int, int); 54extern int get_mail_conf_nint(const char *, const char *, int, int); 55extern char *get_mail_conf_raw(const char *, const char *, int, int); 56extern int get_mail_conf_nbool(const char *, const char *); 57 58extern char *get_mail_conf_str2(const char *, const char *, const char *, int, int); 59extern int get_mail_conf_int2(const char *, const char *, int, int, int); 60extern long get_mail_conf_long2(const char *, const char *, long, long, long); 61extern int get_mail_conf_time2(const char *, const char *, int, int, int, int); 62extern int get_mail_conf_nint2(const char *, const char *, int, int, int); 63 64 /* 65 * Lookup with function-call defaults. 66 */ 67extern char *get_mail_conf_str_fn(const char *, const char *(*) (void), int, int); 68extern int get_mail_conf_int_fn(const char *, int (*) (void), int, int); 69extern long get_mail_conf_long_fn(const char *, long (*) (void), long, long); 70extern int get_mail_conf_bool_fn(const char *, int (*) (void)); 71extern int get_mail_conf_time_fn(const char *, const char *(*) (void), int, int, int); 72extern int get_mail_conf_nint_fn(const char *, const char *(*) (void), int, int); 73extern char *get_mail_conf_raw_fn(const char *, const char *(*) (void), int, int); 74extern int get_mail_conf_nbool_fn(const char *, const char *(*) (void)); 75 76 /* 77 * Update dictionary. 78 */ 79extern void set_mail_conf_str(const char *, const char *); 80extern void set_mail_conf_int(const char *, int); 81extern void set_mail_conf_long(const char *, long); 82extern void set_mail_conf_bool(const char *, int); 83extern void set_mail_conf_time(const char *, const char *); 84extern void set_mail_conf_time_int(const char *, int); 85extern void set_mail_conf_nint(const char *, const char *); 86extern void set_mail_conf_nint_int(const char *, int); 87extern void set_mail_conf_nbool(const char *, const char *); 88 89#define set_mail_conf_nbool_int(name, value) \ 90 set_mail_conf_nbool((name), (value) ? CONFIG_BOOL_YES : CONFIG_BOOL_NO) 91 92 /* 93 * Tables that allow us to selectively copy values from the global 94 * configuration file to global variables. 95 */ 96typedef struct { 97 const char *name; /* config variable name */ 98 const char *defval; /* default value or null */ 99 char **target; /* pointer to global variable */ 100 int min; /* min length or zero */ 101 int max; /* max length or zero */ 102} CONFIG_STR_TABLE; 103 104typedef struct { 105 const char *name; /* config variable name */ 106 const char *defval; /* default value or null */ 107 char **target; /* pointer to global variable */ 108 int min; /* min length or zero */ 109 int max; /* max length or zero */ 110} CONFIG_RAW_TABLE; 111 112typedef struct { 113 const char *name; /* config variable name */ 114 int defval; /* default value */ 115 int *target; /* pointer to global variable */ 116 int min; /* lower bound or zero */ 117 int max; /* upper bound or zero */ 118} CONFIG_INT_TABLE; 119 120typedef struct { 121 const char *name; /* config variable name */ 122 long defval; /* default value */ 123 long *target; /* pointer to global variable */ 124 long min; /* lower bound or zero */ 125 long max; /* upper bound or zero */ 126} CONFIG_LONG_TABLE; 127 128typedef struct { 129 const char *name; /* config variable name */ 130 int defval; /* default value */ 131 int *target; /* pointer to global variable */ 132} CONFIG_BOOL_TABLE; 133 134typedef struct { 135 const char *name; /* config variable name */ 136 const char *defval; /* default value + default unit */ 137 int *target; /* pointer to global variable */ 138 int min; /* lower bound or zero */ 139 int max; /* upper bound or zero */ 140} CONFIG_TIME_TABLE; 141 142typedef struct { 143 const char *name; /* config variable name */ 144 const char *defval; /* default value + default unit */ 145 int *target; /* pointer to global variable */ 146 int min; /* lower bound or zero */ 147 int max; /* upper bound or zero */ 148} CONFIG_NINT_TABLE; 149 150typedef struct { 151 const char *name; /* config variable name */ 152 const char *defval; /* default value */ 153 int *target; /* pointer to global variable */ 154} CONFIG_NBOOL_TABLE; 155 156extern void get_mail_conf_str_table(const CONFIG_STR_TABLE *); 157extern void get_mail_conf_int_table(const CONFIG_INT_TABLE *); 158extern void get_mail_conf_long_table(const CONFIG_LONG_TABLE *); 159extern void get_mail_conf_bool_table(const CONFIG_BOOL_TABLE *); 160extern void get_mail_conf_time_table(const CONFIG_TIME_TABLE *); 161extern void get_mail_conf_nint_table(const CONFIG_NINT_TABLE *); 162extern void get_mail_conf_raw_table(const CONFIG_RAW_TABLE *); 163extern void get_mail_conf_nbool_table(const CONFIG_NBOOL_TABLE *); 164 165 /* 166 * Tables to initialize parameters from the global configuration file or 167 * from function calls. 168 */ 169typedef struct { 170 const char *name; /* config variable name */ 171 const char *(*defval) (void); /* default value provider */ 172 char **target; /* pointer to global variable */ 173 int min; /* lower bound or zero */ 174 int max; /* upper bound or zero */ 175} CONFIG_STR_FN_TABLE; 176 177typedef struct { 178 const char *name; /* config variable name */ 179 const char *(*defval) (void); /* default value provider */ 180 char **target; /* pointer to global variable */ 181 int min; /* lower bound or zero */ 182 int max; /* upper bound or zero */ 183} CONFIG_RAW_FN_TABLE; 184 185typedef struct { 186 const char *name; /* config variable name */ 187 int (*defval) (void); /* default value provider */ 188 int *target; /* pointer to global variable */ 189 int min; /* lower bound or zero */ 190 int max; /* upper bound or zero */ 191} CONFIG_INT_FN_TABLE; 192 193typedef struct { 194 const char *name; /* config variable name */ 195 long (*defval) (void); /* default value provider */ 196 long *target; /* pointer to global variable */ 197 long min; /* lower bound or zero */ 198 long max; /* upper bound or zero */ 199} CONFIG_LONG_FN_TABLE; 200 201typedef struct { 202 const char *name; /* config variable name */ 203 int (*defval) (void); /* default value provider */ 204 int *target; /* pointer to global variable */ 205} CONFIG_BOOL_FN_TABLE; 206 207typedef struct { 208 const char *name; /* config variable name */ 209 const char *(*defval) (void); /* default value provider */ 210 int *target; /* pointer to global variable */ 211 int min; /* lower bound or zero */ 212 int max; /* upper bound or zero */ 213} CONFIG_NINT_FN_TABLE; 214 215typedef struct { 216 const char *name; /* config variable name */ 217 const char *(*defval) (void); /* default value provider */ 218 int *target; /* pointer to global variable */ 219} CONFIG_NBOOL_FN_TABLE; 220 221extern void get_mail_conf_str_fn_table(const CONFIG_STR_FN_TABLE *); 222extern void get_mail_conf_int_fn_table(const CONFIG_INT_FN_TABLE *); 223extern void get_mail_conf_long_fn_table(const CONFIG_LONG_FN_TABLE *); 224extern void get_mail_conf_bool_fn_table(const CONFIG_BOOL_FN_TABLE *); 225extern void get_mail_conf_raw_fn_table(const CONFIG_RAW_FN_TABLE *); 226extern void get_mail_conf_nint_fn_table(const CONFIG_NINT_FN_TABLE *); 227extern void get_mail_conf_nbool_fn_table(const CONFIG_NBOOL_FN_TABLE *); 228 229/* LICENSE 230/* .ad 231/* .fi 232/* The Secure Mailer license must be distributed with this software. 233/* AUTHOR(S) 234/* Wietse Venema 235/* IBM T.J. Watson Research 236/* P.O. Box 704 237/* Yorktown Heights, NY 10598, USA 238/*--*/ 239 240#endif 241