/*
 * 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: mapcnfdef.h,v 1.19 2007/05/01 04:18:32 ca Exp $
 */

#ifndef SM_MAPCNFDEF_H
#define SM_MAPCNFDEF_H 1

#include "sm/generic.h"
#include "sm/map.h"
#include "sm/mapcnf.h"
#include "sm/sm-conf.h"

/*
**  Problem: different maps need different parameters for open:
**  socketmap: use sockcnfdef?
**  sequence map: array of names?
**  hash: optional parameters, e.g., cache size?
**  should this be a union?
*/


#if SM_MAPCNFDEF
#define EXTERN
#else
#define EXTERN extern
#endif



EXTERN
sm_conf_definition_T const
mst_flag_names[]
#if SM_MAPCNFDEF
=
{
{ SM_CONF_DEF_MAGIC,
	"implicitly_match_detail",		sm_conf_type_choice_value,
	SM_MAPSPEC_FL_IMPLDET,
	0, NULL, 0, NULL, NULL, NULL,
	"implicitly match +detail without specifying +* or *"
	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
mst_hash_defs[]
#if SM_MAPCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "name",		sm_conf_type_section_title,
	offsetof(mapspec_T, mst_name),	0,
	NULL,	SM_CONF_FLAG_STRICTLY_REQUIRED,
	NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "type",		sm_conf_type_string,
	offsetof(mapspec_T, mst_hash.mst_hash_type),	0,
	"hash",
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "file",		sm_conf_type_string,
	offsetof(mapspec_T, mst_hash.mst_hash_fn),	0,
	NULL,	SM_CONF_FLAG_STRICTLY_REQUIRED,
	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_MAPCNFDEF */
;

EXTERN
sm_conf_definition_T
mst_bht_defs[]
#if SM_MAPCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "name",		sm_conf_type_section_title,
	offsetof(mapspec_T, mst_name),	0,
	NULL,	SM_CONF_FLAG_STRICTLY_REQUIRED,
	NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "type",		sm_conf_type_string,
	offsetof(mapspec_T, mst_bht.mst_bht_type),	0,
	"bhtable",
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "file",		sm_conf_type_string,
	offsetof(mapspec_T, mst_bht.mst_bht_fn),	0,
	NULL,	SM_CONF_FLAG_STRICTLY_REQUIRED,
	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_MAPCNFDEF */
;



EXTERN
sm_conf_definition_T
mst_socket_defs[]
#if SM_MAPCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "name",		sm_conf_type_section_title,
	offsetof(mapspec_T, mst_name),	0,
	NULL,	SM_CONF_FLAG_STRICTLY_REQUIRED,
	NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "type",		sm_conf_type_string,
	offsetof(mapspec_T, mst_socket.mst_socket_type),	0,
	"socket",
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "mapname",		sm_conf_type_string,
	offsetof(mapspec_T, mst_socket.mst_socket_mapname),	0,
	NULL,	SM_CONF_FLAG_STRICTLY_REQUIRED,
	NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "path",			sm_conf_type_string,
	offsetof(mapspec_T, mst_socket.mst_socket_path),	0,
	NULL,
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "address",		sm_conf_type_ipv4,
	offsetof(mapspec_T, mst_socket.mst_socket_ipv4),	sizeof(ipv4_T),
	NULL,
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "port",		sm_conf_type_u32,
	offsetof(mapspec_T, mst_socket.mst_socket_port),	sizeof(short),
	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_MAPCNFDEF */
;


EXTERN
sm_conf_definition_T
mst_seq_defs[]
#if SM_MAPCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "name",		sm_conf_type_section_title,
	offsetof(mapspec_T, mst_seq.mst_seq_name),	0,
	NULL,	SM_CONF_FLAG_STRICTLY_REQUIRED,
	NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "type",		sm_conf_type_string,
	offsetof(mapspec_T, mst_seq.mst_seq_type),	0,
	"seq",
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "maps",		sm_conf_type_argv,
	offsetof(mapspec_T, mst_seq.mst_seq_maps),	0,
	NULL,	SM_CONF_FLAG_STRICTLY_REQUIRED,
	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_MAPCNFDEF */
;


EXTERN
sm_conf_definition_T
mst_passwd_defs[]
#if SM_MAPCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "name",		sm_conf_type_section_title,
	offsetof(mapspec_T, mst_name),	0,
	NULL,	SM_CONF_FLAG_STRICTLY_REQUIRED,
	NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "type",		sm_conf_type_string,
	offsetof(mapspec_T, mst_passwd.mst_passwd_type),	0,
	"passwd",
	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_MAPCNFDEF */
;


#if MTA_USE_TINYCDB
EXTERN
sm_conf_definition_T
mst_cdb_defs[]
#if SM_MAPCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "name",		sm_conf_type_section_title,
	offsetof(mapspec_T, mst_name),	0,
	NULL,	SM_CONF_FLAG_STRICTLY_REQUIRED,
	NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "type",		sm_conf_type_string,
	offsetof(mapspec_T, mst_cdb.mst_cdb_type),	0,
	"cdb",
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC, "file",		sm_conf_type_string,
	offsetof(mapspec_T, mst_cdb.mst_cdb_fn),	0,
	NULL,	SM_CONF_FLAG_STRICTLY_REQUIRED,
	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_MAPCNFDEF */
;
#endif /* MTA_USE_TINYCDB */


EXTERN
sm_conf_definition_T
map_spec_defs[]
#if SM_MAPCNFDEF
=
{
	{ SM_CONF_DEF_MAGIC, "type", sm_conf_type_union_type,
		offsetof(mapspec_T, mst_kind), sizeof(mapspec_kind_T),
		NULL, 0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

	{ SM_CONF_DEF_MAGIC, "type", sm_conf_type_union_choice,
		MST_HASH, sizeof(mapspec_T),  "hash", 0,
		mst_hash_defs,
		NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

	{ SM_CONF_DEF_MAGIC, "type", sm_conf_type_union_choice,
		MST_HASH, sizeof(mapspec_T),  "bhtable", 0,
		mst_bht_defs,
		NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

	{ SM_CONF_DEF_MAGIC, "type", sm_conf_type_union_choice,
		MST_SOCKET, sizeof(mapspec_T), "socket", 0,
		mst_socket_defs,
		NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

	{ SM_CONF_DEF_MAGIC, "type", sm_conf_type_union_choice,
		MST_SEQUENCE, sizeof(mapspec_T),  "sequence", 0,
		mst_seq_defs,
		NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

	{ SM_CONF_DEF_MAGIC, "type", sm_conf_type_union_choice,
		MST_PASSWD, sizeof(mapspec_T),  "passwd", 0,
		mst_passwd_defs,
		NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

#if MTA_USE_TINYCDB
	{ SM_CONF_DEF_MAGIC, "type", sm_conf_type_union_choice,
		MST_HASH, sizeof(mapspec_T),  "cdb", 0,
		mst_cdb_defs,
		NULL, NULL, NULL
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
#endif /* MTA_USE_TINYCDB */

	/* 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
map_definitions[]
#if SM_MAPCNFDEF
=
{

	{
		SM_CONF_DEF_MAGIC,
		"map declaration",
		sm_conf_type_union,
		offsetof(map_decl_T, 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(map_decl_T, 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
maps_spec_defs[]
#if SM_MAPCNFDEF
=
{

	{ SM_CONF_DEF_MAGIC, "map", sm_conf_type_array,
		0,	/* offset */
		0,	/* size (# of elements) */
		NULL,	/* default */
		SM_CONF_FLAG_MULTIPLE,
		map_definitions,
		NULL,  NULL,
		"Map Declarations"
	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 */
;

#undef EXTERN

#endif /* SM_MAPCNFDEF_H */


syntax highlighted by Code2HTML, v. 0.9.1