Ensure that recipient is well-defined for expansion-called acl at RCPT-time.
authorJeremy Harris <jgh146exb@wizmail.org>
Thu, 8 Nov 2012 00:37:32 +0000 (00:37 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Thu, 8 Nov 2012 01:00:35 +0000 (01:00 +0000)
src/src/acl.c
src/src/expand.c
src/src/functions.h
test/confs/0027

index c1eebf655243f3199bdd5520411da56be9e84bac..a862277a5b21db73b02a0cedc09d01dee1ce32cb 100644 (file)
@@ -4008,8 +4008,7 @@ return search_find_defer?DEFER:ERROR;
 
 /* Alternate interface for ACL, used by expansions */
 int
 
 /* Alternate interface for ACL, used by expansions */
 int
-acl_eval(int where, uschar *recipient, uschar *s, uschar **user_msgptr,
-  uschar **log_msgptr)
+acl_eval(int where, uschar *s, uschar **user_msgptr, uschar **log_msgptr)
 {
 int rc;
 address_item adb;
 {
 int rc;
 address_item adb;
@@ -4024,14 +4023,11 @@ if (where == ACL_WHERE_RCPT)
   {
   adb = address_defaults;
   addr = &adb;
   {
   adb = address_defaults;
   addr = &adb;
-  addr->address = recipient;
-  if (deliver_split_address(addr) == DEFER)
-    {
-    *log_msgptr = US"defer in percent_hack_domains check";
-    return DEFER;
-    }
-  deliver_domain = addr->domain;
-  deliver_localpart = addr->local_part;
+  addr->address = expand_string(US"$local_part@$domain");
+  addr->domain = deliver_domain;
+  addr->local_part = deliver_localpart;
+  addr->cc_local_part = deliver_localpart;
+  addr->lc_local_part = deliver_localpart;
   }
 
 return acl_check_internal(where, addr, s, 0, user_msgptr, log_msgptr);
   }
 
 return acl_check_internal(where, addr, s, 0, user_msgptr, log_msgptr);
index 786d4279cbca4c667cc7eef0b03287c89a9a9f05..9fc00cf41a346384e25433634e4a214a4903d62b 100644 (file)
@@ -1891,7 +1891,7 @@ DEBUG(D_expand)
     acl_narg>0 ? sub[1]   : US"<none>",
     acl_narg>1 ? " +more" : "");
 
     acl_narg>0 ? sub[1]   : US"<none>",
     acl_narg>1 ? " +more" : "");
 
-ret = acl_eval(acl_where, NULL, sub[0], user_msgp, &tmp);
+ret = acl_eval(acl_where, sub[0], user_msgp, &tmp);
 
 for (i = 0; i < nsub; i++)
   acl_arg[i] = sub[i+1];       /* restore old args */
 
 for (i = 0; i < nsub; i++)
   acl_arg[i] = sub[i+1];       /* restore old args */
index d6f4f68fdbdd4860963006cc4e1cf3ed2d26f871..174db07eb5310e51bf92926903210b06262498e2 100644 (file)
@@ -49,7 +49,7 @@ extern BOOL    tls_openssl_options_parse(uschar *, long *);
 
 extern acl_block *acl_read(uschar *(*)(void), uschar **);
 extern int     acl_check(int, uschar *, uschar *, uschar **, uschar **);
 
 extern acl_block *acl_read(uschar *(*)(void), uschar **);
 extern int     acl_check(int, uschar *, uschar *, uschar **, uschar **);
-extern int     acl_eval(int, uschar *, uschar *, uschar **, uschar **);
+extern int     acl_eval(int, uschar *, uschar **, uschar **);
 
 extern tree_node *acl_var_create(uschar *);
 extern void    acl_var_write(uschar *, uschar *, void *);
 
 extern tree_node *acl_var_create(uschar *);
 extern void    acl_var_write(uschar *, uschar *, void *);
index 75ccf4ae63e47c69f355b27eda3441d800abfa7b..8fe398b479e50b276cd48e152731df77d9d5dfc5 100644 (file)
@@ -42,6 +42,7 @@ data3:
   accept local_parts = a.b.c
 
 acl_rcpt:
   accept local_parts = a.b.c
 
 acl_rcpt:
+  warn  set acl_m_1 = ${acl {data}}
   accept endpass
          acl = ${tr{$local_part}{:}{\n}}
   deny   message = this message should not occur
   accept endpass
          acl = ${tr{$local_part}{:}{\n}}
   deny   message = this message should not occur