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