From: Philip Hazel Date: Thu, 11 Nov 2004 11:40:36 +0000 (+0000) Subject: (1) $host_address now contains the target address when processing X-Git-Tag: exim-4_50~113 X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=d4eb88df5bdd76827decfbaed23341ba775fa03e;p=exim.git (1) $host_address now contains the target address when processing ignore_target_hosts; (2) extremely unlikely bug in ipliteral router fixed: if ignore_target_hosts called for a host name, it wouldn't have worked. --- diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index d1c3802d9..03a41b4dd 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.21 2004/11/10 15:21:16 ph10 Exp $ +$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.22 2004/11/11 11:40:36 ph10 Exp $ Change log file for Exim from version 4.21 ------------------------------------------- @@ -77,6 +77,15 @@ Exim version 4.44 21. The rare case of EHLO->STARTTLS->HELO was setting the protocol to "smtp". It is now set to "smtps". +22. $host_address is now set to the target address during the checking of + ignore_target_hosts. + +23. When checking ignore_target_hosts for an ipliteral router, no host name was + being passed; this would have caused $sender_host_name to have been used if + matching the list had actually called for a host name (not very likely, + since this list is usually IP addresses). A host name is now passed as + "[x.x.x.x]". + Exim version 4.43 ----------------- diff --git a/doc/doc-txt/NewStuff b/doc/doc-txt/NewStuff index 19150e85f..6de893814 100644 --- a/doc/doc-txt/NewStuff +++ b/doc/doc-txt/NewStuff @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-txt/NewStuff,v 1.8 2004/11/10 10:29:56 ph10 Exp $ +$Cambridge: exim/doc/doc-txt/NewStuff,v 1.9 2004/11/11 11:40:36 ph10 Exp $ New Features in Exim -------------------- @@ -67,6 +67,9 @@ Version 4.44 monitoring the behaviour of the daemon without creating as much output as full debugging. + 9. $host_address is now set to the target address during the checking of + ignore_target_hosts. + Version 4.43 diff --git a/src/src/routers/ipliteral.c b/src/src/routers/ipliteral.c index fa41cc411..25bdf4214 100644 --- a/src/src/routers/ipliteral.c +++ b/src/src/routers/ipliteral.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/routers/ipliteral.c,v 1.1 2004/10/07 13:10:02 ph10 Exp $ */ +/* $Cambridge: exim/src/src/routers/ipliteral.c,v 1.2 2004/11/11 11:40:36 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -127,7 +127,7 @@ if (!string_is_ip_address(domain+1, NULL)) /* It seems unlikely that ignore_target_hosts will be used with this router, but if it is set, it should probably work. */ -if (verify_check_this_host(&(rblock->ignore_target_hosts), NULL, NULL, +if (verify_check_this_host(&(rblock->ignore_target_hosts), NULL, domain, domain + 1, NULL) == OK) { DEBUG(D_route) diff --git a/src/src/verify.c b/src/src/verify.c index 45a4c819d..de7a36642 100644 --- a/src/src/verify.c +++ b/src/src/verify.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/verify.c,v 1.3 2004/11/05 16:53:28 ph10 Exp $ */ +/* $Cambridge: exim/src/src/verify.c,v 1.4 2004/11/11 11:40:36 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -2050,7 +2050,9 @@ int verify_check_this_host(uschar **listptr, unsigned int *cache_bits, uschar *host_name, uschar *host_address, uschar **valueptr) { +int rc; unsigned int *local_cache_bits = cache_bits; +uschar *save_host_address = deliver_host_address; check_host_block cb; cb.host_name = host_name; cb.host_address = host_address; @@ -2064,9 +2066,26 @@ addresses. */ cb.host_ipv4 = (Ustrncmp(host_address, "::ffff:", 7) == 0)? host_address + 7 : host_address; -return match_check_list(listptr, 0, &hostlist_anchor, &local_cache_bits, - check_host, &cb, MCL_HOST, - (host_address == sender_host_address)? US"host" : host_address, valueptr); +/* During the running of the check, put the IP address into $host_address. In +the case of calls from the smtp transport, it will already be there. However, +in other calls (e.g. when testing ignore_target_hosts), it won't. Just to be on +the safe side, any existing setting is preserved, though as I write this +(November 2004) I can't see any cases where it is actually needed. */ + +deliver_host_address = host_address; +rc = match_check_list( + listptr, /* the list */ + 0, /* separator character */ + &hostlist_anchor, /* anchor pointer */ + &local_cache_bits, /* cache pointer */ + check_host, /* function for testing */ + &cb, /* argument for function */ + MCL_HOST, /* type of check */ + (host_address == sender_host_address)? + US"host" : host_address, /* text for debugging */ + valueptr); /* where to pass back data */ +deliver_host_address = save_host_address; +return rc; }