X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/c988f1f4faa9f679f79beddf3c14676c5dcb8e28..7be682ca5ebd9571a01b762195b11c34cd231830:/src/src/spool_out.c diff --git a/src/src/spool_out.c b/src/src/spool_out.c index a157e84ba..fa4f1b6e2 100644 --- a/src/src/spool_out.c +++ b/src/src/spool_out.c @@ -1,10 +1,8 @@ -/* $Cambridge: exim/src/src/spool_out.c,v 1.4 2005/01/04 10:00:42 ph10 Exp $ */ - /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2005 */ +/* Copyright (c) University of Cambridge 1995 - 2009 */ /* See the file NOTICE for conditions of use and distribution. */ /* Functions for writing spool files, and moving them about. */ @@ -48,7 +46,7 @@ uschar *msg = (where == SW_RECEIVING)? strerror(errno)); if (temp_name != NULL) Uunlink(temp_name); -if (f != NULL) fclose(f); +if (f != NULL) (void)fclose(f); if (errmsg == NULL) log_write(0, LOG_MAIN|LOG_PANIC_DIE, "%s", msg); @@ -96,8 +94,8 @@ automatically. */ if (fd >= 0) { - fchown(fd, exim_uid, exim_gid); - fchmod(fd, SPOOL_MODE); + (void)fchown(fd, exim_uid, exim_gid); + (void)fchmod(fd, SPOOL_MODE); } return fd; @@ -175,9 +173,9 @@ if (sender_host_address != NULL) if (interface_address != NULL) fprintf(f, "-interface_address %s.%d\n", interface_address, interface_port); - + if (smtp_active_hostname != primary_hostname) - fprintf(f, "-active_hostname %s\n", smtp_active_hostname); + fprintf(f, "-active_hostname %s\n", smtp_active_hostname); /* Likewise for any ident information; for local messages this is likely to be the same as originator_login, but will be different if @@ -190,18 +188,15 @@ if (sender_ident != NULL) fprintf(f, "-ident %s\n", sender_ident); if (received_protocol != NULL) fprintf(f, "-received_protocol %s\n", received_protocol); -/* Preserve any ACL variables that are set. Because the values may contain -newlines, we use an explicit length. */ +/* Preserve any ACL variables that are set. */ -for (i = 0; i < ACL_C_MAX + ACL_M_MAX; i++) - { - if (acl_var[i] != NULL) - fprintf(f, "-acl %d %d\n%s\n", i, Ustrlen(acl_var[i]), acl_var[i]); - } +tree_walk(acl_var_c, &acl_var_write, f); +tree_walk(acl_var_m, &acl_var_write, f); /* Now any other data that needs to be remembered. */ fprintf(f, "-body_linecount %d\n", body_linecount); +fprintf(f, "-max_received_linelength %d\n", max_received_linelength); if (body_zerocount > 0) fprintf(f, "-body_zerocount %d\n", body_zerocount); @@ -215,6 +210,7 @@ if (allow_unqualified_sender) fprintf(f, "-allow_unqualified_sender\n"); if (deliver_firsttime) fprintf(f, "-deliver_firsttime\n"); if (deliver_freeze) fprintf(f, "-frozen %d\n", deliver_frozen_at); if (dont_deliver) fprintf(f, "-N\n"); +if (host_lookup_deferred) fprintf(f, "-host_lookup_deferred\n"); if (host_lookup_failed) fprintf(f, "-host_lookup_failed\n"); if (sender_local) fprintf(f, "-local\n"); if (local_error_message) fprintf(f, "-localerror\n"); @@ -232,7 +228,10 @@ if (bmi_verdicts != NULL) fprintf(f, "-bmi_verdicts %s\n", bmi_verdicts); #ifdef SUPPORT_TLS if (tls_certificate_verified) fprintf(f, "-tls_certificate_verified\n"); if (tls_cipher != NULL) fprintf(f, "-tls_cipher %s\n", tls_cipher); -if (tls_peerdn != NULL) fprintf(f, "-tls_peerdn %s\n", tls_peerdn); +if (tls_peerdn != NULL) fprintf(f, "-tls_peerdn %s\n", string_printing(tls_peerdn)); +#ifndef USE_GNUTLS +if (tls_sni != NULL) fprintf(f, "-tls_sni %s\n", string_printing(tls_sni)); +#endif #endif /* To complete the envelope, write out the tree of non-recipients, followed by @@ -290,7 +289,7 @@ if (fflush(f) != 0 || ferror(f)) just pushes it out of C, and fclose() doesn't guarantee to do the write either. That's just the way Unix works... */ -if (fsync(fileno(f)) < 0) +if (EXIMfsync(fileno(f)) < 0) return spool_write_error(where, errmsg, US"sync", temp_name, f); /* Get the size of the file, and close it. */ @@ -328,7 +327,7 @@ sprintf(CS temp_name, "%s/input/%s/.", spool_directory, message_subdir); if ((fd = Uopen(temp_name, O_RDONLY|O_DIRECTORY, 0)) < 0) return spool_write_error(where, errmsg, US"directory open", name, NULL); -if (fsync(fd) < 0 && errno != EINVAL) +if (EXIMfsync(fd) < 0 && errno != EINVAL) return spool_write_error(where, errmsg, US"directory sync", name, NULL); if (close(fd) < 0)