X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/65de12cc1acfeeacf85c3fd77d244b9dc7e79bdc..d315eda12f25ca2f72ca56b777a427c9ee7188e1:/src/src/transports/autoreply.c diff --git a/src/src/transports/autoreply.c b/src/src/transports/autoreply.c index 36a68b92c..3b4463075 100644 --- a/src/src/transports/autoreply.c +++ b/src/src/transports/autoreply.c @@ -485,7 +485,7 @@ if (oncelog != NULL && *oncelog != 0 && to != NULL) { EXIM_DATUM key_datum, result_datum; EXIM_DBOPEN(oncelog, O_RDWR|O_CREAT, ob->mode, &dbm_file); - if (dbm_file == NULL) + if (!dbm_file) { addr->transport_return = DEFER; addr->message = string_sprintf("Failed to open %s file %s when sending " @@ -692,10 +692,10 @@ if (return_message) : US"------ This is a copy of the message, including all the headers.\n"; transport_ctx tctx = { + fileno(f), tblock, addr, - NULL, - NULL, + NULL, NULL, (tblock->body_only ? topt_no_headers : 0) | (tblock->headers_only ? topt_no_body : 0) | (tblock->return_path_add ? topt_add_return_path : 0) | @@ -721,7 +721,7 @@ if (return_message) fflush(f); transport_count = 0; - transport_write_message(fileno(f), &tctx, bounce_return_size_limit); + transport_write_message(&tctx, bounce_return_size_limit); } /* End the message and wait for the child process to end; no timeout. */ @@ -745,30 +745,32 @@ if (cache_fd >= 0) { uschar *from = cache_buff; int size = cache_size; - (void)lseek(cache_fd, 0, SEEK_SET); - if (cache_time == NULL) + if (lseek(cache_fd, 0, SEEK_SET) == 0) { - cache_time = from + size; - memcpy(cache_time + sizeof(time_t), to, add_size - sizeof(time_t)); - size += add_size; - - if (cache_size > 0 && size > ob->once_file_size) + if (!cache_time) { - from += sizeof(time_t) + Ustrlen(from + sizeof(time_t)) + 1; - size -= (from - cache_buff); + cache_time = from + size; + memcpy(cache_time + sizeof(time_t), to, add_size - sizeof(time_t)); + size += add_size; + + if (cache_size > 0 && size > ob->once_file_size) + { + from += sizeof(time_t) + Ustrlen(from + sizeof(time_t)) + 1; + size -= (from - cache_buff); + } } - } - memcpy(cache_time, &now, sizeof(time_t)); - if(write(cache_fd, from, size) != size) - DEBUG(D_transport) debug_printf("Problem writing cache file %s for %s " - "transport\n", oncelog, tblock->name); + memcpy(cache_time, &now, sizeof(time_t)); + if(write(cache_fd, from, size) != size) + DEBUG(D_transport) debug_printf("Problem writing cache file %s for %s " + "transport\n", oncelog, tblock->name); + } } /* Update DBM file */ -else if (dbm_file != NULL) +else if (dbm_file) { EXIM_DATUM key_datum, value_datum; EXIM_DATUM_INIT(key_datum); /* Some DBM libraries need to have */ @@ -869,7 +871,7 @@ if (logfile != NULL) } END_OFF: -if (dbm_file != NULL) EXIM_DBCLOSE(dbm_file); +if (dbm_file) EXIM_DBCLOSE(dbm_file); if (cache_fd > 0) (void)close(cache_fd); DEBUG(D_transport) debug_printf("%s transport succeeded\n", tblock->name);