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

Kezdőlap
Üzenet törlése
Válasz az üzenetre
Szerző: Philip Hazel
Dátum:  
Címzett: exim-cvs
Tárgy: [exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog NewStuff exim/exim-src ACKNOWLEDGMENTS exim/exim-src/src acl.c readconf.c exim/exim-test-orig/AutoTest/confs 002 149 exim/exim-test-orig/AutoT
ph10 2005/04/05 14:58:35 BST

  Modified files:
    exim-doc/doc-txt     ChangeLog NewStuff 
    exim-src             ACKNOWLEDGMENTS 
    exim-src/src         acl.c readconf.c 
    exim-test-orig/AutoTest/confs 002 149 
    exim-test-orig/AutoTest/scripts 149 
    exim-test-orig/AutoTest/stdout 001 002 149 
  Added files:
    exim-test-orig/AutoTest/log 149 
    exim-test-orig/AutoTest/rejectlog 149 
  Log:
  Kjetil Homme's patch for extended macro features (redefinition,
  definition between driver and ACL definitions).


  Revision  Changes    Path
  1.108     +3 -0      exim/exim-doc/doc-txt/ChangeLog
  1.33      +30 -0     exim/exim-doc/doc-txt/NewStuff
  1.19      +2 -1      exim/exim-src/ACKNOWLEDGMENTS
  1.27      +3 -10     exim/exim-src/src/acl.c
  1.7       +152 -68   exim/exim-src/src/readconf.c
  1.6       +1 -0      exim/exim-test-orig/AutoTest/confs/002
  1.2       +38 -0     exim/exim-test-orig/AutoTest/confs/149
  1.1       +1 -0      exim/exim-test-orig/AutoTest/log/149 (new)
  1.1       +1 -0      exim/exim-test-orig/AutoTest/rejectlog/149 (new)
  1.2       +9 -2      exim/exim-test-orig/AutoTest/scripts/149
  1.8       +1 -0      exim/exim-test-orig/AutoTest/stdout/001
  1.6       +1 -0      exim/exim-test-orig/AutoTest/stdout/002
  1.2       +46 -0     exim/exim-test-orig/AutoTest/stdout/149


  Index: ChangeLog
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
  retrieving revision 1.107
  retrieving revision 1.108
  diff -u -r1.107 -r1.108
  --- ChangeLog    4 Apr 2005 10:33:49 -0000    1.107
  +++ ChangeLog    5 Apr 2005 13:58:34 -0000    1.108
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.107 2005/04/04 10:33:49 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.108 2005/04/05 13:58:34 ph10 Exp $


   Change log file for Exim from version 4.21
   -------------------------------------------
  @@ -118,6 +118,9 @@
         "input=".


   PH/21 Added acl_not_smtp_mime to allow for MIME scanning for non-SMTP messages.
  +
  +PH/22 Added support for macro redefinition, and (re)definition in between
  +      driver and ACL definitions.



A note about Exim versions 4.44 and 4.50

  Index: NewStuff
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/NewStuff,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- NewStuff    4 Apr 2005 10:33:49 -0000    1.32
  +++ NewStuff    5 Apr 2005 13:58:34 -0000    1.33
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.32 2005/04/04 10:33:49 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.33 2005/04/05 13:58:34 ph10 Exp $


   New Features in Exim
   --------------------
  @@ -99,6 +99,36 @@
   PH/04 There is a new option called acl_not_smtp_mime that allows you to scan
         MIME parts in non-SMTP messages. It operates in exactly the same way as
         acl_smtp_mime
  +
  +PH/05 It is now possible to redefine a macro within the configuration file.
  +      The macro must have been previously defined within the configuration (or
  +      an included file). A definition on the command line using the -D option
  +      causes all definitions and redefinitions within the file to be ignored.
  +      In other words, -D overrides any values that are set in the file.
  +      Redefinition is specified by using '==' instead of '='. For example:
  +
  +        MAC1 =  initial value
  +        ...
  +        MAC1 == updated value
  +
  +      Redefinition does not alter the order in which the macros are applied to
  +      the subsequent lines of the configuration file. It is still the same
  +      order in which the macros were originally defined. All that changes is
  +      the macro's value. Redefinition makes it possible to accumulate values.
  +      For example:
  +
  +        MAC1 =  initial value
  +        ...
  +        MAC1 == MAC1 and something added
  +
  +      This can be helpful in situations where the configuration file is built
  +      from a number of other files.
  +
  +PH/06 Macros may now be defined or redefined between router, transport,
  +      authenticator, or ACL definitions, as well as in the main part of the
  +      configuration. They may not, however, be changed within an individual
  +      driver or ACL, or in the local_scan, retry, or rewrite sections of the
  +      configuration.



Version 4.50

  Index: ACKNOWLEDGMENTS
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/ACKNOWLEDGMENTS,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- ACKNOWLEDGMENTS    29 Mar 2005 14:53:09 -0000    1.18
  +++ ACKNOWLEDGMENTS    5 Apr 2005 13:58:35 -0000    1.19
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-src/ACKNOWLEDGMENTS,v 1.18 2005/03/29 14:53:09 ph10 Exp $
  +$Cambridge: exim/exim-src/ACKNOWLEDGMENTS,v 1.19 2005/04/05 13:58:35 ph10 Exp $


EXIM ACKNOWLEDGEMENTS

@@ -20,7 +20,7 @@
Philip Hazel

Lists created: 20 November 2002
-Last updated: 29 March 2005
+Last updated: 05 April 2005


   THE OLD LIST
  @@ -41,6 +41,7 @@
   Jason Gunthorpe           IPv6 support (Linux)
   Michael Haardt            LDAP support enhancement
   Steve Haslam              First code for TLS
  +Kjetil Torgrim Homme      Suggested patch for macro extensions
   John Horne                Proof-reading documentation (repeatedly)
   Pierre Humblet            Cygwin support
   Paul Kelly                MySQL interface


  Index: acl.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/acl.c,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- acl.c    29 Mar 2005 10:56:48 -0000    1.26
  +++ acl.c    5 Apr 2005 13:58:35 -0000    1.27
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/acl.c,v 1.26 2005/03/29 10:56:48 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/acl.c,v 1.27 2005/04/05 13:58:35 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -589,18 +589,11 @@
       s++;
       }


- /* Read the name of a verb or a condition, or the start of a new ACL */
+ /* Read the name of a verb or a condition, or the start of a new ACL, which
+ can be started by a name, or by a macro definition. */

     s = readconf_readname(name, sizeof(name), s);
  -  if (*s == ':')
  -    {
  -    if (negated || name[0] == 0)
  -      {
  -      *error = string_sprintf("malformed ACL name in \"%s\"", saveline);
  -      return NULL;
  -      }
  -    break;
  -    }
  +  if (*s == ':' || isupper(name[0] && *s == '=')) return yield;


     /* If a verb is unrecognized, it may be another condition or modifier that
     continues the previous verb. */


  Index: readconf.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/readconf.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- readconf.c    4 Apr 2005 10:33:49 -0000    1.6
  +++ readconf.c    5 Apr 2005 13:58:35 -0000    1.7
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/readconf.c,v 1.6 2005/04/04 10:33:49 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/readconf.c,v 1.7 2005/04/05 13:58:35 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -435,6 +435,122 @@




  +/*************************************************
  +*       Deal with an assignment to a macro       *
  +*************************************************/
  +
  +/* This function is called when a line that starts with an upper case letter is
  +encountered. The argument "line" should contain a complete logical line, and
  +start with the first letter of the macro name. The macro name and the
  +replacement text are extracted and stored. Redefinition of existing,
  +non-command line, macros is permitted using '==' instead of '='.
  +
  +Arguments:
  +  s            points to the start of the logical line
  +
  +Returns:       nothing
  +*/
  +
  +static void
  +read_macro_assignment(uschar *s)
  +{
  +uschar name[64];
  +int namelen = 0;
  +BOOL redef = FALSE;
  +macro_item *m;
  +macro_item *mlast = NULL;
  +
  +while (isalnum(*s) || *s == '_')
  +  {
  +  if (namelen >= sizeof(name) - 1)
  +    log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN,
  +      "macro name too long (maximum is %d characters)", sizeof(name) - 1);
  +  name[namelen++] = *s++;
  +  }
  +name[namelen] = 0;
  +
  +while (isspace(*s)) s++;
  +if (*s++ != '=')
  +  log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN, "malformed macro definition");
  +
  +if (*s == '=')
  +  {
  +  redef = TRUE;
  +  s++;
  +  }
  +while (isspace(*s)) s++;
  +
  +/* If an existing macro of the same name was defined on the command line, we
  +just skip this definition. It's an error to attempt to redefine a macro without
  +redef set to TRUE, or to redefine a macro when it hasn't been defined earlier.
  +It is also an error to define a macro whose name begins with the name of a
  +previously defined macro. Note: it is documented that the other way round
  +works. */
  +
  +for (m = macros; m != NULL; m = m->next)
  +  {
  +  int len = Ustrlen(m->name);
  +
  +  if (Ustrcmp(m->name, name) == 0)
  +    {
  +    if (!m->command_line && !redef)
  +      log_write(0, LOG_CONFIG|LOG_PANIC_DIE, "macro \"%s\" is already "
  +       "defined (use \"==\" if you want to redefine it", name);
  +    break;
  +    }
  +
  +  if (len < namelen && Ustrstr(name, m->name) != NULL)
  +    log_write(0, LOG_CONFIG|LOG_PANIC_DIE, "\"%s\" cannot be defined as "
  +      "a macro because previously defined macro \"%s\" is a substring",
  +      name, m->name);
  +
  +  /* We cannot have this test, because it is documented that a substring
  +  macro is permitted (there is even an example).
  +  *
  +  * if (len > namelen && Ustrstr(m->name, name) != NULL)
  +  *   log_write(0, LOG_CONFIG|LOG_PANIC_DIE, "\"%s\" cannot be defined as "
  +  *     "a macro because it is a substring of previously defined macro \"%s\"",
  +  *     name, m->name);
  +  */
  +
  +  mlast = m;
  +  }
  +
  +/* Check for an overriding command-line definition. */
  +
  +if (m != NULL && m->command_line) return;
  +
  +/* Redefinition must refer to an existing macro. */
  +
  +if (redef)
  +  {
  +  if (m == NULL)
  +    log_write(0, LOG_CONFIG|LOG_PANIC_DIE, "can't redefine an undefined macro "
  +      "\"%s\"", name);
  +  }
  +
  +/* We have a new definition. The macro_item structure includes a final vector
  +called "name" which is one byte long. Thus, adding "namelen" gives us enough
  +room to store the "name" string. */
  +
  +else
  +  {
  +  m = store_get(sizeof(macro_item) + namelen);
  +  if (macros == NULL) macros = m; else mlast->next = m;
  +  Ustrncpy(m->name, name, namelen);
  +  m->name[namelen] = 0;
  +  m->next = NULL;
  +  m->command_line = FALSE;
  +  }
  +
  +/* Set the value of the new or redefined macro */
  +
  +m->replacement = string_copy(s);
  +}
  +
  +
  +
  +


   /*************************************************
   *            Read configuration line             *
  @@ -2631,65 +2747,7 @@


   while ((s = get_config_line()) != NULL)
     {
  -  if (isupper(s[0]))
  -    {
  -    macro_item *m;
  -    macro_item *mlast = NULL;
  -    uschar name[64];
  -    int namelen = 0;
  -
  -    while (isalnum(*s) || *s == '_')
  -      {
  -      if (namelen >= sizeof(name) - 1)
  -        log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN,
  -          "macro name too long (maximum is %d characters)", sizeof(name) - 1);
  -      name[namelen++] = *s++;
  -      }
  -    name[namelen] = 0;
  -    while (isspace(*s)) s++;
  -    if (*s++ != '=') log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN,
  -      "malformed macro definition");
  -    while (isspace(*s)) s++;
  -
  -    /* If an existing macro of the same name was defined on the command line,
  -    we just skip this definition. Otherwise it's an error to attempt to
  -    redefine a macro. It is also an error to define a macro whose name begins
  -    with the name of a previously-defined macro. */
  -
  -    for (m = macros; m != NULL; m = m->next)
  -      {
  -      int len = Ustrlen(m->name);
  -
  -      if (Ustrcmp(m->name, name) == 0)
  -        {
  -        if (m->command_line) break;
  -        log_write(0, LOG_CONFIG|LOG_PANIC_DIE, "macro \"%s\" is already "
  -          "defined", name);
  -        }
  -
  -      if (len < namelen && Ustrstr(name, m->name) != NULL)
  -        log_write(0, LOG_CONFIG|LOG_PANIC_DIE, "\"%s\" cannot be defined as "
  -          "a macro because previously defined macro \"%s\" is a substring",
  -          name, m->name);
  -
  -      mlast = m;
  -      }
  -    if (m != NULL) continue;   /* Found an overriding command-line definition */
  -
  -    m = store_get(sizeof(macro_item) + namelen);
  -    m->next = NULL;
  -    m->command_line = FALSE;
  -    if (mlast == NULL) macros = m; else mlast->next = m;
  -
  -    /* This use of strcpy() is OK because we have obtained a block of store
  -    whose size is based on the length of "name". The definition of the
  -    macro_item structure includes a final vector called "name" which is one
  -    byte long. Thus, adding "namelen" gives us enough room to store the "name"
  -    string. */
  -
  -    Ustrcpy(m->name, name);
  -    m->replacement = string_copy(s);
  -    }
  +  if (isupper(s[0])) read_macro_assignment(s);


     else if (Ustrncmp(s, "domainlist", 10) == 0)
       read_named_list(&domainlist_anchor, &domainlist_count,
  @@ -3071,16 +3129,33 @@
   driver_instance *d = NULL;
   uschar *buffer;


  -/* Now process the configuration lines */
  -
   while ((buffer = get_config_line()) != NULL)
     {
     uschar name[64];
  +  uschar *s;
  +
  +  /* Read the first name on the line and test for the start of a new driver. A
  +  macro definition indicates the end of the previous driver. If this isn't the
  +  start of a new driver, the line will be re-read. */


- /* Read the first name on the line and test for the start of a new driver.
- If this isn't the start of a new driver, the line will be re-read. */
+ s = readconf_readname(name, sizeof(name), buffer);

  -  uschar *s = readconf_readname(name, sizeof(name), buffer);
  +  /* Handle macro definition, first finishing off the initialization of the
  +  previous driver, if any. */
  +
  +  if (isupper(*name) && *s == '=')
  +    {
  +    if (d != NULL)
  +      {
  +      if (d->driver_name == NULL)
  +        log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
  +          "no driver defined for %s \"%s\"", class, d->name);
  +      (d->info->init)(d);
  +      d = NULL;
  +      }
  +    read_macro_assignment(buffer);
  +    continue;
  +    }


     /* If the line starts with a name terminated by a colon, we are at the
     start of the definition of a new driver. The rest of the line must be
  @@ -3128,7 +3203,8 @@
       continue;
       }


- /* Give an error if we have not set up a current driver yet. */
+ /* Not the start of a new driver. Give an error if we have not set up a
+ current driver yet. */

     if (d == NULL) log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN,
       "%s name missing", class);
  @@ -3582,7 +3658,8 @@
     return;
     }


-/* Read each ACL and add it into the tree */
+/* Read each ACL and add it into the tree. Macro (re)definitions are allowed
+between ACLs. */

acl_line = get_config_line();

  @@ -3593,8 +3670,15 @@
     uschar *error;


     p = readconf_readname(name, sizeof(name), acl_line);
  -  if (*p != ':')
  -    log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN, "missing ACL name");
  +  if (isupper(*name) && *p == '=')
  +    {
  +    read_macro_assignment(acl_line);
  +    acl_line = get_config_line();
  +    continue;
  +    }
  +
  +  if (*p != ':' || name[0] == 0)
  +    log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN, "missing or malformed ACL name");


     node = store_get(sizeof(tree_node) + Ustrlen(name));
     Ustrcpy(node->name, name);


  Index: 002
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/confs/002,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- 002    22 Mar 2005 14:11:55 -0000    1.5
  +++ 002    5 Apr 2005 13:58:35 -0000    1.6
  @@ -14,6 +14,7 @@


accept_8bitmime
acl_not_smtp = check_local_message
+acl_not_smtp_mime = check_mime
acl_smtp_auth = check_auth
acl_smtp_connect = check_connect
acl_smtp_data = check_message

  Index: 149
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/confs/149,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 149    8 Oct 2004 14:49:15 -0000    1.1
  +++ 149    5 Apr 2005 13:58:35 -0000    1.2
  @@ -17,11 +17,18 @@


# ----- Main settings -----

  +acl_smtp_connect = acl1
  +
   hold_domains = "a\x65b :\
                   c.d"  


host_lookup = XXXX + XXXX
hosts_treat_as_local = ABCD_XYZ and ABCD
+
+ABCD == 1234
+ABCD_XYZ == ABCD_XYZ plus extra
+delay_warning_condition = ABCD_XYZ + ABCD
+

   ignore_fromline_hosts = test.ex : \
                   test2.ex :\   
  @@ -36,6 +43,37 @@
   queue_smtp_domains = \
   x#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx123456789012345678901234567890 + \
   x#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx123456789012345678901234567890
  +
  +
  +# ----- Routers -----
  +
  +begin routers
  +
  +MAC2 = macro2 definition
  +MAC2 == new macro2
  +
  +R1:
  +  driver = accept
  +  router_home_directory = MAC2 + ABCD
  +  transport = T1 
  +
  +
  +#----- Transports -----
  +
  +begin transports
  +
  +T1:
  +  driver = smtp
  +  
  +
  +#----- ACL -----
  +
  +begin acl
  +
  +ACLMAC=testing,testing
  +
  +acl1:
  +  deny message = ACLMAC 



# ----- Rewrite -----

Index: 149
====================================================================
1999-03-02 09:44:33 U=ph10 rejected connection in "connect" ACL: testing,testing

Index: 149
====================================================================
1999-03-02 09:44:33 U=ph10 rejected connection in "connect" ACL: testing,testing

  Index: 149
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/scripts/149,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 149    8 Oct 2004 14:49:52 -0000    1.1
  +++ 149    5 Apr 2005 13:58:35 -0000    1.2
  @@ -1,8 +1,15 @@
  -0 Continuation lines and long lines
  -exim -bP percent_hack_domains hold_domains queue_domains host_lookup queue_smtp_domains hosts_treat_as_local ignore_fromline_hosts
  +0 Continuation lines and long lines and macro (re)definition
  +exim -bP percent_hack_domains hold_domains queue_domains host_lookup queue_smtp_domains hosts_treat_as_local ignore_fromline_hosts delay_warning_condition
   ****
   0
   exim -brw x@???
   ****
   0
   exim -brt x@???
  +****
  +0
  +exim -bP router R1
  +****
  +0
  +exim -bs
  +****


  Index: 001
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/stdout/001,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- 001    22 Mar 2005 14:11:55 -0000    1.7
  +++ 001    5 Apr 2005 13:58:35 -0000    1.8
  @@ -1,5 +1,6 @@
   no_accept_8bitmime
   acl_not_smtp = 
  +acl_not_smtp_mime = 
   acl_smtp_auth = 
   acl_smtp_connect = 
   acl_smtp_data = 


  Index: 002
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/stdout/002,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- 002    22 Mar 2005 14:11:55 -0000    1.5
  +++ 002    5 Apr 2005 13:58:35 -0000    1.6
  @@ -1,5 +1,6 @@
   accept_8bitmime
   acl_not_smtp = check_local_message
  +acl_not_smtp_mime = check_mime
   acl_smtp_auth = check_auth
   acl_smtp_connect = check_connect
   acl_smtp_data = check_message


  Index: 149
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/stdout/149,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 149    8 Oct 2004 14:50:13 -0000    1.1
  +++ 149    5 Apr 2005 13:58:35 -0000    1.2
  @@ -5,6 +5,7 @@
   queue_smtp_domains = x#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx123456789012345678901234567890 + x#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx123456789012345678901234567890
   hosts_treat_as_local = abcdxyz and abcd + abcdxyz
   ignore_fromline_hosts = test.ex : test2.ex :test3.ex
  +delay_warning_condition = abcdxyz plus extra + 1234
     sender: x@???
       from: x@???
         to: x@???
  @@ -14,3 +15,48 @@
   env-from: x@???
     env-to: x@???
   Retry rule: *  *  F,1h,15m; F,1d,30m; 
  +address_data = 
  +address_test
  +cannot_route_message = 
  +no_caseful_local_part
  +no_check_local_user
  +condition = 
  +debug_print = 
  +no_disable_logging
  +domains = 
  +driver = accept
  +errors_to = 
  +expn
  +no_fail_verify_recipient
  +no_fail_verify_sender
  +fallback_hosts = 
  +group = 
  +headers_add = 
  +headers_remove = 
  +ignore_target_hosts = 
  +no_initgroups
  +local_part_prefix = 
  +no_local_part_prefix_optional
  +local_part_suffix = 
  +no_local_part_suffix_optional
  +local_parts = 
  +log_as_local
  +more
  +no_pass_on_timeout
  +pass_router = 
  +redirect_router = 
  +require_files = 
  +no_retry_use_local_part
  +router_home_directory = new macro2 + 1234
  +self = freeze
  +senders = 
  +translate_ip_address = 
  +transport = T1
  +transport_current_directory = 
  +transport_home_directory = 
  +no_unseen
  +user = 
  +no_verify_only
  +verify_recipient
  +verify_sender
  +550 testing,testing