CHUNKING/DKIM: fix handling of lines having a leading dot
[users/jgh/exim.git] / src / src / transports / smtp.c
index 25e493433e54c347b55eeb2cf876e4738d2500ff..6b0781096c97a1befac2812128acd74047df50b2 100644 (file)
@@ -266,7 +266,8 @@ smtp_transport_options_block smtp_transport_option_defaults = {
     NULL,              /* dkim_private_key */
     NULL,              /* dkim_selector */
     NULL,              /* dkim_sign_headers */
-    NULL}              /* dkim_strict */
+    NULL,              /* dkim_strict */
+    FALSE}            /* dot_stuffed */
 #endif
 };
 
@@ -1223,7 +1224,8 @@ switch (dns_lookup(dnsa, buffer, T_TLSA, &fullname))
   case DNS_AGAIN:
     return DEFER; /* just defer this TLS'd conn */
 
-  case DNS_NOMATCH:
+  case DNS_NODATA:     /* no TLSA RR for this lookup */
+  case DNS_NOMATCH:    /* no records at all for this lookup */
     return dane_required ? FAIL : FAIL_FORCED;
 
   default:
@@ -1401,6 +1403,8 @@ if (tctx->pending_BDAT)
 
 if (flags & tc_reap_prev  &&  prev_cmd_count > 0)
   {
+  DEBUG(D_transport) debug_printf("look for %d responses"
+    " for previous pipelined cmds\n", prev_cmd_count);
 
   switch(sync_responses(tctx->first_addr, tctx->tblock->rcpt_include_affixes,
          tctx->sync_addr, tctx->host, prev_cmd_count,
@@ -1423,10 +1427,12 @@ if (flags & tc_reap_prev  &&  prev_cmd_count > 0)
     pipelining_active = FALSE;
   }
 
-/* Reap response for the cmd we just emitted, or an outstanding BDAT */
+/* Reap response for an outstanding BDAT */
 
-if (flags & tc_reap_one  ||  tctx->pending_BDAT)
+if (tctx->pending_BDAT)
   {
+  DEBUG(D_transport) debug_printf("look for one response for BDAT\n");
+
   if (!smtp_read_response(tctx->inblock, buffer, DELIVER_BUFFER_SIZE, '2',
        ob->command_timeout))
     {
@@ -2483,7 +2489,7 @@ else
     | (tblock->headers_only    ? topt_no_body : 0)
     | (tblock->return_path_add ? topt_add_return_path : 0)
     | (tblock->delivery_date_add ? topt_add_delivery_date : 0)
-    | (tblock->envelope_to_add ? topt_add_envelope_to : 0),
+    | (tblock->envelope_to_add ? topt_add_envelope_to : 0)
   };
 
   /* If using CHUNKING we need a callback from the generic transport