diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2018-11-08 23:15:09 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2018-11-08 23:15:09 +0200 |
commit | 90c1c828099d2703fe0eb44b09d5cd3fd67a97fe (patch) | |
tree | c825a296693dd7c737afc3ba8cb27fcdf97f8b5e | |
parent | 40f3d1c9374c8f2330655acb856b8ecf9bde0767 (diff) | |
download | mailfromd-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.texi | 7 | ||||
-rw-r--r-- | mtasim/mtasim.c | 12 | ||||
-rw-r--r-- | src/main.c | 21 |
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; @@ -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")) || |