/*
* Copyright (c) 2004, 2005 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: mcpcnfs.h,v 1.18 2007/05/01 04:27:04 ca Exp $
*/
/* #ifndef SM_MCPCNFS_H */
#define SM_MCPCNFS_H 1
#include "sm/generic.h"
#include "sm/mcpdef.h"
#include "sm/sm-conf.h"
#include "sm/net.h"
#include "sm/sockcnf.h"
/*
** NOTE: This is almost a copy of mcpcnfdef.h and sockcnfdef.h
** Is there a way to generate the latter from this?
** However, see also below!
*/
#if SM_NOMCPDEFS
#define MCP_DEFS(strct, sn)
#define MCP_SRV_DEFS(strct, sn)
#define MCP_SOCKET_DEFS(strct, sn)
#define MCP_STRUCTS(strct, sn)
#define MCP_UNIX_SOCK_DEFS(strct, sn)
#define MCP_INET_SOCK_DEFS(strct, sn)
#else /* SM_NOMCPDEFS */
#if 0
#define MCP_UNIX_SOCK_DEFS(strct, sn) \
{ SM_CONF_DEF_MAGIC, \
"type", sm_conf_type_choice, \
offsetof(strct, sn##_sckspc_type), sizeof(strct), \
NULL, SM_CONF_FLAG_PARSE_ONLY, sock_types, \
NULL, NULL, "socket type" }, \
{ SM_CONF_DEF_MAGIC, \
"path", sm_conf_type_string, \
offsetof(strct, sock_unix.unixsckspc_path), 0, \
NULL, SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"pathname of Unix domain socket" }, \
{ SM_CONF_DEF_MAGIC, \
"umask", sm_conf_type_u32, \
offsetof(strct, sock_unix.unixsckspc_umask), sizeof(mode_t), \
"007", SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"umask to set before bind(2) and to set socket permissions" }, \
{ SM_CONF_DEF_MAGIC, \
"user", sm_conf_type_string, \
offsetof(strct, sock_unix.unixsckspc_user), 0, \
"", SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"owner of socket" }, \
{ SM_CONF_DEF_MAGIC, \
"group", sm_conf_type_string, \
offsetof(strct, sock_unix.unixsckspc_group), 0, \
"", SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"group of socket" }
#define MCP_INET_SOCK_DEFS(strct, sn) \
{ SM_CONF_DEF_MAGIC, \
"type", sm_conf_type_choice, \
offsetof(strct, sn##_sckspc_type), sizeof(sock_type_T), \
NULL, SM_CONF_FLAG_PARSE_ONLY, sock_types, \
NULL, NULL, "socket type" }, \
{ SM_CONF_DEF_MAGIC, \
"port", sm_conf_type_u32, \
offsetof(strct, sock_inet.inetsckspc_port), sizeof(int), \
NULL, SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"port to listen on" }, \
{ SM_CONF_DEF_MAGIC, \
"address", sm_conf_type_ipv4, \
offsetof(strct, sock_inet.inetsckspc_addr), sizeof(ipv4_T), \
"0.0.0.0", SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"bind to this IPv4 address" }
#define MCP_SOCK_DEFS(strct, sn) \
{ SM_CONF_DEF_MAGIC, \
"", sm_conf_type_union_type, \
offsetof(strct, sn##_sckspc_type), sizeof(sock_type_T), NULL, \
SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
NULL }, \
{ SM_CONF_DEF_MAGIC, \
"type", sm_conf_type_union_choice, \
SOCK_TYPE_UNIX, sizeof(strct), "unix", \
SM_CONF_FLAG_PARSE_ONLY, unix_sock_spec_defs, \
NULL, NULL, NULL, NULL }, \
{ SM_CONF_DEF_MAGIC, \
"type", sm_conf_type_union_choice, \
SOCK_TYPE_INET, sizeof(strct), "inet", \
SM_CONF_FLAG_PARSE_ONLY, inet_sock_spec_defs, \
NULL, NULL, NULL, NULL }
#endif /* 0 */
/* required for smtps (anything that acts as server) */
#define MCP_SRV_DEFS(strct, sn) \
{ SM_CONF_DEF_MAGIC, \
"listen_socket", sm_conf_type_union, \
offsetof(strct, sn##_mcp_socket.sckspc_type), \
sizeof(sockspec_T), \
"inet", SM_CONF_FLAG_KEEP_DEFAULT, sock_spec_definitions, \
NULL, NULL, NULL SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }
/* generic definitions for services */
#define MCP_DEFS(strct, sn) \
{ SM_CONF_DEF_MAGIC, \
"min_processes", sm_conf_type_u32, \
offsetof(strct, sn##_mcp_minchild), sizeof(int), "1", \
SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"minimum number of processes" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, \
{ SM_CONF_DEF_MAGIC, \
"max_processes", sm_conf_type_u32, \
offsetof(strct, sn##_mcp_maxchild), sizeof(int), "1", \
SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"maximum number of processes" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, \
{ SM_CONF_DEF_MAGIC, \
"user", sm_conf_type_string, \
offsetof(strct, sn##_mcp_user), 0, "", \
SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"run process as user" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, \
{ SM_CONF_DEF_MAGIC, \
"group", sm_conf_type_string, \
offsetof(strct, sn##_mcp_group), 0, "", \
SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"run process as group" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, \
{ SM_CONF_DEF_MAGIC, \
"restart_dependencies", sm_conf_type_argv, \
offsetof(strct, sn##_mcp_restartdep), SM_MCP_MAXRESTARTDEP, NULL, \
SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"list of services to restart in case of failure" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, \
{ SM_CONF_DEF_MAGIC, \
"pass_id", sm_conf_type_string, \
offsetof(strct, sn##_mcp_pass_id), 0, NULL, \
SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"pass id to process in argument list with this option" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, \
{ SM_CONF_DEF_MAGIC, \
"use_id_in_logfile_name", sm_conf_type_bool, \
offsetof(strct, sn##_mcp_logf_id), sizeof(bool), "0", \
SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"use id to create name of logfile: Logdir name id . log" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, \
{ SM_CONF_DEF_MAGIC, \
"path", sm_conf_type_string, \
offsetof(strct, sn##_mcp_server), 0, "", \
SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"path to program" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, \
{ SM_CONF_DEF_MAGIC, \
"arguments", sm_conf_type_string, \
offsetof(strct, sn##_mcp_args), 0, "", \
SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"arguments for program" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, \
{ SM_CONF_DEF_MAGIC, \
"working_directory", sm_conf_type_string, \
offsetof(strct, sn##_mcp_workdir), 0, NULL, \
0, NULL, NULL, NULL, \
"working directory (chdir(2))" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, \
{ SM_CONF_DEF_MAGIC, \
"start_action", sm_conf_type_string, \
offsetof(strct, sn##_mcp_flags), 0, \
"wait", \
SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"how to handle program" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) },
/* last entry is a hack to avoid including wait definition */
#define MCP_STRUCTS(strct, sn) \
char const *sn##_mcp_prg; \
sockspec_T sn##_mcp_socket; \
int sn##_mcp_minchild; \
int sn##_mcp_maxchild; \
char *sn##_mcp_pass_id; \
char *sn##_mcp_exsock; \
char *sn##_mcp_user; \
char *sn##_mcp_group; \
int sn##_mcp_nrestartdep; \
char *sn##_mcp_restartdep[SM_MCP_MAXRESTARTDEP + 1]; \
char *sn##_mcp_restartdeps; \
char *sn##_mcp_server; \
char *sn##_mcp_server_name; \
char *sn##_mcp_args; \
char *sn##_mcp_workdir; \
uint sn##_mcp_flags; \
bool sn##_mcp_logf_id;
#if 0
/*
This entry overlaps with the same data in ss_defs[]
It is not needed in any other module, so we can just remove it.
{ SM_CONF_DEF_MAGIC, \
"pass_fd_socket", sm_conf_type_string, \
offsetof(strct, sn##_string), 0, "", \
SM_CONF_FLAG_PARSE_ONLY, NULL, NULL, NULL, \
"path of Unix domain socket to exchange file descriptor" SM_LC_NO_ISSET SM_LC_SET_MAGIC(0) }, \
*/
#endif
#endif /* SM_NOMCPDEFS */
/* #endif * SM_MCPCNFS_H */
syntax highlighted by Code2HTML, v. 0.9.1