[exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog NewSt…

Top Page
Delete this message
Reply to this message
Author: Philip Hazel
Date:  
To: exim-cvs
Subject: [exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog NewStuff exim/exim-src/src acl.c functions.h globals.c globals.h smtp_in.c exim/exim-test-orig/AutoTest/confs 051 exim/exim-test-orig/AutoTest/
ph10 2005/08/02 16:19:21 BST

  Modified files:
    exim-doc/doc-txt     ChangeLog NewStuff 
    exim-src/src         acl.c functions.h globals.c globals.h 
                         smtp_in.c 
    exim-test-orig/AutoTest/confs 051 
    exim-test-orig/AutoTest/scripts 051 
    exim-test-orig/AutoTest/stderr 051 445 466 470 
    exim-test-orig/AutoTest/stdout 051 
  Log:
  Make verify=helo do the verification on the fly it if was not done
  earlier, like $sender_host_name handling.


  Revision  Changes    Path
  1.196     +6 -0      exim/exim-doc/doc-txt/ChangeLog
  1.61      +6 -0      exim/exim-doc/doc-txt/NewStuff
  1.43      +6 -2      exim/exim-src/src/acl.c
  1.18      +1 -0      exim/exim-src/src/functions.h
  1.33      +1 -0      exim/exim-src/src/globals.c
  1.24      +1 -0      exim/exim-src/src/globals.h
  1.22      +131 -95   exim/exim-src/src/smtp_in.c
  1.2       +3 -1      exim/exim-test-orig/AutoTest/confs/051
  1.2       +23 -0     exim/exim-test-orig/AutoTest/scripts/051
  1.2       +88 -8     exim/exim-test-orig/AutoTest/stderr/051
  1.2       +2 -2      exim/exim-test-orig/AutoTest/stderr/445
  1.6       +2 -0      exim/exim-test-orig/AutoTest/stderr/466
  1.9       +2 -0      exim/exim-test-orig/AutoTest/stderr/470
  1.2       +34 -0     exim/exim-test-orig/AutoTest/stdout/051


  Index: ChangeLog
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
  retrieving revision 1.195
  retrieving revision 1.196
  diff -u -r1.195 -r1.196
  --- ChangeLog    2 Aug 2005 13:43:04 -0000    1.195
  +++ ChangeLog    2 Aug 2005 15:19:20 -0000    1.196
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.195 2005/08/02 13:43:04 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.196 2005/08/02 15:19:20 ph10 Exp $


   Change log file for Exim from version 4.21
   -------------------------------------------
  @@ -49,6 +49,12 @@
         run a filter in a subprocess. This could lead to confusion in subsequent
         lookups in the parent process. There should also be a search_tidyup() at
         the end of the subprocess.
  +
  +PH/13 Previously, if "verify = helo" was set in an ACL, the condition was true
  +      only if the host matched helo_try_verify_hosts, which caused the
  +      verification to occur when the EHLO/HELO command was issued. The ACL just
  +      tested the remembered result. Now, if a previous verification attempt has
  +      not happened, "verify = helo" does it there and then.



Exim version 4.52

  Index: NewStuff
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/NewStuff,v
  retrieving revision 1.60
  retrieving revision 1.61
  diff -u -r1.60 -r1.61
  --- NewStuff    2 Aug 2005 11:22:23 -0000    1.60
  +++ NewStuff    2 Aug 2005 15:19:20 -0000    1.61
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.60 2005/08/02 11:22:23 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.61 2005/08/02 15:19:20 ph10 Exp $


   New Features in Exim
   --------------------
  @@ -61,6 +61,12 @@
         "IGNOREQUOTA" is added to RCPT commands when using the LMTP protocol,
         provided that the server has advertised support for IGNOREQUOTA in its
         response to the LHLO command.
  +
  +PH/05 Previously, if "verify = helo" was set in an ACL, the condition was true
  +      only if the host matched helo_try_verify_hosts, which caused the
  +      verification to occur when the EHLO/HELO command was issued. The ACL just
  +      tested the remembered result. Now, if a previous verification attempt has
  +      not happened, "verify = helo" does it there and then.



Exim version 4.52

  Index: acl.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/acl.c,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- acl.c    23 Jul 2005 20:46:42 -0000    1.42
  +++ acl.c    2 Aug 2005 15:19:20 -0000    1.43
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/acl.c,v 1.42 2005/07/23 20:46:42 tom Exp $ */
  +/* $Cambridge: exim/exim-src/src/acl.c,v 1.43 2005/08/02 15:19:20 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -1376,12 +1376,16 @@
     return FAIL;
     }


-/* We can test the result of optional HELO verification */
+/* We can test the result of optional HELO verification that might have
+occurred earlier. If not, we can attempt the verification now. */

   if (strcmpic(ss, US"helo") == 0)
     {
     if (slash != NULL) goto NO_OPTIONS;
  -  return helo_verified? OK : FAIL;
  +  if (helo_verified) return OK;
  +  if (helo_verify_failed) return FAIL;
  +  if (smtp_verify_helo()) return helo_verified? OK : FAIL;
  +  return DEFER;
     }


/* Do Client SMTP Authorization checks in a separate function, and turn the

  Index: functions.h
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/functions.h,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- functions.h    22 Jun 2005 10:17:23 -0000    1.17
  +++ functions.h    2 Aug 2005 15:19:20 -0000    1.18
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/functions.h,v 1.17 2005/06/22 10:17:23 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/functions.h,v 1.18 2005/08/02 15:19:20 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -268,6 +268,7 @@
   extern int     smtp_setup_msg(void);
   extern BOOL    smtp_start_session(void);
   extern int     smtp_ungetc(int);
  +extern BOOL    smtp_verify_helo(void);
   extern int     smtp_write_command(smtp_outblock *, BOOL, char *, ...);
   #ifdef WITH_CONTENT_SCAN
   extern int     spam(uschar **);


  Index: globals.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/globals.c,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- globals.c    2 Aug 2005 11:22:24 -0000    1.32
  +++ globals.c    2 Aug 2005 15:19:20 -0000    1.33
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/globals.c,v 1.32 2005/08/02 11:22:24 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/globals.c,v 1.33 2005/08/02 15:19:20 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -569,6 +569,7 @@
   uschar *helo_lookup_domains    = US"@ : @[]";
   uschar *helo_try_verify_hosts  = NULL;
   BOOL    helo_verified          = FALSE;
  +BOOL    helo_verify_failed     = FALSE;
   uschar *helo_verify_hosts      = NULL;
   uschar *hex_digits             = US"0123456789abcdef";
   uschar *hold_domains           = NULL;


  Index: globals.h
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/globals.h,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- globals.h    2 Aug 2005 11:22:24 -0000    1.23
  +++ globals.h    2 Aug 2005 15:19:20 -0000    1.24
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/globals.h,v 1.23 2005/08/02 11:22:24 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/globals.h,v 1.24 2005/08/02 15:19:20 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -343,6 +343,7 @@
   extern uschar *helo_lookup_domains;    /* If these given, lookup host name */
   extern uschar *helo_try_verify_hosts;  /* Soft check HELO argument for these */
   extern BOOL    helo_verified;          /* True if HELO verified */
  +extern BOOL    helo_verify_failed;     /* True if attempt failed */
   extern uschar *helo_verify_hosts;      /* Hard check HELO argument for these */
   extern uschar *hex_digits;             /* Used in several places */
   extern uschar *hold_domains;           /* Hold up deliveries to these */


  Index: smtp_in.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/smtp_in.c,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- smtp_in.c    2 Aug 2005 08:25:45 -0000    1.21
  +++ smtp_in.c    2 Aug 2005 15:19:20 -0000    1.22
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/smtp_in.c,v 1.21 2005/08/02 08:25:45 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/smtp_in.c,v 1.22 2005/08/02 15:19:20 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -1933,6 +1933,130 @@



   /*************************************************
  +*             Verify HELO argument               *
  +*************************************************/
  +
  +/* This function is called if helo_verify_hosts or helo_try_verify_hosts is
  +matched. It is also called from ACL processing if verify = helo is used and
  +verification was not previously tried (i.e. helo_try_verify_hosts was not
  +matched). The result of its processing is to set helo_verified and
  +helo_verify_failed. These variables should both be FALSE for this function to
  +be called.
  +
  +Note that EHLO/HELO is legitimately allowed to quote an address literal. Allow
  +for IPv6 ::ffff: literals.
  +
  +Argument:   none
  +Returns:    TRUE if testing was completed;
  +            FALSE on a temporary failure
  +*/
  +
  +BOOL
  +smtp_verify_helo(void)
  +{
  +BOOL yield = TRUE;
  +
  +HDEBUG(D_receive) debug_printf("verifying EHLO/HELO argument \"%s\"\n",
  +  sender_helo_name);
  +
  +if (sender_helo_name == NULL)
  +  {
  +  HDEBUG(D_receive) debug_printf("no EHLO/HELO command was issued\n");
  +  }
  +
  +else if (sender_helo_name[0] == '[')
  +  {
  +  helo_verified = Ustrncmp(sender_helo_name+1, sender_host_address,
  +    Ustrlen(sender_host_address)) == 0;
  +
  +  #if HAVE_IPV6
  +  if (!helo_verified)
  +    {
  +    if (strncmpic(sender_host_address, US"::ffff:", 7) == 0)
  +      helo_verified = Ustrncmp(sender_helo_name + 1,
  +        sender_host_address + 7, Ustrlen(sender_host_address) - 7) == 0;
  +    }
  +  #endif
  +
  +  HDEBUG(D_receive)
  +    { if (helo_verified) debug_printf("matched host address\n"); }
  +  }
  +
  +/* Do a reverse lookup if one hasn't already given a positive or negative
  +response. If that fails, or the name doesn't match, try checking with a forward
  +lookup. */
  +
  +else
  +  {
  +  if (sender_host_name == NULL && !host_lookup_failed)
  +    yield = host_name_lookup() != DEFER;
  +
  +  /* If a host name is known, check it and all its aliases. */
  +
  +  if (sender_host_name != NULL)
  +    {
  +    helo_verified = strcmpic(sender_host_name, sender_helo_name) == 0;
  +
  +    if (helo_verified)
  +      {
  +      HDEBUG(D_receive) debug_printf("matched host name\n");
  +      }
  +    else
  +      {
  +      uschar **aliases = sender_host_aliases;
  +      while (*aliases != NULL)
  +        {
  +        helo_verified = strcmpic(*aliases++, sender_helo_name) == 0;
  +        if (helo_verified) break;
  +        }
  +      HDEBUG(D_receive)
  +        {
  +        if (helo_verified)
  +          debug_printf("matched alias %s\n", *(--aliases));
  +        }
  +      }
  +    }
  +
  +  /* Final attempt: try a forward lookup of the helo name */
  +
  +  if (!helo_verified)
  +    {
  +    int rc;
  +    host_item h;
  +    h.name = sender_helo_name;
  +    h.address = NULL;
  +    h.mx = MX_NONE;
  +    h.next = NULL;
  +    HDEBUG(D_receive) debug_printf("getting IP address for %s\n",
  +      sender_helo_name);
  +    rc = host_find_byname(&h, NULL, NULL, TRUE);
  +    if (rc == HOST_FOUND || rc == HOST_FOUND_LOCAL)
  +      {
  +      host_item *hh = &h;
  +      while (hh != NULL)
  +        {
  +        if (Ustrcmp(hh->address, sender_host_address) == 0)
  +          {
  +          helo_verified = TRUE;
  +          HDEBUG(D_receive)
  +            debug_printf("IP address for %s matches calling address\n",
  +              sender_helo_name);
  +          break;
  +          }
  +        hh = hh->next;
  +        }
  +      }
  +    }
  +  }
  +
  +if (!helo_verified) helo_verify_failed = FALSE;  /* We've tried ... */
  +return yield;
  +}
  +
  +
  +
  +
  +/*************************************************
   *       Initialize for SMTP incoming message     *
   *************************************************/


  @@ -2282,104 +2406,16 @@
           (tls_active >= 0)? " TLS" : "", host_and_ident(FALSE));


         /* Verify if configured. This doesn't give much security, but it does
  -      make some people happy to be able to do it. Note that HELO is legitimately
  -      allowed to quote an address literal. Allow for IPv6 ::ffff: literals. */
  +      make some people happy to be able to do it. If helo_required is set,
  +      (host matches helo_verify_hosts) failure forces rejection. If helo_verify
  +      is set (host matches helo_try_verify_hosts), it does not. This is perhaps
  +      now obsolescent, since the verification can now be requested selectively
  +      at ACL time. */


  -      helo_verified = FALSE;
  +      helo_verified = helo_verify_failed = FALSE;
         if (helo_required || helo_verify)
           {
  -        BOOL tempfail = FALSE;
  -
  -        HDEBUG(D_receive) debug_printf("verifying %s %s\n", hello,
  -          sender_helo_name);
  -        if (sender_helo_name[0] == '[')
  -          {
  -          helo_verified = Ustrncmp(sender_helo_name+1, sender_host_address,
  -            Ustrlen(sender_host_address)) == 0;
  -
  -          #if HAVE_IPV6
  -          if (!helo_verified)
  -            {
  -            if (strncmpic(sender_host_address, US"::ffff:", 7) == 0)
  -              helo_verified = Ustrncmp(sender_helo_name + 1,
  -                sender_host_address + 7, Ustrlen(sender_host_address) - 7) == 0;
  -            }
  -          #endif
  -
  -          HDEBUG(D_receive)
  -            { if (helo_verified) debug_printf("matched host address\n"); }
  -          }
  -
  -        /* Do a reverse lookup if one hasn't already given a positive or
  -        negative response. If that fails, or the name doesn't match, try
  -        checking with a forward lookup. */
  -
  -        else
  -          {
  -          if (sender_host_name == NULL && !host_lookup_failed)
  -            tempfail = host_name_lookup() == DEFER;
  -
  -          /* If a host name is known, check it and all its aliases. */
  -
  -          if (sender_host_name != NULL)
  -            {
  -            helo_verified = strcmpic(sender_host_name, sender_helo_name) == 0;
  -
  -            if (helo_verified)
  -              {
  -              HDEBUG(D_receive) debug_printf("matched host name\n");
  -              }
  -            else
  -              {
  -              uschar **aliases = sender_host_aliases;
  -              while (*aliases != NULL)
  -                {
  -                helo_verified = strcmpic(*aliases++, sender_helo_name) == 0;
  -                if (helo_verified) break;
  -                }
  -              HDEBUG(D_receive)
  -                {
  -                if (helo_verified)
  -                  debug_printf("matched alias %s\n", *(--aliases));
  -                }
  -              }
  -            }
  -
  -          /* Final attempt: try a forward lookup of the helo name */
  -
  -          if (!helo_verified)
  -            {
  -            int rc;
  -            host_item h;
  -            h.name = sender_helo_name;
  -            h.address = NULL;
  -            h.mx = MX_NONE;
  -            h.next = NULL;
  -            HDEBUG(D_receive) debug_printf("getting IP address for %s\n",
  -              sender_helo_name);
  -            rc = host_find_byname(&h, NULL, NULL, TRUE);
  -            if (rc == HOST_FOUND || rc == HOST_FOUND_LOCAL)
  -              {
  -              host_item *hh = &h;
  -              while (hh != NULL)
  -                {
  -                if (Ustrcmp(hh->address, sender_host_address) == 0)
  -                  {
  -                  helo_verified = TRUE;
  -                  HDEBUG(D_receive)
  -                    debug_printf("IP address for %s matches calling address\n",
  -                      sender_helo_name);
  -                  break;
  -                  }
  -                hh = hh->next;
  -                }
  -              }
  -            }
  -          }
  -
  -        /* Verification failed. A temporary lookup failure gives a temporary
  -        error. */
  -
  +        BOOL tempfail = !smtp_verify_helo();
           if (!helo_verified)
             {
             if (helo_required)


  Index: 051
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/confs/051,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 051    8 Oct 2004 14:49:15 -0000    1.1
  +++ 051    2 Aug 2005 15:19:20 -0000    1.2
  @@ -1,5 +1,7 @@
   # Exim test configuration 051


+HVH=
+
# Macros are set externally in order to get the path
# of the Exim that is being tested, and the directory
# in which the test data lives.
@@ -11,7 +13,7 @@
# ----- Main settings -----

acl_smtp_rcpt = rcpt
-helo_verify_hosts = ten-1.test.ex : ten-3.test.ex : 99.99.99.99
+helo_verify_hosts = ten-1.test.ex : ten-3.test.ex : HVH
helo_try_verify_hosts = ten-2.test.ex
log_selector = -host_lookup_failed


  Index: 051
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/scripts/051,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 051    8 Oct 2004 14:49:52 -0000    1.1
  +++ 051    2 Aug 2005 15:19:20 -0000    1.2
  @@ -6,6 +6,7 @@
   0
   exim -bh 10.0.0.13
   mail from:<ph10@???>
  +rcpt to:<a@b>
   quit
   ****
   0
  @@ -41,7 +42,29 @@
   ****
   # This is a special IP address that provokes a temporary lookup failure
   0
  +exim -DHVH=99.99.99.99 -bh 99.99.99.99
  +ehlo rhubarb
  +quit
  +****
  +0
  +exim -bh 10.0.0.13
  +helo [10.0.0.99]
  +mail from:<a@b>
  +rcpt to:<c@d>
  +quit
  +****
  +0
  +exim -bh 10.0.0.13
  +helo [10.0.0.13]
  +mail from:<a@b>
  +rcpt to:<c@d>
  +quit
  +****
  +# Temporary lookup when not in helo_try_verify_hosts
  +0
   exim -bh 99.99.99.99
   ehlo rhubarb
  +mail from:<a@b>
  +rcpt to:<c@d>
   quit
   ****


  Index: 051
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/stderr/051,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 051    8 Oct 2004 14:50:08 -0000    1.1
  +++ 051    2 Aug 2005 15:19:20 -0000    1.2
  @@ -22,6 +22,13 @@
   >>>   name=ten-2.test.ex address=10.0.0.2
   >>> host in helo_try_verify_hosts? no (end of list)
   >>> host in helo_accept_junk_hosts? no (option unset)
  +>>> using ACL "rcpt"
  +>>> processing "require"
  +>>> check verify = helo
  +>>> verifying EHLO/HELO argument "NULL"
  +>>> no EHLO/HELO command was issued
  +>>> require: condition test failed
  +LOG: H=[10.0.0.13] F=<ph10@???> rejected RCPT <a@b>: helo not verified
   >>> host in hosts_connection_nolog? no (option unset)
   >>> host in host_lookup? no (option unset)
   >>> host in host_reject_connection? no (option unset)
  @@ -37,11 +44,12 @@
   >>> host in helo_try_verify_hosts? yes (matched "ten-2.test.ex")
   >>> host in helo_accept_junk_hosts? no (option unset)
   >>> [10.0.0.1] in helo_lookup_domains? no (end of list)
  ->>> verifying HELO [10.0.0.1]
  +>>> verifying EHLO/HELO argument "[10.0.0.1]"
   >>> HELO verification failed but host is in helo_try_verify_hosts
   >>> using ACL "rcpt"
   >>> processing "require"
   >>> check verify = helo
  +>>> verifying EHLO/HELO argument "[10.0.0.1]"
   >>> require: condition test failed
   LOG: H=([10.0.0.1]) [10.0.0.2] F=<a@b> rejected RCPT <c@d>: helo not verified
   >>> host in hosts_connection_nolog? no (option unset)
  @@ -59,7 +67,7 @@
   >>> host in helo_try_verify_hosts? yes (matched "ten-2.test.ex")
   >>> host in helo_accept_junk_hosts? no (option unset)
   >>> [10.0.0.2] in helo_lookup_domains? no (end of list)
  ->>> verifying HELO [10.0.0.2]
  +>>> verifying EHLO/HELO argument "[10.0.0.2]"
   >>> matched host address
   >>> using ACL "rcpt"
   >>> processing "require"
  @@ -78,7 +86,7 @@
   >>> host in helo_verify_hosts? yes (matched "ten-1.test.ex")
   >>> host in helo_accept_junk_hosts? no (option unset)
   >>> ten-1.test.ex in helo_lookup_domains? no (end of list)
  ->>> verifying HELO ten-1.test.ex
  +>>> verifying EHLO/HELO argument "ten-1.test.ex"
   >>> looking up host name for 10.0.0.1
   >>> IP address lookup yielded ten-1.test.ex
   >>> gethostbyname2 looked up these IP addresses:
  @@ -98,7 +106,7 @@
   >>> host in helo_verify_hosts? yes (matched "ten-3.test.ex")
   >>> host in helo_accept_junk_hosts? no (option unset)
   >>> ten-3.test.ex in helo_lookup_domains? no (end of list)
  ->>> verifying HELO ten-3.test.ex
  +>>> verifying EHLO/HELO argument "ten-3.test.ex"
   >>> looking up host name for 10.0.0.3
   >>> IP address lookup yielded ten-3.test.ex
   >>>   alias ten-3-alias.test.ex
  @@ -112,9 +120,9 @@
   >>>   10.0.0.3 OK
   >>> matched host name
   >>> host in smtp_accept_max_nonmail_hosts? yes (matched "*")
  ->>> verifying HELO ten-3-alias.test.ex
  +>>> verifying EHLO/HELO argument "ten-3-alias.test.ex"
   >>> matched alias ten-3-alias.test.ex
  ->>> verifying HELO ten-3xtra.test.ex
  +>>> verifying EHLO/HELO argument "ten-3xtra.test.ex"
   >>> getting IP address for ten-3xtra.test.ex
   >>> gethostbyname2 looked up these IP addresses:
   >>>   name=ten-3xtra.test.ex address=10.0.0.3
  @@ -129,7 +137,7 @@
   >>> host in helo_verify_hosts? yes (matched "ten-1.test.ex")
   >>> host in helo_accept_junk_hosts? no (option unset)
   >>> rhubarb in helo_lookup_domains? no (end of list)
  ->>> verifying EHLO rhubarb
  +>>> verifying EHLO/HELO argument "rhubarb"
   >>> looking up host name for 10.0.0.1
   >>> IP address lookup yielded ten-1.test.ex
   >>> gethostbyname2 looked up these IP addresses:
  @@ -151,9 +159,81 @@
   >>> host in helo_verify_hosts? yes (matched "99.99.99.99")
   >>> host in helo_accept_junk_hosts? no (option unset)
   >>> rhubarb in helo_lookup_domains? no (end of list)
  ->>> verifying EHLO rhubarb
  +>>> verifying EHLO/HELO argument "rhubarb"
   >>> looking up host name for 99.99.99.99
   >>> Test harness: host name lookup returns DEFER
   >>> getting IP address for rhubarb
   >>> no IP address found for host rhubarb (during SMTP connection from (rhubarb) [99.99.99.99])
   LOG: temporarily rejected "EHLO rhubarb" from (rhubarb) [99.99.99.99]
  +>>> host in hosts_connection_nolog? no (option unset)
  +>>> host in host_lookup? no (option unset)
  +>>> host in host_reject_connection? no (option unset)
  +>>> host in sender_unqualified_hosts? no (option unset)
  +>>> host in recipient_unqualified_hosts? no (option unset)
  +>>> gethostbyname2 looked up these IP addresses:
  +>>>   name=ten-1.test.ex address=10.0.0.1
  +>>> gethostbyname2 looked up these IP addresses:
  +>>>   name=ten-3.test.ex address=10.0.0.3
  +>>> host in helo_verify_hosts? no (end of list)
  +>>> gethostbyname2 looked up these IP addresses:
  +>>>   name=ten-2.test.ex address=10.0.0.2
  +>>> host in helo_try_verify_hosts? no (end of list)
  +>>> host in helo_accept_junk_hosts? no (option unset)
  +>>> [10.0.0.99] in helo_lookup_domains? no (end of list)
  +>>> using ACL "rcpt"
  +>>> processing "require"
  +>>> check verify = helo
  +>>> verifying EHLO/HELO argument "[10.0.0.99]"
  +>>> require: condition test failed
  +LOG: H=([10.0.0.99]) [10.0.0.13] F=<a@b> rejected RCPT <c@d>: helo not verified
  +>>> host in hosts_connection_nolog? no (option unset)
  +>>> host in host_lookup? no (option unset)
  +>>> host in host_reject_connection? no (option unset)
  +>>> host in sender_unqualified_hosts? no (option unset)
  +>>> host in recipient_unqualified_hosts? no (option unset)
  +>>> gethostbyname2 looked up these IP addresses:
  +>>>   name=ten-1.test.ex address=10.0.0.1
  +>>> gethostbyname2 looked up these IP addresses:
  +>>>   name=ten-3.test.ex address=10.0.0.3
  +>>> host in helo_verify_hosts? no (end of list)
  +>>> gethostbyname2 looked up these IP addresses:
  +>>>   name=ten-2.test.ex address=10.0.0.2
  +>>> host in helo_try_verify_hosts? no (end of list)
  +>>> host in helo_accept_junk_hosts? no (option unset)
  +>>> [10.0.0.13] in helo_lookup_domains? no (end of list)
  +>>> using ACL "rcpt"
  +>>> processing "require"
  +>>> check verify = helo
  +>>> verifying EHLO/HELO argument "[10.0.0.13]"
  +>>> matched host address
  +>>> require: condition test succeeded
  +>>> processing "deny"
  +>>> deny: condition test succeeded
  +LOG: H=([10.0.0.13]) [10.0.0.13] F=<a@b> rejected RCPT <c@d>: helo did verify
  +>>> host in hosts_connection_nolog? no (option unset)
  +>>> host in host_lookup? no (option unset)
  +>>> host in host_reject_connection? no (option unset)
  +>>> host in sender_unqualified_hosts? no (option unset)
  +>>> host in recipient_unqualified_hosts? no (option unset)
  +>>> gethostbyname2 looked up these IP addresses:
  +>>>   name=ten-1.test.ex address=10.0.0.1
  +>>> gethostbyname2 looked up these IP addresses:
  +>>>   name=ten-3.test.ex address=10.0.0.3
  +>>> host in helo_verify_hosts? no (end of list)
  +>>> gethostbyname2 looked up these IP addresses:
  +>>>   name=ten-2.test.ex address=10.0.0.2
  +>>> host in helo_try_verify_hosts? no (end of list)
  +>>> host in helo_accept_junk_hosts? no (option unset)
  +>>> rhubarb in helo_lookup_domains? no (end of list)
  +>>> host in pipelining_advertise_hosts? yes (matched "*")
  +>>> host in tls_advertise_hosts? no (option unset)
  +>>> using ACL "rcpt"
  +>>> processing "require"
  +>>> check verify = helo
  +>>> verifying EHLO/HELO argument "rhubarb"
  +>>> looking up host name for 99.99.99.99
  +>>> Test harness: host name lookup returns DEFER
  +>>> getting IP address for rhubarb
  +>>> no IP address found for host rhubarb (during SMTP connection from (rhubarb) [99.99.99.99])
  +>>> require: condition test deferred
  +LOG: H=(rhubarb) [99.99.99.99] F=<a@b> temporarily rejected RCPT <c@d>


  Index: 445
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/stderr/445,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 445    8 Oct 2004 14:50:08 -0000    1.1
  +++ 445    2 Aug 2005 15:19:20 -0000    1.2
  @@ -6,13 +6,13 @@
   >>> host in helo_verify_hosts? yes (matched "*")
   >>> host in helo_accept_junk_hosts? no (option unset)
   >>> [10.9.8.7] in helo_lookup_domains? no (end of list)
  ->>> verifying EHLO [10.9.8.7]
  +>>> verifying EHLO/HELO argument "[10.9.8.7]"
   >>> matched host address
   >>> host in pipelining_advertise_hosts? yes (matched "*")
   >>> host in tls_advertise_hosts? no (option unset)
   >>> host in smtp_accept_max_nonmail_hosts? yes (matched "*")
   >>> [1.2.3.4] in helo_lookup_domains? no (end of list)
  ->>> verifying EHLO [1.2.3.4]
  +>>> verifying EHLO/HELO argument "[1.2.3.4]"
   LOG: rejected "EHLO [1.2.3.4]" from ([1.2.3.4]) [10.9.8.7]
   >>> processing "accept"
   >>> accept: condition test succeeded


  Index: 466
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/stderr/466,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- 466    1 Aug 2005 13:20:29 -0000    1.5
  +++ 466    2 Aug 2005 15:19:20 -0000    1.6
  @@ -84,6 +84,7 @@
   calling r1 router
   rda_interpret (file): /source/exim4/AutoTest/aux/466.f
   expanded: /source/exim4/AutoTest/aux/466.f
  +search_tidyup called
   changed uid/gid: r1 router (recipient is ph10@???)
     uid=1169 gid=1169 pid=pppp
     auxiliary group list: <none>
  @@ -92,6 +93,7 @@
   data is an Exim filter program
   Filter: start of processing
   Filter: end of processing
  +search_tidyup called
   rda_interpret: subprocess yield=0 error=NULL
   set transport t1
   r1 router generated /source/exim4/AutoTest/test-mail


  Index: 470
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/stderr/470,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- 470    1 Aug 2005 13:20:29 -0000    1.8
  +++ 470    2 Aug 2005 15:19:20 -0000    1.9
  @@ -190,6 +190,7 @@
   expanded: #Exim filter
   mail text rhubarb
   seen finish
  +search_tidyup called
   changed uid/gid: r2 router (recipient is mug99@???)
     uid=1169 gid=1169 pid=pppp
     auxiliary group list: <none>
  @@ -197,6 +198,7 @@
   data is an Exim filter program
   Filter: start of processing
   Filter: end of processing
  +search_tidyup called
   rda_interpret: subprocess yield=0 error=NULL
   set transport t1
   r2 router generated >sender@???, sender@???, sender@???, sender@???,  sender@???, sender@???, sender@???, sender@???,  sender@???, sender@???, sender@???, sender@???,  sender@???, sender@???, sender@???, sender@???


  Index: 051
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/stdout/051,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 051    8 Oct 2004 14:50:13 -0000    1.1
  +++ 051    2 Aug 2005 15:19:21 -0000    1.2
  @@ -13,6 +13,7 @@


220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
250 OK
+550 helo not verified
221 myhost.test.ex closing connection

**** SMTP testing session as if from host 10.0.0.2
@@ -67,4 +68,37 @@

220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
451 EHLO argument does not match calling host
+221 myhost.test.ex closing connection
+
+**** SMTP testing session as if from host 10.0.0.13
+**** but without any ident (RFC 1413) callback.
+**** This is not for real!
+
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250 myhost.test.ex Hello [10.0.0.99] [10.0.0.13]
+250 OK
+550 helo not verified
+221 myhost.test.ex closing connection
+
+**** SMTP testing session as if from host 10.0.0.13
+**** but without any ident (RFC 1413) callback.
+**** This is not for real!
+
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250 myhost.test.ex Hello [10.0.0.13] [10.0.0.13]
+250 OK
+550 helo did verify
+221 myhost.test.ex closing connection
+
+**** SMTP testing session as if from host 99.99.99.99
+**** but without any ident (RFC 1413) callback.
+**** This is not for real!
+
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250-myhost.test.ex Hello rhubarb [99.99.99.99]
+250-SIZE 52428800
+250-PIPELINING
+250 HELP
+250 OK
+451 Temporary local problem - please try later
221 myhost.test.ex closing connection