X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/4945f557f5760ca26b67a5d334364673a445f7cf..b9df1829d6afa37ef6576d04fc8845c1d20269b0:/src/src/transport.c diff --git a/src/src/transport.c b/src/src/transport.c index 6458d9fd7..2caf6e5f0 100644 --- a/src/src/transport.c +++ b/src/src/transport.c @@ -116,14 +116,14 @@ readconf_options_transports(void) { struct transport_info * ti; -readconf_options_from_list(optionlist_transports, nelem(optionlist_transports), US"TP"); +readconf_options_from_list(optionlist_transports, nelem(optionlist_transports), US"TRANSPORTS", NULL); for (ti = transports_available; ti->driver_name[0]; ti++) { - read_macro_assignment(string_sprintf("_DRVR_TPT_%T=y", ti->driver_name)); - readconf_options_from_list(ti->options, (unsigned)*ti->options_count, ti->driver_name); + macro_create(string_sprintf("_DRIVER_TRANSPORT_%T", ti->driver_name), US"y", FALSE, TRUE); + readconf_options_from_list(ti->options, (unsigned)*ti->options_count, US"TRANSPORT", ti->driver_name); } -} +} /************************************************* * Initialize transport list * @@ -624,7 +624,7 @@ return write_chunk(fd, tctx, pp->address, Ustrlen(pp->address)); -/* Add/remove/rewwrite headers, and send them plus the empty-line sparator. +/* Add/remove/rewrite headers, and send them plus the empty-line separator. Globals: header_list @@ -908,7 +908,7 @@ if (!(tctx->options & topt_no_headers)) /* Pick up from all the addresses. The plist and dlist variables are anchors for lists of addresses already handled; they have to be defined at - this level becuase write_env_to() calls itself recursively. */ + this level because write_env_to() calls itself recursively. */ for (p = tctx->addr; p; p = p->next) if (!write_env_to(p, &plist, &dlist, &first, fd, tctx)) @@ -978,7 +978,7 @@ if (tctx->options & topt_use_bdat) if (size > DELIVER_OUT_BUFFER_SIZE && hsize > 0) { DEBUG(D_transport) - debug_printf("sending small initial BDAT; hssize=%d\n", hsize); + debug_printf("sending small initial BDAT; hsize=%d\n", hsize); if ( tctx->chunk_cb(fd, tctx, hsize, 0) != OK || !transport_write_block(fd, deliver_out_buffer, hsize) || tctx->chunk_cb(fd, tctx, 0, tc_reap_prev) != OK @@ -1062,18 +1062,16 @@ Returns: TRUE on success; FALSE (with errno) for any failure BOOL dkim_transport_write_message(int out_fd, transport_ctx * tctx, - struct ob_dkim * dkim) + struct ob_dkim * dkim, const uschar ** err) { int dkim_fd; int save_errno = 0; BOOL rc; uschar * dkim_spool_name; -int sread = 0; -int wwritten = 0; -uschar *dkim_signature = NULL; -int siglen = 0; +uschar * dkim_signature = NULL; +int sread = 0, wwritten = 0, siglen = 0, options; off_t k_file_size; -int options; +const uschar * errstr; /* If we can't sign, just call the original function. */ @@ -1088,6 +1086,7 @@ if ((dkim_fd = Uopen(dkim_spool_name, O_RDWR|O_CREAT|O_TRUNC, SPOOL_MODE)) < 0) /* Can't create spool file. Ugh. */ rc = FALSE; save_errno = errno; + *err = string_sprintf("dkim spoolfile create: %s", strerror(errno)); goto CLEANUP; } @@ -1109,7 +1108,7 @@ if (!rc) /* Rewind file and feed it to the goats^W DKIM lib */ dkim->dot_stuffed = !!(options & topt_end_dot); lseek(dkim_fd, 0, SEEK_SET); -if ((dkim_signature = dkim_exim_sign(dkim_fd, dkim))) +if ((dkim_signature = dkim_exim_sign(dkim_fd, dkim, &errstr))) siglen = Ustrlen(dkim_signature); else if (dkim->dkim_strict) { @@ -1122,6 +1121,7 @@ else if (dkim->dkim_strict) save_errno = EACCES; log_write(0, LOG_MAIN, "DKIM: message could not be signed," " and dkim_strict is set. Deferring message delivery."); + *err = errstr; rc = FALSE; goto CLEANUP; } @@ -2272,7 +2272,7 @@ if (expand_arguments) */ if (address_pipe_argcount > 1) memmove( - /* current position + additonal args */ + /* current position + additional args */ argv + i + address_pipe_argcount, /* current position + 1 (for the (uschar *)0 at the end) */ argv + i + 1,