X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fsrc%2Fdeliver.c;h=a598e2535693f2d23e50eea7893d9785aeb46e20;hb=3281c6ea0c270d7065608e47c915046c92f1dbf5;hp=d00af9c11a6e5cf1c2c1a3228df7ca946165cad1;hpb=a1bccd48f3956b50a13a34f5aed4b72c658c61af;p=exim.git diff --git a/src/src/deliver.c b/src/src/deliver.c index d00af9c11..a598e2535 100644 --- a/src/src/deliver.c +++ b/src/src/deliver.c @@ -716,6 +716,8 @@ d_tlslog(uschar * s, int * sizep, int * ptrp, address_item * addr) #endif + + #ifdef EXPERIMENTAL_TPDA int tpda_raise_event(uschar * action, uschar * event, uschar * ev_data) @@ -744,13 +746,38 @@ if (action) if (s && *s) { DEBUG(D_deliver) - debug_printf("TPDA(%s): event_action returned \"%s\"\n", s); + debug_printf("TPDA(%s): event_action returned \"%s\"\n", event, s); return DEFER; } } return OK; } -#endif + +static void +tpda_msg_event(uschar * event, address_item * addr) +{ +uschar * save_domain = deliver_domain; +uschar * save_local = deliver_localpart; + +if (!addr->transport) + return; + +router_name = addr->router ? addr->router->name : NULL; +transport_name = addr->transport->name; +deliver_domain = addr->domain; +deliver_localpart = addr->local_part; + +(void) tpda_raise_event(addr->transport->tpda_event_action, event, + addr->host_used || Ustrcmp(addr->transport->driver_name, "lmtp") == 0 + ? addr->message : NULL); + +deliver_localpart = save_local; +deliver_domain = save_domain; +router_name = transport_name = NULL; +} +#endif /*EXPERIMENTAL_TPDA*/ + + /* If msg is NULL this is a delivery log and logchar is used. Otherwise this is a nonstandard call; no two-character delivery flag is written @@ -910,24 +937,10 @@ s[ptr] = 0; log_write(0, flags, "%s", s); #ifdef EXPERIMENTAL_TPDA - { - uschar * save_domain = deliver_domain; - uschar * save_local = deliver_localpart; - - router_name = addr->router ? addr->router->name : NULL; - transport_name = addr->transport ? addr->transport->name : NULL; - deliver_domain = addr->domain; - deliver_localpart = addr->local_part; - - (void) tpda_raise_event(addr->transport->tpda_event_action, US"msg:delivery", - addr->host_used || Ustrcmp(addr->transport->driver_name, "lmtp") == 0 - ? addr->message : NULL); - - deliver_localpart = save_local; - deliver_domain = save_domain; - router_name = transport_name = NULL; - } +/*XXX cutthrough calls this also for non-delivery...*/ +tpda_msg_event(US"msg:delivery", addr); #endif + store_reset(reset_point); return; } @@ -1134,6 +1147,9 @@ if (result == OK) tls_out.cipher = addr->cipher; tls_out.peerdn = addr->peerdn; tls_out.ocsp = addr->ocsp; +# ifdef EXPERIMENTAL_DANE + tls_out.dane_verified = testflag(addr, af_dane_verified); +# endif #endif delivery_log(LOG_MAIN, addr, logchar, NULL); @@ -1152,6 +1168,9 @@ if (result == OK) tls_out.cipher = NULL; tls_out.peerdn = NULL; tls_out.ocsp = OCSP_NOT_REQ; +# ifdef EXPERIMENTAL_DANE + tls_out.dane_verified = FALSE; +# endif #endif } @@ -1355,6 +1374,11 @@ else deliver_msglog("%s %s\n", now, s); log_write(0, LOG_MAIN, "** %s", s); + +#ifdef EXPERIMENTAL_TPDA + tpda_msg_event(US"msg:fail:delivery", addr); +#endif + store_reset(reset_point); } @@ -5473,6 +5497,25 @@ if (process_recipients != RECIP_IGNORE) addr_last = new; break; } + +#ifdef EXPERIMENTAL_TPDA + if (process_recipients != RECIP_ACCEPT) + { + uschar * save_local = deliver_localpart; + uschar * save_domain = deliver_domain; + + deliver_localpart = expand_string( + string_sprintf("${local_part:%s}", new->address)); + deliver_domain = expand_string( + string_sprintf("${domain:%s}", new->address)); + + (void) tpda_raise_event(delivery_event_action, + US"msg:fail:internal", new->message); + + deliver_localpart = save_local; + deliver_domain = save_domain; + } +#endif } } } @@ -7230,7 +7273,11 @@ if (addr_defer == NULL) /* Unset deliver_freeze so that we won't try to move the spool files further down */ deliver_freeze = FALSE; - } + +#ifdef EXPERIMENTAL_TPDA + (void) tpda_raise_event(delivery_event_action, US"msg:complete", NULL); +#endif +} /* If there are deferred addresses, we are keeping this message because it is not yet completed. Lose any temporary files that were catching output from