X-Git-Url: https://vcs.fsf.org/?p=exim.git;a=blobdiff_plain;f=src%2Fsrc%2Fspool_out.c;h=ad12d1a94b762b578171adcb15296c9b205822b1;hp=fc56057c1469495ae312b1e44129a13395513644;hb=34e86e2003d0eba915735853cf48c56e71d7a4ea;hpb=50dc740948ba43eaeb6d33757bc83beff33f2a64 diff --git a/src/src/spool_out.c b/src/src/spool_out.c index fc56057c1..ad12d1a94 100644 --- a/src/src/spool_out.c +++ b/src/src/spool_out.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2012 */ +/* Copyright (c) University of Cambridge 1995 - 2015 */ /* See the file NOTICE for conditions of use and distribution. */ /* Functions for writing spool files, and moving them about. */ @@ -218,7 +218,9 @@ if (sender_local) fprintf(f, "-local\n"); if (local_error_message) fprintf(f, "-localerror\n"); if (local_scan_data != NULL) fprintf(f, "-local_scan %s\n", local_scan_data); #ifdef WITH_CONTENT_SCAN -if (spam_score_int != NULL) fprintf(f,"-spam_score_int %s\n", spam_score_int); +if (spam_bar) fprintf(f,"-spam_bar %s\n", spam_bar); +if (spam_score) fprintf(f,"-spam_score %s\n", spam_score); +if (spam_score_int) fprintf(f,"-spam_score_int %s\n", spam_score_int); #endif if (deliver_manual_thaw) fprintf(f, "-manual_thaw\n"); if (sender_set_untrusted) fprintf(f, "-sender_set_untrusted\n"); @@ -245,6 +247,15 @@ if (tls_in.ourcert) if (tls_in.ocsp) fprintf(f, "-tls_ocsp %d\n", tls_in.ocsp); #endif +#ifdef SUPPORT_I18N +if (message_smtputf8) + { + fprintf(f, "-smtputf8\n"); + if (message_utf8_downconvert) + fprintf(f, "-utf8_%sdowncvt\n", message_utf8_downconvert < 0 ? "opt" : ""); + } +#endif + /* Write the dsn flags to the spool header file */ DEBUG(D_deliver) debug_printf("DSN: Write SPOOL :-dsn_envid %s\n", dsn_envid); if (dsn_envid != NULL) fprintf(f, "-dsn_envid %s\n", dsn_envid); @@ -261,21 +272,25 @@ fprintf(f, "%d\n", recipients_count); for (i = 0; i < recipients_count; i++) { recipient_item *r = recipients_list + i; -DEBUG(D_deliver) debug_printf("DSN: Flags :%d\n", r->dsn_flags); + + DEBUG(D_deliver) debug_printf("DSN: Flags :%d\n", r->dsn_flags); + if (r->pno < 0 && r->errors_to == NULL && r->dsn_flags == 0) fprintf(f, "%s\n", r->address); else { - uschar *errors_to = (r->errors_to == NULL)? US"" : r->errors_to; + uschar * errors_to = r->errors_to ? r->errors_to : US""; /* for DSN SUPPORT extend exim 4 spool in a compatible way by - adding new values upfront and add flag 0x02 */ - uschar *orcpt = (r->orcpt == NULL)? US"" : r->orcpt; - fprintf(f, "%s %s %d,%d %s %d,%d#3\n", r->address, orcpt, Ustrlen(orcpt), r->dsn_flags, - errors_to, Ustrlen(errors_to), r->pno); + adding new values upfront and add flag 0x02 */ + uschar * orcpt = r->orcpt ? r->orcpt : US""; + + fprintf(f, "%s %s %d,%d %s %d,%d#3\n", r->address, orcpt, Ustrlen(orcpt), + r->dsn_flags, errors_to, Ustrlen(errors_to), r->pno); } - - DEBUG(D_deliver) debug_printf("DSN: **** SPOOL_OUT - address: |%s| errorsto: |%s| orcpt: |%s| dsn_flags: %d\n", - r->address, r->errors_to, r->orcpt, r->dsn_flags); + + DEBUG(D_deliver) debug_printf("DSN: **** SPOOL_OUT - " + "address: |%s| errorsto: |%s| orcpt: |%s| dsn_flags: %d\n", + r->address, r->errors_to, r->orcpt, r->dsn_flags); } /* Put a blank line before the headers */ @@ -286,7 +301,8 @@ fprintf(f, "\n"); to get the actual size of the headers. */ fflush(f); -fstat(fd, &statbuf); +if (fstat(fd, &statbuf)) + return spool_write_error(where, errmsg, US"fstat", temp_name, f); size_correction = statbuf.st_size; /* Finally, write out the message's headers. To make it easier to read them @@ -318,7 +334,8 @@ if (EXIMfsync(fileno(f)) < 0) /* Get the size of the file, and close it. */ -fstat(fd, &statbuf); +if (fstat(fd, &statbuf) != 0) + return spool_write_error(where, errmsg, US"fstat", temp_name, NULL); if (fclose(f) != 0) return spool_write_error(where, errmsg, US"close", temp_name, NULL); @@ -481,7 +498,7 @@ then removing the old links. When moving messages onto the main spool, the -H file should be set up last, because that's the one that tells Exim there is a message to be delivered, so we create its new link last and remove its old link first. Programs that look at the alternate directories should follow the same -rule of waiting for a -H file before doing anything. When moving messsages off +rule of waiting for a -H file before doing anything. When moving messages off the mail spool, the -D file should be open and locked at the time, thus keeping Exim's hands off. */ @@ -504,3 +521,5 @@ return TRUE; #endif /* End of spool_out.c */ +/* vi: aw ai sw=2 +*/