aboutsummaryrefslogtreecommitdiff
path: root/mfd/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'mfd/main.c')
-rw-r--r--mfd/main.c55
1 files changed, 47 insertions, 8 deletions
diff --git a/mfd/main.c b/mfd/main.c
index 8ffff463..a69d7c01 100644
--- a/mfd/main.c
+++ b/mfd/main.c
@@ -72,5 +72,5 @@ unsigned optimization_level = 1; /* Optimization level */
int log_to_stderr; /* Use stderr for logging */
-int force_remove = 1; /* Remove local communication socket if it already
- exists */
int foreground; /* Stay in foreground */
+int force_remove; /* Remove local communication socket if it already
+ exists */
int single_process_option; /* Run in single process mode. */
@@ -624,3 +624,4 @@ add_legacy_milter_port(const char *str, mu_debug_t dbg)
mfd_server_t srv = mfd_server_new(id, url,
- milter_session_server);
+ milter_session_server,
+ 0);
if (srv)
@@ -1383,3 +1384,2 @@ parse_opt(int key, char *arg, struct argp_state *state)
case 'r':
- /*FIXME*/
force_remove = 1;
@@ -2101,2 +2101,4 @@ struct server_config_stmt {
mfd_server_func_t server;
+ int single_process;
+ int reuseaddr;
};
@@ -2128,2 +2130,8 @@ struct mu_cfg_param server_section_param[] = {
N_("Maximum number of instances allowed for this server.") },
+ { "single-process", mu_cfg_bool,
+ &server_config_stmt.single_process, 0, NULL,
+ N_("Single-process mode.") },
+ { "reuseaddr", mu_cfg_bool,
+ &server_config_stmt.reuseaddr, 0, NULL,
+ N_("Reuse existing socket (default).") },
{ "acl", mu_cfg_section,
@@ -2143,2 +2151,3 @@ server_section_parser(enum mu_cfg_section_stage stage,
memset(&server_config_stmt, 0, sizeof(server_config_stmt));
+ server_config_stmt.reuseaddr = 1;
if (mu_cfg_assert_value_type (node->label, MU_CFG_STRING,
@@ -2162,6 +2171,13 @@ server_section_parser(enum mu_cfg_section_stage stage,
if (server_config_stmt.url && server_config_stmt.server) {
- mfd_server_t srv =
- mfd_server_new(server_config_stmt.id,
- server_config_stmt.url,
- server_config_stmt.server);
+ int flags = 0;
+ mfd_server_t srv;
+
+ if (server_config_stmt.single_process)
+ flags |= SRV_SINGLE_PROCESS;
+ if (!server_config_stmt.reuseaddr)
+ flags |= SRV_KEEP_EXISTING;
+ srv = mfd_server_new(server_config_stmt.id,
+ server_config_stmt.url,
+ server_config_stmt.server,
+ flags);
if (srv) {
@@ -2204,2 +2220,18 @@ cb_milter_listen(mu_debug_t err, void *data, mu_config_value_t *arg)
+static int
+cb_callout_url(mu_debug_t err, void *data, mu_config_value_t *arg)
+{
+ mu_url_t url;
+ if (mu_cfg_assert_value_type(arg, MU_CFG_STRING, err))
+ return 1;
+ url = parse_milter_url(err, arg->v.string);
+ if (url) {
+ callout_server_sa = srvman_url_to_sockaddr(url,
+ &callout_server_sa_len);
+ mu_url_destroy(&url);
+ }
+ return 0;
+}
+
+
struct mu_cfg_param mf_cfg_param[] = {
@@ -2294,2 +2326,9 @@ struct mu_cfg_param mf_cfg_param[] = {
{ "database", mu_cfg_section, NULL },
+
+ { "callout-url", mu_cfg_callback,
+ NULL, 0,
+ cb_callout_url,
+ N_("URL of the callout server"),
+ N_("url") },
+

Return to:

Send suggestions and report system problems to the System administrator.