X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/acec9514b1006e352ef283f205ecec75a9b6ff0d..254f38d1c5ada5e4df0bccb385dc466549620c71:/src/src/transports/pipe.c diff --git a/src/src/transports/pipe.c b/src/src/transports/pipe.c index 0ce281fd0..8e5c0c502 100644 --- a/src/src/transports/pipe.c +++ b/src/src/transports/pipe.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2015 */ +/* Copyright (c) University of Cambridge 1995 - 2018 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -473,8 +473,7 @@ $pipe_addresses, which is not recognized by the normal expansion function. */ if (expand_arguments) { - uschar *s = cmd; - uschar *p = Ustrstr(cmd, "pipe_addresses"); + uschar * p = Ustrstr(cmd, "pipe_addresses"); gstring * g = NULL; DEBUG(D_transport) @@ -482,14 +481,13 @@ if (expand_arguments) /* Allow $recipients in the expansion iff it comes from a system filter */ - enable_dollar_recipients = addr && addr->parent && + f.enable_dollar_recipients = addr && addr->parent && Ustrcmp(addr->parent->address, "system-filter") == 0; if (p != NULL && ( (p > cmd && p[-1] == '$') || (p > cmd + 1 && p[-2] == '$' && p[-1] == '{' && p[14] == '}'))) { - address_item *ad; uschar *q = p + 14; if (p[-1] == '{') { q++; p--; } @@ -497,7 +495,7 @@ if (expand_arguments) g = string_get(Ustrlen(cmd) + 64); g = string_catn(g, cmd, p - cmd - 1); - for (ad = addr; ad; ad = ad->next) + for (address_item * ad = addr; ad; ad = ad->next) { /*XXX string_append_listele() ? */ if (ad != addr) g = string_catn(g, US" ", 1); @@ -510,11 +508,11 @@ if (expand_arguments) else argv[2] = expand_string(cmd); - enable_dollar_recipients = FALSE; + f.enable_dollar_recipients = FALSE; if (!argv[2]) { - addr->transport_return = search_find_defer ? DEFER : expand_fail; + addr->transport_return = f.search_find_defer ? DEFER : expand_fail; addr->message = string_sprintf("Expansion of command \"%s\" " "in %s transport failed: %s", cmd, tname, expand_string_message); @@ -567,12 +565,11 @@ const uschar *envlist = ob->environment; uschar *cmd, *ss; uschar *eol = ob->use_crlf ? US"\r\n" : US"\n"; transport_ctx tctx = { - {0}, - tblock, - addr, - ob->check_string, - ob->escape_string, - ob->options /* set at initialization time */ + .tblock = tblock, + .addr = addr, + .check_string = ob->check_string, + .escape_string = ob->escape_string, + ob->options | topt_not_socket /* set at initialization time */ }; DEBUG(D_transport) debug_printf("%s transport entered\n", tblock->name); @@ -681,7 +678,7 @@ envp[envcount++] = US"SHELL=/bin/sh"; if (addr->host_list != NULL) envp[envcount++] = string_sprintf("HOST=%s", addr->host_list->name); -if (timestamps_utc) envp[envcount++] = US"TZ=UTC"; +if (f.timestamps_utc) envp[envcount++] = US"TZ=UTC"; else if (timezone_string != NULL && timezone_string[0] != 0) envp[envcount++] = string_sprintf("TZ=%s", timezone_string); @@ -716,7 +713,7 @@ envp[envcount] = NULL; /* If the -N option is set, can't do any more. */ -if (dont_deliver) +if (f.dont_deliver) { DEBUG(D_transport) debug_printf("*** delivery by %s transport bypassed by -N option", @@ -816,7 +813,7 @@ bit here to let the sub-process get going, but it may still not complete. So we ignore all writing errors. (When in the test harness, we do do a short sleep so any debugging output is likely to be in the same order.) */ -if (running_in_test_harness) millisleep(500); +if (f.running_in_test_harness) millisleep(500); DEBUG(D_transport) debug_printf("Writing message to pipe\n"); @@ -839,7 +836,7 @@ if (ob->message_prefix != NULL) uschar *prefix = expand_string(ob->message_prefix); if (prefix == NULL) { - addr->transport_return = search_find_defer? DEFER : PANIC; + addr->transport_return = f.search_find_defer? DEFER : PANIC; addr->message = string_sprintf("Expansion of \"%s\" (prefix for %s " "transport) failed: %s", ob->message_prefix, tblock->name, expand_string_message); @@ -856,12 +853,10 @@ than one address available here, all must be included. Force SMTP dot-handling. if (ob->use_bsmtp) { - address_item *a; - if (!transport_write_string(fd_in, "MAIL FROM:<%s>%s", return_path, eol)) goto END_WRITE; - for (a = addr; a; a = a->next) + for (address_item * a = addr; a; a = a->next) if (!transport_write_string(fd_in, "RCPT TO:<%s>%s", transport_rcpt_address(a, tblock->rcpt_include_affixes), @@ -883,7 +878,7 @@ if (ob->message_suffix) uschar *suffix = expand_string(ob->message_suffix); if (!suffix) { - addr->transport_return = search_find_defer? DEFER : PANIC; + addr->transport_return = f.search_find_defer? DEFER : PANIC; addr->message = string_sprintf("Expansion of \"%s\" (suffix for %s " "transport) failed: %s", ob->message_suffix, tblock->name, expand_string_message); @@ -922,7 +917,7 @@ if (!written_ok) if (errno == ETIMEDOUT) { addr->message = string_sprintf("%stimeout while writing to pipe", - transport_filter_timed_out? "transport filter " : ""); + f.transport_filter_timed_out ? "transport filter " : ""); addr->transport_return = ob->timeout_defer? DEFER : FAIL; timeout = 1; } @@ -988,7 +983,7 @@ if ((rc = child_close(pid, timeout)) != 0) This prevents the transport_filter timeout message from getting overwritten by the exit error which is not the cause of the problem. */ - else if (transport_filter_timed_out) + else if (f.transport_filter_timed_out) { killpg(pid, SIGKILL); kill(outpid, SIGKILL); @@ -1077,7 +1072,6 @@ if ((rc = child_close(pid, timeout)) != 0) { uschar *ss; gstring * g; - int i; /* If temp_errors is "*" all codes are temporary. Initialization checks that it's either "*" or a list of numbers. If not "*", scan the list of @@ -1122,7 +1116,7 @@ if ((rc = child_close(pid, timeout)) != 0) g = string_catn(g, US" from command:", 14); - for (i = 0; i < sizeof(argv)/sizeof(int *) && argv[i] != NULL; i++) + for (int i = 0; i < sizeof(argv)/sizeof(int *) && argv[i] != NULL; i++) { BOOL quote = FALSE; g = string_catn(g, US" ", 1);