Rename feature to "Transport Post-Delivery Actions"
[users/jgh/exim.git] / src / src / transports / smtp.c
index ac24f5f09ab3a4a0e4b82ec49855f3551cd455b4..d37b2a3dca16eda508db38593a7c4022afafe40b 100644 (file)
@@ -35,10 +35,6 @@ optionlist smtp_transport_options[] = {
       (void *)offsetof(transport_instance, connection_max_messages) },
   { "data_timeout",         opt_time,
       (void *)offsetof(smtp_transport_options_block, data_timeout) },
-#ifdef EXPERIMENTAL_DBL
-  { "dbl_host_defer_query",      opt_stringptr,
-         (void *)offsetof(smtp_transport_options_block, dbl_host_defer_query) },
-#endif
   { "delay_after_cutoff", opt_bool,
       (void *)offsetof(smtp_transport_options_block, delay_after_cutoff) },
 #ifndef DISABLE_DKIM
@@ -160,6 +156,10 @@ optionlist smtp_transport_options[] = {
   { "tls_verify_certificates", opt_stringptr,
       (void *)offsetof(smtp_transport_options_block, tls_verify_certificates) }
 #endif
+#ifdef EXPERIMENTAL_TPDA
+ ,{ "tpda_host_defer_action", opt_stringptr,
+         (void *)offsetof(smtp_transport_options_block, tpda_host_defer_action) },
+#endif
 };
 
 /* Size of the options list. An extern variable has to be used so that its
@@ -237,8 +237,8 @@ smtp_transport_options_block smtp_transport_option_defaults = {
   NULL,                /* dkim_sign_headers */
   NULL                 /* dkim_strict */
 #endif
-#ifdef EXPERIMENTAL_DBL
- ,NULL                 /* dbl_host_defer_query */
+#ifdef EXPERIMENTAL_TPDA
+ ,NULL                 /* tpda_host_defer_action */
 #endif
 };
 
@@ -584,16 +584,16 @@ else
 
 
 
-#ifdef EXPERIMENTAL_DBL
+#ifdef EXPERIMENTAL_TPDA
 /*************************************************
-*          Write error message to database log   *
+*   Post-defer action                            *
 *************************************************/
 
 /* This expands an arbitrary per-transport string.
    It might, for example, be used to write to the database log.
 
 Arguments:
-  dbl_host_defer_query  dbl_host_defer_query from the transport options block
+  ob                    transport options block
   addr                  the address item containing error information
   host                  the current host
 
@@ -601,33 +601,34 @@ Returns:   nothing
 */
 
 static void
-dbl_write_defer_log(uschar *dbl_host_defer_query, address_item *addr, host_item *host)
+tpda_deferred(smtp_transport_options_block *ob, address_item *addr, host_item *host)
 {
-if (dbl_host_defer_query == NULL)
+uschar *action = ob->tpda_host_defer_action;
+if (!action)
        return;
 
-dbl_delivery_ip = string_copy(host->address);
-dbl_delivery_port = (host->port == PORT_NONE)? 25 : host->port;
-dbl_delivery_fqdn = string_copy(host->name);
-dbl_delivery_local_part = string_copy(addr->local_part);
-dbl_delivery_domain = string_copy(addr->domain);
-dbl_defer_errno = addr->basic_errno;
-
-dbl_defer_errstr = (addr->message != NULL)
-  ? (addr->basic_errno > 0)
-  ? string_sprintf("%s: %s", addr->message, strerror(addr->basic_errno))
-  : string_copy(addr->message)
-  : (addr->basic_errno > 0)
-  ? string_copy(strerror(addr->basic_errno))
-  : NULL;
-
-DEBUG(D_transport) {
-       debug_printf("  DBL(host defer): dbl_host_defer_query=|%s| dbl_delivery_IP=%s\n", dbl_host_defer_query, dbl_delivery_ip);
-}
+tpda_delivery_ip =         string_copy(host->address);
+tpda_delivery_port =       (host->port == PORT_NONE)? 25 : host->port;
+tpda_delivery_fqdn =       string_copy(host->name);
+tpda_delivery_local_part = string_copy(addr->local_part);
+tpda_delivery_domain =     string_copy(addr->domain);
+tpda_defer_errno =         addr->basic_errno;
+
+tpda_defer_errstr = addr->message
+  ? addr->basic_errno > 0
+    ? string_sprintf("%s: %s", addr->message, strerror(addr->basic_errno))
+    : string_copy(addr->message)
+  : addr->basic_errno > 0
+    ? string_copy(strerror(addr->basic_errno))
+    : NULL;
+
+DEBUG(D_transport)
+  debug_printf("  TPDA(host defer): tpda_host_defer_action=|%s| tpda_delivery_IP=%s\n",
+    action, tpda_delivery_ip);
 
 router_name =    addr->router->name;
 transport_name = addr->transport->name;
-expand_string(dbl_host_defer_query);
+expand_string(action);
 router_name = transport_name = NULL;
 }
 #endif
@@ -1970,7 +1971,7 @@ if (!ok) ok = TRUE; else
     /* Set up confirmation if needed - applies only to SMTP */
 
     if (
-               #ifndef EXPERIMENTAL_DBL
+               #ifndef EXPERIMENTAL_TPDA
                        (log_extra_selector & LX_smtp_confirmation) != 0 &&
                #endif
                        !lmtp
@@ -3113,9 +3114,9 @@ for (cutoff_retry = 0; expired &&
                          first_addr->basic_errno != ERRNO_TLSFAILURE)
         write_logs(first_addr, host);
 
-      #ifdef EXPERIMENTAL_DBL
+      #ifdef EXPERIMENTAL_TPDA
       if (rc == DEFER)
-        dbl_write_defer_log(ob->dbl_host_defer_query, first_addr, host);
+        tpda_deferred(ob, first_addr, host);
       #endif
 
       /* If STARTTLS was accepted, but there was a failure in setting up the
@@ -3140,9 +3141,9 @@ for (cutoff_retry = 0; expired &&
           expanded_hosts != NULL, &message_defer, TRUE);
         if (rc == DEFER && first_addr->basic_errno != ERRNO_AUTHFAIL)
           write_logs(first_addr, host);
-        #ifdef EXPERIMENTAL_DBL
+        #ifdef EXPERIMENTAL_TPDA
         if (rc == DEFER)
-          dbl_write_defer_log(ob->dbl_host_defer_query, first_addr, host);
+          tpda_deferred(ob, first_addr, host);
         #endif
         }
       #endif