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