/*
* 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: sscnfdef.h,v 1.107 2007/09/29 02:53:39 ca Exp $
*/
#ifndef SM_SSCNFDEF_H
#define SM_SSCNFDEF_H 1
#include "sm/generic.h"
#include "sm/types.h"
#include "sm/time.h"
#include "sm/sm-conf.h"
#include "sm/sm-conf-time.h"
#include "sm/sm-conf-byte.h"
#include "sm/mta.h"
#include "sm/cnf.h"
#include "sm/ssdef.h"
#include "sm/sscnf.h"
#include "sm/smtpdef.h"
#if SM_SSCNFDEF
#define SM_SOCKCNFDEF 1
#define SM_TLSREQCNFDEF 1
#endif
#include "sm/sockcnfdef.h"
#include "sm/tlsreqcnf.h"
#include "sm/tlsreqcnfs.h"
#include "sm/mcpcnfs.h"
#include "sm/tlscnfs.h"
#if MTA_USE_SASL
#include "sm/sasl.h"
#endif
#define SS_CNFN_ACCESS "access"
#define SS_PR_CNF "protected_recipients"
#define SS_PR_A_SENDER "sender"
#define SS_PR_A_CLTADDR "client_ip"
#define SS_PR_USE_LOOKUP "generic_lookup"
#define SS_IMPLDET "implicitly_match_detail"
#define SS_LKP_SE_CONF "lookup_session_conf"
#if SM_SSCNFDEF
#define EXTERN
#else
#define EXTERN extern
#endif
#if MTA_USE_SASL
EXTERN
sm_conf_definition_T const
ss_auth_flag_names[]
#if SM_SSCNFDEF
=
{
{ SM_CONF_DEF_MAGIC,
"noplaintext", sm_conf_type_choice_value,
SASL_SEC_NOPLAINTEXT,
0, NULL, 0, NULL, NULL, NULL,
"do not allow mechanisms that are susceptable to simple passive attack"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"noactive", sm_conf_type_choice_value,
SASL_SEC_NOACTIVE,
0, NULL, 0, NULL, NULL, NULL,
"do not allow mechanisms that are susceptable to active attacks"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"nodictionary", sm_conf_type_choice_value,
SASL_SEC_NODICTIONARY,
0, NULL, 0, NULL, NULL, NULL,
"do not allow mechanisms that are susceptable to passive dictionary attack"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"forward_secrecy", sm_conf_type_choice_value,
SASL_SEC_FORWARD_SECRECY,
0, NULL, 0, NULL, NULL, NULL,
"allow only mechanism with forward secrecy (breaking one session won't help break the next)"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"noanonymous", sm_conf_type_choice_value,
SASL_SEC_NOANONYMOUS,
0, NULL, 0, NULL, NULL, NULL,
"do not allow anonymous mechanisms"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"pass_credentials", sm_conf_type_choice_value,
SASL_SEC_PASS_CREDENTIALS,
0, NULL, 0, NULL, NULL, NULL,
"require mechanisms that can pass client credentials"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"mutual_auth", sm_conf_type_choice_value,
SASL_SEC_MUTUAL_AUTH,
0, NULL, 0, NULL, NULL, NULL,
"require mechanisms that support mutual authentication"
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_SSCNFDEF */
;
#endif /* MTA_USE_SASL */
EXTERN
sm_conf_definition_T const
ss_flag_names[]
#if SM_SSCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "u|", sm_conf_type_u32_suffix, 1,
1, NULL, SM_CONF_FLAG_DONTPRINT, NULL, NULL, NULL, ""
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "|", sm_conf_type_u32_suffix, 1,
1, NULL, SM_CONF_FLAG_DONTPRINT, NULL, NULL, NULL, ""
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "u", sm_conf_type_u32_suffix, 1,
1, NULL, SM_CONF_FLAG_DONTPRINT, NULL, NULL, NULL, ""
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"8bitmime", sm_conf_type_choice_value,
SSC_CFL_8BITMIME,
0, NULL, 0, NULL, NULL, NULL,
"offer 8BITMIME"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
SS_CNFN_ACCESS, sm_conf_type_choice_value,
SSC_CFL_ACCESS_DB,
0, NULL, 0, NULL, NULL, NULL,
"use access map"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"greylisting", sm_conf_type_choice_value,
SSC_CFL_GREY,
0, NULL, 0, NULL, NULL, NULL,
"enable greylisting"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"delay_greylisting_error_until_DATA", sm_conf_type_choice_value,
SSC_CFL_GREY_DATA,
0, NULL, 0, NULL, NULL, NULL,
"delay an error from greylisting until the DATA command"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
SS_IMPLDET, sm_conf_type_choice_value,
SSC_CFL_ACCIMPLDET,
0, NULL, 0, NULL, NULL, NULL,
"implicitly match +detail without specifying +* or *"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"delay_checks", sm_conf_type_choice_value,
SSC_CFL_DELAY_CHKS,
0, NULL, 0, NULL, NULL, NULL,
"delay returning results from access check until RCPT stage"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"require_EHLO_before_MAIL", sm_conf_type_choice_value,
SSC_CFL_EHLO_REQ,
0, NULL, 0, NULL, NULL, NULL,
"require EHLO or HELO command before MAIL"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"spam_friend", sm_conf_type_choice_value,
SSC_CFL_SPAM_FRIEND,
0, NULL, 0, NULL, NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"spam_hater", sm_conf_type_choice_value,
SSC_CFL_SPAM_HATER,
0, NULL, 0, NULL, NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"background", sm_conf_type_choice_value,
SSC_CFL_BACKGROUND,
0, NULL, 0, NULL, NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"serialize_accept", sm_conf_type_choice_value,
SSC_CFL_SERIAL_ACC,
0, NULL, 0, NULL, NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"soft_bounce", sm_conf_type_choice_value,
SSC_CFL_SOFTBOUNCE,
0, NULL, 0, NULL, NULL, NULL,
"change permanent errors (5xy) into temporary errors (4xy)"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"lmtp_does_not_imply_relaying", sm_conf_type_choice_value,
SSC_CFL_LMTPNOTRELAY,
0, NULL, 0, NULL, NULL, NULL,
"do not implicitly allow relaying to domains that have lmtp: as RHS in mailertable"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"strict_EHLO_checks", sm_conf_type_choice_value,
SSC_CFL_EHLO_SYNTAX,
0, NULL, 0, NULL, NULL, NULL,
"perform strict checks for HELO/EHLO parameter"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"strict_EHLO_syntax", sm_conf_type_choice_value,
SSC_CFL_EHLO_SYNTAX,
0, NULL, 0, NULL, NULL, NULL,
"perform strict syntax checks for HELO/EHLO parameter"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"check_EHLO", sm_conf_type_choice_value,
SSC_CFL_CHK_EHLO,
0, NULL, 0, NULL, NULL, NULL,
"check HELO/EHLO parameter via access map"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"xverp", sm_conf_type_choice_value,
SSC_CFL_XVERP,
0, NULL, 0, NULL, NULL, NULL,
"offer XVERP extension to enable VERP for a transaction"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"starttls", sm_conf_type_choice_value,
SSSE_CFL_STARTTLS,
0, NULL, 0, NULL, NULL, NULL,
"offer STARTTLS"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"auth", sm_conf_type_choice_value,
SSSE_CFL_AUTH,
0, NULL, 0, NULL, NULL, NULL,
"offer AUTH"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"allow_data_before_greeting", sm_conf_type_choice_value,
SSSE_CFL_DATA_BEFORE_GREET,
0, NULL, 0, NULL, NULL, NULL,
"allow client to send data before SMTP greeting"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
#if MTA_USE_RSAD
{ SM_CONF_DEF_MAGIC,
"prdr", sm_conf_type_choice_value,
SSC_CFL_RSAD,
0, NULL, 0, NULL, NULL, NULL,
"offer PRDR"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
#endif
#if MTA_USE_TLS
{ SM_CONF_DEF_MAGIC,
SS_LKP_SE_CONF, sm_conf_type_choice_value,
SSC_CFL_SE_CONF,
0, NULL, 0, NULL, NULL, NULL,
"lookup session configuration data in access 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_SSCNFDEF */
;
EXTERN
sm_conf_definition_T const
ss_se_flag_names[]
#if SM_SSCNFDEF
=
{
/* hack to allow for "|" of initialization data and trailing "u" */
{ SM_CONF_DEF_MAGIC, "u|", sm_conf_type_u32_suffix, 1,
1, NULL, SM_CONF_FLAG_DONTPRINT, NULL, NULL, NULL, ""
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "|", sm_conf_type_u32_suffix, 1,
1, NULL, SM_CONF_FLAG_DONTPRINT, NULL, NULL, NULL, ""
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "u", sm_conf_type_u32_suffix, 1,
1, NULL, SM_CONF_FLAG_DONTPRINT, NULL, NULL, NULL, ""
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
/* other flags? see above */
{ SM_CONF_DEF_MAGIC,
"starttls", sm_conf_type_choice_value,
SSSE_CFL_STARTTLS,
0, NULL, 0, NULL, NULL, NULL,
"offer STARTTLS"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"auth", sm_conf_type_choice_value,
SSSE_CFL_AUTH,
0, NULL, 0, NULL, NULL, NULL,
"offer AUTH"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"delay_checks", sm_conf_type_choice_value,
SSSE_CFL_DELAY_CHKS,
0, NULL, 0, NULL, NULL, NULL,
"delay returning results from access check until RCPT stage"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"allow_data_before_greeting", sm_conf_type_choice_value,
SSSE_CFL_DATA_BEFORE_GREET,
0, NULL, 0, NULL, NULL, NULL,
"allow client to send data before SMTP greeting"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"require_EHLO_before_MAIL", sm_conf_type_choice_value,
SSSE_CFL_EHLO_REQ,
0, NULL, 0, NULL, NULL, NULL,
"require EHLO or HELO command before MAIL"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"strict_EHLO_syntax", sm_conf_type_choice_value,
SSSE_CFL_EHLO_SYNTAX,
0, NULL, 0, NULL, NULL, NULL,
"perform strict syntax checks for HELO/EHLO parameter"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"strict_EHLO_checks", sm_conf_type_choice_value,
SSSE_CFL_EHLO_SYNTAX,
0, NULL, 0, NULL, NULL, NULL,
"perform strict checks for HELO/EHLO parameter"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"check_EHLO", sm_conf_type_choice_value,
SSSE_CFL_CHK_EHLO,
0, NULL, 0, NULL, NULL, NULL,
"check HELO/EHLO parameter via access map"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
#if MTA_USE_RSAD
{ SM_CONF_DEF_MAGIC,
"prdr", sm_conf_type_choice_value,
SSSE_CFL_RSAD,
0, NULL, 0, NULL, NULL, NULL,
"offer PRDR"
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_SSCNFDEF */
;
EXTERN
sm_conf_definition_T
ss_se_feat_defs[]
#if SM_SSCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "name", sm_conf_type_section_title,
offsetof(ss_se_feat_T, sssf_name), 0,
NULL, 0 /*SM_CONF_FLAG_STRICTLY_REQUIRED*/,
NULL, NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "flags", sm_conf_type_choice,
offsetof(ss_se_feat_T, sssf_flags), sizeof(uint32_t),
SM_XSTR(SSSE_CFL_STARTTLS) "|" SM_XSTR(SSSE_CFL_AUTH),
SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_NUMERIC|SM_CONF_FLAG_PLURAL,
ss_se_flag_names,
NULL, NULL,
"flags to influence behavior per session"
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_SSCNFDEF */
;
EXTERN
sm_conf_definition_T
ss_se_feat_definitions[]
#if SM_SSCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "session feature declaration", sm_conf_type_section,
offsetof(ss_cnf_T, ss_cnf_se_feats.sssfs_feat), sizeof(ss_se_feat_T),
NULL, SM_CONF_FLAG_SECTION_MUST_BE_NAMED,
ss_se_feat_defs,
NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "n", sm_conf_type_array_n,
offsetof(ss_cnf_T, ss_cnf_se_feats.sssfs_n), sizeof(uint),
NULL, 0,
ss_se_feat_defs,
NULL, NULL,
"number of session features (implicit)"
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_SSCNFDEF */
;
EXTERN
sm_conf_definition_T const
ss_protrcpt_allow_names[]
#if SM_SSCNFDEF
=
{
{ SM_CONF_DEF_MAGIC,
SS_PR_A_SENDER, sm_conf_type_choice_value,
SSC_CFL_PROTBYMAIL,
0, NULL, 0, NULL, NULL, NULL,
"protect recipients by sender address"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
SS_PR_A_CLTADDR, sm_conf_type_choice_value,
SSC_CFL_PROTBYCLTADDR,
0, NULL, 0, NULL, NULL, NULL,
"protect recipients by client IPv4 address"
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_SSCNFDEF */
;
EXTERN
sm_conf_definition_T const
ss_protrcpt_match_names[]
#if SM_SSCNFDEF
=
{
/*
{ SM_CONF_DEF_MAGIC,
"exact", sm_conf_type_choice_value,
0x0,
0, NULL, 0, NULL, NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
*/
{ SM_CONF_DEF_MAGIC,
SS_PR_USE_LOOKUP, sm_conf_type_choice_value,
SSC_CFL_PROTMAP,
0, NULL, 0, NULL, NULL, NULL,
"use generic lookup algorithm"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
SS_IMPLDET, sm_conf_type_choice_value,
SSC_CFL_PROTIMPLDET,
0, NULL, 0, NULL, NULL, NULL,
"implicitly match +detail"
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_SSCNFDEF */
;
EXTERN
sm_conf_definition_T const
ss_protrcpt_defs[]
#if SM_SSCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "allow_by", sm_conf_type_choice,
offsetof(ss_cnf_T, ss_cnf_cflags), sizeof(uint32_t),
NULL,
SM_CONF_FLAG_KEEP_DEFAULT|SM_CONF_FLAG_STRICTLY_REQUIRED
|SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR,
ss_protrcpt_allow_names, NULL, NULL,
"allow by"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "match_type", sm_conf_type_choice,
offsetof(ss_cnf_T, ss_cnf_cflags), sizeof(uint32_t),
NULL,
SM_CONF_FLAG_KEEP_DEFAULT|SM_CONF_FLAG_OR,
ss_protrcpt_match_names, NULL, NULL,
"match type"
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_SSCNFDEF */
;
#if MTA_USE_PMILTER
EXTERN
sm_conf_definition_T const
ss_pm_flag_names[]
#if SM_SSCNFDEF
=
{
#if 0
/* default ... */
{ SM_CONF_DEF_MAGIC,
"ignore", sm_conf_type_choice_value,
SSC_MFL_PM_IGN,
0, NULL, 0, NULL, NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
/* should not be used either */
{ SM_CONF_DEF_MAGIC,
"tempfail", sm_conf_type_choice_value,
SSC_MFL_PM_TEMP,
0, NULL, 0, NULL, NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
#endif /* 0 */
{ SM_CONF_DEF_MAGIC,
"abort", sm_conf_type_choice_value,
SSC_MFL_PM_421,
0, NULL, 0, NULL, NULL, NULL,
"abort session on communication error"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"accept_but_reconnect", sm_conf_type_choice_value,
SSC_MFL_PM_AGAIN,
0, NULL, 0, NULL, NULL, NULL,
"try to reconnect on communication error, accept current session"
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_SSCNFDEF */
;
#endif /* MTA_USE_PMILTER */
#if MTA_USE_TLS
EXTERN
sm_conf_definition_T const
ss_tls_flag_names[]
#if SM_SSCNFDEF
=
{
{ SM_CONF_DEF_MAGIC,
"allow_relaying_if_verified", sm_conf_type_choice_value,
SSC_CFL_TLS_REL_VRFY,
0, NULL, 0, NULL, NULL, NULL,
"allow relaying if client cert has been verified"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC,
"check_access_map_for_relaying", sm_conf_type_choice_value,
SSC_CFL_TLS_REL_ACC,
0, NULL, 0, NULL, NULL, NULL,
"perform access map lookups to allow relaying"
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_SSCNFDEF */
;
EXTERN
sm_conf_definition_T
ss_tls_defs[]
#if SM_SSCNFDEF
=
{
TLS_DEFS(ss_cnf_T, ss),
{ SM_CONF_DEF_MAGIC, "flags", sm_conf_type_choice,
offsetof(ss_cnf_T, ss_cnf_cflags), sizeof(uint32_t),
NULL,
SM_CONF_FLAG_KEEP_DEFAULT|SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR
|SM_CONF_FLAG_PLURAL,
ss_tls_flag_names,
NULL, NULL,
"flags to influence behavior related to STARTTLS [see documentation]"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "cache_size", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_tls.tlscnf_cache_size), sizeof(uint),
NULL, 0, NULL, NULL, NULL,
"size of TLS session cache"
SM_LC_NO_ISSET
},
{ SM_CONF_DEF_MAGIC, "cache_timeout", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_tls.tlscnf_cache_tmout), sizeof(uint),
NULL, 0, sm_conf_time_suffixes,
NULL, NULL,
"timeout for TLS session cache"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "options", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_tls.tlscnf_options), sizeof(long),
SM_XSTR(SSL_OP_ALL), 0, NULL, NULL, NULL,
"options for SSL_CTX_set_options [expert only]"
SM_LC_ISSET(offsetof(ss_cnf_T, ss_cnf_tls.tlscnf_options_isset))
SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "requirements_violation", sm_conf_type_choice,
offsetof(ss_cnf_T, ss_cnf_tlsreqfail), sizeof(uint),
"abort",
SM_CONF_FLAG_KEEP_DEFAULT,
tlsreq_violation,
NULL, NULL,
"how to treat TLS requirements violation"
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_SSCNFDEF */
;
#endif /* MTA_USE_TLS */
#if MTA_USE_SASL
EXTERN
sm_conf_definition_T
ss_auth_defs[]
#if SM_SSCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "flags", sm_conf_type_choice,
offsetof(ss_cnf_T, ss_cnf_auth_flags), sizeof(uint32_t),
NULL, SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL,
ss_auth_flag_names,
NULL, NULL,
"Flags for Cyrus SASL (AUTH)"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "trusted_mechanisms", sm_conf_type_string,
offsetof(ss_cnf_T, ss_cnf_trusted_mechs), 0,
"PLAIN LOGIN DIGEST-MD5 CRAM-MD5",
0, NULL, NULL, NULL,
"List of SASL mechanisms for which relaying is allowed if a client "
"successfully authenticated using one of those"
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_SSCNFDEF */
;
#endif /* MTA_USE_SASL */
#if MTA_USE_PMILTER
EXTERN
sm_conf_definition_T
ss_pmilter_defs[]
#if SM_SSCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "socket", sm_conf_type_union,
offsetof(ss_cnf_T, ss_cnf_miltsockspec.sckspc_type),
sizeof(sockspec_T),
"unix", SM_CONF_FLAG_KEEP_DEFAULT, sock_spec_definitions,
NULL, NULL,
"socket for communication with pmilter"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "timeout", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_w4m2s), sizeof(uint),
SM_XSTR(TMO_W4M2S), 0, sm_conf_time_suffixes,
NULL, NULL,
"maximum amount of time to wait for a reply from a policy milter"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "flags", sm_conf_type_choice,
offsetof(ss_cnf_T, ss_cnf_mflags), sizeof(uint32_t),
NULL, SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL,
ss_pm_flag_names,
NULL, NULL,
"policy milter flags [see documentation]"
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_SSCNFDEF */
;
#endif /* MTA_USE_PMILTER */
EXTERN
sm_conf_definition_T
ss_defs[]
#if SM_SSCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "pass_fd_socket", sm_conf_type_string,
offsetof(ss_cnf_T, ss_cnf_fd_socket), 0,
NULL, SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"path of Unix domain socket to exchange file descriptor [use with MCP]"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "daemon_address", sm_conf_type_argv,
offsetof(ss_cnf_T, ss_cnf_sck_addr), SS_MAX_BIND_ADDRS, NULL,
0, NULL, NULL, NULL,
"address for daemon to listen on [do not use with MCP]"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "listen_queue", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_listenq_size), sizeof(int),
SM_XSTR(LISTENQ_SIZE_DEFAULT), SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"length of listen(2) queue [do not use with MCP]"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
#if SS_LOGDIR
{ SM_CONF_DEF_MAGIC, "log_directory", sm_conf_type_string,
offsetof(ss_cnf_T, ss_cnf_logdir), 0,
NULL, SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"Directory for logfiles"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
#endif /* SS_LOGDIR */
{ SM_CONF_DEF_MAGIC, "log_level", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_loglevel), sizeof(uint),
SM_XSTR(SM_LOG_LEVEL), 0, NULL, NULL, NULL,
"log level"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "log", sm_conf_type_section,
offsetof(ss_cnf_T, ss_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_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "relay_from", sm_conf_type_string,
offsetof(ss_cnf_T, ss_cnf_relay_from), 0,
RELAY_CLT, SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"allow relaying from IPv4 addresses that match this regular expression"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "relay_to", sm_conf_type_string,
offsetof(ss_cnf_T, ss_cnf_relay_to), 0,
RELAY_RCPT, SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"allow relaying to addresses that match this regular expression"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "cdb_gid", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_cdb_gid), sizeof(gid_t),
"0", SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"group id (numeric) to use for CDB files"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "id", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_id_base), sizeof(int),
"0", SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"(unique) id for server (if multiple SMTP servers are configured)"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_transactions", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_t_tot_lim), sizeof(uint),
SM_XSTR(SM_MAX_TAS), SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"maximum number of transactions per session"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_recipients_per_session", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_r_tot_lim), sizeof(uint),
SM_XSTR(SM_MAX_RCPTS), SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"maximum number of recipients per session"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_recipients_per_transaction", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_r_ta_lim), sizeof(uint),
SM_XSTR(SM_MAX_RCPTS), SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"maximum number of recipients per transaction"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_hops", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_maxhops), sizeof(uint),
SM_XSTR(MTA_MAXHOPS), SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"maximum number of hops (Received: headers)"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_message_size", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_max_msg_sz_kb), sizeof(uint),
SM_XSTR(SM_MAX_MSG_SZ_KB), SM_CONF_FLAG_KEEP_DEFAULT,
sm_conf_Kbyte_suffixes, NULL, NULL,
"maximum message size (KB)"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_bad_commands_per_session", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_sess_max_badcmds), sizeof(uint),
SM_XSTR(SS_SESS_MAX_BADCMDS), SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"maximum number of bad SMTP commands per session"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_invalid_addresses_per_session", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_sess_max_invldaddr), sizeof(uint),
SM_XSTR(SS_SESS_MAX_INVLDADDR), SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"maximum number of SMTP commands with invalid addresses per session"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_nop_commands_between_transactions", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_sess_max_nopcmds), sizeof(uint),
SM_XSTR(SS_SESS_MAX_NOPCMDS), SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"maximum number of nop SMTP commands between transactions"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_bad_commands_per_transaction", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_ta_max_badcmds), sizeof(uint),
SM_XSTR(SS_TA_MAX_BADCMDS), SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"maximum number of bad SMTP commands per transaction"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_nop_commands_in_transaction", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_ta_max_nopcmds), sizeof(uint),
SM_XSTR(SS_TA_MAX_NOPCMDS), SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"maximum number of nop SMTP commands in a single transaction"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_invalid_addresses_per_transaction", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_ta_max_invldaddr), sizeof(uint),
SM_XSTR(SS_TA_MAX_INVLDADDR), SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"maximum number of SMTP commands with invalid addresses per transaction"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "io_timeout", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_timeout), sizeof(sm_intvl_T),
SM_XSTR(SS_IO_TIMEOUT), SM_CONF_FLAG_KEEP_DEFAULT,
sm_conf_time_suffixes, NULL, NULL,
"timeout for SMTP I/O operations"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "module_timeout", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_mod_tmo), sizeof(sm_intvl_T),
SM_XSTR(SS_RCB_SND_TMO), 0, sm_conf_time_suffixes,
NULL, NULL,
"timeout for communication with other modules"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "flags", sm_conf_type_choice,
offsetof(ss_cnf_T, ss_cnf_cflags), sizeof(uint32_t),
SM_XSTR(SSSE_CFL_STARTTLS) "|" SM_XSTR(SSSE_CFL_AUTH),
SM_CONF_FLAG_KEEP_DEFAULT|SM_CONF_FLAG_MULTIPLE
|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL|SM_CONF_FLAG_NUMERIC,
ss_flag_names,
NULL, NULL,
"flags to influence behavior [see documentation]"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, SS_PR_CNF, sm_conf_type_section,
0, sizeof(uint32_t),
NULL, SM_CONF_FLAG_KEEP_DEFAULT, ss_protrcpt_defs,
NULL, NULL,
"how to protect recipient addresses [see documentation]"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_threads", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_max_threads), sizeof(uint),
"0", SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL,
"maximum number of threads"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "max_wait_threads", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_max_wait_threads), sizeof(uint),
"8", SM_CONF_FLAG_KEEP_DEFAULT, NULL, NULL, NULL,
"maximum number of waiting threads"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "min_wait_threads", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_min_wait_threads), sizeof(uint),
"2", SM_CONF_FLAG_KEEP_DEFAULT, NULL, NULL, NULL,
"minimum number of waiting threads"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "processes", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_vp_count), sizeof(int),
"1", SM_CONF_FLAG_KEEP_DEFAULT, NULL, NULL, NULL,
"number of processes to start"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "wait_for_server", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_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_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "wait_for_smar", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_w4a2s), sizeof(uint),
SM_XSTR(TMO_W4A2S), 0, sm_conf_time_suffixes,
NULL, NULL,
"maximum amount of time to wait for a reply from smar"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
{ SM_CONF_DEF_MAGIC, "debug_level", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_debug), sizeof(uint),
"0", 0, NULL, NULL, NULL,
"debug level"
SM_LC_NO_ISSET
SM_LC_SET_MAGIC(SM_SS_CNF_MAGIC)
},
#if MTA_USE_TLS
{ SM_CONF_DEF_MAGIC, "tls", sm_conf_type_section,
0, sizeof(ss_cnf_T), NULL,
SM_CONF_FLAG_KEEP_DEFAULT,
ss_tls_defs,
NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
#endif /* MTA_USE_TLS */
#if MTA_USE_SASL
{ SM_CONF_DEF_MAGIC, "auth", sm_conf_type_section,
0, sizeof(ss_cnf_T), NULL,
SM_CONF_FLAG_KEEP_DEFAULT,
ss_auth_defs,
NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
#endif /* MTA_USE_SASL */
#if MTA_USE_PMILTER
{ SM_CONF_DEF_MAGIC, "pmilter", sm_conf_type_section,
0, sizeof(ss_cnf_T), NULL,
SM_CONF_FLAG_KEEP_DEFAULT|SM_CONF_FLAG_DPRCD,
ss_pmilter_defs,
NULL, NULL,
"policy milter"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "policy_milter", sm_conf_type_section,
0, sizeof(ss_cnf_T), NULL,
SM_CONF_FLAG_KEEP_DEFAULT,
ss_pmilter_defs,
NULL, NULL,
"policy milter"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
#endif /* MTA_USE_PMILTER */
{ SM_CONF_DEF_MAGIC, "session_features", sm_conf_type_array,
0, /* offset */
0, /* size (# of elements) */
NULL, /* default */
SM_CONF_FLAG_MULTIPLE,
ss_se_feat_definitions,
NULL, NULL,
"session feature declarations"
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
MCP_SRV_DEFS(ss_cnf_T, ss_cnf),
MCP_DEFS(ss_cnf_T, ss_cnf)
#if SS_TEST
{ SM_CONF_DEF_MAGIC, "tests", sm_conf_type_u32,
offsetof(ss_cnf_T, ss_cnf_tests), sizeof(uint),
"0", 0, NULL, NULL, NULL, NULL
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_SSCNFDEF */
;
EXTERN
sm_conf_definition_T
ss_global_defs[]
#if SM_SSCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "SMTPS_socket", sm_conf_type_string,
offsetof(ss_cnf_T, ss_cnf_smtpssock), 0,
smsmtpssock, SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "SMAR_socket", sm_conf_type_string,
offsetof(ss_cnf_T, ss_cnf_smarsock), 0,
smarsock, SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "CDB_base_directory", sm_conf_type_string,
offsetof(ss_cnf_T, ss_cnf_cdb_base), 0,
"", SM_CONF_FLAG_KEEP_DEFAULT,
NULL, NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "hostname", sm_conf_type_string,
offsetof(ss_cnf_T, ss_cnf_hostname), 0, NULL,
0, NULL, NULL, NULL, NULL
SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "smtps", sm_conf_type_section,
0, sizeof(ss_cnf_T), NULL,
SM_CONF_FLAG_KEEP_DEFAULT|SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_PARSE_ONLY,
ss_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_SSCNFDEF */
;
#undef EXTERN
#endif /* SM_SSCNFDEF_H */
syntax highlighted by Code2HTML, v. 0.9.1