aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2018-11-08 23:15:09 +0200
committerSergey Poznyakoff <gray@gnu.org>2018-11-08 23:15:09 +0200
commit90c1c828099d2703fe0eb44b09d5cd3fd67a97fe (patch)
treec825a296693dd7c737afc3ba8cb27fcdf97f8b5e
parent40f3d1c9374c8f2330655acb856b8ecf9bde0767 (diff)
downloadmailfromd-90c1c828099d2703fe0eb44b09d5cd3fd67a97fe.tar.gz
mailfromd-90c1c828099d2703fe0eb44b09d5cd3fd67a97fe.tar.bz2
mtasim: don't clobber existing callout socket when used with -Xauto
* doc/mailfromd.texi: Document the --callout-socket option. * mtasim/mtasim.c (start_mailfromd): Supply the --callout-socket option. * src/main.c: New option --callout-socket
-rw-r--r--doc/mailfromd.texi7
-rw-r--r--mtasim/mtasim.c12
-rw-r--r--src/main.c21
3 files changed, 32 insertions, 8 deletions
diff --git a/doc/mailfromd.texi b/doc/mailfromd.texi
index 704cd030..74dedfdc 100644
--- a/doc/mailfromd.texi
+++ b/doc/mailfromd.texi
@@ -9782,12 +9782,17 @@ Run in test mode. @xref{Testing Filter Scripts}. Default @var{state} is
@end ignore
@node General Settings
@subsection General Settings
@table @option
+@opsummary{callout-socket, mailfromd}
+@item --callout-socket=@var{string}
+Set socket for the default callout server.
+This is mainly useful together with the @option{--mtasim} option.
+
@opsummary{foreground, mailfromd}
@item --foreground
Stay in foreground. When given this option, @command{mailfromd} will
not disconnect itself from the controlling terminal and will run in
the foreground.
@@ -9823,14 +9828,16 @@ This option is reserved for use by @command{mtasim} (@pxref{mtasim}).
@itemx --optimize[=@var{level}]
Set optimization level for code generator. Two levels are
implemented: @samp{0}, meaning no optimization, and @samp{1}, meaning
full optimization.
@opsummary{port, mailfromd}
+@opsummary{milter-socket, mailfromd}
@item -p @var{string}
@itemx --port=@var{string}
+@itemx --milter-socket=@var{string}
Set communication socket. Overrides the @code{listen} configuration
statement, which you are advised to use instead (@pxref{conf-milter, listen}).
@opsummary{pidfile, mailfromd}
@item --pidfile=@var{file}
Set pidfile name. Overrides the @code{pidfile} configuration
diff --git a/mtasim/mtasim.c b/mtasim/mtasim.c
index c7b09ad8..ee910e71 100644
--- a/mtasim/mtasim.c
+++ b/mtasim/mtasim.c
@@ -871,15 +871,14 @@ start_mailfromd (int argc, char **argv)
{
mu_error (_("cannot create temporary directory (%s): %s"),
tmpdir, mu_strerror (errno));
exit (EX_OSERR);
}
atexit (stop_mailfromd);
-
- milter_port = mu_strdup ("unix:/tmp/mtasim-XXXXXX/socket");
- memcpy (milter_port + 5, tmpdir, strlen (tmpdir));
+
+ mu_asprintf (&milter_port, "unix://%s/milter", tmpdir);
signal (SIGCHLD, sig_child);
child_pid = fork ();
if (child_pid == -1)
@@ -887,22 +886,27 @@ start_mailfromd (int argc, char **argv)
mu_error (_("cannot fork: %s"), mu_strerror (errno));
exit (EX_OSERR);
}
if (child_pid == 0)
{
- int xargc = argc + 5 + (statedir_option ? 2 : 0);
+ int xargc = argc + 7 + (statedir_option ? 2 : 0);
char **xargv = mu_alloc ((xargc + 1) * sizeof xargv[0]);
int i;
+ char *callout_port = NULL;
+
+ mu_asprintf (&callout_port, "unix://%s/callout", tmpdir);
xargv[0] = "mailfromd";
for (i = 1; i <= argc; i++)
xargv[i] = argv[i-1];
xargv[i++] = "--mtasim";
xargv[i++] = "--port";
xargv[i++] = milter_port;
+ xargv[i++] = "--callout-socket";
+ xargv[i++] = callout_port;
if (statedir_option)
{
xargv[i++] = "--state-directory";
xargv[i++] = tmpdir;
}
xargv[i] = 0;
diff --git a/src/main.c b/src/main.c
index 15113a6e..6aa8acfa 100644
--- a/src/main.c
+++ b/src/main.c
@@ -338,19 +338,28 @@ opt_include_dir(struct mu_parseopt *po, struct mu_option *op,
char const *arg)
{
add_include_dir(arg);
}
static void
-opt_port(struct mu_parseopt *po, struct mu_option *op,
- char const *arg)
+opt_milter_socket(struct mu_parseopt *po, struct mu_option *op,
+ char const *arg)
{
mf_srvcfg_add("default", arg);
}
static void
+opt_callout_socket(struct mu_parseopt *po, struct mu_option *op,
+ char const *arg)
+{
+ mf_srvcfg_add("callout", arg);
+ free(callout_server_url);
+ callout_server_url = mu_strdup(arg);
+}
+
+static void
opt_mtasim(struct mu_parseopt *po, struct mu_option *op,
char const *arg)
{
mtasim_option = 1;
server_flags |= MF_SERVER_FOREGROUND;
}
@@ -549,13 +558,17 @@ static struct mu_option mailfromd_options[] = {
{ "include", 'I', N_("DIR"), MU_OPTION_DEFAULT,
N_("add the directory DIR to the list of directories to be "
"searched for header files"),
mu_c_string, NULL, opt_include_dir },
{ "port", 'p', N_("STRING"), MU_OPTION_DEFAULT,
N_("set communication socket"),
- mu_c_string, NULL, opt_port },
+ mu_c_string, NULL, opt_milter_socket },
+ { "milter-socket", 0, NULL, MU_OPTION_ALIAS },
+ { "callout-socket", 0, N_("STRING"), MU_OPTION_DEFAULT,
+ N_("set callout socket"),
+ mu_c_string, NULL, opt_callout_socket },
{ "mtasim", 0, NULL, MU_OPTION_IMMEDIATE,
N_("run in mtasim compatibility mode"),
mu_c_string, NULL, opt_mtasim },
{ "optimize", 'O', N_("LEVEL"), MU_OPTION_ARG_OPTIONAL,
N_("set code optimization level"),
mu_c_string, NULL, opt_optimize },
@@ -1124,13 +1137,13 @@ provide_default_milter_server(void)
DEFAULT_SOCKET);
mf_srvcfg_add("milter", DEFAULT_SOCKET);
}
}
static void
-provide_default_callout_server()
+provide_default_callout_server(void)
{
struct variable *var;
if (provide_callout &&
!callout_server_url &&
(!(var = variable_lookup("callout_server_url")) ||

Return to:

Send suggestions and report system problems to the System administrator.