/*
 * 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: smarcnfdef.h,v 1.58 2007/11/14 06:03:08 ca Exp $
 */

#ifndef SM_SMARCNFDEF_H
#define SM_SMARCNFDEF_H 1

#include "sm/generic.h"
#include "sm/net.h"
#include "sm/sm-conf.h"
#include "sm/sm-conf-time.h"
#include "sm/mta.h"
#include "sm/cnf.h"
#include "sm/smardef.h"
#include "sm/smarcnf.h"
#include "sm/mcpcnfs.h"
#include "sm/logcnfdef.h"
#include "sm/greycnfdef.h"

#if SM_SMARCNFDEF
#define EXTERN
#else /* SM_SMARCNFDEF */
#define EXTERN extern
#endif /* SM_SMARCNFDEF */

EXTERN
sm_conf_definition_T const
smar_dns_flag_names[]
#if SM_SMARCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "Use_TCP",		sm_conf_type_choice_value,
	DNS_TSK_FL_USETCP,
	0, NULL, 0, NULL, NULL, NULL,
	"use TCP for connection to DNS server"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "Use_Connect",	sm_conf_type_choice_value,
	DNS_TSK_FL_CONNECTUDP,
	0, NULL, 0, NULL, NULL, NULL,
	"use connect(2) even with UDP"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "Use_resolvconf",	sm_conf_type_choice_value,
	DNS_USE_RSLVCNF,
	0, NULL, 0, NULL, NULL, NULL,
	"read nameservers from /etc/resolv.conf"
	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_SMARCNFDEF */
;

#define DNSBL_TEMPFAIL	0x01

#if 0
EXTERN
sm_conf_definition_T const
smar_dnsbl_flag_names[]
#if SM_SMARCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "tempfail",	sm_conf_type_choice_value,
	DNSBL_TEMPFAIL	},

/* 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_SMARCNFDEF */
;
#endif /* 0 */


EXTERN
sm_conf_definition_T
smar_dnsbl_defs[]
#if SM_SMARCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "domain",		sm_conf_type_string,
	offsetof(smar_cnfdnsbl_T, scdb_name),	0,	NULL,
	SM_CONF_FLAG_STRICTLY_REQUIRED,
	NULL,	NULL,	NULL,	"DNS blocklist lookup domain"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "tag",		sm_conf_type_string,
	offsetof(smar_cnfdnsbl_T, scdb_tag),	0,	NULL,
	SM_CONF_FLAG_STRICTLY_REQUIRED,
	NULL,	NULL,	NULL,	"DNS blocklist access map lookup tag"
	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_SMARCNFDEF */
;


EXTERN
sm_conf_definition_T
smar_dnsbls_defs[]
#if SM_SMARCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "",		sm_conf_type_section,
	offsetof(smar_cnf_T, smar_cnf_dnsbl), sizeof(smar_cnfdnsbl_T),
	NULL, 0,
	smar_dnsbl_defs,
	NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "", sm_conf_type_array_n,
	offsetof(smar_cnf_T, smar_cnf_dnsbl_n), sizeof(uint),
	NULL, 0, NULL, 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_SMARCNFDEF */
;


EXTERN
sm_conf_definition_T
smar_map_definitions[]
#if SM_MAPCNFDEF
=
{
	{
		SM_CONF_DEF_MAGIC,
		"map declaration",
		sm_conf_type_union,
		offsetof(smar_cnf_T, smar_cnf_mapdecl.mapdecl_maps),
		sizeof(mapspec_T),
		NULL,
		0,
		map_spec_defs,
		NULL,
		NULL,
		"maps"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

	{
		SM_CONF_DEF_MAGIC,
		"n",
		sm_conf_type_array_n,
		offsetof(smar_cnf_T, smar_cnf_mapdecl.mapdecl_n),
		sizeof(uint),
		NULL,
		0,
		map_spec_defs,
		NULL,
		NULL,
		"number of maps (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_MAPCNFDEF */
;


EXTERN
sm_conf_definition_T const
smar_alias_flags[]
#if SM_SMARCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "localpart",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_LP,
	0, NULL, 0, NULL, NULL, NULL,
	"apply aliases to local part"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "local_domains",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_LD,
	0, NULL, 0, NULL, NULL, NULL,
	"apply aliases to local domains"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "all_domains",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_ALL,
	0, NULL, 0, NULL, NULL, NULL,
	"apply aliases to all domains"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "detail_plus",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_DETPLUS,
	0, NULL, 0, NULL, NULL, NULL,
	"perform ++ matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "detail_star",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_DETSTAR,
	0, NULL, 0, NULL, NULL, NULL,
	"perform +* matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "star",		sm_conf_type_choice_value,
	SMARCNF_FL_MAP_STAR,
	0, NULL, 0, NULL, NULL, NULL,
	"perform * matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "domain",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_DOMAIN,
	0, NULL, 0, NULL, NULL, NULL,
	"perform @domain matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "dotsubdomain",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_DOTSUBDOM,
	0, NULL, 0, NULL, NULL, NULL,
	"perform @.sub.domain matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "implicitly_match_detail",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_IMPLDET,
	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, "full_address",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_FULL,
	0, NULL, 0, NULL, NULL, NULL,
	"match full address"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "replace_macros",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_MREPL,
	0, NULL, 0, NULL, NULL, NULL, "replace macros"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "preserve_domain",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_PD,
	0, NULL, 0, NULL, NULL, NULL, "preserve domain from key (LHS)"
	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_SMARCNFDEF */
;



EXTERN
sm_conf_definition_T
smar_alias_defs[]
#if SM_SMARCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "file",				sm_conf_type_string,
	offsetof(smar_cnf_T, smar_cnf_alias_fn),	0,
	SMAR_ALIASES_FILE,	0,	NULL,	NULL,	NULL,
	"filename of aliases map (including extension)"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "flags",				sm_conf_type_choice,
	offsetof(smar_cnf_T, smar_cnf_alias_fl),	sizeof(uint),
	NULL,	SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL,
	smar_alias_flags,	NULL,	NULL,
	"aliases lookup flags"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "name",				sm_conf_type_string,
	offsetof(smar_cnf_T, smar_cnf_alias_name),	0,
	NULL,	0, NULL,	NULL,	NULL,
	"name of aliases map"
	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_SMARCNFDEF */
;

EXTERN
sm_conf_definition_T const
smar_lum_flags[]
#if SM_SMARCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "localpart",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_LP,
	0, NULL, 0, NULL, NULL, NULL,
	"lookup only local part"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "local_domains",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_LD,
	0, NULL, 0, NULL, NULL, NULL,
	"lookup local domains"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "all_domains",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_ALL,
	0, NULL, 0, NULL, NULL, NULL,
	"lookup all domains"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "detail_plus",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_DETPLUS,
	0, NULL, 0, NULL, NULL, NULL,
	"perform ++ matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "detail_star",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_DETSTAR,
	0, NULL, 0, NULL, NULL, NULL,
	"perform +* matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "star",		sm_conf_type_choice_value,
	SMARCNF_FL_MAP_STAR,
	0, NULL, 0, NULL, NULL, NULL,
	"perform * matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "dotsubdomain",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_DOTSUBDOM,
	0, NULL, 0, NULL, NULL, NULL,
	"perform @.sub.domain matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "implicitly_match_detail",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_IMPLDET,
	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, "full_address",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_FULL,
	0, NULL, 0, NULL, NULL, NULL,
	"match full 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_SMARCNFDEF */
;


EXTERN
sm_conf_definition_T
smar_lum_defs[]
#if SM_SMARCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "name",				sm_conf_type_string,
	offsetof(smar_cnf_T, smar_cnf_lum_name),	0,
	NULL,	SM_CONF_FLAG_STRICTLY_REQUIRED, NULL,	NULL,	NULL,
	"name of local user map"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "flags",				sm_conf_type_choice,
	offsetof(smar_cnf_T, smar_cnf_lum_fl),		sizeof(uint),
	NULL,	SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL,
	smar_lum_flags,	NULL,	NULL,
	"local user map lookup flags"
	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_SMARCNFDEF */
;


EXTERN
sm_conf_definition_T const
smar_mt_flags[]
#if SM_SMARCNFDEF
=
{
/* WHICH FLAGS should be allowed here and what is the default? */
{ SM_CONF_DEF_MAGIC, "detail_plus",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_DETPLUS,
	0, NULL, 0, NULL, NULL, NULL,
	"perform ++ matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "detail_star",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_DETSTAR,
	0, NULL, 0, NULL, NULL, NULL,
	"perform +* matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "star",		sm_conf_type_choice_value,
	SMARCNF_FL_MAP_STAR,
	0, NULL, 0, NULL, NULL, NULL,
	"perform * matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "domain",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_DOMAIN,
	0, NULL, 0, NULL, NULL, NULL,
	"perform domain matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "dotsubdomain",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_DOTSUBDOM,
	0, NULL, 0, NULL, NULL, NULL,
	"perform .sub.domain matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
{ SM_CONF_DEF_MAGIC, "dot",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_DOT,
	0, NULL, 0, NULL, NULL, NULL,
	"perform . matching"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "implicitly_match_detail",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_IMPLDET,
	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, "full_address",	sm_conf_type_choice_value,
	SMARCNF_FL_MAP_FULL,
	0, NULL, 0, NULL, NULL, NULL,
	"match full 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_SMARCNFDEF */
;


EXTERN
sm_conf_definition_T
smar_mt_defs[]
#if SM_SMARCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "file",				sm_conf_type_string,
	offsetof(smar_cnf_T, smar_cnf_mt_fn),	0,
	SMAR_MT_NAME,	0,	NULL,	NULL,	NULL,
	"filename of mailertable file"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "name",				sm_conf_type_string,
	offsetof(smar_cnf_T, smar_cnf_mt_name),	0,
	NULL,	0, NULL,	NULL,	NULL,
	"name of mailertable map"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "flags",				sm_conf_type_choice,
	offsetof(smar_cnf_T, smar_cnf_mt_fl),	sizeof(uint),
	NULL,	SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL,
	smar_mt_flags,	NULL,	NULL,
	"mailertable lookup flags"
	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_SMARCNFDEF */
;

EXTERN
sm_conf_definition_T
smar_access_defs[]
#if SM_SMARCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "file",				sm_conf_type_string,
	offsetof(smar_cnf_T, smar_cnf_access_fn),	0,
	SMAR_ACCESS_FILE,	0,	NULL,	NULL,	NULL,
	"filename of access map (including extension)"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "name",				sm_conf_type_string,
	offsetof(smar_cnf_T, smar_cnf_access_name),	0,
	NULL,	0, NULL,	NULL,	NULL,
	"name of access map"
	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_SMARCNFDEF */
;


EXTERN
sm_conf_definition_T
smar_dns_defs[]
#if SM_SMARCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "nameservers",		sm_conf_type_argv,
	offsetof(smar_cnf_T, smar_cnf_nameservers),	SM_DNS_MAX_TSKS,
	NULL,	0,	NULL,	NULL,	NULL,
	"List of nameservers (IPv4 addresses)"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "flags",			sm_conf_type_choice,
	offsetof(smar_cnf_T, smar_cnf_dns_flags),	sizeof(uint),
	NULL,	SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL,
	smar_dns_flag_names,	NULL, NULL,
	"DNS flags"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "timeout",			sm_conf_type_u32,
	offsetof(smar_cnf_T, smar_cnf_dns_timeout),	sizeof(uint),
	SM_XSTR(DNS_TIMEOUT),	0,	sm_conf_time_suffixes,
	NULL, NULL,
	"DNS query timeout"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "max_timeouts",		sm_conf_type_u32,
	offsetof(smar_cnf_T, smar_cnf_dns_max_tmos),	sizeof(ushort),
	SM_XSTR(DNS_MAXTIMEOUTS),	0,	NULL, NULL, NULL,
	"number of timeouts after which the name server is considered unresponsive"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "retries",			sm_conf_type_u32,
	offsetof(smar_cnf_T, smar_cnf_dns_retries),	sizeof(ushort),
	"0",	0,	NULL, NULL, NULL,
	"maximum number of DNS query retries"
	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_SMARCNFDEF */
;


EXTERN
sm_conf_definition_T
smar_defs[]
#if SM_SMARCNFDEF
=
{

{ SM_CONF_DEF_MAGIC, "DNS",			sm_conf_type_section,
	0,	sizeof(smar_cnf_T),
	NULL, SM_CONF_FLAG_KEEP_DEFAULT,	smar_dns_defs,
	NULL, NULL,
	"DNS related options"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "nameserver",		sm_conf_type_argv,
	offsetof(smar_cnf_T, smar_cnf_nameservers),	SM_DNS_MAX_TSKS,
	NULL,	0,	NULL,	NULL,	NULL,
	"List of nameservers (IPv4 addresses)"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "DNS_Flags",		sm_conf_type_choice,
	offsetof(smar_cnf_T, smar_cnf_dns_flags),	sizeof(uint),
	NULL,	SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL,
	smar_dns_flag_names,	NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "DNS_timeout",		sm_conf_type_u32,
	offsetof(smar_cnf_T, smar_cnf_dns_timeout),	sizeof(uint),
	SM_XSTR(DNS_TIMEOUT),	0,	sm_conf_time_suffixes,
	NULL, NULL, NULL
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "log_level",		sm_conf_type_u32,
	offsetof(smar_cnf_T, smar_cnf_loglevel),	sizeof(uint),
	SM_XSTR(SM_LOG_LEVEL),
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},
{ SM_CONF_DEF_MAGIC, "log",			sm_conf_type_section,
	offsetof(smar_cnf_T, smar_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(0) },

/* event thread options; enforce lower/upper limits? */
{ SM_CONF_DEF_MAGIC, EVTHR_CNF_MIN_THR,		sm_conf_type_u32,
	offsetof(smar_cnf_T, smar_cnf_minthr),	sizeof(uint),
	SM_XSTR(SMAR_CNF_MINTHR),	0,	NULL,	NULL,	NULL,
	EVTHR_COMM_MIN_THR
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},
{ SM_CONF_DEF_MAGIC, EVTHR_CNF_MAX_THR,		sm_conf_type_u32,
	offsetof(smar_cnf_T, smar_cnf_maxthr),	sizeof(uint),
	SM_XSTR(SMAR_CNF_MAXTHR),	0,	NULL,	NULL,	NULL,
	EVTHR_COMM_MAX_THR
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},
{ SM_CONF_DEF_MAGIC, EVTHR_CNF_MAX_FD,		sm_conf_type_u32,
	offsetof(smar_cnf_T, smar_cnf_maxfd),	sizeof(uint),
	SM_XSTR(SMAR_CNF_MAXFD),	0,	NULL,	NULL,	NULL,
	EVTHR_COMM_MAX_FD
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},

/*
{ SM_CONF_DEF_MAGIC, "local_user_map",		sm_conf_type_string,
	offsetof(smar_cnf_T, smar_cnf_lum_name),	0,
	NULL,	0,	NULL,	NULL,	NULL,
	"Map specifying valid local users/addresses"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},
*/

{ SM_CONF_DEF_MAGIC, "local_user_map", sm_conf_type_section,
	0, sizeof(smar_cnf_T), NULL, SM_CONF_FLAG_KEEP_DEFAULT, smar_lum_defs,
	NULL, NULL,
	"Map specifying valid local users/addresses"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "dnsbl",		sm_conf_type_array,
	0, SM_MAX_DNSBL,
	NULL, SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_FLAT,
	smar_dnsbls_defs,
	NULL,	NULL,
	"DNS based blacklists"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "greylisting", sm_conf_type_section,
	offsetof(smar_cnf_T, smar_cnf_grey), sizeof(smar_cnf_T),
	NULL, 0, greycnf_defs, NULL, NULL,
	"Greylisting options"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "map",		sm_conf_type_array,
	0,	/* offset */
	0,	/* size (# of elements) */
	NULL,	/* default */
	SM_CONF_FLAG_MULTIPLE,
	smar_map_definitions,
	NULL,  NULL,
	"Map declaration"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "address_delimiter",		sm_conf_type_string,
	offsetof(smar_cnf_T, smar_cnf_addr_delim),	0,
	"+",	0, 	NULL,	NULL,	NULL,
	"delimiter(s) for address extensions in local part"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "aliases", sm_conf_type_section,
	0, sizeof(smar_cnf_T), NULL, SM_CONF_FLAG_KEEP_DEFAULT, smar_alias_defs,
	NULL, NULL,
	"aliases definition"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "mailertable",		sm_conf_type_section,
	0, sizeof(smar_cnf_T), NULL, SM_CONF_FLAG_KEEP_DEFAULT, smar_mt_defs,
	NULL, NULL,
	"mailertable definition"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "access_map",		sm_conf_type_section,
	0,	sizeof(smar_cnf_T),
	NULL, SM_CONF_FLAG_KEEP_DEFAULT,	smar_access_defs,
	NULL, NULL,
	"access map definition"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},

	MCP_DEFS(smar_cnf_T, smar_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_SMARCNFDEF */
;

EXTERN
sm_conf_definition_T
smar_global_defs[]
#if SM_SMARCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "SMAR_socket",	sm_conf_type_string,
	offsetof(smar_cnf_T, smar_cnf_sock),	0,	smarsock,
	0,	NULL,	NULL,	NULL,
	"Address resolver server socket"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},
{ SM_CONF_DEF_MAGIC, "hostname",		sm_conf_type_string,
	offsetof(smar_cnf_T, smar_cnf_hostname),	0,	NULL,
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},
{ SM_CONF_DEF_MAGIC, "CDB_base_directory",	sm_conf_type_string,
	offsetof(smar_cnf_T, smar_cnf_cdb_base),	0,	"",
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SMAR_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "smar", sm_conf_type_section,
	0, sizeof(smar_cnf_T), NULL, SM_CONF_FLAG_KEEP_DEFAULT, smar_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_SMARCNFDEF */
;

#undef EXTERN

#endif /* SM_SMARCNFDEF_H */


syntax highlighted by Code2HTML, v. 0.9.1