(1) $host_address now contains the target address when processing
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Thu, 11 Nov 2004 11:40:36 +0000 (11:40 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Thu, 11 Nov 2004 11:40:36 +0000 (11:40 +0000)
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.

doc/doc-txt/ChangeLog
doc/doc-txt/NewStuff
src/src/routers/ipliteral.c
src/src/verify.c

index d1c3802d9f62e8175415c78dc4dbf3bb0db7360d..03a41b4ddac66a63bc2ca0bb587fa0fdc4020395 100644 (file)
@@ -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
 -----------------
index 19150e85f555f67c79942418b1b91941003aeb7e..6de8938141f1b16386c79d65d158c11ec65e4e27 100644 (file)
@@ -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
index fa41cc41152cbab6c5a2cf26a3d2352858f359a1..25bdf4214727328a44107310cd2e69b60ad38b33 100644 (file)
@@ -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)
index 45a4c819db7a1276d61e9a9136850c3552e35897..de7a36642b71ee5d41c21ee374b5ce5fbf703924 100644 (file)
@@ -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; 
 }