Add try_prdr option to smtp transport.
authorJeremy Harris <jgh146exb@wizmail.org>
Sun, 23 Dec 2012 15:34:12 +0000 (15:34 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Sun, 23 Dec 2012 16:15:01 +0000 (16:15 +0000)
src/src/deliver.c
src/src/globals.c
src/src/globals.h
src/src/transports/smtp.c
src/src/transports/smtp.h

index 79d431b37307b79fbf24ba6c59d5b926b2a96335..f20ea41668c4b19ec78c03b95bd3791ffe082575 100644 (file)
@@ -6096,6 +6096,11 @@ if (addr_remote != NULL)
     regex_must_compile(US"\\n250[\\s\\-]STARTTLS(\\s|\\n|$)", FALSE, TRUE);
   #endif
 
+  #ifdef EXPERIMENTAL_PRDR
+  if (regex_PRDR == NULL) regex_PRDR =
+    regex_must_compile(US"\\n250[\\s\\-]PRDR(\\s|\\n|$)", FALSE, TRUE);
+  #endif
+
   /* Now sort the addresses if required, and do the deliveries. The yield of
   do_remote_deliveries is FALSE when mua_wrapper is set and all addresses
   cannot be delivered in one transaction. */
index 70d606e3e482a91027128b16a72d9f72c1bb09ae..911b940cd6181063753605a56683b85349a8af17 100644 (file)
@@ -150,6 +150,7 @@ uschar *tls_verify_hosts       = NULL;
 BOOL    prdr_enable            = TRUE;
 BOOL    prdr_requested         = FALSE;
 //recipient_item  *prdr_recipients_list = NULL;
+const pcre *regex_PRDR        = NULL;
 #endif
 
 /* Input-reading functions for messages, so we can use special ones for
index 1389a8bdb369595b538ec4f08717858b8ebc1e7d..a484bdd07fb096350ebf0d85dea0c1640ebbe6cd 100644 (file)
@@ -149,6 +149,7 @@ extern uschar *acl_smtp_connect;       /* ACL run on SMTP connection */
 extern uschar *acl_smtp_data;          /* ACL run after DATA received */
 #ifdef EXPERIMENTAL_PRDR
 extern uschar *acl_smtp_data_prdr;     /* ACL run after DATA received if in PRDR mode*/
+extern const pcre *regex_PRDR;         /* For recognizing PRDR settings */
 #endif
 #ifndef DISABLE_DKIM
 extern uschar *acl_smtp_dkim;          /* ACL run for DKIM signatures / domains */
index 6c3507609f2671e8c6b66284aecd2635cd67365a..505e0e8eea290e78401be4b799cb80ad0f154f58 100644 (file)
@@ -106,6 +106,10 @@ optionlist smtp_transport_options[] = {
 #endif
   { "hosts_try_auth",       opt_stringptr,
       (void *)offsetof(smtp_transport_options_block, hosts_try_auth) },
+#ifdef EXPERIMENTAL_PRDR
+  { "hosts_try_prdr",       opt_stringptr,
+      (void *)offsetof(smtp_transport_options_block, hosts_try_prdr) },
+#endif
 #ifdef SUPPORT_TLS
   { "hosts_verify_avoid_tls", opt_stringptr,
       (void *)offsetof(smtp_transport_options_block, hosts_verify_avoid_tls) },
@@ -172,6 +176,9 @@ smtp_transport_options_block smtp_transport_option_defaults = {
   NULL,                /* serialize_hosts */
   NULL,                /* hosts_try_auth */
   NULL,                /* hosts_require_auth */
+#ifdef EXPERIMENTAL_PRDR
+  NULL,                /* hosts_try_prdr */
+#endif
   NULL,                /* hosts_require_tls */
   NULL,                /* hosts_avoid_tls */
   US"*",               /* hosts_verify_avoid_tls */
@@ -1066,6 +1073,12 @@ goto SEND_QUIT;
     pcre_exec(regex_STARTTLS, NULL, CS buffer, Ustrlen(buffer), 0,
       PCRE_EOPT, NULL, 0) >= 0;
   #endif
+
+  #ifdef EXPERIMENTAL_PRDR
+  prdr_enable = esmtp &&
+    pcre_exec(regex_PRDR, NULL, CS buffer, Ustrlen(buffer), 0,
+      PCRE_EOPT, NULL, 0) >= 0;
+  #endif
   }
 
 /* For continuing deliveries down the same channel, the socket is the standard
index 79f1b8c50965e527eeea87295ae36f16aba31058..ef53292bc5ab36668ae9397d7edd5d30fa6f7a18 100644 (file)
@@ -21,6 +21,9 @@ typedef struct {
   uschar *serialize_hosts;
   uschar *hosts_try_auth;
   uschar *hosts_require_auth;
+#ifdef EXPERIMENTAL_PRDR
+  uschar *hosts_try_prdr;
+#endif
   uschar *hosts_require_tls;
   uschar *hosts_avoid_tls;
   uschar *hosts_verify_avoid_tls;