summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Hazel <ph10@hermes.cam.ac.uk>2004-11-11 11:40:36 +0000
committerPhilip Hazel <ph10@hermes.cam.ac.uk>2004-11-11 11:40:36 +0000
commitd4eb88df5bdd76827decfbaed23341ba775fa03e (patch)
tree4d68bd9754ddcb4c113603e338c318921a949e35
parent981756dbc52b48a213522a9b0fcae82dfcf59352 (diff)
downloadexim4-d4eb88df5bdd76827decfbaed23341ba775fa03e.tar.gz
(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.
-rw-r--r--doc/doc-txt/ChangeLog11
-rw-r--r--doc/doc-txt/NewStuff5
-rw-r--r--src/src/routers/ipliteral.c4
-rw-r--r--src/src/verify.c27
4 files changed, 39 insertions, 8 deletions
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;
}