Log incoming-TLS details on rejects. Bug 305
[exim.git] / src / src / smtp_in.c
1 /*************************************************
2 *     Exim - an Internet mail transport agent    *
3 *************************************************/
4
5 /* Copyright (c) University of Cambridge 1995 - 2013 */
6 /* See the file NOTICE for conditions of use and distribution. */
7
8 /* Functions for handling an incoming SMTP call. */
9
10
11 #include "exim.h"
12
13
14 /* Initialize for TCP wrappers if so configured. It appears that the macro
15 HAVE_IPV6 is used in some versions of the tcpd.h header, so we unset it before
16 including that header, and restore its value afterwards. */
17
18 #ifdef USE_TCP_WRAPPERS
19
20   #if HAVE_IPV6
21   #define EXIM_HAVE_IPV6
22   #endif
23   #undef HAVE_IPV6
24   #include <tcpd.h>
25   #undef HAVE_IPV6
26   #ifdef EXIM_HAVE_IPV6
27   #define HAVE_IPV6 TRUE
28   #endif
29
30 int allow_severity = LOG_INFO;
31 int deny_severity  = LOG_NOTICE;
32 uschar *tcp_wrappers_name;
33 #endif
34
35
36 /* Size of buffer for reading SMTP commands. We used to use 512, as defined
37 by RFC 821. However, RFC 1869 specifies that this must be increased for SMTP
38 commands that accept arguments, and this in particular applies to AUTH, where
39 the data can be quite long.  More recently this value was 2048 in Exim; 
40 however, RFC 4954 (circa 2007) recommends 12288 bytes to handle AUTH.  Clients
41 such as Thunderbird will send an AUTH with an initial-response for GSSAPI. 
42 The maximum size of a Kerberos ticket under Windows 2003 is 12000 bytes, and 
43 we need room to handle large base64-encoded AUTHs for GSSAPI.
44 */
45
46 #define smtp_cmd_buffer_size  16384
47
48 /* Size of buffer for reading SMTP incoming packets */
49
50 #define in_buffer_size  8192
51
52 /* Structure for SMTP command list */
53
54 typedef struct {
55   const char *name;
56   int len;
57   short int cmd;
58   short int has_arg;
59   short int is_mail_cmd;
60 } smtp_cmd_list;
61
62 /* Codes for identifying commands. We order them so that those that come first
63 are those for which synchronization is always required. Checking this can help
64 block some spam.  */
65
66 enum {
67   /* These commands are required to be synchronized, i.e. to be the last in a
68   block of commands when pipelining. */
69
70   HELO_CMD, EHLO_CMD, DATA_CMD, /* These are listed in the pipelining */
71   VRFY_CMD, EXPN_CMD, NOOP_CMD, /* RFC as requiring synchronization */
72   ETRN_CMD,                     /* This by analogy with TURN from the RFC */
73   STARTTLS_CMD,                 /* Required by the STARTTLS RFC */
74
75   /* This is a dummy to identify the non-sync commands when pipelining */
76
77   NON_SYNC_CMD_PIPELINING,
78
79   /* These commands need not be synchronized when pipelining */
80
81   MAIL_CMD, RCPT_CMD, RSET_CMD,
82
83   /* This is a dummy to identify the non-sync commands when not pipelining */
84
85   NON_SYNC_CMD_NON_PIPELINING,
86
87   /* I have been unable to find a statement about the use of pipelining
88   with AUTH, so to be on the safe side it is here, though I kind of feel
89   it should be up there with the synchronized commands. */
90
91   AUTH_CMD,
92
93   /* I'm not sure about these, but I don't think they matter. */
94
95   QUIT_CMD, HELP_CMD,
96
97 #ifdef EXPERIMENTAL_PROXY
98   PROXY_FAIL_IGNORE_CMD,
99 #endif
100
101   /* These are specials that don't correspond to actual commands */
102
103   EOF_CMD, OTHER_CMD, BADARG_CMD, BADCHAR_CMD, BADSYN_CMD,
104   TOO_MANY_NONMAIL_CMD };
105
106
107 /* This is a convenience macro for adding the identity of an SMTP command
108 to the circular buffer that holds a list of the last n received. */
109
110 #define HAD(n) \
111     smtp_connection_had[smtp_ch_index++] = n; \
112     if (smtp_ch_index >= SMTP_HBUFF_SIZE) smtp_ch_index = 0
113
114
115 /*************************************************
116 *                Local static variables          *
117 *************************************************/
118
119 static auth_instance *authenticated_by;
120 static BOOL auth_advertised;
121 #ifdef SUPPORT_TLS
122 static BOOL tls_advertised;
123 #endif
124 static BOOL esmtp;
125 static BOOL helo_required = FALSE;
126 static BOOL helo_verify = FALSE;
127 static BOOL helo_seen;
128 static BOOL helo_accept_junk;
129 static BOOL count_nonmail;
130 static BOOL pipelining_advertised;
131 static BOOL rcpt_smtp_response_same;
132 static BOOL rcpt_in_progress;
133 static int  nonmail_command_count;
134 static BOOL smtp_exit_function_called = 0;
135 static int  synprot_error_count;
136 static int  unknown_command_count;
137 static int  sync_cmd_limit;
138 static int  smtp_write_error = 0;
139
140 static uschar *rcpt_smtp_response;
141 static uschar *smtp_data_buffer;
142 static uschar *smtp_cmd_data;
143
144 /* We need to know the position of RSET, HELO, EHLO, AUTH, and STARTTLS. Their
145 final fields of all except AUTH are forced TRUE at the start of a new message
146 setup, to allow one of each between messages that is not counted as a nonmail
147 command. (In fact, only one of HELO/EHLO is not counted.) Also, we have to
148 allow a new EHLO after starting up TLS.
149
150 AUTH is "falsely" labelled as a mail command initially, so that it doesn't get
151 counted. However, the flag is changed when AUTH is received, so that multiple
152 failing AUTHs will eventually hit the limit. After a successful AUTH, another
153 AUTH is already forbidden. After a TLS session is started, AUTH's flag is again
154 forced TRUE, to allow for the re-authentication that can happen at that point.
155
156 QUIT is also "falsely" labelled as a mail command so that it doesn't up the
157 count of non-mail commands and possibly provoke an error. */
158
159 static smtp_cmd_list cmd_list[] = {
160   { "rset",       sizeof("rset")-1,       RSET_CMD, FALSE, FALSE },  /* First */
161   { "helo",       sizeof("helo")-1,       HELO_CMD, TRUE,  FALSE },
162   { "ehlo",       sizeof("ehlo")-1,       EHLO_CMD, TRUE,  FALSE },
163   { "auth",       sizeof("auth")-1,       AUTH_CMD, TRUE,  TRUE  },
164   #ifdef SUPPORT_TLS
165   { "starttls",   sizeof("starttls")-1,   STARTTLS_CMD, FALSE, FALSE },
166   #endif
167
168 /* If you change anything above here, also fix the definitions below. */
169
170   { "mail from:", sizeof("mail from:")-1, MAIL_CMD, TRUE,  TRUE  },
171   { "rcpt to:",   sizeof("rcpt to:")-1,   RCPT_CMD, TRUE,  TRUE  },
172   { "data",       sizeof("data")-1,       DATA_CMD, FALSE, TRUE  },
173   { "quit",       sizeof("quit")-1,       QUIT_CMD, FALSE, TRUE  },
174   { "noop",       sizeof("noop")-1,       NOOP_CMD, TRUE,  FALSE },
175   { "etrn",       sizeof("etrn")-1,       ETRN_CMD, TRUE,  FALSE },
176   { "vrfy",       sizeof("vrfy")-1,       VRFY_CMD, TRUE,  FALSE },
177   { "expn",       sizeof("expn")-1,       EXPN_CMD, TRUE,  FALSE },
178   { "help",       sizeof("help")-1,       HELP_CMD, TRUE,  FALSE }
179 };
180
181 static smtp_cmd_list *cmd_list_end =
182   cmd_list + sizeof(cmd_list)/sizeof(smtp_cmd_list);
183
184 #define CMD_LIST_RSET      0
185 #define CMD_LIST_HELO      1
186 #define CMD_LIST_EHLO      2
187 #define CMD_LIST_AUTH      3
188 #define CMD_LIST_STARTTLS  4
189
190 /* This list of names is used for performing the smtp_no_mail logging action.
191 It must be kept in step with the SCH_xxx enumerations. */
192
193 static uschar *smtp_names[] =
194   {
195   US"NONE", US"AUTH", US"DATA", US"EHLO", US"ETRN", US"EXPN", US"HELO",
196   US"HELP", US"MAIL", US"NOOP", US"QUIT", US"RCPT", US"RSET", US"STARTTLS",
197   US"VRFY" };
198
199 static uschar *protocols[] = {
200   US"local-smtp",        /* HELO */
201   US"local-smtps",       /* The rare case EHLO->STARTTLS->HELO */
202   US"local-esmtp",       /* EHLO */
203   US"local-esmtps",      /* EHLO->STARTTLS->EHLO */
204   US"local-esmtpa",      /* EHLO->AUTH */
205   US"local-esmtpsa"      /* EHLO->STARTTLS->EHLO->AUTH */
206   };
207
208 #define pnormal  0
209 #define pextend  2
210 #define pcrpted  1  /* added to pextend or pnormal */
211 #define pauthed  2  /* added to pextend */
212 #define pnlocal  6  /* offset to remove "local" */
213
214 /* Sanity check and validate optional args to MAIL FROM: envelope */
215 enum {
216   ENV_MAIL_OPT_SIZE, ENV_MAIL_OPT_BODY, ENV_MAIL_OPT_AUTH,
217 #ifdef EXPERIMENTAL_PRDR
218   ENV_MAIL_OPT_PRDR,
219 #endif
220   ENV_MAIL_OPT_NULL
221   };
222 typedef struct {
223   uschar *   name;  /* option requested during MAIL cmd */
224   int       value;  /* enum type */
225   BOOL need_value;  /* TRUE requires value (name=value pair format)
226                        FALSE is a singleton */
227   } env_mail_type_t;
228 static env_mail_type_t env_mail_type_list[] = {
229     { US"SIZE",   ENV_MAIL_OPT_SIZE,   TRUE  },
230     { US"BODY",   ENV_MAIL_OPT_BODY,   TRUE  },
231     { US"AUTH",   ENV_MAIL_OPT_AUTH,   TRUE  },
232 #ifdef EXPERIMENTAL_PRDR
233     { US"PRDR",   ENV_MAIL_OPT_PRDR,   FALSE },
234 #endif
235     { US"NULL",   ENV_MAIL_OPT_NULL,   FALSE }
236   };
237
238 /* When reading SMTP from a remote host, we have to use our own versions of the
239 C input-reading functions, in order to be able to flush the SMTP output only
240 when about to read more data from the socket. This is the only way to get
241 optimal performance when the client is using pipelining. Flushing for every
242 command causes a separate packet and reply packet each time; saving all the
243 responses up (when pipelining) combines them into one packet and one response.
244
245 For simplicity, these functions are used for *all* SMTP input, not only when
246 receiving over a socket. However, after setting up a secure socket (SSL), input
247 is read via the OpenSSL library, and another set of functions is used instead
248 (see tls.c).
249
250 These functions are set in the receive_getc etc. variables and called with the
251 same interface as the C functions. However, since there can only ever be
252 one incoming SMTP call, we just use a single buffer and flags. There is no need
253 to implement a complicated private FILE-like structure.*/
254
255 static uschar *smtp_inbuffer;
256 static uschar *smtp_inptr;
257 static uschar *smtp_inend;
258 static int     smtp_had_eof;
259 static int     smtp_had_error;
260
261
262 /*************************************************
263 *          SMTP version of getc()                *
264 *************************************************/
265
266 /* This gets the next byte from the SMTP input buffer. If the buffer is empty,
267 it flushes the output, and refills the buffer, with a timeout. The signal
268 handler is set appropriately by the calling function. This function is not used
269 after a connection has negotated itself into an TLS/SSL state.
270
271 Arguments:  none
272 Returns:    the next character or EOF
273 */
274
275 int
276 smtp_getc(void)
277 {
278 if (smtp_inptr >= smtp_inend)
279   {
280   int rc, save_errno;
281   fflush(smtp_out);
282   if (smtp_receive_timeout > 0) alarm(smtp_receive_timeout);
283   rc = read(fileno(smtp_in), smtp_inbuffer, in_buffer_size);
284   save_errno = errno;
285   alarm(0);
286   if (rc <= 0)
287     {
288     /* Must put the error text in fixed store, because this might be during
289     header reading, where it releases unused store above the header. */
290     if (rc < 0)
291       {
292       smtp_had_error = save_errno;
293       smtp_read_error = string_copy_malloc(
294         string_sprintf(" (error: %s)", strerror(save_errno)));
295       }
296     else smtp_had_eof = 1;
297     return EOF;
298     }
299 #ifndef DISABLE_DKIM
300   dkim_exim_verify_feed(smtp_inbuffer, rc);
301 #endif
302   smtp_inend = smtp_inbuffer + rc;
303   smtp_inptr = smtp_inbuffer;
304   }
305 return *smtp_inptr++;
306 }
307
308
309
310 /*************************************************
311 *          SMTP version of ungetc()              *
312 *************************************************/
313
314 /* Puts a character back in the input buffer. Only ever
315 called once.
316
317 Arguments:
318   ch           the character
319
320 Returns:       the character
321 */
322
323 int
324 smtp_ungetc(int ch)
325 {
326 *(--smtp_inptr) = ch;
327 return ch;
328 }
329
330
331
332
333 /*************************************************
334 *          SMTP version of feof()                *
335 *************************************************/
336
337 /* Tests for a previous EOF
338
339 Arguments:     none
340 Returns:       non-zero if the eof flag is set
341 */
342
343 int
344 smtp_feof(void)
345 {
346 return smtp_had_eof;
347 }
348
349
350
351
352 /*************************************************
353 *          SMTP version of ferror()              *
354 *************************************************/
355
356 /* Tests for a previous read error, and returns with errno
357 restored to what it was when the error was detected.
358
359 Arguments:     none
360 Returns:       non-zero if the error flag is set
361 */
362
363 int
364 smtp_ferror(void)
365 {
366 errno = smtp_had_error;
367 return smtp_had_error;
368 }
369
370
371
372 /*************************************************
373 *      Test for characters in the SMTP buffer    *
374 *************************************************/
375
376 /* Used at the end of a message
377
378 Arguments:     none
379 Returns:       TRUE/FALSE
380 */
381
382 BOOL
383 smtp_buffered(void)
384 {
385 return smtp_inptr < smtp_inend;
386 }
387
388
389
390 /*************************************************
391 *     Write formatted string to SMTP channel     *
392 *************************************************/
393
394 /* This is a separate function so that we don't have to repeat everything for
395 TLS support or debugging. It is global so that the daemon and the
396 authentication functions can use it. It does not return any error indication,
397 because major problems such as dropped connections won't show up till an output
398 flush for non-TLS connections. The smtp_fflush() function is available for
399 checking that: for convenience, TLS output errors are remembered here so that
400 they are also picked up later by smtp_fflush().
401
402 Arguments:
403   format      format string
404   ...         optional arguments
405
406 Returns:      nothing
407 */
408
409 void
410 smtp_printf(const char *format, ...)
411 {
412 va_list ap;
413
414 va_start(ap, format);
415 smtp_vprintf(format, ap);
416 va_end(ap);
417 }
418
419 /* This is split off so that verify.c:respond_printf() can, in effect, call
420 smtp_printf(), bearing in mind that in C a vararg function can't directly
421 call another vararg function, only a function which accepts a va_list. */
422
423 void
424 smtp_vprintf(const char *format, va_list ap)
425 {
426 BOOL yield;
427
428 yield = string_vformat(big_buffer, big_buffer_size, format, ap);
429
430 DEBUG(D_receive)
431   {
432   void *reset_point = store_get(0);
433   uschar *msg_copy, *cr, *end;
434   msg_copy = string_copy(big_buffer);
435   end = msg_copy + Ustrlen(msg_copy);
436   while ((cr = Ustrchr(msg_copy, '\r')) != NULL)   /* lose CRs */
437   memmove(cr, cr + 1, (end--) - cr);
438   debug_printf("SMTP>> %s", msg_copy);
439   store_reset(reset_point);
440   }
441
442 if (!yield)
443   {
444   log_write(0, LOG_MAIN|LOG_PANIC, "string too large in smtp_printf()");
445   smtp_closedown(US"Unexpected error");
446   exim_exit(EXIT_FAILURE);
447   }
448
449 /* If this is the first output for a (non-batch) RCPT command, see if all RCPTs
450 have had the same. Note: this code is also present in smtp_respond(). It would
451 be tidier to have it only in one place, but when it was added, it was easier to
452 do it that way, so as not to have to mess with the code for the RCPT command,
453 which sometimes uses smtp_printf() and sometimes smtp_respond(). */
454
455 if (rcpt_in_progress)
456   {
457   if (rcpt_smtp_response == NULL)
458     rcpt_smtp_response = string_copy(big_buffer);
459   else if (rcpt_smtp_response_same &&
460            Ustrcmp(rcpt_smtp_response, big_buffer) != 0)
461     rcpt_smtp_response_same = FALSE;
462   rcpt_in_progress = FALSE;
463   }
464
465 /* Now write the string */
466
467 #ifdef SUPPORT_TLS
468 if (tls_in.active >= 0)
469   {
470   if (tls_write(TRUE, big_buffer, Ustrlen(big_buffer)) < 0)
471     smtp_write_error = -1;
472   }
473 else
474 #endif
475
476 if (fprintf(smtp_out, "%s", big_buffer) < 0) smtp_write_error = -1;
477 }
478
479
480
481 /*************************************************
482 *        Flush SMTP out and check for error      *
483 *************************************************/
484
485 /* This function isn't currently used within Exim (it detects errors when it
486 tries to read the next SMTP input), but is available for use in local_scan().
487 For non-TLS connections, it flushes the output and checks for errors. For
488 TLS-connections, it checks for a previously-detected TLS write error.
489
490 Arguments:  none
491 Returns:    0 for no error; -1 after an error
492 */
493
494 int
495 smtp_fflush(void)
496 {
497 if (tls_in.active < 0 && fflush(smtp_out) != 0) smtp_write_error = -1;
498 return smtp_write_error;
499 }
500
501
502
503 /*************************************************
504 *          SMTP command read timeout             *
505 *************************************************/
506
507 /* Signal handler for timing out incoming SMTP commands. This attempts to
508 finish off tidily.
509
510 Argument: signal number (SIGALRM)
511 Returns:  nothing
512 */
513
514 static void
515 command_timeout_handler(int sig)
516 {
517 sig = sig;    /* Keep picky compilers happy */
518 log_write(L_lost_incoming_connection,
519           LOG_MAIN, "SMTP command timeout on%s connection from %s",
520           (tls_in.active >= 0)? " TLS" : "",
521           host_and_ident(FALSE));
522 if (smtp_batched_input)
523   moan_smtp_batch(NULL, "421 SMTP command timeout");  /* Does not return */
524 smtp_notquit_exit(US"command-timeout", US"421",
525   US"%s: SMTP command timeout - closing connection", smtp_active_hostname);
526 exim_exit(EXIT_FAILURE);
527 }
528
529
530
531 /*************************************************
532 *               SIGTERM received                 *
533 *************************************************/
534
535 /* Signal handler for handling SIGTERM. Again, try to finish tidily.
536
537 Argument: signal number (SIGTERM)
538 Returns:  nothing
539 */
540
541 static void
542 command_sigterm_handler(int sig)
543 {
544 sig = sig;    /* Keep picky compilers happy */
545 log_write(0, LOG_MAIN, "%s closed after SIGTERM", smtp_get_connection_info());
546 if (smtp_batched_input)
547   moan_smtp_batch(NULL, "421 SIGTERM received");  /* Does not return */
548 smtp_notquit_exit(US"signal-exit", US"421",
549   US"%s: Service not available - closing connection", smtp_active_hostname);
550 exim_exit(EXIT_FAILURE);
551 }
552
553
554
555
556 #ifdef EXPERIMENTAL_PROXY
557 /*************************************************
558 *     Restore socket timeout to previous value   *
559 *************************************************/
560 /* If the previous value was successfully retrieved, restore
561 it before returning control to the non-proxy routines
562
563 Arguments: fd     - File descriptor for input
564            get_ok - Successfully retrieved previous values
565            tvtmp  - Time struct with previous values
566            vslen  - Length of time struct
567 Returns:   none
568 */
569 static void
570 restore_socket_timeout(int fd, int get_ok, struct timeval tvtmp, socklen_t vslen)
571 {
572 if (get_ok == 0)
573   setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&tvtmp, vslen);
574 }
575
576 /*************************************************
577 *       Check if host is required proxy host     *
578 *************************************************/
579 /* The function determines if inbound host will be a regular smtp host
580 or if it is configured that it must use Proxy Protocol.
581
582 Arguments: none
583 Returns:   bool
584 */
585
586 static BOOL
587 check_proxy_protocol_host()
588 {
589 int rc;
590 /* Cannot configure local connection as a proxy inbound */
591 if (sender_host_address == NULL) return proxy_session;
592
593 rc = verify_check_this_host(&proxy_required_hosts, NULL, NULL,
594                            sender_host_address, NULL);
595 if (rc == OK)
596   {
597   DEBUG(D_receive)
598     debug_printf("Detected proxy protocol configured host\n");
599   proxy_session = TRUE;
600   }
601 return proxy_session;
602 }
603
604
605 /*************************************************
606 *           Flush waiting input string           *
607 *************************************************/
608 static void
609 flush_input()
610 {
611 int rc;
612
613 rc = smtp_getc();
614 while (rc != '\n')             /* End of input string */
615   {
616   rc = smtp_getc();
617   }
618 }
619
620
621 /*************************************************
622 *         Setup host for proxy protocol          *
623 *************************************************/
624 /* The function configures the connection based on a header from the
625 inbound host to use Proxy Protocol. The specification is very exact
626 so exit with an error if do not find the exact required pieces. This
627 includes an incorrect number of spaces separating args.
628
629 Arguments: none
630 Returns:   int
631 */
632
633 static BOOL
634 setup_proxy_protocol_host()
635 {
636 union {
637   struct {
638     uschar line[108];
639   } v1;
640   struct {
641     uschar sig[12];
642     uschar ver;
643     uschar cmd;
644     uschar fam;
645     uschar len;
646     union {
647       struct { /* TCP/UDP over IPv4, len = 12 */
648         uint32_t src_addr;
649         uint32_t dst_addr;
650         uint16_t src_port;
651         uint16_t dst_port;
652       } ip4;
653       struct { /* TCP/UDP over IPv6, len = 36 */
654         uint8_t  src_addr[16];
655         uint8_t  dst_addr[16];
656         uint16_t src_port;
657         uint16_t dst_port;
658       } ip6;
659       struct { /* AF_UNIX sockets, len = 216 */
660         uschar   src_addr[108];
661         uschar   dst_addr[108];
662       } unx;
663     } addr;
664   } v2;
665 } hdr;
666
667 int size, ret, fd;
668 uschar *tmpip;
669 const char v2sig[13] = "\x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A\x02";
670 uschar *iptype;  /* To display debug info */
671 struct timeval tv;
672 int get_ok = 0;
673 socklen_t vslen = 0;
674 struct timeval tvtmp;
675
676 vslen = sizeof(struct timeval);
677
678 fd = fileno(smtp_in);
679
680 /* Save current socket timeout values */
681 get_ok = getsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&tvtmp,
682                     &vslen);
683
684 /* Proxy Protocol host must send header within a short time
685 (default 3 seconds) or it's considered invalid */
686 tv.tv_sec  = PROXY_NEGOTIATION_TIMEOUT_SEC;
687 tv.tv_usec = PROXY_NEGOTIATION_TIMEOUT_USEC;
688 setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv,
689            sizeof(struct timeval));
690
691 do
692   {
693   ret = recv(fd, &hdr, sizeof(hdr), MSG_PEEK);
694   }
695   while (ret == -1 && errno == EINTR);
696
697 if (ret == -1)
698   {
699   restore_socket_timeout(fd, get_ok, tvtmp, vslen);
700   return (errno == EAGAIN) ? 0 : ERRNO_PROXYFAIL;
701   }
702
703 if (ret >= 16 &&
704     memcmp(&hdr.v2, v2sig, 13) == 0)
705   {
706   DEBUG(D_receive) debug_printf("Detected PROXYv2 header\n");
707   size = 16 + hdr.v2.len;
708   if (ret < size)
709     {
710     DEBUG(D_receive) debug_printf("Truncated or too large PROXYv2 header\n");
711     goto proxyfail;
712     }
713   switch (hdr.v2.cmd)
714     {
715     case 0x01: /* PROXY command */
716       switch (hdr.v2.fam)
717         {
718         case 0x11:  /* TCPv4 */
719           tmpip = string_sprintf("%s", hdr.v2.addr.ip4.src_addr);
720           if (!string_is_ip_address(tmpip,NULL))
721             return ERRNO_PROXYFAIL;
722           sender_host_address = tmpip;
723           sender_host_port    = hdr.v2.addr.ip4.src_port;
724           goto done;
725         case 0x21:  /* TCPv6 */
726           tmpip = string_sprintf("%s", hdr.v2.addr.ip6.src_addr);
727           if (!string_is_ip_address(tmpip,NULL))
728             return ERRNO_PROXYFAIL;
729           sender_host_address = tmpip;
730           sender_host_port    = hdr.v2.addr.ip6.src_port;
731           goto done;
732         }
733       /* Unsupported protocol, keep local connection address */
734       break;
735     case 0x00: /* LOCAL command */
736       /* Keep local connection address for LOCAL */
737       break;
738     default:
739       DEBUG(D_receive) debug_printf("Unsupported PROXYv2 command\n");
740       goto proxyfail;
741     }
742   }
743 else if (ret >= 8 &&
744          memcmp(hdr.v1.line, "PROXY", 5) == 0)
745   {
746   uschar *p = string_copy(hdr.v1.line);
747   uschar *end = memchr(p, '\r', ret - 1);
748   uschar *sp;     /* Utility variables follow */
749   int     tmp_port;
750   char   *endc;
751
752   if (!end || end[1] != '\n')
753     {
754     DEBUG(D_receive) debug_printf("Partial or invalid PROXY header\n");
755     goto proxyfail;
756     }
757   *end = '\0'; /* Terminate the string */
758   size = end + 2 - hdr.v1.line; /* Skip header + CRLF */
759   DEBUG(D_receive) debug_printf("Detected PROXYv1 header\n");
760   /* Step through the string looking for the required fields. Ensure
761      strict adherance to required formatting, exit for any error. */
762   p += 5;
763   if (!isspace(*(p++)))
764     {
765     DEBUG(D_receive) debug_printf("Missing space after PROXY command\n");
766     goto proxyfail;
767     }
768   if (!Ustrncmp(p, CCS"TCP4", 4))
769     iptype = US"IPv4";
770   else if (!Ustrncmp(p,CCS"TCP6", 4))
771     iptype = US"IPv6";
772   else if (!Ustrncmp(p,CCS"UNKNOWN", 7))
773     {
774     iptype = US"Unknown";
775     goto done;
776     }
777   else
778     {
779     DEBUG(D_receive) debug_printf("Invalid TCP type\n");
780     goto proxyfail;
781     }
782
783   p += Ustrlen(iptype);
784   if (!isspace(*(p++)))
785     {
786     DEBUG(D_receive) debug_printf("Missing space after TCP4/6 command\n");
787     goto proxyfail;
788     }
789   /* Find the end of the arg */
790   if ((sp = Ustrchr(p, ' ')) == NULL)
791     {
792     DEBUG(D_receive)
793       debug_printf("Did not find proxied src %s\n", iptype);
794     goto proxyfail;
795     }
796   *sp = '\0';
797   if(!string_is_ip_address(p,NULL))
798     {
799     DEBUG(D_receive)
800       debug_printf("Proxied src arg is not an %s address\n", iptype);
801     goto proxyfail;
802     }
803   proxy_host_address = sender_host_address;
804   sender_host_address = p;
805   p = sp + 1;
806   if ((sp = Ustrchr(p, ' ')) == NULL)
807     {
808     DEBUG(D_receive)
809       debug_printf("Did not find proxy dest %s\n", iptype);
810     goto proxyfail;
811     }
812   *sp = '\0';
813   if(!string_is_ip_address(p,NULL))
814     {
815     DEBUG(D_receive)
816       debug_printf("Proxy dest arg is not an %s address\n", iptype);
817     goto proxyfail;
818     }
819   /* Should save dest ip somewhere? */
820   p = sp + 1;
821   if ((sp = Ustrchr(p, ' ')) == NULL)
822     {
823     DEBUG(D_receive) debug_printf("Did not find proxied src port\n");
824     goto proxyfail;
825     }
826   *sp = '\0';
827   tmp_port = strtol(CCS p,&endc,10);
828   if (*endc || tmp_port == 0)
829     {
830     DEBUG(D_receive)
831       debug_printf("Proxied src port '%s' not an integer\n", p);
832     goto proxyfail;
833     }
834   proxy_host_port = sender_host_port;
835   sender_host_port = tmp_port;
836   p = sp + 1;
837   if ((sp = Ustrchr(p, '\0')) == NULL)
838     {
839     DEBUG(D_receive) debug_printf("Did not find proxy dest port\n");
840     goto proxyfail;
841     }
842   tmp_port = strtol(CCS p,&endc,10);
843   if (*endc || tmp_port == 0)
844     {
845     DEBUG(D_receive)
846       debug_printf("Proxy dest port '%s' not an integer\n", p);
847     goto proxyfail;
848     }
849   /* Should save dest port somewhere? */
850   /* Already checked for /r /n above. Good V1 header received. */
851   goto done;
852   }
853 else
854   {
855   /* Wrong protocol */
856   DEBUG(D_receive) debug_printf("Wrong proxy protocol specified\n");
857   goto proxyfail;
858   }
859
860 proxyfail:
861 restore_socket_timeout(fd, get_ok, tvtmp, vslen);
862 /* Don't flush any potential buffer contents. Any input should cause a
863 synchronization failure or we just don't want to speak SMTP to them */
864 return FALSE;
865
866 done:
867 restore_socket_timeout(fd, get_ok, tvtmp, vslen);
868 flush_input();
869 DEBUG(D_receive)
870   debug_printf("Valid %s sender from Proxy Protocol header\n",
871                iptype);
872 return proxy_session;
873 }
874 #endif
875
876 /*************************************************
877 *           Read one command line                *
878 *************************************************/
879
880 /* Strictly, SMTP commands coming over the net are supposed to end with CRLF.
881 There are sites that don't do this, and in any case internal SMTP probably
882 should check only for LF. Consequently, we check here for LF only. The line
883 ends up with [CR]LF removed from its end. If we get an overlong line, treat as
884 an unknown command. The command is read into the global smtp_cmd_buffer so that
885 it is available via $smtp_command.
886
887 The character reading routine sets up a timeout for each block actually read
888 from the input (which may contain more than one command). We set up a special
889 signal handler that closes down the session on a timeout. Control does not
890 return when it runs.
891
892 Arguments:
893   check_sync   if TRUE, check synchronization rules if global option is TRUE
894
895 Returns:       a code identifying the command (enumerated above)
896 */
897
898 static int
899 smtp_read_command(BOOL check_sync)
900 {
901 int c;
902 int ptr = 0;
903 smtp_cmd_list *p;
904 BOOL hadnull = FALSE;
905
906 os_non_restarting_signal(SIGALRM, command_timeout_handler);
907
908 while ((c = (receive_getc)()) != '\n' && c != EOF)
909   {
910   if (ptr >= smtp_cmd_buffer_size)
911     {
912     os_non_restarting_signal(SIGALRM, sigalrm_handler);
913     return OTHER_CMD;
914     }
915   if (c == 0)
916     {
917     hadnull = TRUE;
918     c = '?';
919     }
920   smtp_cmd_buffer[ptr++] = c;
921   }
922
923 receive_linecount++;    /* For BSMTP errors */
924 os_non_restarting_signal(SIGALRM, sigalrm_handler);
925
926 /* If hit end of file, return pseudo EOF command. Whether we have a
927 part-line already read doesn't matter, since this is an error state. */
928
929 if (c == EOF) return EOF_CMD;
930
931 /* Remove any CR and white space at the end of the line, and terminate the
932 string. */
933
934 while (ptr > 0 && isspace(smtp_cmd_buffer[ptr-1])) ptr--;
935 smtp_cmd_buffer[ptr] = 0;
936
937 DEBUG(D_receive) debug_printf("SMTP<< %s\n", smtp_cmd_buffer);
938
939 /* NULLs are not allowed in SMTP commands */
940
941 if (hadnull) return BADCHAR_CMD;
942
943 /* Scan command list and return identity, having set the data pointer
944 to the start of the actual data characters. Check for SMTP synchronization
945 if required. */
946
947 for (p = cmd_list; p < cmd_list_end; p++)
948   {
949   #ifdef EXPERIMENTAL_PROXY
950   /* Only allow QUIT command if Proxy Protocol parsing failed */
951   if (proxy_session && proxy_session_failed)
952     {
953     if (p->cmd != QUIT_CMD)
954       continue;
955     }
956   #endif
957   if (strncmpic(smtp_cmd_buffer, US p->name, p->len) == 0 &&
958        (smtp_cmd_buffer[p->len-1] == ':' ||   /* "mail from:" or "rcpt to:" */
959         smtp_cmd_buffer[p->len] == 0 ||
960         smtp_cmd_buffer[p->len] == ' '))
961     {
962     if (smtp_inptr < smtp_inend &&                     /* Outstanding input */
963         p->cmd < sync_cmd_limit &&                     /* Command should sync */
964         check_sync &&                                  /* Local flag set */
965         smtp_enforce_sync &&                           /* Global flag set */
966         sender_host_address != NULL &&                 /* Not local input */
967         !sender_host_notsocket)                        /* Really is a socket */
968       return BADSYN_CMD;
969
970     /* The variables $smtp_command and $smtp_command_argument point into the
971     unmodified input buffer. A copy of the latter is taken for actual
972     processing, so that it can be chopped up into separate parts if necessary,
973     for example, when processing a MAIL command options such as SIZE that can
974     follow the sender address. */
975
976     smtp_cmd_argument = smtp_cmd_buffer + p->len;
977     while (isspace(*smtp_cmd_argument)) smtp_cmd_argument++;
978     Ustrcpy(smtp_data_buffer, smtp_cmd_argument);
979     smtp_cmd_data = smtp_data_buffer;
980
981     /* Count non-mail commands from those hosts that are controlled in this
982     way. The default is all hosts. We don't waste effort checking the list
983     until we get a non-mail command, but then cache the result to save checking
984     again. If there's a DEFER while checking the host, assume it's in the list.
985
986     Note that one instance of RSET, EHLO/HELO, and STARTTLS is allowed at the
987     start of each incoming message by fiddling with the value in the table. */
988
989     if (!p->is_mail_cmd)
990       {
991       if (count_nonmail == TRUE_UNSET) count_nonmail =
992         verify_check_host(&smtp_accept_max_nonmail_hosts) != FAIL;
993       if (count_nonmail && ++nonmail_command_count > smtp_accept_max_nonmail)
994         return TOO_MANY_NONMAIL_CMD;
995       }
996
997     /* If there is data for a command that does not expect it, generate the
998     error here. */
999
1000     return (p->has_arg || *smtp_cmd_data == 0)? p->cmd : BADARG_CMD;
1001     }
1002   }
1003
1004 #ifdef EXPERIMENTAL_PROXY
1005 /* Only allow QUIT command if Proxy Protocol parsing failed */
1006 if (proxy_session && proxy_session_failed)
1007   return PROXY_FAIL_IGNORE_CMD;
1008 #endif
1009
1010 /* Enforce synchronization for unknown commands */
1011
1012 if (smtp_inptr < smtp_inend &&                     /* Outstanding input */
1013     check_sync &&                                  /* Local flag set */
1014     smtp_enforce_sync &&                           /* Global flag set */
1015     sender_host_address != NULL &&                 /* Not local input */
1016     !sender_host_notsocket)                        /* Really is a socket */
1017   return BADSYN_CMD;
1018
1019 return OTHER_CMD;
1020 }
1021
1022
1023
1024 /*************************************************
1025 *          Recheck synchronization               *
1026 *************************************************/
1027
1028 /* Synchronization checks can never be perfect because a packet may be on its
1029 way but not arrived when the check is done. Such checks can in any case only be
1030 done when TLS is not in use. Normally, the checks happen when commands are
1031 read: Exim ensures that there is no more input in the input buffer. In normal
1032 cases, the response to the command will be fast, and there is no further check.
1033
1034 However, for some commands an ACL is run, and that can include delays. In those
1035 cases, it is useful to do another check on the input just before sending the
1036 response. This also applies at the start of a connection. This function does
1037 that check by means of the select() function, as long as the facility is not
1038 disabled or inappropriate. A failure of select() is ignored.
1039
1040 When there is unwanted input, we read it so that it appears in the log of the
1041 error.
1042
1043 Arguments: none
1044 Returns:   TRUE if all is well; FALSE if there is input pending
1045 */
1046
1047 static BOOL
1048 check_sync(void)
1049 {
1050 int fd, rc;
1051 fd_set fds;
1052 struct timeval tzero;
1053
1054 if (!smtp_enforce_sync || sender_host_address == NULL ||
1055     sender_host_notsocket || tls_in.active >= 0)
1056   return TRUE;
1057
1058 fd = fileno(smtp_in);
1059 FD_ZERO(&fds);
1060 FD_SET(fd, &fds);
1061 tzero.tv_sec = 0;
1062 tzero.tv_usec = 0;
1063 rc = select(fd + 1, (SELECT_ARG2_TYPE *)&fds, NULL, NULL, &tzero);
1064
1065 if (rc <= 0) return TRUE;     /* Not ready to read */
1066 rc = smtp_getc();
1067 if (rc < 0) return TRUE;      /* End of file or error */
1068
1069 smtp_ungetc(rc);
1070 rc = smtp_inend - smtp_inptr;
1071 if (rc > 150) rc = 150;
1072 smtp_inptr[rc] = 0;
1073 return FALSE;
1074 }
1075
1076
1077
1078 /*************************************************
1079 *          Forced closedown of call              *
1080 *************************************************/
1081
1082 /* This function is called from log.c when Exim is dying because of a serious
1083 disaster, and also from some other places. If an incoming non-batched SMTP
1084 channel is open, it swallows the rest of the incoming message if in the DATA
1085 phase, sends the reply string, and gives an error to all subsequent commands
1086 except QUIT. The existence of an SMTP call is detected by the non-NULLness of
1087 smtp_in.
1088
1089 Arguments:
1090   message   SMTP reply string to send, excluding the code
1091
1092 Returns:    nothing
1093 */
1094
1095 void
1096 smtp_closedown(uschar *message)
1097 {
1098 if (smtp_in == NULL || smtp_batched_input) return;
1099 receive_swallow_smtp();
1100 smtp_printf("421 %s\r\n", message);
1101
1102 for (;;)
1103   {
1104   switch(smtp_read_command(FALSE))
1105     {
1106     case EOF_CMD:
1107     return;
1108
1109     case QUIT_CMD:
1110     smtp_printf("221 %s closing connection\r\n", smtp_active_hostname);
1111     mac_smtp_fflush();
1112     return;
1113
1114     case RSET_CMD:
1115     smtp_printf("250 Reset OK\r\n");
1116     break;
1117
1118     default:
1119     smtp_printf("421 %s\r\n", message);
1120     break;
1121     }
1122   }
1123 }
1124
1125
1126
1127
1128 /*************************************************
1129 *        Set up connection info for logging      *
1130 *************************************************/
1131
1132 /* This function is called when logging information about an SMTP connection.
1133 It sets up appropriate source information, depending on the type of connection.
1134 If sender_fullhost is NULL, we are at a very early stage of the connection;
1135 just use the IP address.
1136
1137 Argument:    none
1138 Returns:     a string describing the connection
1139 */
1140
1141 uschar *
1142 smtp_get_connection_info(void)
1143 {
1144 uschar *hostname = (sender_fullhost == NULL)?
1145   sender_host_address : sender_fullhost;
1146
1147 if (host_checking)
1148   return string_sprintf("SMTP connection from %s", hostname);
1149
1150 if (sender_host_unknown || sender_host_notsocket)
1151   return string_sprintf("SMTP connection from %s", sender_ident);
1152
1153 if (is_inetd)
1154   return string_sprintf("SMTP connection from %s (via inetd)", hostname);
1155
1156 if ((log_extra_selector & LX_incoming_interface) != 0 &&
1157      interface_address != NULL)
1158   return string_sprintf("SMTP connection from %s I=[%s]:%d", hostname,
1159     interface_address, interface_port);
1160
1161 return string_sprintf("SMTP connection from %s", hostname);
1162 }
1163
1164
1165
1166 #ifdef SUPPORT_TLS
1167 static uschar *
1168 s_tlslog(uschar * s, int * sizep, int * ptrp)
1169 {
1170   int size = sizep ? *sizep : 0;
1171   int ptr = ptrp ? *ptrp : 0;
1172
1173   if ((log_extra_selector & LX_tls_cipher) != 0 && tls_in.cipher != NULL)
1174     s = string_append(s, &size, &ptr, 2, US" X=", tls_in.cipher);
1175   if ((log_extra_selector & LX_tls_certificate_verified) != 0 &&
1176        tls_in.cipher != NULL)
1177     s = string_append(s, &size, &ptr, 2, US" CV=",
1178       tls_in.certificate_verified? "yes":"no");
1179   if ((log_extra_selector & LX_tls_peerdn) != 0 && tls_in.peerdn != NULL)
1180     s = string_append(s, &size, &ptr, 3, US" DN=\"",
1181       string_printing(tls_in.peerdn), US"\"");
1182   if ((log_extra_selector & LX_tls_sni) != 0 && tls_in.sni != NULL)
1183     s = string_append(s, &size, &ptr, 3, US" SNI=\"",
1184       string_printing(tls_in.sni), US"\"");
1185
1186   if (sizep) *sizep = size;
1187   if (ptrp) *ptrp = ptr;
1188   return s;
1189 }
1190 #endif
1191
1192 /*************************************************
1193 *      Log lack of MAIL if so configured         *
1194 *************************************************/
1195
1196 /* This function is called when an SMTP session ends. If the log selector
1197 smtp_no_mail is set, write a log line giving some details of what has happened
1198 in the SMTP session.
1199
1200 Arguments:   none
1201 Returns:     nothing
1202 */
1203
1204 void
1205 smtp_log_no_mail(void)
1206 {
1207 int size, ptr, i;
1208 uschar *s, *sep;
1209
1210 if (smtp_mailcmd_count > 0 || (log_extra_selector & LX_smtp_no_mail) == 0)
1211   return;
1212
1213 s = NULL;
1214 size = ptr = 0;
1215
1216 if (sender_host_authenticated != NULL)
1217   {
1218   s = string_append(s, &size, &ptr, 2, US" A=", sender_host_authenticated);
1219   if (authenticated_id != NULL)
1220     s = string_append(s, &size, &ptr, 2, US":", authenticated_id);
1221   }
1222
1223 #ifdef SUPPORT_TLS
1224 s = s_tlslog(s, &size, &ptr);
1225 #endif
1226
1227 sep = (smtp_connection_had[SMTP_HBUFF_SIZE-1] != SCH_NONE)?
1228   US" C=..." : US" C=";
1229 for (i = smtp_ch_index; i < SMTP_HBUFF_SIZE; i++)
1230   {
1231   if (smtp_connection_had[i] != SCH_NONE)
1232     {
1233     s = string_append(s, &size, &ptr, 2, sep,
1234       smtp_names[smtp_connection_had[i]]);
1235     sep = US",";
1236     }
1237   }
1238
1239 for (i = 0; i < smtp_ch_index; i++)
1240   {
1241   s = string_append(s, &size, &ptr, 2, sep, smtp_names[smtp_connection_had[i]]);
1242   sep = US",";
1243   }
1244
1245 if (s != NULL) s[ptr] = 0; else s = US"";
1246 log_write(0, LOG_MAIN, "no MAIL in SMTP connection from %s D=%s%s",
1247   host_and_ident(FALSE),
1248   readconf_printtime(time(NULL) - smtp_connection_start), s);
1249 }
1250
1251
1252
1253 /*************************************************
1254 *   Check HELO line and set sender_helo_name     *
1255 *************************************************/
1256
1257 /* Check the format of a HELO line. The data for HELO/EHLO is supposed to be
1258 the domain name of the sending host, or an ip literal in square brackets. The
1259 arrgument is placed in sender_helo_name, which is in malloc store, because it
1260 must persist over multiple incoming messages. If helo_accept_junk is set, this
1261 host is permitted to send any old junk (needed for some broken hosts).
1262 Otherwise, helo_allow_chars can be used for rogue characters in general
1263 (typically people want to let in underscores).
1264
1265 Argument:
1266   s       the data portion of the line (already past any white space)
1267
1268 Returns:  TRUE or FALSE
1269 */
1270
1271 static BOOL
1272 check_helo(uschar *s)
1273 {
1274 uschar *start = s;
1275 uschar *end = s + Ustrlen(s);
1276 BOOL yield = helo_accept_junk;
1277
1278 /* Discard any previous helo name */
1279
1280 if (sender_helo_name != NULL)
1281   {
1282   store_free(sender_helo_name);
1283   sender_helo_name = NULL;
1284   }
1285
1286 /* Skip tests if junk is permitted. */
1287
1288 if (!yield)
1289   {
1290   /* Allow the new standard form for IPv6 address literals, namely,
1291   [IPv6:....], and because someone is bound to use it, allow an equivalent
1292   IPv4 form. Allow plain addresses as well. */
1293
1294   if (*s == '[')
1295     {
1296     if (end[-1] == ']')
1297       {
1298       end[-1] = 0;
1299       if (strncmpic(s, US"[IPv6:", 6) == 0)
1300         yield = (string_is_ip_address(s+6, NULL) == 6);
1301       else if (strncmpic(s, US"[IPv4:", 6) == 0)
1302         yield = (string_is_ip_address(s+6, NULL) == 4);
1303       else
1304         yield = (string_is_ip_address(s+1, NULL) != 0);
1305       end[-1] = ']';
1306       }
1307     }
1308
1309   /* Non-literals must be alpha, dot, hyphen, plus any non-valid chars
1310   that have been configured (usually underscore - sigh). */
1311
1312   else if (*s != 0)
1313     {
1314     yield = TRUE;
1315     while (*s != 0)
1316       {
1317       if (!isalnum(*s) && *s != '.' && *s != '-' &&
1318           Ustrchr(helo_allow_chars, *s) == NULL)
1319         {
1320         yield = FALSE;
1321         break;
1322         }
1323       s++;
1324       }
1325     }
1326   }
1327
1328 /* Save argument if OK */
1329
1330 if (yield) sender_helo_name = string_copy_malloc(start);
1331 return yield;
1332 }
1333
1334
1335
1336
1337
1338 /*************************************************
1339 *         Extract SMTP command option            *
1340 *************************************************/
1341
1342 /* This function picks the next option setting off the end of smtp_cmd_data. It
1343 is called for MAIL FROM and RCPT TO commands, to pick off the optional ESMTP
1344 things that can appear there.
1345
1346 Arguments:
1347    name           point this at the name
1348    value          point this at the data string
1349
1350 Returns:          TRUE if found an option
1351 */
1352
1353 static BOOL
1354 extract_option(uschar **name, uschar **value)
1355 {
1356 uschar *n;
1357 uschar *v = smtp_cmd_data + Ustrlen(smtp_cmd_data) - 1;
1358 while (isspace(*v)) v--;
1359 v[1] = 0;
1360 while (v > smtp_cmd_data && *v != '=' && !isspace(*v)) v--;
1361
1362 n = v;
1363 if (*v == '=')
1364 {
1365   while(isalpha(n[-1])) n--;
1366   /* RFC says SP, but TAB seen in wild and other major MTAs accept it */
1367   if (!isspace(n[-1])) return FALSE;
1368   n[-1] = 0;
1369 }
1370 else
1371 {
1372   n++;
1373   if (v == smtp_cmd_data) return FALSE;
1374 }
1375 *v++ = 0;
1376 *name = n;
1377 *value = v;
1378 return TRUE;
1379 }
1380
1381
1382
1383
1384
1385 /*************************************************
1386 *         Reset for new message                  *
1387 *************************************************/
1388
1389 /* This function is called whenever the SMTP session is reset from
1390 within either of the setup functions.
1391
1392 Argument:   the stacking pool storage reset point
1393 Returns:    nothing
1394 */
1395
1396 static void
1397 smtp_reset(void *reset_point)
1398 {
1399 store_reset(reset_point);
1400 recipients_list = NULL;
1401 rcpt_count = rcpt_defer_count = rcpt_fail_count =
1402   raw_recipients_count = recipients_count = recipients_list_max = 0;
1403 cancel_cutthrough_connection("smtp reset");
1404 message_linecount = 0;
1405 message_size = -1;
1406 acl_added_headers = NULL;
1407 acl_removed_headers = NULL;
1408 queue_only_policy = FALSE;
1409 rcpt_smtp_response = NULL;
1410 rcpt_smtp_response_same = TRUE;
1411 rcpt_in_progress = FALSE;
1412 deliver_freeze = FALSE;                              /* Can be set by ACL */
1413 freeze_tell = freeze_tell_config;                    /* Can be set by ACL */
1414 fake_response = OK;                                  /* Can be set by ACL */
1415 #ifdef WITH_CONTENT_SCAN
1416 no_mbox_unspool = FALSE;                             /* Can be set by ACL */
1417 #endif
1418 submission_mode = FALSE;                             /* Can be set by ACL */
1419 suppress_local_fixups = suppress_local_fixups_default; /* Can be set by ACL */
1420 active_local_from_check = local_from_check;          /* Can be set by ACL */
1421 active_local_sender_retain = local_sender_retain;    /* Can be set by ACL */
1422 sender_address = NULL;
1423 submission_name = NULL;                              /* Can be set by ACL */
1424 raw_sender = NULL;                  /* After SMTP rewrite, before qualifying */
1425 sender_address_unrewritten = NULL;  /* Set only after verify rewrite */
1426 sender_verified_list = NULL;        /* No senders verified */
1427 memset(sender_address_cache, 0, sizeof(sender_address_cache));
1428 memset(sender_domain_cache, 0, sizeof(sender_domain_cache));
1429 authenticated_sender = NULL;
1430 #ifdef EXPERIMENTAL_BRIGHTMAIL
1431 bmi_run = 0;
1432 bmi_verdicts = NULL;
1433 #endif
1434 #ifndef DISABLE_DKIM
1435 dkim_signers = NULL;
1436 dkim_disable_verify = FALSE;
1437 dkim_collect_input = FALSE;
1438 #endif
1439 #ifdef EXPERIMENTAL_SPF
1440 spf_header_comment = NULL;
1441 spf_received = NULL;
1442 spf_result = NULL;
1443 spf_smtp_comment = NULL;
1444 #endif
1445 body_linecount = body_zerocount = 0;
1446
1447 sender_rate = sender_rate_limit = sender_rate_period = NULL;
1448 ratelimiters_mail = NULL;           /* Updated by ratelimit ACL condition */
1449                    /* Note that ratelimiters_conn persists across resets. */
1450
1451 /* Reset message ACL variables */
1452
1453 acl_var_m = NULL;
1454
1455 /* The message body variables use malloc store. They may be set if this is
1456 not the first message in an SMTP session and the previous message caused them
1457 to be referenced in an ACL. */
1458
1459 if (message_body != NULL)
1460   {
1461   store_free(message_body);
1462   message_body = NULL;
1463   }
1464
1465 if (message_body_end != NULL)
1466   {
1467   store_free(message_body_end);
1468   message_body_end = NULL;
1469   }
1470
1471 /* Warning log messages are also saved in malloc store. They are saved to avoid
1472 repetition in the same message, but it seems right to repeat them for different
1473 messages. */
1474
1475 while (acl_warn_logged != NULL)
1476   {
1477   string_item *this = acl_warn_logged;
1478   acl_warn_logged = acl_warn_logged->next;
1479   store_free(this);
1480   }
1481 }
1482
1483
1484
1485
1486
1487 /*************************************************
1488 *  Initialize for incoming batched SMTP message  *
1489 *************************************************/
1490
1491 /* This function is called from smtp_setup_msg() in the case when
1492 smtp_batched_input is true. This happens when -bS is used to pass a whole batch
1493 of messages in one file with SMTP commands between them. All errors must be
1494 reported by sending a message, and only MAIL FROM, RCPT TO, and DATA are
1495 relevant. After an error on a sender, or an invalid recipient, the remainder
1496 of the message is skipped. The value of received_protocol is already set.
1497
1498 Argument: none
1499 Returns:  > 0 message successfully started (reached DATA)
1500           = 0 QUIT read or end of file reached
1501           < 0 should not occur
1502 */
1503
1504 static int
1505 smtp_setup_batch_msg(void)
1506 {
1507 int done = 0;
1508 void *reset_point = store_get(0);
1509
1510 /* Save the line count at the start of each transaction - single commands
1511 like HELO and RSET count as whole transactions. */
1512
1513 bsmtp_transaction_linecount = receive_linecount;
1514
1515 if ((receive_feof)()) return 0;   /* Treat EOF as QUIT */
1516
1517 smtp_reset(reset_point);                /* Reset for start of message */
1518
1519 /* Deal with SMTP commands. This loop is exited by setting done to a POSITIVE
1520 value. The values are 2 larger than the required yield of the function. */
1521
1522 while (done <= 0)
1523   {
1524   uschar *errmess;
1525   uschar *recipient = NULL;
1526   int start, end, sender_domain, recipient_domain;
1527
1528   switch(smtp_read_command(FALSE))
1529     {
1530     /* The HELO/EHLO commands set sender_address_helo if they have
1531     valid data; otherwise they are ignored, except that they do
1532     a reset of the state. */
1533
1534     case HELO_CMD:
1535     case EHLO_CMD:
1536
1537     check_helo(smtp_cmd_data);
1538     /* Fall through */
1539
1540     case RSET_CMD:
1541     smtp_reset(reset_point);
1542     bsmtp_transaction_linecount = receive_linecount;
1543     break;
1544
1545
1546     /* The MAIL FROM command requires an address as an operand. All we
1547     do here is to parse it for syntactic correctness. The form "<>" is
1548     a special case which converts into an empty string. The start/end
1549     pointers in the original are not used further for this address, as
1550     it is the canonical extracted address which is all that is kept. */
1551
1552     case MAIL_CMD:
1553     if (sender_address != NULL)
1554       /* The function moan_smtp_batch() does not return. */
1555       moan_smtp_batch(smtp_cmd_buffer, "503 Sender already given");
1556
1557     if (smtp_cmd_data[0] == 0)
1558       /* The function moan_smtp_batch() does not return. */
1559       moan_smtp_batch(smtp_cmd_buffer, "501 MAIL FROM must have an address operand");
1560
1561     /* Reset to start of message */
1562
1563     smtp_reset(reset_point);
1564
1565     /* Apply SMTP rewrite */
1566
1567     raw_sender = ((rewrite_existflags & rewrite_smtp) != 0)?
1568       rewrite_one(smtp_cmd_data, rewrite_smtp|rewrite_smtp_sender, NULL, FALSE,
1569         US"", global_rewrite_rules) : smtp_cmd_data;
1570
1571     /* Extract the address; the TRUE flag allows <> as valid */
1572
1573     raw_sender =
1574       parse_extract_address(raw_sender, &errmess, &start, &end, &sender_domain,
1575         TRUE);
1576
1577     if (raw_sender == NULL)
1578       /* The function moan_smtp_batch() does not return. */
1579       moan_smtp_batch(smtp_cmd_buffer, "501 %s", errmess);
1580
1581     sender_address = string_copy(raw_sender);
1582
1583     /* Qualify unqualified sender addresses if permitted to do so. */
1584
1585     if (sender_domain == 0 && sender_address[0] != 0 && sender_address[0] != '@')
1586       {
1587       if (allow_unqualified_sender)
1588         {
1589         sender_address = rewrite_address_qualify(sender_address, FALSE);
1590         DEBUG(D_receive) debug_printf("unqualified address %s accepted "
1591           "and rewritten\n", raw_sender);
1592         }
1593       /* The function moan_smtp_batch() does not return. */
1594       else moan_smtp_batch(smtp_cmd_buffer, "501 sender address must contain "
1595         "a domain");
1596       }
1597     break;
1598
1599
1600     /* The RCPT TO command requires an address as an operand. All we do
1601     here is to parse it for syntactic correctness. There may be any number
1602     of RCPT TO commands, specifying multiple senders. We build them all into
1603     a data structure that is in argc/argv format. The start/end values
1604     given by parse_extract_address are not used, as we keep only the
1605     extracted address. */
1606
1607     case RCPT_CMD:
1608     if (sender_address == NULL)
1609       /* The function moan_smtp_batch() does not return. */
1610       moan_smtp_batch(smtp_cmd_buffer, "503 No sender yet given");
1611
1612     if (smtp_cmd_data[0] == 0)
1613       /* The function moan_smtp_batch() does not return. */
1614       moan_smtp_batch(smtp_cmd_buffer, "501 RCPT TO must have an address operand");
1615
1616     /* Check maximum number allowed */
1617
1618     if (recipients_max > 0 && recipients_count + 1 > recipients_max)
1619       /* The function moan_smtp_batch() does not return. */
1620       moan_smtp_batch(smtp_cmd_buffer, "%s too many recipients",
1621         recipients_max_reject? "552": "452");
1622
1623     /* Apply SMTP rewrite, then extract address. Don't allow "<>" as a
1624     recipient address */
1625
1626     recipient = ((rewrite_existflags & rewrite_smtp) != 0)?
1627       rewrite_one(smtp_cmd_data, rewrite_smtp, NULL, FALSE, US"",
1628         global_rewrite_rules) : smtp_cmd_data;
1629
1630     /* rfc821_domains = TRUE; << no longer needed */
1631     recipient = parse_extract_address(recipient, &errmess, &start, &end,
1632       &recipient_domain, FALSE);
1633     /* rfc821_domains = FALSE; << no longer needed */
1634
1635     if (recipient == NULL)
1636       /* The function moan_smtp_batch() does not return. */
1637       moan_smtp_batch(smtp_cmd_buffer, "501 %s", errmess);
1638
1639     /* If the recipient address is unqualified, qualify it if permitted. Then
1640     add it to the list of recipients. */
1641
1642     if (recipient_domain == 0)
1643       {
1644       if (allow_unqualified_recipient)
1645         {
1646         DEBUG(D_receive) debug_printf("unqualified address %s accepted\n",
1647           recipient);
1648         recipient = rewrite_address_qualify(recipient, TRUE);
1649         }
1650       /* The function moan_smtp_batch() does not return. */
1651       else moan_smtp_batch(smtp_cmd_buffer, "501 recipient address must contain "
1652         "a domain");
1653       }
1654     receive_add_recipient(recipient, -1);
1655     break;
1656
1657
1658     /* The DATA command is legal only if it follows successful MAIL FROM
1659     and RCPT TO commands. This function is complete when a valid DATA
1660     command is encountered. */
1661
1662     case DATA_CMD:
1663     if (sender_address == NULL || recipients_count <= 0)
1664       {
1665       /* The function moan_smtp_batch() does not return. */
1666       if (sender_address == NULL)
1667         moan_smtp_batch(smtp_cmd_buffer,
1668           "503 MAIL FROM:<sender> command must precede DATA");
1669       else
1670         moan_smtp_batch(smtp_cmd_buffer,
1671           "503 RCPT TO:<recipient> must precede DATA");
1672       }
1673     else
1674       {
1675       done = 3;                      /* DATA successfully achieved */
1676       message_ended = END_NOTENDED;  /* Indicate in middle of message */
1677       }
1678     break;
1679
1680
1681     /* The VRFY, EXPN, HELP, ETRN, and NOOP commands are ignored. */
1682
1683     case VRFY_CMD:
1684     case EXPN_CMD:
1685     case HELP_CMD:
1686     case NOOP_CMD:
1687     case ETRN_CMD:
1688     bsmtp_transaction_linecount = receive_linecount;
1689     break;
1690
1691
1692     case EOF_CMD:
1693     case QUIT_CMD:
1694     done = 2;
1695     break;
1696
1697
1698     case BADARG_CMD:
1699     /* The function moan_smtp_batch() does not return. */
1700     moan_smtp_batch(smtp_cmd_buffer, "501 Unexpected argument data");
1701     break;
1702
1703
1704     case BADCHAR_CMD:
1705     /* The function moan_smtp_batch() does not return. */
1706     moan_smtp_batch(smtp_cmd_buffer, "501 Unexpected NULL in SMTP command");
1707     break;
1708
1709
1710     default:
1711     /* The function moan_smtp_batch() does not return. */
1712     moan_smtp_batch(smtp_cmd_buffer, "500 Command unrecognized");
1713     break;
1714     }
1715   }
1716
1717 return done - 2;  /* Convert yield values */
1718 }
1719
1720
1721
1722
1723 /*************************************************
1724 *          Start an SMTP session                 *
1725 *************************************************/
1726
1727 /* This function is called at the start of an SMTP session. Thereafter,
1728 smtp_setup_msg() is called to initiate each separate message. This
1729 function does host-specific testing, and outputs the banner line.
1730
1731 Arguments:     none
1732 Returns:       FALSE if the session can not continue; something has
1733                gone wrong, or the connection to the host is blocked
1734 */
1735
1736 BOOL
1737 smtp_start_session(void)
1738 {
1739 int size = 256;
1740 int ptr, esclen;
1741 uschar *user_msg, *log_msg;
1742 uschar *code, *esc;
1743 uschar *p, *s, *ss;
1744
1745 smtp_connection_start = time(NULL);
1746 for (smtp_ch_index = 0; smtp_ch_index < SMTP_HBUFF_SIZE; smtp_ch_index++)
1747   smtp_connection_had[smtp_ch_index] = SCH_NONE;
1748 smtp_ch_index = 0;
1749
1750 /* Default values for certain variables */
1751
1752 helo_seen = esmtp = helo_accept_junk = FALSE;
1753 smtp_mailcmd_count = 0;
1754 count_nonmail = TRUE_UNSET;
1755 synprot_error_count = unknown_command_count = nonmail_command_count = 0;
1756 smtp_delay_mail = smtp_rlm_base;
1757 auth_advertised = FALSE;
1758 pipelining_advertised = FALSE;
1759 pipelining_enable = TRUE;
1760 sync_cmd_limit = NON_SYNC_CMD_NON_PIPELINING;
1761 smtp_exit_function_called = FALSE;    /* For avoiding loop in not-quit exit */
1762
1763 memset(sender_host_cache, 0, sizeof(sender_host_cache));
1764
1765 /* If receiving by -bs from a trusted user, or testing with -bh, we allow
1766 authentication settings from -oMaa to remain in force. */
1767
1768 if (!host_checking && !sender_host_notsocket) sender_host_authenticated = NULL;
1769 authenticated_by = NULL;
1770
1771 #ifdef SUPPORT_TLS
1772 tls_in.cipher = tls_in.peerdn = NULL;
1773 tls_advertised = FALSE;
1774 #endif
1775
1776 /* Reset ACL connection variables */
1777
1778 acl_var_c = NULL;
1779
1780 /* Allow for trailing 0 in the command and data buffers. */
1781
1782 smtp_cmd_buffer = (uschar *)malloc(2*smtp_cmd_buffer_size + 2);
1783 if (smtp_cmd_buffer == NULL)
1784   log_write(0, LOG_MAIN|LOG_PANIC_DIE,
1785     "malloc() failed for SMTP command buffer");
1786 smtp_cmd_buffer[0] = 0;
1787 smtp_data_buffer = smtp_cmd_buffer + smtp_cmd_buffer_size + 1;
1788
1789 /* For batched input, the protocol setting can be overridden from the
1790 command line by a trusted caller. */
1791
1792 if (smtp_batched_input)
1793   {
1794   if (received_protocol == NULL) received_protocol = US"local-bsmtp";
1795   }
1796
1797 /* For non-batched SMTP input, the protocol setting is forced here. It will be
1798 reset later if any of EHLO/AUTH/STARTTLS are received. */
1799
1800 else
1801   received_protocol =
1802     protocols[pnormal] + ((sender_host_address != NULL)? pnlocal : 0);
1803
1804 /* Set up the buffer for inputting using direct read() calls, and arrange to
1805 call the local functions instead of the standard C ones. */
1806
1807 smtp_inbuffer = (uschar *)malloc(in_buffer_size);
1808 if (smtp_inbuffer == NULL)
1809   log_write(0, LOG_MAIN|LOG_PANIC_DIE, "malloc() failed for SMTP input buffer");
1810 receive_getc = smtp_getc;
1811 receive_ungetc = smtp_ungetc;
1812 receive_feof = smtp_feof;
1813 receive_ferror = smtp_ferror;
1814 receive_smtp_buffered = smtp_buffered;
1815 smtp_inptr = smtp_inend = smtp_inbuffer;
1816 smtp_had_eof = smtp_had_error = 0;
1817
1818 /* Set up the message size limit; this may be host-specific */
1819
1820 thismessage_size_limit = expand_string_integer(message_size_limit, TRUE);
1821 if (expand_string_message != NULL)
1822   {
1823   if (thismessage_size_limit == -1)
1824     log_write(0, LOG_MAIN|LOG_PANIC, "unable to expand message_size_limit: "
1825       "%s", expand_string_message);
1826   else
1827     log_write(0, LOG_MAIN|LOG_PANIC, "invalid message_size_limit: "
1828       "%s", expand_string_message);
1829   smtp_closedown(US"Temporary local problem - please try later");
1830   return FALSE;
1831   }
1832
1833 /* When a message is input locally via the -bs or -bS options, sender_host_
1834 unknown is set unless -oMa was used to force an IP address, in which case it
1835 is checked like a real remote connection. When -bs is used from inetd, this
1836 flag is not set, causing the sending host to be checked. The code that deals
1837 with IP source routing (if configured) is never required for -bs or -bS and
1838 the flag sender_host_notsocket is used to suppress it.
1839
1840 If smtp_accept_max and smtp_accept_reserve are set, keep some connections in
1841 reserve for certain hosts and/or networks. */
1842
1843 if (!sender_host_unknown)
1844   {
1845   int rc;
1846   BOOL reserved_host = FALSE;
1847
1848   /* Look up IP options (source routing info) on the socket if this is not an
1849   -oMa "host", and if any are found, log them and drop the connection.
1850
1851   Linux (and others now, see below) is different to everyone else, so there
1852   has to be some conditional compilation here. Versions of Linux before 2.1.15
1853   used a structure whose name was "options". Somebody finally realized that
1854   this name was silly, and it got changed to "ip_options". I use the
1855   newer name here, but there is a fudge in the script that sets up os.h
1856   to define a macro in older Linux systems.
1857
1858   Sigh. Linux is a fast-moving target. Another generation of Linux uses
1859   glibc 2, which has chosen ip_opts for the structure name. This is now
1860   really a glibc thing rather than a Linux thing, so the condition name
1861   has been changed to reflect this. It is relevant also to GNU/Hurd.
1862
1863   Mac OS 10.x (Darwin) is like the later glibc versions, but without the
1864   setting of the __GLIBC__ macro, so we can't detect it automatically. There's
1865   a special macro defined in the os.h file.
1866
1867   Some DGUX versions on older hardware appear not to support IP options at
1868   all, so there is now a general macro which can be set to cut out this
1869   support altogether.
1870
1871   How to do this properly in IPv6 is not yet known. */
1872
1873   #if !HAVE_IPV6 && !defined(NO_IP_OPTIONS)
1874
1875   #ifdef GLIBC_IP_OPTIONS
1876     #if (!defined __GLIBC__) || (__GLIBC__ < 2)
1877     #define OPTSTYLE 1
1878     #else
1879     #define OPTSTYLE 2
1880     #endif
1881   #elif defined DARWIN_IP_OPTIONS
1882     #define OPTSTYLE 2
1883   #else
1884     #define OPTSTYLE 3
1885   #endif
1886
1887   if (!host_checking && !sender_host_notsocket)
1888     {
1889     #if OPTSTYLE == 1
1890     EXIM_SOCKLEN_T optlen = sizeof(struct ip_options) + MAX_IPOPTLEN;
1891     struct ip_options *ipopt = store_get(optlen);
1892     #elif OPTSTYLE == 2
1893     struct ip_opts ipoptblock;
1894     struct ip_opts *ipopt = &ipoptblock;
1895     EXIM_SOCKLEN_T optlen = sizeof(ipoptblock);
1896     #else
1897     struct ipoption ipoptblock;
1898     struct ipoption *ipopt = &ipoptblock;
1899     EXIM_SOCKLEN_T optlen = sizeof(ipoptblock);
1900     #endif
1901
1902     /* Occasional genuine failures of getsockopt() have been seen - for
1903     example, "reset by peer". Therefore, just log and give up on this
1904     call, unless the error is ENOPROTOOPT. This error is given by systems
1905     that have the interfaces but not the mechanism - e.g. GNU/Hurd at the time
1906     of writing. So for that error, carry on - we just can't do an IP options
1907     check. */
1908
1909     DEBUG(D_receive) debug_printf("checking for IP options\n");
1910
1911     if (getsockopt(fileno(smtp_out), IPPROTO_IP, IP_OPTIONS, (uschar *)(ipopt),
1912           &optlen) < 0)
1913       {
1914       if (errno != ENOPROTOOPT)
1915         {
1916         log_write(0, LOG_MAIN, "getsockopt() failed from %s: %s",
1917           host_and_ident(FALSE), strerror(errno));
1918         smtp_printf("451 SMTP service not available\r\n");
1919         return FALSE;
1920         }
1921       }
1922
1923     /* Deal with any IP options that are set. On the systems I have looked at,
1924     the value of MAX_IPOPTLEN has been 40, meaning that there should never be
1925     more logging data than will fit in big_buffer. Nevertheless, after somebody
1926     questioned this code, I've added in some paranoid checking. */
1927
1928     else if (optlen > 0)
1929       {
1930       uschar *p = big_buffer;
1931       uschar *pend = big_buffer + big_buffer_size;
1932       uschar *opt, *adptr;
1933       int optcount;
1934       struct in_addr addr;
1935
1936       #if OPTSTYLE == 1
1937       uschar *optstart = (uschar *)(ipopt->__data);
1938       #elif OPTSTYLE == 2
1939       uschar *optstart = (uschar *)(ipopt->ip_opts);
1940       #else
1941       uschar *optstart = (uschar *)(ipopt->ipopt_list);
1942       #endif
1943
1944       DEBUG(D_receive) debug_printf("IP options exist\n");
1945
1946       Ustrcpy(p, "IP options on incoming call:");
1947       p += Ustrlen(p);
1948
1949       for (opt = optstart; opt != NULL &&
1950            opt < (uschar *)(ipopt) + optlen;)
1951         {
1952         switch (*opt)
1953           {
1954           case IPOPT_EOL:
1955           opt = NULL;
1956           break;
1957
1958           case IPOPT_NOP:
1959           opt++;
1960           break;
1961
1962           case IPOPT_SSRR:
1963           case IPOPT_LSRR:
1964           if (!string_format(p, pend-p, " %s [@%s",
1965                (*opt == IPOPT_SSRR)? "SSRR" : "LSRR",
1966                #if OPTSTYLE == 1
1967                inet_ntoa(*((struct in_addr *)(&(ipopt->faddr))))))
1968                #elif OPTSTYLE == 2
1969                inet_ntoa(ipopt->ip_dst)))
1970                #else
1971                inet_ntoa(ipopt->ipopt_dst)))
1972                #endif
1973             {
1974             opt = NULL;
1975             break;
1976             }
1977
1978           p += Ustrlen(p);
1979           optcount = (opt[1] - 3) / sizeof(struct in_addr);
1980           adptr = opt + 3;
1981           while (optcount-- > 0)
1982             {
1983             memcpy(&addr, adptr, sizeof(addr));
1984             if (!string_format(p, pend - p - 1, "%s%s",
1985                   (optcount == 0)? ":" : "@", inet_ntoa(addr)))
1986               {
1987               opt = NULL;
1988               break;
1989               }
1990             p += Ustrlen(p);
1991             adptr += sizeof(struct in_addr);
1992             }
1993           *p++ = ']';
1994           opt += opt[1];
1995           break;
1996
1997           default:
1998             {
1999             int i;
2000             if (pend - p < 4 + 3*opt[1]) { opt = NULL; break; }
2001             Ustrcat(p, "[ ");
2002             p += 2;
2003             for (i = 0; i < opt[1]; i++)
2004               {
2005               sprintf(CS p, "%2.2x ", opt[i]);
2006               p += 3;
2007               }
2008             *p++ = ']';
2009             }
2010           opt += opt[1];
2011           break;
2012           }
2013         }
2014
2015       *p = 0;
2016       log_write(0, LOG_MAIN, "%s", big_buffer);
2017
2018       /* Refuse any call with IP options. This is what tcpwrappers 7.5 does. */
2019
2020       log_write(0, LOG_MAIN|LOG_REJECT,
2021         "connection from %s refused (IP options)", host_and_ident(FALSE));
2022
2023       smtp_printf("554 SMTP service not available\r\n");
2024       return FALSE;
2025       }
2026
2027     /* Length of options = 0 => there are no options */
2028
2029     else DEBUG(D_receive) debug_printf("no IP options found\n");
2030     }
2031   #endif  /* HAVE_IPV6 && !defined(NO_IP_OPTIONS) */
2032
2033   /* Set keep-alive in socket options. The option is on by default. This
2034   setting is an attempt to get rid of some hanging connections that stick in
2035   read() when the remote end (usually a dialup) goes away. */
2036
2037   if (smtp_accept_keepalive && !sender_host_notsocket)
2038     ip_keepalive(fileno(smtp_out), sender_host_address, FALSE);
2039
2040   /* If the current host matches host_lookup, set the name by doing a
2041   reverse lookup. On failure, sender_host_name will be NULL and
2042   host_lookup_failed will be TRUE. This may or may not be serious - optional
2043   checks later. */
2044
2045   if (verify_check_host(&host_lookup) == OK)
2046     {
2047     (void)host_name_lookup();
2048     host_build_sender_fullhost();
2049     }
2050
2051   /* Delay this until we have the full name, if it is looked up. */
2052
2053   set_process_info("handling incoming connection from %s",
2054     host_and_ident(FALSE));
2055
2056   /* Start up TLS if tls_on_connect is set. This is for supporting the legacy
2057   smtps port for use with older style SSL MTAs. */
2058
2059   #ifdef SUPPORT_TLS
2060   if (tls_in.on_connect && tls_server_start(tls_require_ciphers) != OK)
2061     return FALSE;
2062   #endif
2063
2064   /* Test for explicit connection rejection */
2065
2066   if (verify_check_host(&host_reject_connection) == OK)
2067     {
2068     log_write(L_connection_reject, LOG_MAIN|LOG_REJECT, "refused connection "
2069       "from %s (host_reject_connection)", host_and_ident(FALSE));
2070     smtp_printf("554 SMTP service not available\r\n");
2071     return FALSE;
2072     }
2073
2074   /* Test with TCP Wrappers if so configured. There is a problem in that
2075   hosts_ctl() returns 0 (deny) under a number of system failure circumstances,
2076   such as disks dying. In these cases, it is desirable to reject with a 4xx
2077   error instead of a 5xx error. There isn't a "right" way to detect such
2078   problems. The following kludge is used: errno is zeroed before calling
2079   hosts_ctl(). If the result is "reject", a 5xx error is given only if the
2080   value of errno is 0 or ENOENT (which happens if /etc/hosts.{allow,deny} does
2081   not exist). */
2082
2083   #ifdef USE_TCP_WRAPPERS
2084   errno = 0;
2085   tcp_wrappers_name = expand_string(tcp_wrappers_daemon_name);
2086   if (tcp_wrappers_name == NULL)
2087     {
2088     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Expansion of \"%s\" "
2089       "(tcp_wrappers_name) failed: %s", string_printing(tcp_wrappers_name),
2090         expand_string_message);
2091     }
2092   if (!hosts_ctl(tcp_wrappers_name,
2093          (sender_host_name == NULL)? STRING_UNKNOWN : CS sender_host_name,
2094          (sender_host_address == NULL)? STRING_UNKNOWN : CS sender_host_address,
2095          (sender_ident == NULL)? STRING_UNKNOWN : CS sender_ident))
2096     {
2097     if (errno == 0 || errno == ENOENT)
2098       {
2099       HDEBUG(D_receive) debug_printf("tcp wrappers rejection\n");
2100       log_write(L_connection_reject,
2101                 LOG_MAIN|LOG_REJECT, "refused connection from %s "
2102                 "(tcp wrappers)", host_and_ident(FALSE));
2103       smtp_printf("554 SMTP service not available\r\n");
2104       }
2105     else
2106       {
2107       int save_errno = errno;
2108       HDEBUG(D_receive) debug_printf("tcp wrappers rejected with unexpected "
2109         "errno value %d\n", save_errno);
2110       log_write(L_connection_reject,
2111                 LOG_MAIN|LOG_REJECT, "temporarily refused connection from %s "
2112                 "(tcp wrappers errno=%d)", host_and_ident(FALSE), save_errno);
2113       smtp_printf("451 Temporary local problem - please try later\r\n");
2114       }
2115     return FALSE;
2116     }
2117   #endif
2118
2119   /* Check for reserved slots. The value of smtp_accept_count has already been
2120   incremented to include this process. */
2121
2122   if (smtp_accept_max > 0 &&
2123       smtp_accept_count > smtp_accept_max - smtp_accept_reserve)
2124     {
2125     if ((rc = verify_check_host(&smtp_reserve_hosts)) != OK)
2126       {
2127       log_write(L_connection_reject,
2128         LOG_MAIN, "temporarily refused connection from %s: not in "
2129         "reserve list: connected=%d max=%d reserve=%d%s",
2130         host_and_ident(FALSE), smtp_accept_count - 1, smtp_accept_max,
2131         smtp_accept_reserve, (rc == DEFER)? " (lookup deferred)" : "");
2132       smtp_printf("421 %s: Too many concurrent SMTP connections; "
2133         "please try again later\r\n", smtp_active_hostname);
2134       return FALSE;
2135       }
2136     reserved_host = TRUE;
2137     }
2138
2139   /* If a load level above which only messages from reserved hosts are
2140   accepted is set, check the load. For incoming calls via the daemon, the
2141   check is done in the superior process if there are no reserved hosts, to
2142   save a fork. In all cases, the load average will already be available
2143   in a global variable at this point. */
2144
2145   if (smtp_load_reserve >= 0 &&
2146        load_average > smtp_load_reserve &&
2147        !reserved_host &&
2148        verify_check_host(&smtp_reserve_hosts) != OK)
2149     {
2150     log_write(L_connection_reject,
2151       LOG_MAIN, "temporarily refused connection from %s: not in "
2152       "reserve list and load average = %.2f", host_and_ident(FALSE),
2153       (double)load_average/1000.0);
2154     smtp_printf("421 %s: Too much load; please try again later\r\n",
2155       smtp_active_hostname);
2156     return FALSE;
2157     }
2158
2159   /* Determine whether unqualified senders or recipients are permitted
2160   for this host. Unfortunately, we have to do this every time, in order to
2161   set the flags so that they can be inspected when considering qualifying
2162   addresses in the headers. For a site that permits no qualification, this
2163   won't take long, however. */
2164
2165   allow_unqualified_sender =
2166     verify_check_host(&sender_unqualified_hosts) == OK;
2167
2168   allow_unqualified_recipient =
2169     verify_check_host(&recipient_unqualified_hosts) == OK;
2170
2171   /* Determine whether HELO/EHLO is required for this host. The requirement
2172   can be hard or soft. */
2173
2174   helo_required = verify_check_host(&helo_verify_hosts) == OK;
2175   if (!helo_required)
2176     helo_verify = verify_check_host(&helo_try_verify_hosts) == OK;
2177
2178   /* Determine whether this hosts is permitted to send syntactic junk
2179   after a HELO or EHLO command. */
2180
2181   helo_accept_junk = verify_check_host(&helo_accept_junk_hosts) == OK;
2182   }
2183
2184 /* For batch SMTP input we are now done. */
2185
2186 if (smtp_batched_input) return TRUE;
2187
2188 #ifdef EXPERIMENTAL_PROXY
2189 /* If valid Proxy Protocol source is connecting, set up session.
2190  * Failure will not allow any SMTP function other than QUIT. */
2191 proxy_session = FALSE;
2192 proxy_session_failed = FALSE;
2193 if (check_proxy_protocol_host())
2194   {
2195   if (setup_proxy_protocol_host() == FALSE)
2196     {
2197     proxy_session_failed = TRUE;
2198     DEBUG(D_receive)
2199       debug_printf("Failure to extract proxied host, only QUIT allowed\n");
2200     }
2201   else
2202     {
2203     sender_host_name = NULL;
2204     (void)host_name_lookup();
2205     host_build_sender_fullhost();
2206     }
2207   }
2208 #endif
2209
2210 /* Run the ACL if it exists */
2211
2212 user_msg = NULL;
2213 if (acl_smtp_connect != NULL)
2214   {
2215   int rc;
2216   rc = acl_check(ACL_WHERE_CONNECT, NULL, acl_smtp_connect, &user_msg,
2217     &log_msg);
2218   if (rc != OK)
2219     {
2220     (void)smtp_handle_acl_fail(ACL_WHERE_CONNECT, rc, user_msg, log_msg);
2221     return FALSE;
2222     }
2223   }
2224
2225 /* Output the initial message for a two-way SMTP connection. It may contain
2226 newlines, which then cause a multi-line response to be given. */
2227
2228 code = US"220";   /* Default status code */
2229 esc = US"";       /* Default extended status code */
2230 esclen = 0;       /* Length of esc */
2231
2232 if (user_msg == NULL)
2233   {
2234   s = expand_string(smtp_banner);
2235   if (s == NULL)
2236     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Expansion of \"%s\" (smtp_banner) "
2237       "failed: %s", smtp_banner, expand_string_message);
2238   }
2239 else
2240   {
2241   int codelen = 3;
2242   s = user_msg;
2243   smtp_message_code(&code, &codelen, &s, NULL);
2244   if (codelen > 4)
2245     {
2246     esc = code + 4;
2247     esclen = codelen - 4;
2248     }
2249   }
2250
2251 /* Remove any terminating newlines; might as well remove trailing space too */
2252
2253 p = s + Ustrlen(s);
2254 while (p > s && isspace(p[-1])) p--;
2255 *p = 0;
2256
2257 /* It seems that CC:Mail is braindead, and assumes that the greeting message
2258 is all contained in a single IP packet. The original code wrote out the
2259 greeting using several calls to fprint/fputc, and on busy servers this could
2260 cause it to be split over more than one packet - which caused CC:Mail to fall
2261 over when it got the second part of the greeting after sending its first
2262 command. Sigh. To try to avoid this, build the complete greeting message
2263 first, and output it in one fell swoop. This gives a better chance of it
2264 ending up as a single packet. */
2265
2266 ss = store_get(size);
2267 ptr = 0;
2268
2269 p = s;
2270 do       /* At least once, in case we have an empty string */
2271   {
2272   int len;
2273   uschar *linebreak = Ustrchr(p, '\n');
2274   ss = string_cat(ss, &size, &ptr, code, 3);
2275   if (linebreak == NULL)
2276     {
2277     len = Ustrlen(p);
2278     ss = string_cat(ss, &size, &ptr, US" ", 1);
2279     }
2280   else
2281     {
2282     len = linebreak - p;
2283     ss = string_cat(ss, &size, &ptr, US"-", 1);
2284     }
2285   ss = string_cat(ss, &size, &ptr, esc, esclen);
2286   ss = string_cat(ss, &size, &ptr, p, len);
2287   ss = string_cat(ss, &size, &ptr, US"\r\n", 2);
2288   p += len;
2289   if (linebreak != NULL) p++;
2290   }
2291 while (*p != 0);
2292
2293 ss[ptr] = 0;  /* string_cat leaves room for this */
2294
2295 /* Before we write the banner, check that there is no input pending, unless
2296 this synchronisation check is disabled. */
2297
2298 if (!check_sync())
2299   {
2300   log_write(0, LOG_MAIN|LOG_REJECT, "SMTP protocol "
2301     "synchronization error (input sent without waiting for greeting): "
2302     "rejected connection from %s input=\"%s\"", host_and_ident(TRUE),
2303     string_printing(smtp_inptr));
2304   smtp_printf("554 SMTP synchronization error\r\n");
2305   return FALSE;
2306   }
2307
2308 /* Now output the banner */
2309
2310 smtp_printf("%s", ss);
2311 return TRUE;
2312 }
2313
2314
2315
2316
2317
2318 /*************************************************
2319 *     Handle SMTP syntax and protocol errors     *
2320 *************************************************/
2321
2322 /* Write to the log for SMTP syntax errors in incoming commands, if configured
2323 to do so. Then transmit the error response. The return value depends on the
2324 number of syntax and protocol errors in this SMTP session.
2325
2326 Arguments:
2327   type      error type, given as a log flag bit
2328   code      response code; <= 0 means don't send a response
2329   data      data to reflect in the response (can be NULL)
2330   errmess   the error message
2331
2332 Returns:    -1   limit of syntax/protocol errors NOT exceeded
2333             +1   limit of syntax/protocol errors IS exceeded
2334
2335 These values fit in with the values of the "done" variable in the main
2336 processing loop in smtp_setup_msg(). */
2337
2338 static int
2339 synprot_error(int type, int code, uschar *data, uschar *errmess)
2340 {
2341 int yield = -1;
2342
2343 log_write(type, LOG_MAIN, "SMTP %s error in \"%s\" %s %s",
2344   (type == L_smtp_syntax_error)? "syntax" : "protocol",
2345   string_printing(smtp_cmd_buffer), host_and_ident(TRUE), errmess);
2346
2347 if (++synprot_error_count > smtp_max_synprot_errors)
2348   {
2349   yield = 1;
2350   log_write(0, LOG_MAIN|LOG_REJECT, "SMTP call from %s dropped: too many "
2351     "syntax or protocol errors (last command was \"%s\")",
2352     host_and_ident(FALSE), smtp_cmd_buffer);
2353   }
2354
2355 if (code > 0)
2356   {
2357   smtp_printf("%d%c%s%s%s\r\n", code, (yield == 1)? '-' : ' ',
2358     (data == NULL)? US"" : data, (data == NULL)? US"" : US": ", errmess);
2359   if (yield == 1)
2360     smtp_printf("%d Too many syntax or protocol errors\r\n", code);
2361   }
2362
2363 return yield;
2364 }
2365
2366
2367
2368
2369 /*************************************************
2370 *          Log incomplete transactions           *
2371 *************************************************/
2372
2373 /* This function is called after a transaction has been aborted by RSET, QUIT,
2374 connection drops or other errors. It logs the envelope information received
2375 so far in order to preserve address verification attempts.
2376
2377 Argument:   string to indicate what aborted the transaction
2378 Returns:    nothing
2379 */
2380
2381 static void
2382 incomplete_transaction_log(uschar *what)
2383 {
2384 if (sender_address == NULL ||                 /* No transaction in progress */
2385     (log_write_selector & L_smtp_incomplete_transaction) == 0  /* Not logging */
2386   ) return;
2387
2388 /* Build list of recipients for logging */
2389
2390 if (recipients_count > 0)
2391   {
2392   int i;
2393   raw_recipients = store_get(recipients_count * sizeof(uschar *));
2394   for (i = 0; i < recipients_count; i++)
2395     raw_recipients[i] = recipients_list[i].address;
2396   raw_recipients_count = recipients_count;
2397   }
2398
2399 log_write(L_smtp_incomplete_transaction, LOG_MAIN|LOG_SENDER|LOG_RECIPIENTS,
2400   "%s incomplete transaction (%s)", host_and_ident(TRUE), what);
2401 }
2402
2403
2404
2405
2406 /*************************************************
2407 *    Send SMTP response, possibly multiline      *
2408 *************************************************/
2409
2410 /* There are, it seems, broken clients out there that cannot handle multiline
2411 responses. If no_multiline_responses is TRUE (it can be set from an ACL), we
2412 output nothing for non-final calls, and only the first line for anything else.
2413
2414 Arguments:
2415   code          SMTP code, may involve extended status codes
2416   codelen       length of smtp code; if > 4 there's an ESC
2417   final         FALSE if the last line isn't the final line
2418   msg           message text, possibly containing newlines
2419
2420 Returns:        nothing
2421 */
2422
2423 void
2424 smtp_respond(uschar* code, int codelen, BOOL final, uschar *msg)
2425 {
2426 int esclen = 0;
2427 uschar *esc = US"";
2428
2429 if (!final && no_multiline_responses) return;
2430
2431 if (codelen > 4)
2432   {
2433   esc = code + 4;
2434   esclen = codelen - 4;
2435   }
2436
2437 /* If this is the first output for a (non-batch) RCPT command, see if all RCPTs
2438 have had the same. Note: this code is also present in smtp_printf(). It would
2439 be tidier to have it only in one place, but when it was added, it was easier to
2440 do it that way, so as not to have to mess with the code for the RCPT command,
2441 which sometimes uses smtp_printf() and sometimes smtp_respond(). */
2442
2443 if (rcpt_in_progress)
2444   {
2445   if (rcpt_smtp_response == NULL)
2446     rcpt_smtp_response = string_copy(msg);
2447   else if (rcpt_smtp_response_same &&
2448            Ustrcmp(rcpt_smtp_response, msg) != 0)
2449     rcpt_smtp_response_same = FALSE;
2450   rcpt_in_progress = FALSE;
2451   }
2452
2453 /* Not output the message, splitting it up into multiple lines if necessary. */
2454
2455 for (;;)
2456   {
2457   uschar *nl = Ustrchr(msg, '\n');
2458   if (nl == NULL)
2459     {
2460     smtp_printf("%.3s%c%.*s%s\r\n", code, final? ' ':'-', esclen, esc, msg);
2461     return;
2462     }
2463   else if (nl[1] == 0 || no_multiline_responses)
2464     {
2465     smtp_printf("%.3s%c%.*s%.*s\r\n", code, final? ' ':'-', esclen, esc,
2466       (int)(nl - msg), msg);
2467     return;
2468     }
2469   else
2470     {
2471     smtp_printf("%.3s-%.*s%.*s\r\n", code, esclen, esc, (int)(nl - msg), msg);
2472     msg = nl + 1;
2473     while (isspace(*msg)) msg++;
2474     }
2475   }
2476 }
2477
2478
2479
2480
2481 /*************************************************
2482 *            Parse user SMTP message             *
2483 *************************************************/
2484
2485 /* This function allows for user messages overriding the response code details
2486 by providing a suitable response code string at the start of the message
2487 user_msg. Check the message for starting with a response code and optionally an
2488 extended status code. If found, check that the first digit is valid, and if so,
2489 change the code pointer and length to use the replacement. An invalid code
2490 causes a panic log; in this case, if the log messages is the same as the user
2491 message, we must also adjust the value of the log message to show the code that
2492 is actually going to be used (the original one).
2493
2494 This function is global because it is called from receive.c as well as within
2495 this module.
2496
2497 Note that the code length returned includes the terminating whitespace
2498 character, which is always included in the regex match.
2499
2500 Arguments:
2501   code          SMTP code, may involve extended status codes
2502   codelen       length of smtp code; if > 4 there's an ESC
2503   msg           message text
2504   log_msg       optional log message, to be adjusted with the new SMTP code
2505
2506 Returns:        nothing
2507 */
2508
2509 void
2510 smtp_message_code(uschar **code, int *codelen, uschar **msg, uschar **log_msg)
2511 {
2512 int n;
2513 int ovector[3];
2514
2515 if (msg == NULL || *msg == NULL) return;
2516
2517 n = pcre_exec(regex_smtp_code, NULL, CS *msg, Ustrlen(*msg), 0,
2518   PCRE_EOPT, ovector, sizeof(ovector)/sizeof(int));
2519 if (n < 0) return;
2520
2521 if ((*msg)[0] != (*code)[0])
2522   {
2523   log_write(0, LOG_MAIN|LOG_PANIC, "configured error code starts with "
2524     "incorrect digit (expected %c) in \"%s\"", (*code)[0], *msg);
2525   if (log_msg != NULL && *log_msg == *msg)
2526     *log_msg = string_sprintf("%s %s", *code, *log_msg + ovector[1]);
2527   }
2528 else
2529   {
2530   *code = *msg;
2531   *codelen = ovector[1];    /* Includes final space */
2532   }
2533 *msg += ovector[1];         /* Chop the code off the message */
2534 return;
2535 }
2536
2537
2538
2539
2540 /*************************************************
2541 *           Handle an ACL failure                *
2542 *************************************************/
2543
2544 /* This function is called when acl_check() fails. As well as calls from within
2545 this module, it is called from receive.c for an ACL after DATA. It sorts out
2546 logging the incident, and sets up the error response. A message containing
2547 newlines is turned into a multiline SMTP response, but for logging, only the
2548 first line is used.
2549
2550 There's a table of default permanent failure response codes to use in
2551 globals.c, along with the table of names. VFRY is special. Despite RFC1123 it
2552 defaults disabled in Exim. However, discussion in connection with RFC 821bis
2553 (aka RFC 2821) has concluded that the response should be 252 in the disabled
2554 state, because there are broken clients that try VRFY before RCPT. A 5xx
2555 response should be given only when the address is positively known to be
2556 undeliverable. Sigh. Also, for ETRN, 458 is given on refusal, and for AUTH,
2557 503.
2558
2559 From Exim 4.63, it is possible to override the response code details by
2560 providing a suitable response code string at the start of the message provided
2561 in user_msg. The code's first digit is checked for validity.
2562
2563 Arguments:
2564   where      where the ACL was called from
2565   rc         the failure code
2566   user_msg   a message that can be included in an SMTP response
2567   log_msg    a message for logging
2568
2569 Returns:     0 in most cases
2570              2 if the failure code was FAIL_DROP, in which case the
2571                SMTP connection should be dropped (this value fits with the
2572                "done" variable in smtp_setup_msg() below)
2573 */
2574
2575 int
2576 smtp_handle_acl_fail(int where, int rc, uschar *user_msg, uschar *log_msg)
2577 {
2578 BOOL drop = rc == FAIL_DROP;
2579 int codelen = 3;
2580 uschar *smtp_code;
2581 uschar *lognl;
2582 uschar *sender_info = US"";
2583 uschar *what =
2584 #ifdef WITH_CONTENT_SCAN
2585   (where == ACL_WHERE_MIME)? US"during MIME ACL checks" :
2586 #endif
2587   (where == ACL_WHERE_PREDATA)? US"DATA" :
2588   (where == ACL_WHERE_DATA)? US"after DATA" :
2589 #ifdef EXPERIMENTAL_PRDR
2590   (where == ACL_WHERE_PRDR)? US"after DATA PRDR" :
2591 #endif
2592   (smtp_cmd_data == NULL)?
2593     string_sprintf("%s in \"connect\" ACL", acl_wherenames[where]) :
2594     string_sprintf("%s %s", acl_wherenames[where], smtp_cmd_data);
2595
2596 if (drop) rc = FAIL;
2597
2598 /* Set the default SMTP code, and allow a user message to change it. */
2599
2600 smtp_code = (rc != FAIL)? US"451" : acl_wherecodes[where];
2601 smtp_message_code(&smtp_code, &codelen, &user_msg, &log_msg);
2602
2603 /* We used to have sender_address here; however, there was a bug that was not
2604 updating sender_address after a rewrite during a verify. When this bug was
2605 fixed, sender_address at this point became the rewritten address. I'm not sure
2606 this is what should be logged, so I've changed to logging the unrewritten
2607 address to retain backward compatibility. */
2608
2609 #ifndef WITH_CONTENT_SCAN
2610 if (where == ACL_WHERE_RCPT || where == ACL_WHERE_DATA)
2611 #else
2612 if (where == ACL_WHERE_RCPT || where == ACL_WHERE_DATA || where == ACL_WHERE_MIME)
2613 #endif
2614   {
2615   sender_info = string_sprintf("F=<%s>%s%s%s%s ",
2616     sender_address_unrewritten ? sender_address_unrewritten : sender_address,
2617     sender_host_authenticated ? US" A="                                    : US"",
2618     sender_host_authenticated ? sender_host_authenticated                  : US"",
2619     sender_host_authenticated && authenticated_id ? US":"                  : US"",
2620     sender_host_authenticated && authenticated_id ? authenticated_id       : US""
2621     );
2622   }
2623
2624 /* If there's been a sender verification failure with a specific message, and
2625 we have not sent a response about it yet, do so now, as a preliminary line for
2626 failures, but not defers. However, always log it for defer, and log it for fail
2627 unless the sender_verify_fail log selector has been turned off. */
2628
2629 if (sender_verified_failed != NULL &&
2630     !testflag(sender_verified_failed, af_sverify_told))
2631   {
2632   BOOL save_rcpt_in_progress = rcpt_in_progress;
2633   rcpt_in_progress = FALSE;  /* So as not to treat these as the error */
2634
2635   setflag(sender_verified_failed, af_sverify_told);
2636
2637   if (rc != FAIL || (log_extra_selector & LX_sender_verify_fail) != 0)
2638     log_write(0, LOG_MAIN|LOG_REJECT, "%s sender verify %s for <%s>%s",
2639       host_and_ident(TRUE),
2640       ((sender_verified_failed->special_action & 255) == DEFER)? "defer":"fail",
2641       sender_verified_failed->address,
2642       (sender_verified_failed->message == NULL)? US"" :
2643       string_sprintf(": %s", sender_verified_failed->message));
2644
2645   if (rc == FAIL && sender_verified_failed->user_message != NULL)
2646     smtp_respond(smtp_code, codelen, FALSE, string_sprintf(
2647         testflag(sender_verified_failed, af_verify_pmfail)?
2648           "Postmaster verification failed while checking <%s>\n%s\n"
2649           "Several RFCs state that you are required to have a postmaster\n"
2650           "mailbox for each mail domain. This host does not accept mail\n"
2651           "from domains whose servers reject the postmaster address."
2652           :
2653         testflag(sender_verified_failed, af_verify_nsfail)?
2654           "Callback setup failed while verifying <%s>\n%s\n"
2655           "The initial connection, or a HELO or MAIL FROM:<> command was\n"
2656           "rejected. Refusing MAIL FROM:<> does not help fight spam, disregards\n"
2657           "RFC requirements, and stops you from receiving standard bounce\n"
2658           "messages. This host does not accept mail from domains whose servers\n"
2659           "refuse bounces."
2660           :
2661           "Verification failed for <%s>\n%s",
2662         sender_verified_failed->address,
2663         sender_verified_failed->user_message));
2664
2665   rcpt_in_progress = save_rcpt_in_progress;
2666   }
2667
2668 /* Sort out text for logging */
2669
2670 log_msg = (log_msg == NULL)? US"" : string_sprintf(": %s", log_msg);
2671 lognl = Ustrchr(log_msg, '\n');
2672 if (lognl != NULL) *lognl = 0;
2673
2674 /* Send permanent failure response to the command, but the code used isn't
2675 always a 5xx one - see comments at the start of this function. If the original
2676 rc was FAIL_DROP we drop the connection and yield 2. */
2677
2678 if (rc == FAIL) smtp_respond(smtp_code, codelen, TRUE, (user_msg == NULL)?
2679   US"Administrative prohibition" : user_msg);
2680
2681 /* Send temporary failure response to the command. Don't give any details,
2682 unless acl_temp_details is set. This is TRUE for a callout defer, a "defer"
2683 verb, and for a header verify when smtp_return_error_details is set.
2684
2685 This conditional logic is all somewhat of a mess because of the odd
2686 interactions between temp_details and return_error_details. One day it should
2687 be re-implemented in a tidier fashion. */
2688
2689 else
2690   {
2691   if (acl_temp_details && user_msg != NULL)
2692     {
2693     if (smtp_return_error_details &&
2694         sender_verified_failed != NULL &&
2695         sender_verified_failed->message != NULL)
2696       {
2697       smtp_respond(smtp_code, codelen, FALSE, sender_verified_failed->message);
2698       }
2699     smtp_respond(smtp_code, codelen, TRUE, user_msg);
2700     }
2701   else
2702     smtp_respond(smtp_code, codelen, TRUE,
2703       US"Temporary local problem - please try later");
2704   }
2705
2706 /* Log the incident to the logs that are specified by log_reject_target
2707 (default main, reject). This can be empty to suppress logging of rejections. If
2708 the connection is not forcibly to be dropped, return 0. Otherwise, log why it
2709 is closing if required and return 2.  */
2710
2711 if (log_reject_target != 0)
2712   log_write(0, log_reject_target, "%s%s %s%srejected %s%s",
2713     host_and_ident(TRUE),
2714 #ifdef SUPPORT_TLS
2715     s_tlslog(NULL, NULL, NULL),
2716 #else
2717     "",
2718 #endif
2719     sender_info, (rc == FAIL)? US"" : US"temporarily ", what, log_msg);
2720
2721 if (!drop) return 0;
2722
2723 log_write(L_smtp_connection, LOG_MAIN, "%s closed by DROP in ACL",
2724   smtp_get_connection_info());
2725
2726 /* Run the not-quit ACL, but without any custom messages. This should not be a
2727 problem, because we get here only if some other ACL has issued "drop", and
2728 in that case, *its* custom messages will have been used above. */
2729
2730 smtp_notquit_exit(US"acl-drop", NULL, NULL);
2731 return 2;
2732 }
2733
2734
2735
2736
2737 /*************************************************
2738 *     Handle SMTP exit when QUIT is not given    *
2739 *************************************************/
2740
2741 /* This function provides a logging/statistics hook for when an SMTP connection
2742 is dropped on the floor or the other end goes away. It's a global function
2743 because it's called from receive.c as well as this module. As well as running
2744 the NOTQUIT ACL, if there is one, this function also outputs a final SMTP
2745 response, either with a custom message from the ACL, or using a default. There
2746 is one case, however, when no message is output - after "drop". In that case,
2747 the ACL that obeyed "drop" has already supplied the custom message, and NULL is
2748 passed to this function.
2749
2750 In case things go wrong while processing this function, causing an error that
2751 may re-enter this funtion, there is a recursion check.
2752
2753 Arguments:
2754   reason          What $smtp_notquit_reason will be set to in the ACL;
2755                     if NULL, the ACL is not run
2756   code            The error code to return as part of the response
2757   defaultrespond  The default message if there's no user_msg
2758
2759 Returns:          Nothing
2760 */
2761
2762 void
2763 smtp_notquit_exit(uschar *reason, uschar *code, uschar *defaultrespond, ...)
2764 {
2765 int rc;
2766 uschar *user_msg = NULL;
2767 uschar *log_msg = NULL;
2768
2769 /* Check for recursive acll */
2770
2771 if (smtp_exit_function_called)
2772   {
2773   log_write(0, LOG_PANIC, "smtp_notquit_exit() called more than once (%s)",
2774     reason);
2775   return;
2776   }
2777 smtp_exit_function_called = TRUE;
2778
2779 /* Call the not-QUIT ACL, if there is one, unless no reason is given. */
2780
2781 if (acl_smtp_notquit != NULL && reason != NULL)
2782   {
2783   smtp_notquit_reason = reason;
2784   rc = acl_check(ACL_WHERE_NOTQUIT, NULL, acl_smtp_notquit, &user_msg,
2785     &log_msg);
2786   if (rc == ERROR)
2787     log_write(0, LOG_MAIN|LOG_PANIC, "ACL for not-QUIT returned ERROR: %s",
2788       log_msg);
2789   }
2790
2791 /* Write an SMTP response if we are expected to give one. As the default
2792 responses are all internal, they should always fit in the buffer, but code a
2793 warning, just in case. Note that string_vformat() still leaves a complete
2794 string, even if it is incomplete. */
2795
2796 if (code != NULL && defaultrespond != NULL)
2797   {
2798   if (user_msg == NULL)
2799     {
2800     uschar buffer[128];
2801     va_list ap;
2802     va_start(ap, defaultrespond);
2803     if (!string_vformat(buffer, sizeof(buffer), CS defaultrespond, ap))
2804       log_write(0, LOG_MAIN|LOG_PANIC, "string too large in smtp_notquit_exit()");
2805     smtp_printf("%s %s\r\n", code, buffer);
2806     va_end(ap);
2807     }
2808   else
2809     smtp_respond(code, 3, TRUE, user_msg);
2810   mac_smtp_fflush();
2811   }
2812 }
2813
2814
2815
2816
2817 /*************************************************
2818 *             Verify HELO argument               *
2819 *************************************************/
2820
2821 /* This function is called if helo_verify_hosts or helo_try_verify_hosts is
2822 matched. It is also called from ACL processing if verify = helo is used and
2823 verification was not previously tried (i.e. helo_try_verify_hosts was not
2824 matched). The result of its processing is to set helo_verified and
2825 helo_verify_failed. These variables should both be FALSE for this function to
2826 be called.
2827
2828 Note that EHLO/HELO is legitimately allowed to quote an address literal. Allow
2829 for IPv6 ::ffff: literals.
2830
2831 Argument:   none
2832 Returns:    TRUE if testing was completed;
2833             FALSE on a temporary failure
2834 */
2835
2836 BOOL
2837 smtp_verify_helo(void)
2838 {
2839 BOOL yield = TRUE;
2840
2841 HDEBUG(D_receive) debug_printf("verifying EHLO/HELO argument \"%s\"\n",
2842   sender_helo_name);
2843
2844 if (sender_helo_name == NULL)
2845   {
2846   HDEBUG(D_receive) debug_printf("no EHLO/HELO command was issued\n");
2847   }
2848
2849 /* Deal with the case of -bs without an IP address */
2850
2851 else if (sender_host_address == NULL)
2852   {
2853   HDEBUG(D_receive) debug_printf("no client IP address: assume success\n");
2854   helo_verified = TRUE;
2855   }
2856
2857 /* Deal with the more common case when there is a sending IP address */
2858
2859 else if (sender_helo_name[0] == '[')
2860   {
2861   helo_verified = Ustrncmp(sender_helo_name+1, sender_host_address,
2862     Ustrlen(sender_host_address)) == 0;
2863
2864   #if HAVE_IPV6
2865   if (!helo_verified)
2866     {
2867     if (strncmpic(sender_host_address, US"::ffff:", 7) == 0)
2868       helo_verified = Ustrncmp(sender_helo_name + 1,
2869         sender_host_address + 7, Ustrlen(sender_host_address) - 7) == 0;
2870     }
2871   #endif
2872
2873   HDEBUG(D_receive)
2874     { if (helo_verified) debug_printf("matched host address\n"); }
2875   }
2876
2877 /* Do a reverse lookup if one hasn't already given a positive or negative
2878 response. If that fails, or the name doesn't match, try checking with a forward
2879 lookup. */
2880
2881 else
2882   {
2883   if (sender_host_name == NULL && !host_lookup_failed)
2884     yield = host_name_lookup() != DEFER;
2885
2886   /* If a host name is known, check it and all its aliases. */
2887
2888   if (sender_host_name != NULL)
2889     {
2890     helo_verified = strcmpic(sender_host_name, sender_helo_name) == 0;
2891
2892     if (helo_verified)
2893       {
2894       HDEBUG(D_receive) debug_printf("matched host name\n");
2895       }
2896     else
2897       {
2898       uschar **aliases = sender_host_aliases;
2899       while (*aliases != NULL)
2900         {
2901         helo_verified = strcmpic(*aliases++, sender_helo_name) == 0;
2902         if (helo_verified) break;
2903         }
2904       HDEBUG(D_receive)
2905         {
2906         if (helo_verified)
2907           debug_printf("matched alias %s\n", *(--aliases));
2908         }
2909       }
2910     }
2911
2912   /* Final attempt: try a forward lookup of the helo name */
2913
2914   if (!helo_verified)
2915     {
2916     int rc;
2917     host_item h;
2918     h.name = sender_helo_name;
2919     h.address = NULL;
2920     h.mx = MX_NONE;
2921     h.next = NULL;
2922     HDEBUG(D_receive) debug_printf("getting IP address for %s\n",
2923       sender_helo_name);
2924     rc = host_find_byname(&h, NULL, 0, NULL, TRUE);
2925     if (rc == HOST_FOUND || rc == HOST_FOUND_LOCAL)
2926       {
2927       host_item *hh = &h;
2928       while (hh != NULL)
2929         {
2930         if (Ustrcmp(hh->address, sender_host_address) == 0)
2931           {
2932           helo_verified = TRUE;
2933           HDEBUG(D_receive)
2934             debug_printf("IP address for %s matches calling address\n",
2935               sender_helo_name);
2936           break;
2937           }
2938         hh = hh->next;
2939         }
2940       }
2941     }
2942   }
2943
2944 if (!helo_verified) helo_verify_failed = TRUE;  /* We've tried ... */
2945 return yield;
2946 }
2947
2948
2949
2950
2951 /*************************************************
2952 *        Send user response message              *
2953 *************************************************/
2954
2955 /* This function is passed a default response code and a user message. It calls
2956 smtp_message_code() to check and possibly modify the response code, and then
2957 calls smtp_respond() to transmit the response. I put this into a function
2958 just to avoid a lot of repetition.
2959
2960 Arguments:
2961   code         the response code
2962   user_msg     the user message
2963
2964 Returns:       nothing
2965 */
2966
2967 static void
2968 smtp_user_msg(uschar *code, uschar *user_msg)
2969 {
2970 int len = 3;
2971 smtp_message_code(&code, &len, &user_msg, NULL);
2972 smtp_respond(code, len, TRUE, user_msg);
2973 }
2974
2975
2976
2977 /*************************************************
2978 *       Initialize for SMTP incoming message     *
2979 *************************************************/
2980
2981 /* This function conducts the initial dialogue at the start of an incoming SMTP
2982 message, and builds a list of recipients. However, if the incoming message
2983 is part of a batch (-bS option) a separate function is called since it would
2984 be messy having tests splattered about all over this function. This function
2985 therefore handles the case where interaction is occurring. The input and output
2986 files are set up in smtp_in and smtp_out.
2987
2988 The global recipients_list is set to point to a vector of recipient_item
2989 blocks, whose number is given by recipients_count. This is extended by the
2990 receive_add_recipient() function. The global variable sender_address is set to
2991 the sender's address. The yield is +1 if a message has been successfully
2992 started, 0 if a QUIT command was encountered or the connection was refused from
2993 the particular host, or -1 if the connection was lost.
2994
2995 Argument: none
2996
2997 Returns:  > 0 message successfully started (reached DATA)
2998           = 0 QUIT read or end of file reached or call refused
2999           < 0 lost connection
3000 */
3001
3002 int
3003 smtp_setup_msg(void)
3004 {
3005 int done = 0;
3006 BOOL toomany = FALSE;
3007 BOOL discarded = FALSE;
3008 BOOL last_was_rej_mail = FALSE;
3009 BOOL last_was_rcpt = FALSE;
3010 void *reset_point = store_get(0);
3011
3012 DEBUG(D_receive) debug_printf("smtp_setup_msg entered\n");
3013
3014 /* Reset for start of new message. We allow one RSET not to be counted as a
3015 nonmail command, for those MTAs that insist on sending it between every
3016 message. Ditto for EHLO/HELO and for STARTTLS, to allow for going in and out of
3017 TLS between messages (an Exim client may do this if it has messages queued up
3018 for the host). Note: we do NOT reset AUTH at this point. */
3019
3020 smtp_reset(reset_point);
3021 message_ended = END_NOTSTARTED;
3022
3023 cmd_list[CMD_LIST_RSET].is_mail_cmd = TRUE;
3024 cmd_list[CMD_LIST_HELO].is_mail_cmd = TRUE;
3025 cmd_list[CMD_LIST_EHLO].is_mail_cmd = TRUE;
3026 #ifdef SUPPORT_TLS
3027 cmd_list[CMD_LIST_STARTTLS].is_mail_cmd = TRUE;
3028 #endif
3029
3030 /* Set the local signal handler for SIGTERM - it tries to end off tidily */
3031
3032 os_non_restarting_signal(SIGTERM, command_sigterm_handler);
3033
3034 /* Batched SMTP is handled in a different function. */
3035
3036 if (smtp_batched_input) return smtp_setup_batch_msg();
3037
3038 /* Deal with SMTP commands. This loop is exited by setting done to a POSITIVE
3039 value. The values are 2 larger than the required yield of the function. */
3040
3041 while (done <= 0)
3042   {
3043   uschar **argv;
3044   uschar *etrn_command;
3045   uschar *etrn_serialize_key;
3046   uschar *errmess;
3047   uschar *log_msg, *smtp_code;
3048   uschar *user_msg = NULL;
3049   uschar *recipient = NULL;
3050   uschar *hello = NULL;
3051   uschar *set_id = NULL;
3052   uschar *s, *ss;
3053   BOOL was_rej_mail = FALSE;
3054   BOOL was_rcpt = FALSE;
3055   void (*oldsignal)(int);
3056   pid_t pid;
3057   int start, end, sender_domain, recipient_domain;
3058   int ptr, size, rc;
3059   int c, i;
3060   auth_instance *au;
3061
3062   switch(smtp_read_command(TRUE))
3063     {
3064     /* The AUTH command is not permitted to occur inside a transaction, and may
3065     occur successfully only once per connection. Actually, that isn't quite
3066     true. When TLS is started, all previous information about a connection must
3067     be discarded, so a new AUTH is permitted at that time.
3068
3069     AUTH may only be used when it has been advertised. However, it seems that
3070     there are clients that send AUTH when it hasn't been advertised, some of
3071     them even doing this after HELO. And there are MTAs that accept this. Sigh.
3072     So there's a get-out that allows this to happen.
3073
3074     AUTH is initially labelled as a "nonmail command" so that one occurrence
3075     doesn't get counted. We change the label here so that multiple failing
3076     AUTHS will eventually hit the nonmail threshold. */
3077
3078     case AUTH_CMD:
3079     HAD(SCH_AUTH);
3080     authentication_failed = TRUE;
3081     cmd_list[CMD_LIST_AUTH].is_mail_cmd = FALSE;
3082
3083     if (!auth_advertised && !allow_auth_unadvertised)
3084       {
3085       done = synprot_error(L_smtp_protocol_error, 503, NULL,
3086         US"AUTH command used when not advertised");
3087       break;
3088       }
3089     if (sender_host_authenticated != NULL)
3090       {
3091       done = synprot_error(L_smtp_protocol_error, 503, NULL,
3092         US"already authenticated");
3093       break;
3094       }
3095     if (sender_address != NULL)
3096       {
3097       done = synprot_error(L_smtp_protocol_error, 503, NULL,
3098         US"not permitted in mail transaction");
3099       break;
3100       }
3101
3102     /* Check the ACL */
3103
3104     if (acl_smtp_auth != NULL)
3105       {
3106       rc = acl_check(ACL_WHERE_AUTH, NULL, acl_smtp_auth, &user_msg, &log_msg);
3107       if (rc != OK)
3108         {
3109         done = smtp_handle_acl_fail(ACL_WHERE_AUTH, rc, user_msg, log_msg);
3110         break;
3111         }
3112       }
3113
3114     /* Find the name of the requested authentication mechanism. */
3115
3116     s = smtp_cmd_data;
3117     while ((c = *smtp_cmd_data) != 0 && !isspace(c))
3118       {
3119       if (!isalnum(c) && c != '-' && c != '_')
3120         {
3121         done = synprot_error(L_smtp_syntax_error, 501, NULL,
3122           US"invalid character in authentication mechanism name");
3123         goto COMMAND_LOOP;
3124         }
3125       smtp_cmd_data++;
3126       }
3127
3128     /* If not at the end of the line, we must be at white space. Terminate the
3129     name and move the pointer on to any data that may be present. */
3130
3131     if (*smtp_cmd_data != 0)
3132       {
3133       *smtp_cmd_data++ = 0;
3134       while (isspace(*smtp_cmd_data)) smtp_cmd_data++;
3135       }
3136
3137     /* Search for an authentication mechanism which is configured for use
3138     as a server and which has been advertised (unless, sigh, allow_auth_
3139     unadvertised is set). */
3140
3141     for (au = auths; au != NULL; au = au->next)
3142       {
3143       if (strcmpic(s, au->public_name) == 0 && au->server &&
3144           (au->advertised || allow_auth_unadvertised)) break;
3145       }
3146
3147     if (au == NULL)
3148       {
3149       done = synprot_error(L_smtp_protocol_error, 504, NULL,
3150         string_sprintf("%s authentication mechanism not supported", s));
3151       break;
3152       }
3153
3154     /* Run the checking code, passing the remainder of the command line as
3155     data. Initials the $auth<n> variables as empty. Initialize $0 empty and set
3156     it as the only set numerical variable. The authenticator may set $auth<n>
3157     and also set other numeric variables. The $auth<n> variables are preferred
3158     nowadays; the numerical variables remain for backwards compatibility.
3159
3160     Afterwards, have a go at expanding the set_id string, even if
3161     authentication failed - for bad passwords it can be useful to log the
3162     userid. On success, require set_id to expand and exist, and put it in
3163     authenticated_id. Save this in permanent store, as the working store gets
3164     reset at HELO, RSET, etc. */
3165
3166     for (i = 0; i < AUTH_VARS; i++) auth_vars[i] = NULL;
3167     expand_nmax = 0;
3168     expand_nlength[0] = 0;   /* $0 contains nothing */
3169
3170     c = (au->info->servercode)(au, smtp_cmd_data);
3171     if (au->set_id != NULL) set_id = expand_string(au->set_id);
3172     expand_nmax = -1;        /* Reset numeric variables */
3173     for (i = 0; i < AUTH_VARS; i++) auth_vars[i] = NULL;   /* Reset $auth<n> */
3174
3175     /* The value of authenticated_id is stored in the spool file and printed in
3176     log lines. It must not contain binary zeros or newline characters. In
3177     normal use, it never will, but when playing around or testing, this error
3178     can (did) happen. To guard against this, ensure that the id contains only
3179     printing characters. */
3180
3181     if (set_id != NULL) set_id = string_printing(set_id);
3182
3183     /* For the non-OK cases, set up additional logging data if set_id
3184     is not empty. */
3185
3186     if (c != OK)
3187       {
3188       if (set_id != NULL && *set_id != 0)
3189         set_id = string_sprintf(" (set_id=%s)", set_id);
3190       else set_id = US"";
3191       }
3192
3193     /* Switch on the result */
3194
3195     switch(c)
3196       {
3197       case OK:
3198       if (au->set_id == NULL || set_id != NULL)    /* Complete success */
3199         {
3200         if (set_id != NULL) authenticated_id = string_copy_malloc(set_id);
3201         sender_host_authenticated = au->name;
3202         authentication_failed = FALSE;
3203         authenticated_fail_id = NULL;   /* Impossible to already be set? */
3204         received_protocol =
3205           protocols[pextend + pauthed + ((tls_in.active >= 0)? pcrpted:0)] +
3206             ((sender_host_address != NULL)? pnlocal : 0);
3207         s = ss = US"235 Authentication succeeded";
3208         authenticated_by = au;
3209         break;
3210         }
3211
3212       /* Authentication succeeded, but we failed to expand the set_id string.
3213       Treat this as a temporary error. */
3214
3215       auth_defer_msg = expand_string_message;
3216       /* Fall through */
3217
3218       case DEFER:
3219       if (set_id != NULL) authenticated_fail_id = string_copy_malloc(set_id);
3220       s = string_sprintf("435 Unable to authenticate at present%s",
3221         auth_defer_user_msg);
3222       ss = string_sprintf("435 Unable to authenticate at present%s: %s",
3223         set_id, auth_defer_msg);
3224       break;
3225
3226       case BAD64:
3227       s = ss = US"501 Invalid base64 data";
3228       break;
3229
3230       case CANCELLED:
3231       s = ss = US"501 Authentication cancelled";
3232       break;
3233
3234       case UNEXPECTED:
3235       s = ss = US"553 Initial data not expected";
3236       break;
3237
3238       case FAIL:
3239       if (set_id != NULL) authenticated_fail_id = string_copy_malloc(set_id);
3240       s = US"535 Incorrect authentication data";
3241       ss = string_sprintf("535 Incorrect authentication data%s", set_id);
3242       break;
3243
3244       default:
3245       if (set_id != NULL) authenticated_fail_id = string_copy_malloc(set_id);
3246       s = US"435 Internal error";
3247       ss = string_sprintf("435 Internal error%s: return %d from authentication "
3248         "check", set_id, c);
3249       break;
3250       }
3251
3252     smtp_printf("%s\r\n", s);
3253     if (c != OK)
3254       log_write(0, LOG_MAIN|LOG_REJECT, "%s authenticator failed for %s: %s",
3255         au->name, host_and_ident(FALSE), ss);
3256
3257     break;  /* AUTH_CMD */
3258
3259     /* The HELO/EHLO commands are permitted to appear in the middle of a
3260     session as well as at the beginning. They have the effect of a reset in
3261     addition to their other functions. Their absence at the start cannot be
3262     taken to be an error.
3263
3264     RFC 2821 says:
3265
3266       If the EHLO command is not acceptable to the SMTP server, 501, 500,
3267       or 502 failure replies MUST be returned as appropriate.  The SMTP
3268       server MUST stay in the same state after transmitting these replies
3269       that it was in before the EHLO was received.
3270
3271     Therefore, we do not do the reset until after checking the command for
3272     acceptability. This change was made for Exim release 4.11. Previously
3273     it did the reset first. */
3274
3275     case HELO_CMD:
3276     HAD(SCH_HELO);
3277     hello = US"HELO";
3278     esmtp = FALSE;
3279     goto HELO_EHLO;
3280
3281     case EHLO_CMD:
3282     HAD(SCH_EHLO);
3283     hello = US"EHLO";
3284     esmtp = TRUE;
3285
3286     HELO_EHLO:      /* Common code for HELO and EHLO */
3287     cmd_list[CMD_LIST_HELO].is_mail_cmd = FALSE;
3288     cmd_list[CMD_LIST_EHLO].is_mail_cmd = FALSE;
3289
3290     /* Reject the HELO if its argument was invalid or non-existent. A
3291     successful check causes the argument to be saved in malloc store. */
3292
3293     if (!check_helo(smtp_cmd_data))
3294       {
3295       smtp_printf("501 Syntactically invalid %s argument(s)\r\n", hello);
3296
3297       log_write(0, LOG_MAIN|LOG_REJECT, "rejected %s from %s: syntactically "
3298         "invalid argument(s): %s", hello, host_and_ident(FALSE),
3299         (*smtp_cmd_argument == 0)? US"(no argument given)" :
3300                            string_printing(smtp_cmd_argument));
3301
3302       if (++synprot_error_count > smtp_max_synprot_errors)
3303         {
3304         log_write(0, LOG_MAIN|LOG_REJECT, "SMTP call from %s dropped: too many "
3305           "syntax or protocol errors (last command was \"%s\")",
3306           host_and_ident(FALSE), smtp_cmd_buffer);
3307         done = 1;
3308         }
3309
3310       break;
3311       }
3312
3313     /* If sender_host_unknown is true, we have got here via the -bs interface,
3314     not called from inetd. Otherwise, we are running an IP connection and the
3315     host address will be set. If the helo name is the primary name of this
3316     host and we haven't done a reverse lookup, force one now. If helo_required
3317     is set, ensure that the HELO name matches the actual host. If helo_verify
3318     is set, do the same check, but softly. */
3319
3320     if (!sender_host_unknown)
3321       {
3322       BOOL old_helo_verified = helo_verified;
3323       uschar *p = smtp_cmd_data;
3324
3325       while (*p != 0 && !isspace(*p)) { *p = tolower(*p); p++; }
3326       *p = 0;
3327
3328       /* Force a reverse lookup if HELO quoted something in helo_lookup_domains
3329       because otherwise the log can be confusing. */
3330
3331       if (sender_host_name == NULL &&
3332            (deliver_domain = sender_helo_name,  /* set $domain */
3333             match_isinlist(sender_helo_name, &helo_lookup_domains, 0,
3334               &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL)) == OK)
3335         (void)host_name_lookup();
3336
3337       /* Rebuild the fullhost info to include the HELO name (and the real name
3338       if it was looked up.) */
3339
3340       host_build_sender_fullhost();  /* Rebuild */
3341       set_process_info("handling%s incoming connection from %s",
3342         (tls_in.active >= 0)? " TLS" : "", host_and_ident(FALSE));
3343
3344       /* Verify if configured. This doesn't give much security, but it does
3345       make some people happy to be able to do it. If helo_required is set,
3346       (host matches helo_verify_hosts) failure forces rejection. If helo_verify
3347       is set (host matches helo_try_verify_hosts), it does not. This is perhaps
3348       now obsolescent, since the verification can now be requested selectively
3349       at ACL time. */
3350
3351       helo_verified = helo_verify_failed = FALSE;
3352       if (helo_required || helo_verify)
3353         {
3354         BOOL tempfail = !smtp_verify_helo();
3355         if (!helo_verified)
3356           {
3357           if (helo_required)
3358             {
3359             smtp_printf("%d %s argument does not match calling host\r\n",
3360               tempfail? 451 : 550, hello);
3361             log_write(0, LOG_MAIN|LOG_REJECT, "%srejected \"%s %s\" from %s",
3362               tempfail? "temporarily " : "",
3363               hello, sender_helo_name, host_and_ident(FALSE));
3364             helo_verified = old_helo_verified;
3365             break;                   /* End of HELO/EHLO processing */
3366             }
3367           HDEBUG(D_all) debug_printf("%s verification failed but host is in "
3368             "helo_try_verify_hosts\n", hello);
3369           }
3370         }
3371       }
3372
3373 #ifdef EXPERIMENTAL_SPF
3374     /* set up SPF context */
3375     spf_init(sender_helo_name, sender_host_address);
3376 #endif
3377
3378     /* Apply an ACL check if one is defined; afterwards, recheck
3379     synchronization in case the client started sending in a delay. */
3380
3381     if (acl_smtp_helo != NULL)
3382       {
3383       rc = acl_check(ACL_WHERE_HELO, NULL, acl_smtp_helo, &user_msg, &log_msg);
3384       if (rc != OK)
3385         {
3386         done = smtp_handle_acl_fail(ACL_WHERE_HELO, rc, user_msg, log_msg);
3387         sender_helo_name = NULL;
3388         host_build_sender_fullhost();  /* Rebuild */
3389         break;
3390         }
3391       else if (!check_sync()) goto SYNC_FAILURE;
3392       }
3393
3394     /* Generate an OK reply. The default string includes the ident if present,
3395     and also the IP address if present. Reflecting back the ident is intended
3396     as a deterrent to mail forgers. For maximum efficiency, and also because
3397     some broken systems expect each response to be in a single packet, arrange
3398     that the entire reply is sent in one write(). */
3399
3400     auth_advertised = FALSE;
3401     pipelining_advertised = FALSE;
3402     #ifdef SUPPORT_TLS
3403     tls_advertised = FALSE;
3404     #endif
3405
3406     smtp_code = US"250 ";        /* Default response code plus space*/
3407     if (user_msg == NULL)
3408       {
3409       s = string_sprintf("%.3s %s Hello %s%s%s",
3410         smtp_code,
3411         smtp_active_hostname,
3412         (sender_ident == NULL)?  US"" : sender_ident,
3413         (sender_ident == NULL)?  US"" : US" at ",
3414         (sender_host_name == NULL)? sender_helo_name : sender_host_name);
3415
3416       ptr = Ustrlen(s);
3417       size = ptr + 1;
3418
3419       if (sender_host_address != NULL)
3420         {
3421         s = string_cat(s, &size, &ptr, US" [", 2);
3422         s = string_cat(s, &size, &ptr, sender_host_address,
3423           Ustrlen(sender_host_address));
3424         s = string_cat(s, &size, &ptr, US"]", 1);
3425         }
3426       }
3427
3428     /* A user-supplied EHLO greeting may not contain more than one line. Note
3429     that the code returned by smtp_message_code() includes the terminating
3430     whitespace character. */
3431
3432     else
3433       {
3434       char *ss;
3435       int codelen = 4;
3436       smtp_message_code(&smtp_code, &codelen, &user_msg, NULL);
3437       s = string_sprintf("%.*s%s", codelen, smtp_code, user_msg);
3438       if ((ss = strpbrk(CS s, "\r\n")) != NULL)
3439         {
3440         log_write(0, LOG_MAIN|LOG_PANIC, "EHLO/HELO response must not contain "
3441           "newlines: message truncated: %s", string_printing(s));
3442         *ss = 0;
3443         }
3444       ptr = Ustrlen(s);
3445       size = ptr + 1;
3446       }
3447
3448     s = string_cat(s, &size, &ptr, US"\r\n", 2);
3449
3450     /* If we received EHLO, we must create a multiline response which includes
3451     the functions supported. */
3452
3453     if (esmtp)
3454       {
3455       s[3] = '-';
3456
3457       /* I'm not entirely happy with this, as an MTA is supposed to check
3458       that it has enough room to accept a message of maximum size before
3459       it sends this. However, there seems little point in not sending it.
3460       The actual size check happens later at MAIL FROM time. By postponing it
3461       till then, VRFY and EXPN can be used after EHLO when space is short. */
3462
3463       if (thismessage_size_limit > 0)
3464         {
3465         sprintf(CS big_buffer, "%.3s-SIZE %d\r\n", smtp_code,
3466           thismessage_size_limit);
3467         s = string_cat(s, &size, &ptr, big_buffer, Ustrlen(big_buffer));
3468         }
3469       else
3470         {
3471         s = string_cat(s, &size, &ptr, smtp_code, 3);
3472         s = string_cat(s, &size, &ptr, US"-SIZE\r\n", 7);
3473         }
3474
3475       /* Exim does not do protocol conversion or data conversion. It is 8-bit
3476       clean; if it has an 8-bit character in its hand, it just sends it. It
3477       cannot therefore specify 8BITMIME and remain consistent with the RFCs.
3478       However, some users want this option simply in order to stop MUAs
3479       mangling messages that contain top-bit-set characters. It is therefore
3480       provided as an option. */
3481
3482       if (accept_8bitmime)
3483         {
3484         s = string_cat(s, &size, &ptr, smtp_code, 3);
3485         s = string_cat(s, &size, &ptr, US"-8BITMIME\r\n", 11);
3486         }
3487
3488       /* Advertise ETRN if there's an ACL checking whether a host is
3489       permitted to issue it; a check is made when any host actually tries. */
3490
3491       if (acl_smtp_etrn != NULL)
3492         {
3493         s = string_cat(s, &size, &ptr, smtp_code, 3);
3494         s = string_cat(s, &size, &ptr, US"-ETRN\r\n", 7);
3495         }
3496
3497       /* Advertise EXPN if there's an ACL checking whether a host is
3498       permitted to issue it; a check is made when any host actually tries. */
3499
3500       if (acl_smtp_expn != NULL)
3501         {
3502         s = string_cat(s, &size, &ptr, smtp_code, 3);
3503         s = string_cat(s, &size, &ptr, US"-EXPN\r\n", 7);
3504         }
3505
3506       /* Exim is quite happy with pipelining, so let the other end know that
3507       it is safe to use it, unless advertising is disabled. */
3508
3509       if (pipelining_enable &&
3510           verify_check_host(&pipelining_advertise_hosts) == OK)
3511         {
3512         s = string_cat(s, &size, &ptr, smtp_code, 3);
3513         s = string_cat(s, &size, &ptr, US"-PIPELINING\r\n", 13);
3514         sync_cmd_limit = NON_SYNC_CMD_PIPELINING;
3515         pipelining_advertised = TRUE;
3516         }
3517
3518
3519       /* If any server authentication mechanisms are configured, advertise
3520       them if the current host is in auth_advertise_hosts. The problem with
3521       advertising always is that some clients then require users to
3522       authenticate (and aren't configurable otherwise) even though it may not
3523       be necessary (e.g. if the host is in host_accept_relay).
3524
3525       RFC 2222 states that SASL mechanism names contain only upper case
3526       letters, so output the names in upper case, though we actually recognize
3527       them in either case in the AUTH command. */
3528
3529       if (auths != NULL)
3530         {
3531         if (verify_check_host(&auth_advertise_hosts) == OK)
3532           {
3533           auth_instance *au;
3534           BOOL first = TRUE;
3535           for (au = auths; au != NULL; au = au->next)
3536             {
3537             if (au->server && (au->advertise_condition == NULL ||
3538                 expand_check_condition(au->advertise_condition, au->name,
3539                 US"authenticator")))
3540               {
3541               int saveptr;
3542               if (first)
3543                 {
3544                 s = string_cat(s, &size, &ptr, smtp_code, 3);
3545                 s = string_cat(s, &size, &ptr, US"-AUTH", 5);
3546                 first = FALSE;
3547                 auth_advertised = TRUE;
3548                 }
3549               saveptr = ptr;
3550               s = string_cat(s, &size, &ptr, US" ", 1);
3551               s = string_cat(s, &size, &ptr, au->public_name,
3552                 Ustrlen(au->public_name));
3553               while (++saveptr < ptr) s[saveptr] = toupper(s[saveptr]);
3554               au->advertised = TRUE;
3555               }
3556             else au->advertised = FALSE;
3557             }
3558           if (!first) s = string_cat(s, &size, &ptr, US"\r\n", 2);
3559           }
3560         }
3561
3562       /* Advertise TLS (Transport Level Security) aka SSL (Secure Socket Layer)
3563       if it has been included in the binary, and the host matches
3564       tls_advertise_hosts. We must *not* advertise if we are already in a
3565       secure connection. */
3566
3567       #ifdef SUPPORT_TLS
3568       if (tls_in.active < 0 &&
3569           verify_check_host(&tls_advertise_hosts) != FAIL)
3570         {
3571         s = string_cat(s, &size, &ptr, smtp_code, 3);
3572         s = string_cat(s, &size, &ptr, US"-STARTTLS\r\n", 11);
3573         tls_advertised = TRUE;
3574         }
3575       #endif
3576
3577       #ifdef EXPERIMENTAL_PRDR
3578       /* Per Recipient Data Response, draft by Eric A. Hall extending RFC */
3579       if (prdr_enable) {
3580         s = string_cat(s, &size, &ptr, smtp_code, 3);
3581         s = string_cat(s, &size, &ptr, US"-PRDR\r\n", 7);
3582       }
3583       #endif
3584
3585       /* Finish off the multiline reply with one that is always available. */
3586
3587       s = string_cat(s, &size, &ptr, smtp_code, 3);
3588       s = string_cat(s, &size, &ptr, US" HELP\r\n", 7);
3589       }
3590
3591     /* Terminate the string (for debug), write it, and note that HELO/EHLO
3592     has been seen. */
3593
3594     s[ptr] = 0;
3595
3596     #ifdef SUPPORT_TLS
3597     if (tls_in.active >= 0) (void)tls_write(TRUE, s, ptr); else
3598     #endif
3599
3600       {
3601       int i = fwrite(s, 1, ptr, smtp_out); i = i; /* compiler quietening */
3602       }
3603     DEBUG(D_receive)
3604       {
3605       uschar *cr;
3606       while ((cr = Ustrchr(s, '\r')) != NULL)   /* lose CRs */
3607         memmove(cr, cr + 1, (ptr--) - (cr - s));
3608       debug_printf("SMTP>> %s", s);
3609       }
3610     helo_seen = TRUE;
3611
3612     /* Reset the protocol and the state, abandoning any previous message. */
3613
3614     received_protocol = (esmtp?
3615       protocols[pextend +
3616         ((sender_host_authenticated != NULL)? pauthed : 0) +
3617         ((tls_in.active >= 0)? pcrpted : 0)]
3618       :
3619       protocols[pnormal + ((tls_in.active >= 0)? pcrpted : 0)])
3620       +
3621       ((sender_host_address != NULL)? pnlocal : 0);
3622
3623     smtp_reset(reset_point);
3624     toomany = FALSE;
3625     break;   /* HELO/EHLO */
3626
3627
3628     /* The MAIL command requires an address as an operand. All we do
3629     here is to parse it for syntactic correctness. The form "<>" is
3630     a special case which converts into an empty string. The start/end
3631     pointers in the original are not used further for this address, as
3632     it is the canonical extracted address which is all that is kept. */
3633
3634     case MAIL_CMD:
3635     HAD(SCH_MAIL);
3636     smtp_mailcmd_count++;              /* Count for limit and ratelimit */
3637     was_rej_mail = TRUE;               /* Reset if accepted */
3638     env_mail_type_t * mail_args;       /* Sanity check & validate args */
3639
3640     if (helo_required && !helo_seen)
3641       {
3642       smtp_printf("503 HELO or EHLO required\r\n");
3643       log_write(0, LOG_MAIN|LOG_REJECT, "rejected MAIL from %s: no "
3644         "HELO/EHLO given", host_and_ident(FALSE));
3645       break;
3646       }
3647
3648     if (sender_address != NULL)
3649       {
3650       done = synprot_error(L_smtp_protocol_error, 503, NULL,
3651         US"sender already given");
3652       break;
3653       }
3654
3655     if (smtp_cmd_data[0] == 0)
3656       {
3657       done = synprot_error(L_smtp_protocol_error, 501, NULL,
3658         US"MAIL must have an address operand");
3659       break;
3660       }
3661
3662     /* Check to see if the limit for messages per connection would be
3663     exceeded by accepting further messages. */
3664
3665     if (smtp_accept_max_per_connection > 0 &&
3666         smtp_mailcmd_count > smtp_accept_max_per_connection)
3667       {
3668       smtp_printf("421 too many messages in this connection\r\n");
3669       log_write(0, LOG_MAIN|LOG_REJECT, "rejected MAIL command %s: too many "
3670         "messages in one connection", host_and_ident(TRUE));
3671       break;
3672       }
3673
3674     /* Reset for start of message - even if this is going to fail, we
3675     obviously need to throw away any previous data. */
3676
3677     smtp_reset(reset_point);
3678     toomany = FALSE;
3679     sender_data = recipient_data = NULL;
3680
3681     /* Loop, checking for ESMTP additions to the MAIL FROM command. */
3682
3683     if (esmtp) for(;;)
3684       {
3685       uschar *name, *value, *end;
3686       unsigned long int size;
3687       BOOL arg_error = FALSE;
3688
3689       if (!extract_option(&name, &value)) break;
3690
3691       for (mail_args = env_mail_type_list;
3692            (char *)mail_args < (char *)env_mail_type_list + sizeof(env_mail_type_list);
3693            mail_args++
3694           )
3695         {
3696         if (strcmpic(name, mail_args->name) == 0)
3697           break;
3698         }
3699       if (mail_args->need_value && strcmpic(value, US"") == 0)
3700         break;
3701
3702       switch(mail_args->value)
3703         {
3704         /* Handle SIZE= by reading the value. We don't do the check till later,
3705         in order to be able to log the sender address on failure. */
3706         case ENV_MAIL_OPT_SIZE:
3707           if (((size = Ustrtoul(value, &end, 10)), *end == 0))
3708             {
3709             if ((size == ULONG_MAX && errno == ERANGE) || size > INT_MAX)
3710               size = INT_MAX;
3711             message_size = (int)size;
3712             }
3713           else
3714             arg_error = TRUE;
3715           break;
3716
3717         /* If this session was initiated with EHLO and accept_8bitmime is set,
3718         Exim will have indicated that it supports the BODY=8BITMIME option. In
3719         fact, it does not support this according to the RFCs, in that it does not
3720         take any special action for forwarding messages containing 8-bit
3721         characters. That is why accept_8bitmime is not the default setting, but
3722         some sites want the action that is provided. We recognize both "8BITMIME"
3723         and "7BIT" as body types, but take no action. */
3724         case ENV_MAIL_OPT_BODY:
3725           if (accept_8bitmime) {
3726             if (strcmpic(value, US"8BITMIME") == 0) {
3727               body_8bitmime = 8;
3728             } else if (strcmpic(value, US"7BIT") == 0) {
3729               body_8bitmime = 7;
3730             } else {
3731               body_8bitmime = 0;
3732               done = synprot_error(L_smtp_syntax_error, 501, NULL,
3733                 US"invalid data for BODY");
3734               goto COMMAND_LOOP;
3735             }
3736             DEBUG(D_receive) debug_printf("8BITMIME: %d\n", body_8bitmime);
3737             break;
3738           }
3739           arg_error = TRUE;
3740           break;
3741
3742         /* Handle the AUTH extension. If the value given is not "<>" and either
3743         the ACL says "yes" or there is no ACL but the sending host is
3744         authenticated, we set it up as the authenticated sender. However, if the
3745         authenticator set a condition to be tested, we ignore AUTH on MAIL unless
3746         the condition is met. The value of AUTH is an xtext, which means that +,
3747         = and cntrl chars are coded in hex; however "<>" is unaffected by this
3748         coding. */
3749         case ENV_MAIL_OPT_AUTH:
3750           if (Ustrcmp(value, "<>") != 0)
3751             {
3752             int rc;
3753             uschar *ignore_msg;
3754
3755             if (auth_xtextdecode(value, &authenticated_sender) < 0)
3756               {
3757               /* Put back terminator overrides for error message */
3758               value[-1] = '=';
3759               name[-1] = ' ';
3760               done = synprot_error(L_smtp_syntax_error, 501, NULL,
3761                 US"invalid data for AUTH");
3762               goto COMMAND_LOOP;
3763               }
3764             if (acl_smtp_mailauth == NULL)
3765               {
3766               ignore_msg = US"client not authenticated";
3767               rc = (sender_host_authenticated != NULL)? OK : FAIL;
3768               }
3769             else
3770               {
3771               ignore_msg = US"rejected by ACL";
3772               rc = acl_check(ACL_WHERE_MAILAUTH, NULL, acl_smtp_mailauth,
3773                 &user_msg, &log_msg);
3774               }
3775   
3776             switch (rc)
3777               {
3778               case OK:
3779               if (authenticated_by == NULL ||
3780                   authenticated_by->mail_auth_condition == NULL ||
3781                   expand_check_condition(authenticated_by->mail_auth_condition,
3782                       authenticated_by->name, US"authenticator"))
3783                 break;     /* Accept the AUTH */
3784   
3785               ignore_msg = US"server_mail_auth_condition failed";
3786               if (authenticated_id != NULL)
3787                 ignore_msg = string_sprintf("%s: authenticated ID=\"%s\"",
3788                   ignore_msg, authenticated_id);
3789   
3790               /* Fall through */
3791   
3792               case FAIL:
3793               authenticated_sender = NULL;
3794               log_write(0, LOG_MAIN, "ignoring AUTH=%s from %s (%s)",
3795                 value, host_and_ident(TRUE), ignore_msg);
3796               break;
3797   
3798               /* Should only get DEFER or ERROR here. Put back terminator
3799               overrides for error message */
3800   
3801               default:
3802               value[-1] = '=';
3803               name[-1] = ' ';
3804               (void)smtp_handle_acl_fail(ACL_WHERE_MAILAUTH, rc, user_msg,
3805                 log_msg);
3806               goto COMMAND_LOOP;
3807               }
3808             }
3809             break;
3810
3811 #ifdef EXPERIMENTAL_PRDR
3812         case ENV_MAIL_OPT_PRDR:
3813           if ( prdr_enable )
3814             prdr_requested = TRUE;
3815           break;
3816 #endif
3817
3818         /* Unknown option. Stick back the terminator characters and break
3819         the loop.  Do the name-terminator second as extract_option sets
3820         value==name when it found no equal-sign.
3821         An error for a malformed address will occur. */
3822         default:
3823           value[-1] = '=';
3824           name[-1] = ' ';
3825           arg_error = TRUE;
3826           break;
3827         }
3828       /* Break out of for loop if switch() had bad argument or
3829          when start of the email address is reached */
3830       if (arg_error) break;
3831       }
3832
3833     /* If we have passed the threshold for rate limiting, apply the current
3834     delay, and update it for next time, provided this is a limited host. */
3835
3836     if (smtp_mailcmd_count > smtp_rlm_threshold &&
3837         verify_check_host(&smtp_ratelimit_hosts) == OK)
3838       {
3839       DEBUG(D_receive) debug_printf("rate limit MAIL: delay %.3g sec\n",
3840         smtp_delay_mail/1000.0);
3841       millisleep((int)smtp_delay_mail);
3842       smtp_delay_mail *= smtp_rlm_factor;
3843       if (smtp_delay_mail > (double)smtp_rlm_limit)
3844         smtp_delay_mail = (double)smtp_rlm_limit;
3845       }
3846
3847     /* Now extract the address, first applying any SMTP-time rewriting. The
3848     TRUE flag allows "<>" as a sender address. */
3849
3850     raw_sender = ((rewrite_existflags & rewrite_smtp) != 0)?
3851       rewrite_one(smtp_cmd_data, rewrite_smtp, NULL, FALSE, US"",
3852         global_rewrite_rules) : smtp_cmd_data;
3853
3854     /* rfc821_domains = TRUE; << no longer needed */
3855     raw_sender =
3856       parse_extract_address(raw_sender, &errmess, &start, &end, &sender_domain,
3857         TRUE);
3858     /* rfc821_domains = FALSE; << no longer needed */
3859
3860     if (raw_sender == NULL)
3861       {
3862       done = synprot_error(L_smtp_syntax_error, 501, smtp_cmd_data, errmess);
3863       break;
3864       }
3865
3866     sender_address = raw_sender;
3867
3868     /* If there is a configured size limit for mail, check that this message
3869     doesn't exceed it. The check is postponed to this point so that the sender
3870     can be logged. */
3871
3872     if (thismessage_size_limit > 0 && message_size > thismessage_size_limit)
3873       {
3874       smtp_printf("552 Message size exceeds maximum permitted\r\n");
3875       log_write(L_size_reject,
3876           LOG_MAIN|LOG_REJECT, "rejected MAIL FROM:<%s> %s: "
3877           "message too big: size%s=%d max=%d",
3878           sender_address,
3879           host_and_ident(TRUE),
3880           (message_size == INT_MAX)? ">" : "",
3881           message_size,
3882           thismessage_size_limit);
3883       sender_address = NULL;
3884       break;
3885       }
3886
3887     /* Check there is enough space on the disk unless configured not to.
3888     When smtp_check_spool_space is set, the check is for thismessage_size_limit
3889     plus the current message - i.e. we accept the message only if it won't
3890     reduce the space below the threshold. Add 5000 to the size to allow for
3891     overheads such as the Received: line and storing of recipients, etc.
3892     By putting the check here, even when SIZE is not given, it allow VRFY
3893     and EXPN etc. to be used when space is short. */
3894
3895     if (!receive_check_fs(
3896          (smtp_check_spool_space && message_size >= 0)?
3897             message_size + 5000 : 0))
3898       {
3899       smtp_printf("452 Space shortage, please try later\r\n");
3900       sender_address = NULL;
3901       break;
3902       }
3903
3904     /* If sender_address is unqualified, reject it, unless this is a locally
3905     generated message, or the sending host or net is permitted to send
3906     unqualified addresses - typically local machines behaving as MUAs -
3907     in which case just qualify the address. The flag is set above at the start
3908     of the SMTP connection. */
3909
3910     if (sender_domain == 0 && sender_address[0] != 0)
3911       {
3912       if (allow_unqualified_sender)
3913         {
3914         sender_domain = Ustrlen(sender_address) + 1;
3915         sender_address = rewrite_address_qualify(sender_address, FALSE);
3916         DEBUG(D_receive) debug_printf("unqualified address %s accepted\n",
3917           raw_sender);
3918         }
3919       else
3920         {
3921         smtp_printf("501 %s: sender address must contain a domain\r\n",
3922           smtp_cmd_data);
3923         log_write(L_smtp_syntax_error,
3924           LOG_MAIN|LOG_REJECT,
3925           "unqualified sender rejected: <%s> %s%s",
3926           raw_sender,
3927           host_and_ident(TRUE),
3928           host_lookup_msg);
3929         sender_address = NULL;
3930         break;
3931         }
3932       }
3933
3934     /* Apply an ACL check if one is defined, before responding. Afterwards,
3935     when pipelining is not advertised, do another sync check in case the ACL
3936     delayed and the client started sending in the meantime. */
3937
3938     if (acl_smtp_mail == NULL) rc = OK; else
3939       {
3940       rc = acl_check(ACL_WHERE_MAIL, NULL, acl_smtp_mail, &user_msg, &log_msg);
3941       if (rc == OK && !pipelining_advertised && !check_sync())
3942         goto SYNC_FAILURE;
3943       }
3944
3945     if (rc == OK || rc == DISCARD)
3946       {
3947       if (user_msg == NULL) 
3948         smtp_printf("%s%s%s", US"250 OK",
3949                   #ifdef EXPERIMENTAL_PRDR
3950                     prdr_requested == TRUE ? US", PRDR Requested" :
3951                   #endif
3952                     US"",
3953                     US"\r\n");
3954       else 
3955         {
3956       #ifdef EXPERIMENTAL_PRDR
3957         if ( prdr_requested == TRUE )
3958            user_msg = string_sprintf("%s%s", user_msg, US", PRDR Requested");
3959       #endif
3960         smtp_user_msg(US"250",user_msg);
3961         }
3962       smtp_delay_rcpt = smtp_rlr_base;
3963       recipients_discarded = (rc == DISCARD);
3964       was_rej_mail = FALSE;
3965       }
3966     else
3967       {
3968       done = smtp_handle_acl_fail(ACL_WHERE_MAIL, rc, user_msg, log_msg);
3969       sender_address = NULL;
3970       }
3971     break;
3972
3973
3974     /* The RCPT command requires an address as an operand. There may be any
3975     number of RCPT commands, specifying multiple recipients. We build them all
3976     into a data structure. The start/end values given by parse_extract_address
3977     are not used, as we keep only the extracted address. */
3978
3979     case RCPT_CMD:
3980     HAD(SCH_RCPT);
3981     rcpt_count++;
3982     was_rcpt = rcpt_in_progress = TRUE;
3983
3984     /* There must be a sender address; if the sender was rejected and
3985     pipelining was advertised, we assume the client was pipelining, and do not
3986     count this as a protocol error. Reset was_rej_mail so that further RCPTs
3987     get the same treatment. */
3988
3989     if (sender_address == NULL)
3990       {
3991       if (pipelining_advertised && last_was_rej_mail)
3992         {
3993         smtp_printf("503 sender not yet given\r\n");
3994         was_rej_mail = TRUE;
3995         }
3996       else
3997         {
3998         done = synprot_error(L_smtp_protocol_error, 503, NULL,
3999           US"sender not yet given");
4000         was_rcpt = FALSE;             /* Not a valid RCPT */
4001         }
4002       rcpt_fail_count++;
4003       break;
4004       }
4005
4006     /* Check for an operand */
4007
4008     if (smtp_cmd_data[0] == 0)
4009       {
4010       done = synprot_error(L_smtp_syntax_error, 501, NULL,
4011         US"RCPT must have an address operand");
4012       rcpt_fail_count++;
4013       break;
4014       }
4015
4016     /* Apply SMTP rewriting then extract the working address. Don't allow "<>"
4017     as a recipient address */
4018
4019     recipient = ((rewrite_existflags & rewrite_smtp) != 0)?
4020       rewrite_one(smtp_cmd_data, rewrite_smtp, NULL, FALSE, US"",
4021         global_rewrite_rules) : smtp_cmd_data;
4022
4023     /* rfc821_domains = TRUE; << no longer needed */
4024     recipient = parse_extract_address(recipient, &errmess, &start, &end,
4025       &recipient_domain, FALSE);
4026     /* rfc821_domains = FALSE; << no longer needed */
4027
4028     if (recipient == NULL)
4029       {
4030       done = synprot_error(L_smtp_syntax_error, 501, smtp_cmd_data, errmess);
4031       rcpt_fail_count++;
4032       break;
4033       }
4034
4035     /* If the recipient address is unqualified, reject it, unless this is a
4036     locally generated message. However, unqualified addresses are permitted
4037     from a configured list of hosts and nets - typically when behaving as
4038     MUAs rather than MTAs. Sad that SMTP is used for both types of traffic,
4039     really. The flag is set at the start of the SMTP connection.
4040
4041     RFC 1123 talks about supporting "the reserved mailbox postmaster"; I always
4042     assumed this meant "reserved local part", but the revision of RFC 821 and
4043     friends now makes it absolutely clear that it means *mailbox*. Consequently
4044     we must always qualify this address, regardless. */
4045
4046     if (recipient_domain == 0)
4047       {
4048       if (allow_unqualified_recipient ||
4049           strcmpic(recipient, US"postmaster") == 0)
4050         {
4051         DEBUG(D_receive) debug_printf("unqualified address %s accepted\n",
4052           recipient);
4053         recipient_domain = Ustrlen(recipient) + 1;
4054         recipient = rewrite_address_qualify(recipient, TRUE);
4055         }
4056       else
4057         {
4058         rcpt_fail_count++;
4059         smtp_printf("501 %s: recipient address must contain a domain\r\n",
4060           smtp_cmd_data);
4061         log_write(L_smtp_syntax_error,
4062           LOG_MAIN|LOG_REJECT, "unqualified recipient rejected: "
4063           "<%s> %s%s", recipient, host_and_ident(TRUE),
4064           host_lookup_msg);
4065         break;
4066         }
4067       }
4068
4069     /* Check maximum allowed */
4070
4071     if (rcpt_count > recipients_max && recipients_max > 0)
4072       {
4073       if (recipients_max_reject)
4074         {
4075         rcpt_fail_count++;
4076         smtp_printf("552 too many recipients\r\n");
4077         if (!toomany)
4078           log_write(0, LOG_MAIN|LOG_REJECT, "too many recipients: message "
4079             "rejected: sender=<%s> %s", sender_address, host_and_ident(TRUE));
4080         }
4081       else
4082         {
4083         rcpt_defer_count++;
4084         smtp_printf("452 too many recipients\r\n");
4085         if (!toomany)
4086           log_write(0, LOG_MAIN|LOG_REJECT, "too many recipients: excess "
4087             "temporarily rejected: sender=<%s> %s", sender_address,
4088             host_and_ident(TRUE));
4089         }
4090
4091       toomany = TRUE;
4092       break;
4093       }
4094
4095     /* If we have passed the threshold for rate limiting, apply the current
4096     delay, and update it for next time, provided this is a limited host. */
4097
4098     if (rcpt_count > smtp_rlr_threshold &&
4099         verify_check_host(&smtp_ratelimit_hosts) == OK)
4100       {
4101       DEBUG(D_receive) debug_printf("rate limit RCPT: delay %.3g sec\n",
4102         smtp_delay_rcpt/1000.0);
4103       millisleep((int)smtp_delay_rcpt);
4104       smtp_delay_rcpt *= smtp_rlr_factor;
4105       if (smtp_delay_rcpt > (double)smtp_rlr_limit)
4106         smtp_delay_rcpt = (double)smtp_rlr_limit;
4107       }
4108
4109     /* If the MAIL ACL discarded all the recipients, we bypass ACL checking
4110     for them. Otherwise, check the access control list for this recipient. As
4111     there may be a delay in this, re-check for a synchronization error
4112     afterwards, unless pipelining was advertised. */
4113
4114     if (recipients_discarded) rc = DISCARD; else
4115       {
4116       rc = acl_check(ACL_WHERE_RCPT, recipient, acl_smtp_rcpt, &user_msg,
4117         &log_msg);
4118       if (rc == OK && !pipelining_advertised && !check_sync())
4119         goto SYNC_FAILURE;
4120       }
4121
4122     /* The ACL was happy */
4123
4124     if (rc == OK)
4125       {
4126       if (user_msg == NULL) smtp_printf("250 Accepted\r\n");
4127         else smtp_user_msg(US"250", user_msg);
4128       receive_add_recipient(recipient, -1);
4129       }
4130
4131     /* The recipient was discarded */
4132
4133     else if (rc == DISCARD)
4134       {
4135       if (user_msg == NULL) smtp_printf("250 Accepted\r\n");
4136         else smtp_user_msg(US"250", user_msg);
4137       rcpt_fail_count++;
4138       discarded = TRUE;
4139       log_write(0, LOG_MAIN|LOG_REJECT, "%s F=<%s> rejected RCPT %s: "
4140         "discarded by %s ACL%s%s", host_and_ident(TRUE),
4141         (sender_address_unrewritten != NULL)?
4142         sender_address_unrewritten : sender_address,
4143         smtp_cmd_argument, recipients_discarded? "MAIL" : "RCPT",
4144         (log_msg == NULL)? US"" : US": ",
4145         (log_msg == NULL)? US"" : log_msg);
4146       }
4147
4148     /* Either the ACL failed the address, or it was deferred. */
4149
4150     else
4151       {
4152       if (rc == FAIL) rcpt_fail_count++; else rcpt_defer_count++;
4153       done = smtp_handle_acl_fail(ACL_WHERE_RCPT, rc, user_msg, log_msg);
4154       }
4155     break;
4156
4157
4158     /* The DATA command is legal only if it follows successful MAIL FROM
4159     and RCPT TO commands. However, if pipelining is advertised, a bad DATA is
4160     not counted as a protocol error if it follows RCPT (which must have been
4161     rejected if there are no recipients.) This function is complete when a
4162     valid DATA command is encountered.
4163
4164     Note concerning the code used: RFC 2821 says this:
4165
4166      -  If there was no MAIL, or no RCPT, command, or all such commands
4167         were rejected, the server MAY return a "command out of sequence"
4168         (503) or "no valid recipients" (554) reply in response to the
4169         DATA command.
4170
4171     The example in the pipelining RFC 2920 uses 554, but I use 503 here
4172     because it is the same whether pipelining is in use or not.
4173
4174     If all the RCPT commands that precede DATA provoked the same error message
4175     (often indicating some kind of system error), it is helpful to include it
4176     with the DATA rejection (an idea suggested by Tony Finch). */
4177
4178     case DATA_CMD:
4179     HAD(SCH_DATA);
4180     if (!discarded && recipients_count <= 0)
4181       {
4182       if (rcpt_smtp_response_same && rcpt_smtp_response != NULL)
4183         {
4184         uschar *code = US"503";
4185         int len = Ustrlen(rcpt_smtp_response);
4186         smtp_respond(code, 3, FALSE, US"All RCPT commands were rejected with "
4187           "this error:");
4188         /* Responses from smtp_printf() will have \r\n on the end */
4189         if (len > 2 && rcpt_smtp_response[len-2] == '\r')
4190           rcpt_smtp_response[len-2] = 0;
4191         smtp_respond(code, 3, FALSE, rcpt_smtp_response);
4192         }
4193       if (pipelining_advertised && last_was_rcpt)
4194         smtp_printf("503 Valid RCPT command must precede DATA\r\n");
4195       else
4196         done = synprot_error(L_smtp_protocol_error, 503, NULL,
4197           US"valid RCPT command must precede DATA");
4198       break;
4199       }
4200
4201     if (toomany && recipients_max_reject)
4202       {
4203       sender_address = NULL;  /* This will allow a new MAIL without RSET */
4204       sender_address_unrewritten = NULL;
4205       smtp_printf("554 Too many recipients\r\n");
4206       break;
4207       }
4208
4209     /* If there is an ACL, re-check the synchronization afterwards, since the
4210     ACL may have delayed.  To handle cutthrough delivery enforce a dummy call
4211     to get the DATA command sent. */
4212
4213     if (acl_smtp_predata == NULL && cutthrough_fd < 0) rc = OK; else
4214       {
4215       uschar * acl= acl_smtp_predata ? acl_smtp_predata : US"accept";
4216       enable_dollar_recipients = TRUE;
4217       rc = acl_check(ACL_WHERE_PREDATA, NULL, acl, &user_msg,
4218         &log_msg);
4219       enable_dollar_recipients = FALSE;
4220       if (rc == OK && !check_sync()) goto SYNC_FAILURE;
4221       }
4222
4223     if (rc == OK)
4224       {
4225       uschar * code;
4226       code = US"354";
4227       if (user_msg == NULL)
4228         smtp_printf("%s Enter message, ending with \".\" on a line by itself\r\n", code);
4229       else smtp_user_msg(code, user_msg);
4230       done = 3;
4231       message_ended = END_NOTENDED;   /* Indicate in middle of data */
4232       }
4233
4234     /* Either the ACL failed the address, or it was deferred. */
4235
4236     else
4237       done = smtp_handle_acl_fail(ACL_WHERE_PREDATA, rc, user_msg, log_msg);
4238     break;
4239
4240
4241     case VRFY_CMD:
4242     HAD(SCH_VRFY);
4243     rc = acl_check(ACL_WHERE_VRFY, NULL, acl_smtp_vrfy, &user_msg, &log_msg);
4244     if (rc != OK)
4245       done = smtp_handle_acl_fail(ACL_WHERE_VRFY, rc, user_msg, log_msg);
4246     else
4247       {
4248       uschar *address;
4249       uschar *s = NULL;
4250
4251       /* rfc821_domains = TRUE; << no longer needed */
4252       address = parse_extract_address(smtp_cmd_data, &errmess, &start, &end,
4253         &recipient_domain, FALSE);
4254       /* rfc821_domains = FALSE; << no longer needed */
4255
4256       if (address == NULL)
4257         s = string_sprintf("501 %s", errmess);
4258       else
4259         {
4260         address_item *addr = deliver_make_addr(address, FALSE);
4261         switch(verify_address(addr, NULL, vopt_is_recipient | vopt_qualify, -1,
4262                -1, -1, NULL, NULL, NULL))
4263           {
4264           case OK:
4265           s = string_sprintf("250 <%s> is deliverable", address);
4266           break;
4267
4268           case DEFER:
4269           s = (addr->user_message != NULL)?
4270             string_sprintf("451 <%s> %s", address, addr->user_message) :
4271             string_sprintf("451 Cannot resolve <%s> at this time", address);
4272           break;
4273
4274           case FAIL:
4275           s = (addr->user_message != NULL)?
4276             string_sprintf("550 <%s> %s", address, addr->user_message) :
4277             string_sprintf("550 <%s> is not deliverable", address);
4278           log_write(0, LOG_MAIN, "VRFY failed for %s %s",
4279             smtp_cmd_argument, host_and_ident(TRUE));
4280           break;
4281           }
4282         }
4283
4284       smtp_printf("%s\r\n", s);
4285       }
4286     break;
4287
4288
4289     case EXPN_CMD:
4290     HAD(SCH_EXPN);
4291     rc = acl_check(ACL_WHERE_EXPN, NULL, acl_smtp_expn, &user_msg, &log_msg);
4292     if (rc != OK)
4293       done = smtp_handle_acl_fail(ACL_WHERE_EXPN, rc, user_msg, log_msg);
4294     else
4295       {
4296       BOOL save_log_testing_mode = log_testing_mode;
4297       address_test_mode = log_testing_mode = TRUE;
4298       (void) verify_address(deliver_make_addr(smtp_cmd_data, FALSE),
4299         smtp_out, vopt_is_recipient | vopt_qualify | vopt_expn, -1, -1, -1,
4300         NULL, NULL, NULL);
4301       address_test_mode = FALSE;
4302       log_testing_mode = save_log_testing_mode;    /* true for -bh */
4303       }
4304     break;
4305
4306
4307     #ifdef SUPPORT_TLS
4308
4309     case STARTTLS_CMD:
4310     HAD(SCH_STARTTLS);
4311     if (!tls_advertised)
4312       {
4313       done = synprot_error(L_smtp_protocol_error, 503, NULL,
4314         US"STARTTLS command used when not advertised");
4315       break;
4316       }
4317
4318     /* Apply an ACL check if one is defined */
4319
4320     if (acl_smtp_starttls != NULL)
4321       {
4322       rc = acl_check(ACL_WHERE_STARTTLS, NULL, acl_smtp_starttls, &user_msg,
4323         &log_msg);
4324       if (rc != OK)
4325         {
4326         done = smtp_handle_acl_fail(ACL_WHERE_STARTTLS, rc, user_msg, log_msg);
4327         break;
4328         }
4329       }
4330
4331     /* RFC 2487 is not clear on when this command may be sent, though it
4332     does state that all information previously obtained from the client
4333     must be discarded if a TLS session is started. It seems reasonble to
4334     do an implied RSET when STARTTLS is received. */
4335
4336     incomplete_transaction_log(US"STARTTLS");
4337     smtp_reset(reset_point);
4338     toomany = FALSE;
4339     cmd_list[CMD_LIST_STARTTLS].is_mail_cmd = FALSE;
4340
4341     /* There's an attack where more data is read in past the STARTTLS command
4342     before TLS is negotiated, then assumed to be part of the secure session
4343     when used afterwards; we use segregated input buffers, so are not
4344     vulnerable, but we want to note when it happens and, for sheer paranoia,
4345     ensure that the buffer is "wiped".
4346     Pipelining sync checks will normally have protected us too, unless disabled
4347     by configuration. */
4348
4349     if (receive_smtp_buffered())
4350       {
4351       DEBUG(D_any)
4352         debug_printf("Non-empty input buffer after STARTTLS; naive attack?");
4353       if (tls_in.active < 0)
4354         smtp_inend = smtp_inptr = smtp_inbuffer;
4355       /* and if TLS is already active, tls_server_start() should fail */
4356       }
4357
4358     /* There is nothing we value in the input buffer and if TLS is succesfully
4359     negotiated, we won't use this buffer again; if TLS fails, we'll just read
4360     fresh content into it.  The buffer contains arbitrary content from an
4361     untrusted remote source; eg: NOOP <shellcode>\r\nSTARTTLS\r\n
4362     It seems safest to just wipe away the content rather than leave it as a
4363     target to jump to. */
4364
4365     memset(smtp_inbuffer, 0, in_buffer_size);
4366
4367     /* Attempt to start up a TLS session, and if successful, discard all
4368     knowledge that was obtained previously. At least, that's what the RFC says,
4369     and that's what happens by default. However, in order to work round YAEB,
4370     there is an option to remember the esmtp state. Sigh.
4371
4372     We must allow for an extra EHLO command and an extra AUTH command after
4373     STARTTLS that don't add to the nonmail command count. */
4374
4375     if ((rc = tls_server_start(tls_require_ciphers)) == OK)
4376       {
4377       if (!tls_remember_esmtp)
4378         helo_seen = esmtp = auth_advertised = pipelining_advertised = FALSE;
4379       cmd_list[CMD_LIST_EHLO].is_mail_cmd = TRUE;
4380       cmd_list[CMD_LIST_AUTH].is_mail_cmd = TRUE;
4381       if (sender_helo_name != NULL)
4382         {
4383         store_free(sender_helo_name);
4384         sender_helo_name = NULL;
4385         host_build_sender_fullhost();  /* Rebuild */
4386         set_process_info("handling incoming TLS connection from %s",
4387           host_and_ident(FALSE));
4388         }
4389       received_protocol = (esmtp?
4390         protocols[pextend + pcrpted +
4391           ((sender_host_authenticated != NULL)? pauthed : 0)]
4392         :
4393         protocols[pnormal + pcrpted])
4394         +
4395         ((sender_host_address != NULL)? pnlocal : 0);
4396
4397       sender_host_authenticated = NULL;
4398       authenticated_id = NULL;
4399       sync_cmd_limit = NON_SYNC_CMD_NON_PIPELINING;
4400       DEBUG(D_tls) debug_printf("TLS active\n");
4401       break;     /* Successful STARTTLS */
4402       }
4403
4404     /* Some local configuration problem was discovered before actually trying
4405     to do a TLS handshake; give a temporary error. */
4406
4407     else if (rc == DEFER)
4408       {
4409       smtp_printf("454 TLS currently unavailable\r\n");
4410       break;
4411       }
4412
4413     /* Hard failure. Reject everything except QUIT or closed connection. One
4414     cause for failure is a nested STARTTLS, in which case tls_in.active remains
4415     set, but we must still reject all incoming commands. */
4416
4417     DEBUG(D_tls) debug_printf("TLS failed to start\n");
4418     while (done <= 0)
4419       {
4420       switch(smtp_read_command(FALSE))
4421         {
4422         case EOF_CMD:
4423         log_write(L_smtp_connection, LOG_MAIN, "%s closed by EOF",
4424           smtp_get_connection_info());
4425         smtp_notquit_exit(US"tls-failed", NULL, NULL);
4426         done = 2;
4427         break;
4428
4429         /* It is perhaps arguable as to which exit ACL should be called here,
4430         but as it is probably a situation that almost never arises, it
4431         probably doesn't matter. We choose to call the real QUIT ACL, which in
4432         some sense is perhaps "right". */
4433
4434         case QUIT_CMD:
4435         user_msg = NULL;
4436         if (acl_smtp_quit != NULL)
4437           {
4438           rc = acl_check(ACL_WHERE_QUIT, NULL, acl_smtp_quit, &user_msg,
4439             &log_msg);
4440           if (rc == ERROR)
4441             log_write(0, LOG_MAIN|LOG_PANIC, "ACL for QUIT returned ERROR: %s",
4442               log_msg);
4443           }
4444         if (user_msg == NULL)
4445           smtp_printf("221 %s closing connection\r\n", smtp_active_hostname);
4446         else
4447           smtp_respond(US"221", 3, TRUE, user_msg);
4448         log_write(L_smtp_connection, LOG_MAIN, "%s closed by QUIT",
4449           smtp_get_connection_info());
4450         done = 2;
4451         break;
4452
4453         default:
4454         smtp_printf("554 Security failure\r\n");
4455         break;
4456         }
4457       }
4458     tls_close(TRUE, TRUE);
4459     break;
4460     #endif
4461
4462
4463     /* The ACL for QUIT is provided for gathering statistical information or
4464     similar; it does not affect the response code, but it can supply a custom
4465     message. */
4466
4467     case QUIT_CMD:
4468     HAD(SCH_QUIT);
4469     incomplete_transaction_log(US"QUIT");
4470     if (acl_smtp_quit != NULL)
4471       {
4472       rc = acl_check(ACL_WHERE_QUIT, NULL, acl_smtp_quit, &user_msg, &log_msg);
4473       if (rc == ERROR)
4474         log_write(0, LOG_MAIN|LOG_PANIC, "ACL for QUIT returned ERROR: %s",
4475           log_msg);
4476       }
4477     if (user_msg == NULL)
4478       smtp_printf("221 %s closing connection\r\n", smtp_active_hostname);
4479     else
4480       smtp_respond(US"221", 3, TRUE, user_msg);
4481
4482     #ifdef SUPPORT_TLS
4483     tls_close(TRUE, TRUE);
4484     #endif
4485
4486     done = 2;
4487     log_write(L_smtp_connection, LOG_MAIN, "%s closed by QUIT",
4488       smtp_get_connection_info());
4489     break;
4490
4491
4492     case RSET_CMD:
4493     HAD(SCH_RSET);
4494     incomplete_transaction_log(US"RSET");
4495     smtp_reset(reset_point);
4496     toomany = FALSE;
4497     smtp_printf("250 Reset OK\r\n");
4498     cmd_list[CMD_LIST_RSET].is_mail_cmd = FALSE;
4499     break;
4500
4501
4502     case NOOP_CMD:
4503     HAD(SCH_NOOP);
4504     smtp_printf("250 OK\r\n");
4505     break;
4506
4507
4508     /* Show ETRN/EXPN/VRFY if there's an ACL for checking hosts; if actually
4509     used, a check will be done for permitted hosts. Show STARTTLS only if not
4510     already in a TLS session and if it would be advertised in the EHLO
4511     response. */
4512
4513     case HELP_CMD:
4514     HAD(SCH_HELP);
4515     smtp_printf("214-Commands supported:\r\n");
4516       {
4517       uschar buffer[256];
4518       buffer[0] = 0;
4519       Ustrcat(buffer, " AUTH");
4520       #ifdef SUPPORT_TLS
4521       if (tls_in.active < 0 &&
4522           verify_check_host(&tls_advertise_hosts) != FAIL)
4523         Ustrcat(buffer, " STARTTLS");
4524       #endif
4525       Ustrcat(buffer, " HELO EHLO MAIL RCPT DATA");
4526       Ustrcat(buffer, " NOOP QUIT RSET HELP");
4527       if (acl_smtp_etrn != NULL) Ustrcat(buffer, " ETRN");
4528       if (acl_smtp_expn != NULL) Ustrcat(buffer, " EXPN");
4529       if (acl_smtp_vrfy != NULL) Ustrcat(buffer, " VRFY");
4530       smtp_printf("214%s\r\n", buffer);
4531       }
4532     break;
4533
4534
4535     case EOF_CMD:
4536     incomplete_transaction_log(US"connection lost");
4537     smtp_notquit_exit(US"connection-lost", US"421",
4538       US"%s lost input connection", smtp_active_hostname);
4539
4540     /* Don't log by default unless in the middle of a message, as some mailers
4541     just drop the call rather than sending QUIT, and it clutters up the logs.
4542     */
4543
4544     if (sender_address != NULL || recipients_count > 0)
4545       log_write(L_lost_incoming_connection,
4546           LOG_MAIN,
4547           "unexpected %s while reading SMTP command from %s%s",
4548           sender_host_unknown? "EOF" : "disconnection",
4549           host_and_ident(FALSE), smtp_read_error);
4550
4551     else log_write(L_smtp_connection, LOG_MAIN, "%s lost%s",
4552       smtp_get_connection_info(), smtp_read_error);
4553
4554     done = 1;
4555     break;
4556
4557
4558     case ETRN_CMD:
4559     HAD(SCH_ETRN);
4560     if (sender_address != NULL)
4561       {
4562       done = synprot_error(L_smtp_protocol_error, 503, NULL,
4563         US"ETRN is not permitted inside a transaction");
4564       break;
4565       }
4566
4567     log_write(L_etrn, LOG_MAIN, "ETRN %s received from %s", smtp_cmd_argument,
4568       host_and_ident(FALSE));
4569
4570     rc = acl_check(ACL_WHERE_ETRN, NULL, acl_smtp_etrn, &user_msg, &log_msg);
4571     if (rc != OK)
4572       {
4573       done = smtp_handle_acl_fail(ACL_WHERE_ETRN, rc, user_msg, log_msg);
4574       break;
4575       }
4576
4577     /* Compute the serialization key for this command. */
4578
4579     etrn_serialize_key = string_sprintf("etrn-%s\n", smtp_cmd_data);
4580
4581     /* If a command has been specified for running as a result of ETRN, we
4582     permit any argument to ETRN. If not, only the # standard form is permitted,
4583     since that is strictly the only kind of ETRN that can be implemented
4584     according to the RFC. */
4585
4586     if (smtp_etrn_command != NULL)
4587       {
4588       uschar *error;
4589       BOOL rc;
4590       etrn_command = smtp_etrn_command;
4591       deliver_domain = smtp_cmd_data;
4592       rc = transport_set_up_command(&argv, smtp_etrn_command, TRUE, 0, NULL,
4593         US"ETRN processing", &error);
4594       deliver_domain = NULL;
4595       if (!rc)
4596         {
4597         log_write(0, LOG_MAIN|LOG_PANIC, "failed to set up ETRN command: %s",
4598           error);
4599         smtp_printf("458 Internal failure\r\n");
4600         break;
4601         }
4602       }
4603
4604     /* Else set up to call Exim with the -R option. */
4605
4606     else
4607       {
4608       if (*smtp_cmd_data++ != '#')
4609         {
4610         done = synprot_error(L_smtp_syntax_error, 501, NULL,
4611           US"argument must begin with #");
4612         break;
4613         }
4614       etrn_command = US"exim -R";
4615       argv = child_exec_exim(CEE_RETURN_ARGV, TRUE, NULL, TRUE, 2, US"-R",
4616         smtp_cmd_data);
4617       }
4618
4619     /* If we are host-testing, don't actually do anything. */
4620
4621     if (host_checking)
4622       {
4623       HDEBUG(D_any)
4624         {
4625         debug_printf("ETRN command is: %s\n", etrn_command);
4626         debug_printf("ETRN command execution skipped\n");
4627         }
4628       if (user_msg == NULL) smtp_printf("250 OK\r\n");
4629         else smtp_user_msg(US"250", user_msg);
4630       break;
4631       }
4632
4633
4634     /* If ETRN queue runs are to be serialized, check the database to
4635     ensure one isn't already running. */
4636
4637     if (smtp_etrn_serialize && !enq_start(etrn_serialize_key))
4638       {
4639       smtp_printf("458 Already processing %s\r\n", smtp_cmd_data);
4640       break;
4641       }
4642
4643     /* Fork a child process and run the command. We don't want to have to
4644     wait for the process at any point, so set SIGCHLD to SIG_IGN before
4645     forking. It should be set that way anyway for external incoming SMTP,
4646     but we save and restore to be tidy. If serialization is required, we
4647     actually run the command in yet another process, so we can wait for it
4648     to complete and then remove the serialization lock. */
4649
4650     oldsignal = signal(SIGCHLD, SIG_IGN);
4651
4652     if ((pid = fork()) == 0)
4653       {
4654       smtp_input = FALSE;       /* This process is not associated with the */
4655       (void)fclose(smtp_in);    /* SMTP call any more. */
4656       (void)fclose(smtp_out);
4657
4658       signal(SIGCHLD, SIG_DFL);      /* Want to catch child */
4659
4660       /* If not serializing, do the exec right away. Otherwise, fork down
4661       into another process. */
4662
4663       if (!smtp_etrn_serialize || (pid = fork()) == 0)
4664         {
4665         DEBUG(D_exec) debug_print_argv(argv);
4666         exim_nullstd();                   /* Ensure std{in,out,err} exist */
4667         execv(CS argv[0], (char *const *)argv);
4668         log_write(0, LOG_MAIN|LOG_PANIC_DIE, "exec of \"%s\" (ETRN) failed: %s",
4669           etrn_command, strerror(errno));
4670         _exit(EXIT_FAILURE);         /* paranoia */
4671         }
4672
4673       /* Obey this if smtp_serialize and the 2nd fork yielded non-zero. That
4674       is, we are in the first subprocess, after forking again. All we can do
4675       for a failing fork is to log it. Otherwise, wait for the 2nd process to
4676       complete, before removing the serialization. */
4677
4678       if (pid < 0)
4679         log_write(0, LOG_MAIN|LOG_PANIC, "2nd fork for serialized ETRN "
4680           "failed: %s", strerror(errno));
4681       else
4682         {
4683         int status;
4684         DEBUG(D_any) debug_printf("waiting for serialized ETRN process %d\n",
4685           (int)pid);
4686         (void)wait(&status);
4687         DEBUG(D_any) debug_printf("serialized ETRN process %d ended\n",
4688           (int)pid);
4689         }
4690
4691       enq_end(etrn_serialize_key);
4692       _exit(EXIT_SUCCESS);
4693       }
4694
4695     /* Back in the top level SMTP process. Check that we started a subprocess
4696     and restore the signal state. */
4697
4698     if (pid < 0)
4699       {
4700       log_write(0, LOG_MAIN|LOG_PANIC, "fork of process for ETRN failed: %s",
4701         strerror(errno));
4702       smtp_printf("458 Unable to fork process\r\n");
4703       if (smtp_etrn_serialize) enq_end(etrn_serialize_key);
4704       }
4705     else
4706       {
4707       if (user_msg == NULL) smtp_printf("250 OK\r\n");
4708         else smtp_user_msg(US"250", user_msg);
4709       }
4710
4711     signal(SIGCHLD, oldsignal);
4712     break;
4713
4714
4715     case BADARG_CMD:
4716     done = synprot_error(L_smtp_syntax_error, 501, NULL,
4717       US"unexpected argument data");
4718     break;
4719
4720
4721     /* This currently happens only for NULLs, but could be extended. */
4722
4723     case BADCHAR_CMD:
4724     done = synprot_error(L_smtp_syntax_error, 0, NULL,       /* Just logs */
4725       US"NULL character(s) present (shown as '?')");
4726     smtp_printf("501 NULL characters are not allowed in SMTP commands\r\n");
4727     break;
4728
4729
4730     case BADSYN_CMD:
4731     SYNC_FAILURE:
4732     if (smtp_inend >= smtp_inbuffer + in_buffer_size)
4733       smtp_inend = smtp_inbuffer + in_buffer_size - 1;
4734     c = smtp_inend - smtp_inptr;
4735     if (c > 150) c = 150;
4736     smtp_inptr[c] = 0;
4737     incomplete_transaction_log(US"sync failure");
4738     log_write(0, LOG_MAIN|LOG_REJECT, "SMTP protocol synchronization error "
4739       "(next input sent too soon: pipelining was%s advertised): "
4740       "rejected \"%s\" %s next input=\"%s\"",
4741       pipelining_advertised? "" : " not",
4742       smtp_cmd_buffer, host_and_ident(TRUE),
4743       string_printing(smtp_inptr));
4744     smtp_notquit_exit(US"synchronization-error", US"554",
4745       US"SMTP synchronization error");
4746     done = 1;   /* Pretend eof - drops connection */
4747     break;
4748
4749
4750     case TOO_MANY_NONMAIL_CMD:
4751     s = smtp_cmd_buffer;
4752     while (*s != 0 && !isspace(*s)) s++;
4753     incomplete_transaction_log(US"too many non-mail commands");
4754     log_write(0, LOG_MAIN|LOG_REJECT, "SMTP call from %s dropped: too many "
4755       "nonmail commands (last was \"%.*s\")",  host_and_ident(FALSE),
4756       (int)(s - smtp_cmd_buffer), smtp_cmd_buffer);
4757     smtp_notquit_exit(US"bad-commands", US"554", US"Too many nonmail commands");
4758     done = 1;   /* Pretend eof - drops connection */
4759     break;
4760
4761     #ifdef EXPERIMENTAL_PROXY
4762     case PROXY_FAIL_IGNORE_CMD:
4763     smtp_printf("503 Command refused, required Proxy negotiation failed\r\n");
4764     break;
4765     #endif
4766
4767     default:
4768     if (unknown_command_count++ >= smtp_max_unknown_commands)
4769       {
4770       log_write(L_smtp_syntax_error, LOG_MAIN,
4771         "SMTP syntax error in \"%s\" %s %s",
4772         string_printing(smtp_cmd_buffer), host_and_ident(TRUE),
4773         US"unrecognized command");
4774       incomplete_transaction_log(US"unrecognized command");
4775       smtp_notquit_exit(US"bad-commands", US"500",
4776         US"Too many unrecognized commands");
4777       done = 2;
4778       log_write(0, LOG_MAIN|LOG_REJECT, "SMTP call from %s dropped: too many "
4779         "unrecognized commands (last was \"%s\")", host_and_ident(FALSE),
4780         smtp_cmd_buffer);
4781       }
4782     else
4783       done = synprot_error(L_smtp_syntax_error, 500, NULL,
4784         US"unrecognized command");
4785     break;
4786     }
4787
4788   /* This label is used by goto's inside loops that want to break out to
4789   the end of the command-processing loop. */
4790
4791   COMMAND_LOOP:
4792   last_was_rej_mail = was_rej_mail;     /* Remember some last commands for */
4793   last_was_rcpt = was_rcpt;             /* protocol error handling */
4794   continue;
4795   }
4796
4797 return done - 2;  /* Convert yield values */
4798 }
4799
4800 /* vi: aw ai sw=2
4801 */
4802 /* End of smtp_in.c */