/* * Copyright (c) 2004-2006 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set * forth in the LICENSE file which can be found at the top level of * the sendmail distribution. * * $Id: qmgrcnfdef.h,v 1.66 2007/07/14 16:55:01 ca Exp $ */ #ifndef SM_QMGRCNFDEF_H #define SM_QMGRCNFDEF_H 1 #include "sm/generic.h" #include "sm/magic.h" #include "sm/cnf.h" #include "sm/edbdef.h" #include "sm/qmgrcto.h" #include "sm/qmgrdef.h" #include "sm/qmgrcnf.h" #include "sm/mcpcnfs.h" #include "sm/mta.h" #include "sm/sm-conf-time.h" #include "sm/sm-conf-byte.h" #include "sm/mapcnfs.h" /* ** Note: the defaults in here are ignored as long as SM_CONF_FLAG_KEEP_DEFAULT ** is set, which is necessary to avoid zero'ing out the structure. */ #if SM_QMGRCNFDEF #define EXTERN #else /* SM_QMGRCNFDEF */ #define EXTERN extern #endif /* SM_QMGRCNFDEF */ #define QMGR_CNF_AQ_SIZE "AQ_max_entries" #define QMGR_CNF_OCC_SIZE "OCC_max_entries" #define QMGR_CNF_IBDB_SIZE "size" #define QMGR_CNF_IQDB_CACHE_SIZE "max_cache_entries" #define QMGR_CNF_IQDB_HASH_TABLE_SIZE "hash_table_entries" #define QMGR_CNF_MIN_DISK_SPACE "min_disk_space" #define QMGR_CNF_OK_DISK_SPACE "ok_disk_space" #define QMGR_CNF_MAX_OPEN_TAS "max_open_TAs" #define QMGR_CNF_SC_INITIAL_CONNS "initial_connections" #define QMGR_CNF_SC_MAX_CONNS "max_connections" #define QMGR_CNF_SS_MAX_OPEN_CONNS "max_connections" #define QMGR_CNF_SS_MAX_CONN_RATE "max_connection_rate" #define QMGR_CNF_SS_CONNCTL_SIZE "connection_control_hash_table_size" #define QMGR_CNF_SC_SMTP_RCPTS_TA "smtp_max_rcpts_per_transaction" #define QMGR_CNF_SC_LMTP_RCPTS_TA "lmtp_max_rcpts_per_transaction" #define QMGR_CNF_MAX_ERRORS_PER_DSN "max_errors_per_DSN" #define QMGR_CNF_FLAGS "flags" #define QMGR_CNF_IBDB_MAX_COMMIT_DELAY "max_commit_delay" #define QMGR_CNF_MIN_DELAY_RETRIES "retry_min_delay" #define QMGR_CNF_MAX_DELAY_RETRIES "retry_max_delay" #define QMGR_CNF_TMOUT_QUEUERETURN "queue_return_timeout" #define QMGR_CNF_TMOUT_QUEUEDELAY "queue_delay_timeout" #define QMGR_CNF_TMOUT_AR "SMAR_timeout" #define QMGR_CNF_TMOUT_DELIVERY "delivery_timeout" #define QMGR_CNF_TMOUT_SCHED "scheduler_timeout" #define QMGR_CNF_MAX_DSN_DELAY "merge_delay_max" #define QMGR_CNF_WAIT_FOR_SERVER "wait_for_server" #define QMGR_CNF_WAIT_FOR_CLIENT "wait_for_client" #define QMGR_CNF_LOG_LEVEL "log_level" #define QMGR_CNF_DEBUG_LEVEL "debug_level" #define QMGR_CNF_TESTS "tests" #define QMGR_CNF_MIN_THR "min_threads" #define QMGR_CNF_MAX_THR "max_threads" #define QMGR_CNF_MAX_FD "max_fds" #define QMEDB_CNF_BASEDIR "base_directory" #define QMEDB_CNF_LOGDIR "log_directory" #define QMEDB_CNF_PAGESIZE "page_size" #define QMEDB_CNF_CACHESIZE "cache_size" #define QMEDB_CNF_CHKP_KB "KBytes_written_for_checkpointing" #define QMEDB_CNF_CHKP_DELAY "delay_between_2_checkpoints" #define QMEDB_CNF_FATAL_RCVR "fatal_recovery" #define QMEDB_CNF_RM_LOGFILES "remove_unused_logfiles" #define QMGR_CNF_SC_LKP_RCPT_CONF "lookup_rcpt_conf" #define QMGR_CNF_SC_LKP_SE_CONF "lookup_session_conf" EXTERN sm_conf_definition_T const qmgr_flag_names[] #if SM_QMGRCNFDEF = { { SM_CONF_DEF_MAGIC, "Reuse_connection", sm_conf_type_choice_value, QCNF_FL_SE_REUSE, 0, NULL, 0, NULL, NULL, NULL, "reuse existing connection if possible" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; EXTERN sm_conf_definition_T const qmgr_dsn_flag_names[] #if SM_QMGRCNFDEF = { { SM_CONF_DEF_MAGIC, "header_only", sm_conf_type_choice_value, QCNF_FL_B_HDR, 0, NULL, 0, NULL, NULL, NULL, "send only headers in a DSN" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, "MIME_format", sm_conf_type_choice_value, QCNF_FL_B_DSN_MIME, 0, NULL, 0, NULL, NULL, NULL, "send DSN in MIME format" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; EXTERN sm_conf_definition_T qmgr_dsn_defs[] #if SM_QMGRCNFDEF = { { SM_CONF_DEF_MAGIC, QMGR_CNF_MAX_ERRORS_PER_DSN, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_dsn_rcpts_max), sizeof(uint), SM_XSTR(AQR_DSN_RCPTS_MAX), 0, NULL, NULL, NULL, "maximum number of error messages (failed recipients) in a bounce (DSN)" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_MAX_DSN_DELAY, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_t_sched_dsn), sizeof(uint), SM_XSTR(QM_TMO_SCHED_DSN), 0, sm_conf_time_suffixes, NULL, NULL, "maximum time to wait for merging multiple DSNs into one" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_FLAGS, sm_conf_type_choice, offsetof(qmgr_cnf_T, q_cnf_flags), sizeof(uint), NULL, SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL, qmgr_dsn_flag_names, NULL, NULL, "flags for DSN handling" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; EXTERN sm_conf_definition_T const qmgr_edb_flag_names[] #if SM_QMGRCNFDEF = { { SM_CONF_DEF_MAGIC, QMEDB_CNF_FATAL_RCVR, sm_conf_type_choice_value, EDB_OPEN_RECOVER_FATAL, 0, NULL, 0, NULL, NULL, NULL, "perform fatal recovery" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMEDB_CNF_RM_LOGFILES, sm_conf_type_choice_value, EDB_LOG_AUTOREMOVE, 0, NULL, 0, NULL, NULL, NULL, "automatically remove unused logfiles" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; EXTERN sm_conf_definition_T qmgr_edb_defs[] #if SM_QMGRCNFDEF = { { SM_CONF_DEF_MAGIC, QMEDB_CNF_BASEDIR, sm_conf_type_string, offsetof(qmgr_cnf_T, q_cnf_edb_cnf.edbcnf_basedir), 0, NULL, 0, NULL, NULL, NULL, "Home directory for DEFEDB" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMEDB_CNF_LOGDIR, sm_conf_type_string, offsetof(qmgr_cnf_T, q_cnf_edb_cnf.edbcnf_logdir), 0, NULL, 0, NULL, NULL, NULL, "Log directory for DEFEDB" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMEDB_CNF_PAGESIZE, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_edb_cnf.edbcnf_pagesize), sizeof(uint), NULL, 0, sm_conf_byte_suffixes, NULL, NULL, "DB page size" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMEDB_CNF_CACHESIZE, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_edb_cnf.edbcnf_cachesize), sizeof(uint), SM_XSTR(EDB_CACHE_DFLT), 0, sm_conf_byte_suffixes, NULL, NULL, "DB cache size" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMEDB_CNF_CHKP_KB, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_edb_cnf.edbcnf_chkpt_kb), sizeof(uint32_t), NULL, 0, sm_conf_Kbyte_suffixes, NULL, NULL, "If non-zero, a checkpoint will be done if more than the amount of" " KBytes of log data have been written since the last checkpoint" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMEDB_CNF_CHKP_DELAY, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_edb_cnf.edbcnf_chkpt_delay), sizeof(uint32_t), SM_XSTR(EDB_SWEEP_DELAY), 0, sm_conf_time_suffixes, NULL, NULL, "Minimum delay between two checkpoints" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_FLAGS, sm_conf_type_choice, offsetof(qmgr_cnf_T, q_cnf_edb_cnf.edbcnf_oflags), sizeof(uint), NULL, SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL, qmgr_edb_flag_names, NULL, NULL, "flags for DEFEDB" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; EXTERN sm_conf_definition_T qmgr_ibdb_defs[] #if SM_QMGRCNFDEF = { { SM_CONF_DEF_MAGIC, QMGR_CNF_IBDB_SIZE, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_ibdb_size), sizeof(uint), SM_XSTR(IBDB_SIZE), 0, sm_conf_byte_suffixes, NULL, NULL, "maximum size of each IBDB file" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_MAX_OPEN_TAS, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_optas), sizeof(uint), SM_XSTR(IBDB_OPEN_TAS), 0, NULL, NULL, NULL, "maximum number of open transactions in IBDB before a commit is performed" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_IBDB_MAX_COMMIT_DELAY, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_ibdb_delay), sizeof(uint), SM_XSTR(IBDB_DELAY), 0, NULL, NULL, NULL, "maximum time between commits to IBDB (micro seconds)" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; EXTERN sm_conf_definition_T const qmgr_sc_flag_names[] #if SM_QMGRCNFDEF = { #if MTA_USE_TLS { SM_CONF_DEF_MAGIC, QMGR_CNF_SC_LKP_RCPT_CONF, sm_conf_type_choice_value, QCNF_FL_SC_LKP_RCPT_CONF, 0, NULL, 0, NULL, NULL, NULL, "lookup recipient configuration data in access map" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_SC_LKP_SE_CONF, sm_conf_type_choice_value, QCNF_FL_SC_LKP_SE_CONF, 0, NULL, 0, NULL, NULL, NULL, "lookup session configuration data in qmgr_conf map" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, #endif /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; EXTERN sm_conf_definition_T const qmgr_smtpc_lfl_names[] #if SM_QMGRCNFDEF = { MAP_FL_CNF_DEFS, /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; EXTERN sm_conf_definition_T qmgr_smtpc_defs[] #if SM_QMGRCNFDEF = { { SM_CONF_DEF_MAGIC, QMGR_CNF_SC_INITIAL_CONNS, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_init_conc_conn), sizeof(uint), SM_XSTR(DA_INIT_CONC_CONN), 0, NULL, NULL, NULL, "initial number of outgoing connections to a single host" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_SC_MAX_CONNS, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_max_conc_conn), sizeof(uint), SM_XSTR(DA_MAX_CONC_CONN), 0, NULL, NULL, NULL, "maximum number of outgoing connections to a single host" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_SC_SMTP_RCPTS_TA, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_smtp_rcpts_ta), sizeof(uint), SM_XSTR(DA_MAX_RCPTS_TA), 0, NULL, NULL, NULL, "maximum number of recipients per transaction (smtp)" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_SC_LMTP_RCPTS_TA, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_lmtp_rcpts_ta), sizeof(uint), SM_XSTR(DA_MAX_RCPTS_TA), 0, NULL, NULL, NULL, "maximum number of recipients per transaction (lmtp)" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_FLAGS, sm_conf_type_choice, offsetof(qmgr_cnf_T, q_cnf_flags), sizeof(uint), NULL, SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL, qmgr_sc_flag_names, NULL, NULL, "" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, "rcpt_conf_lookup_flags", sm_conf_type_choice, offsetof(qmgr_cnf_T, q_cnf_sc_lfl), sizeof(uint32_t), NULL, SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL, qmgr_smtpc_lfl_names, NULL, NULL, "" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; EXTERN sm_conf_definition_T qmgr_smtps_defs[] #if SM_QMGRCNFDEF = { { SM_CONF_DEF_MAGIC, QMGR_CNF_SS_MAX_OPEN_CONNS, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_max_open_se), sizeof(uint), SM_XSTR(SS_MAX_OPEN_SE), 0, NULL, NULL, NULL, "maximum number of open incoming connection from a single host" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_SS_MAX_CONN_RATE, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_max_conn_rate), sizeof(uint), SM_XSTR(SS_MAX_CONN_RATE), 0, NULL, NULL, NULL, "maximum incoming connection rate from a single host" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_SS_CONNCTL_SIZE, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_ss_cc_size), sizeof(uint), SM_XSTR(SS_CONNCTL_SIZE), 0, NULL, NULL, NULL, "size of connection control hash table [experts only]" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; EXTERN sm_conf_definition_T qmgr_iqdb_defs[] #if SM_QMGRCNFDEF = { { SM_CONF_DEF_MAGIC, QMGR_CNF_IQDB_CACHE_SIZE, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_iqdb_csize), sizeof(uint), SM_XSTR(IQDB_CSIZE), 0, NULL, NULL, NULL, "maximum number of entries in IQDB cache" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_IQDB_HASH_TABLE_SIZE, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_iqdb_htsize), sizeof(uint), SM_XSTR(IQDB_HTSIZE), 0, NULL, NULL, NULL, "size of hash table for IQDB" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; EXTERN sm_conf_definition_T qmgr_defs[] #if SM_QMGRCNFDEF = { { SM_CONF_DEF_MAGIC, QMGR_CNF_AQ_SIZE, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_aq_size), sizeof(uint), SM_XSTR(AQ_SIZE), 0, NULL, NULL, NULL, "maximum number of entries in AQ (active queue)" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_OCC_SIZE, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_occ_size), sizeof(uint), SM_XSTR(OCC_CSIZE), 0, NULL, NULL, NULL, "maximum number of entries in OCC (outgoing connection cache)" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, "IBDB", sm_conf_type_section, 0, sizeof(qmgr_cnf_T), NULL, SM_CONF_FLAG_KEEP_DEFAULT, qmgr_ibdb_defs, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, "IQDB", sm_conf_type_section, 0, sizeof(qmgr_cnf_T), NULL, SM_CONF_FLAG_KEEP_DEFAULT, qmgr_iqdb_defs, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_MIN_DISK_SPACE, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_min_df), sizeof(uint), SM_XSTR(DISK_MIN_FREE), 0, sm_conf_Kbyte_suffixes, NULL, NULL, "minimum amount of free disk space (KB)" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_OK_DISK_SPACE, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_ok_df), sizeof(uint), SM_XSTR(DISK_OK_FREE), 0, sm_conf_Kbyte_suffixes, NULL, NULL, "amount of free disk space at which normal operation continues (KB)" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, "smtpc", sm_conf_type_section, 0, sizeof(qmgr_cnf_T), NULL, SM_CONF_FLAG_KEEP_DEFAULT, qmgr_smtpc_defs, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, "smtps", sm_conf_type_section, 0, sizeof(qmgr_cnf_T), NULL, SM_CONF_FLAG_KEEP_DEFAULT, qmgr_smtps_defs, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_FLAGS, sm_conf_type_choice, offsetof(qmgr_cnf_T, q_cnf_flags), sizeof(uint), NULL, SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL, qmgr_flag_names, NULL, NULL, "" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_MIN_DELAY_RETRIES, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_min_delay), sizeof(uint), SM_XSTR(MIN_DELAY_NXT_TRY), 0, sm_conf_time_suffixes, NULL, NULL, "minimum time for retrying a delivery" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_MAX_DELAY_RETRIES, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_max_delay), sizeof(uint), SM_XSTR(MAX_DELAY_NXT_TRY), 0, sm_conf_time_suffixes, NULL, NULL, "maximum time for retrying a delivery" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_TMOUT_QUEUERETURN, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_tmo_return), sizeof(uint), SM_XSTR(QM_TMO_RETURN), 0, sm_conf_time_suffixes, NULL, NULL, "maximum time in queue" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_TMOUT_QUEUEDELAY, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_tmo_delay), sizeof(uint), SM_XSTR(QM_TMO_DELAY), 0, sm_conf_time_suffixes, NULL, NULL, "send delay warning after this time in queue" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_TMOUT_AR, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_tmo_ar), sizeof(uint), SM_XSTR(AQR_AR_TMOUT), 0, sm_conf_time_suffixes, NULL, NULL, "timeout in address resolver" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_TMOUT_DELIVERY, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_tmo_da), sizeof(uint), SM_XSTR(AQR_DA_TMOUT), 0, sm_conf_time_suffixes, NULL, NULL, "timeout for a single delivery attempt" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_TMOUT_SCHED, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_tmo_sched), sizeof(uint), SM_XSTR(AQR_SCHED_TMOUT), 0, sm_conf_time_suffixes, NULL, NULL, "maximum time waiting to be scheduled" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_WAIT_FOR_SERVER, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_wait4srv), sizeof(uint), "1", 0, sm_conf_time_suffixes, NULL, NULL, "maximum amount of time to wait for a server to become available" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_WAIT_FOR_CLIENT, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_wait4clt), sizeof(uint), "1", 0, sm_conf_time_suffixes, NULL, NULL, "maximum amount of time to wait for a client to become available" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, QMGR_CNF_LOG_LEVEL, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_loglevel), sizeof(uint), SM_XSTR(SM_LOG_LEVEL), 0, NULL, NULL, NULL, "" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, "log", sm_conf_type_section, offsetof(qmgr_cnf_T, q_cnf_log), 0, NULL, SM_CONF_FLAG_KEEP_DEFAULT, sm_log_spec_defs, NULL, NULL, SM_CNF_LOG SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, #if QMGR_DEBUG { SM_CONF_DEF_MAGIC, QMGR_CNF_DEBUG_LEVEL, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_debug), sizeof(uint), "0", 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, #endif /* QMGR_DEBUG */ #if QMGR_TEST { SM_CONF_DEF_MAGIC, QMGR_CNF_TESTS, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_tests), sizeof(uint), "0", 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, "test_total_transactions", sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_tot_tas), sizeof(uint32_t), "5000", 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, "test_once_transactions", sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_once_tas), sizeof(uint32_t), "100", 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, "test_max_fill_AQ", sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_max_fill_aq), sizeof(uint), "80", 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, "test_fill_rate", sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_fill_rate), sizeof(uint), "1000", 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, #endif /* QMGR_TEST */ { SM_CONF_DEF_MAGIC, "DSN_handling", sm_conf_type_section, 0, sizeof(qmgr_cnf_T), NULL, SM_CONF_FLAG_KEEP_DEFAULT, qmgr_dsn_defs, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, "DEFEDB", sm_conf_type_section, 0, sizeof(edb_cnf_T), NULL, SM_CONF_FLAG_KEEP_DEFAULT, qmgr_edb_defs, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, { SM_CONF_DEF_MAGIC, "control_socket", sm_conf_type_string, offsetof(qmgr_cnf_T, q_cnf_ctlsock), 0, NULL, 0, NULL, NULL, NULL, "name of control socket" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, "conf", sm_conf_type_string, offsetof(qmgr_cnf_T, q_cnf_confmap_fn), 0, "qmgr_conf.db", 0, NULL, NULL, NULL, "name of configuration map (including extension)" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, "double_bounce_address", sm_conf_type_string, offsetof(qmgr_cnf_T, q_cnf_pm_add), 0, NULL, 0, NULL, NULL, NULL, "full address for double bounces (defaults to )" SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, EVTHR_CNF_MIN_THR, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_min_thr), sizeof(uint), SM_XSTR(SM_QMGR_MIN_THR), 0, NULL, NULL, NULL, EVTHR_COMM_MIN_THR SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, EVTHR_CNF_MAX_THR, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_max_thr), sizeof(uint), SM_XSTR(SM_QMGR_MAX_THR), 0, NULL, NULL, NULL, EVTHR_COMM_MAX_THR SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, EVTHR_CNF_MAX_FD, sm_conf_type_u32, offsetof(qmgr_cnf_T, q_cnf_max_fd), sizeof(uint), SM_XSTR(SM_QMGR_MAX_FD), 0, NULL, NULL, NULL, EVTHR_COMM_MAX_FD SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, MCP_DEFS(qmgr_cnf_T, q_cnf) /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; EXTERN sm_conf_definition_T qmgr_global_defs[] #if SM_QMGRCNFDEF = { { SM_CONF_DEF_MAGIC, "SMTPC_socket", sm_conf_type_string, offsetof(qmgr_cnf_T, q_cnf_smtpcsock), 0, smsmtpcsock, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, "SMTPS_socket", sm_conf_type_string, offsetof(qmgr_cnf_T, q_cnf_smtpssock), 0, smsmtpssock, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, "SMAR_socket", sm_conf_type_string, offsetof(qmgr_cnf_T, q_cnf_smarsock), 0, smarsock, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, "CDB_base_directory", sm_conf_type_string, offsetof(qmgr_cnf_T, q_cnf_cdb_base), 0, "", 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, "hostname", sm_conf_type_string, offsetof(qmgr_cnf_T, q_cnf_hostname), 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(SM_QMGR_CNF_MAGIC) }, { SM_CONF_DEF_MAGIC, "qmgr", sm_conf_type_section, 0, sizeof(qmgr_cnf_T), NULL, SM_CONF_FLAG_KEEP_DEFAULT, qmgr_defs, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, /* Sentinel */ { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0)} } #endif /* SM_QMGRCNFDEF */ ; #undef EXTERN #endif /* SM_QMGRCNFDEF_H */