X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/f7572e5a358cd3d9581140b87e590d58b6c278f0..55c75993b43ac91069a5fbe9cc7a8d48cda84ee0:/src/src/smtp_in.c diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c index de7663b1a..8edfe8104 100644 --- a/src/src/smtp_in.c +++ b/src/src/smtp_in.c @@ -1,10 +1,10 @@ -/* $Cambridge: exim/src/src/smtp_in.c,v 1.62 2007/09/28 12:21:57 tom Exp $ */ +/* $Cambridge: exim/src/src/smtp_in.c,v 1.66 2009/11/16 19:50:37 nm4 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2007 */ +/* Copyright (c) University of Cambridge 1995 - 2009 */ /* See the file NOTICE for conditions of use and distribution. */ /* Functions for handling an incoming SMTP call. */ @@ -264,6 +264,9 @@ if (smtp_inptr >= smtp_inend) else smtp_had_eof = 1; return EOF; } +#ifndef DISABLE_DKIM + dkim_exim_verify_feed(smtp_inbuffer, rc); +#endif smtp_inend = smtp_inbuffer + rc; smtp_inptr = smtp_inbuffer; } @@ -376,26 +379,41 @@ smtp_printf(char *format, ...) { va_list ap; +va_start(ap, format); +smtp_vprintf(format, ap); +va_end(ap); +} + +/* This is split off so that verify.c:respond_printf() can, in effect, call +smtp_printf(), bearing in mind that in C a vararg function can't directly +call another vararg function, only a function which accepts a va_list. + +Note also that repeated calls to va_start()/va_end() pairs is claimed to be +non-portable; meanwhile, va_copy() is also non-portable in that it's C99, so +we end up needing OS support to define it for us. */ + +void +smtp_vprintf(char *format, va_list ap) +{ +va_list ap_d; + DEBUG(D_receive) { uschar *cr, *end; - va_start(ap, format); - (void) string_vformat(big_buffer, big_buffer_size, format, ap); - va_end(ap); + va_copy(ap_d, ap); + (void) string_vformat(big_buffer, big_buffer_size, format, ap_d); end = big_buffer + Ustrlen(big_buffer); while ((cr = Ustrchr(big_buffer, '\r')) != NULL) /* lose CRs */ memmove(cr, cr + 1, (end--) - cr); debug_printf("SMTP>> %s", big_buffer); } -va_start(ap, format); if (!string_vformat(big_buffer, big_buffer_size, format, ap)) { log_write(0, LOG_MAIN|LOG_PANIC, "string too large in smtp_printf()"); smtp_closedown(US"Unexpected error"); exim_exit(EXIT_FAILURE); } -va_end(ap); /* If this is the first output for a (non-batch) RCPT command, see if all RCPTs have had the same. Note: this code is also present in smtp_respond(). It would @@ -1022,11 +1040,10 @@ authenticated_sender = NULL; bmi_run = 0; bmi_verdicts = NULL; #endif -#ifdef EXPERIMENTAL_DOMAINKEYS -dk_do_verify = 0; -#endif -#ifdef EXPERIMENTAL_DKIM -dkim_do_verify = 0; +#ifndef DISABLE_DKIM +dkim_signers = NULL; +dkim_disable_verify = FALSE; +dkim_collect_input = FALSE; #endif #ifdef EXPERIMENTAL_SPF spf_header_comment = NULL;