Filters: fix "vacation" in Exim filter. Bug 2593
[exim.git] / test / confs / 2620
index 009e74fd8540f6010a83328bea471f75849e10eb..e63fca28617f19ddc46074f2fc99882aa488690f 100644 (file)
@@ -1,6 +1,7 @@
 # Exim test configuration 2620
 
 # Exim test configuration 2620
 
-SERVERS=localhost::PORT_N/test/CALLER/
+PARTIAL=localhost::PORT_N
+SERVERS=PARTIAL/test/CALLER/
 
 .include DIR/aux-var/std_conf_prefix
 
 
 .include DIR/aux-var/std_conf_prefix
 
@@ -22,6 +23,29 @@ pgsql_servers = SERVERS
 begin acl
 
 check_recipient:
 begin acl
 
 check_recipient:
+         # Tainted-data checks
+  warn
+         # taint only in lookup string
+         set acl_m0 =  ok:   ${lookup pgsql                    {select name from them where id = '$local_part'}}
+         # option on lookup type unaffected
+         set acl_m0 =  ok:   ${lookup pgsql,servers=SSPEC      {select name from them where id = '$local_part'}}
+         # partial server-spec, indexing main-option, works
+         set acl_m0 =  ok:   ${lookup pgsql,servers=PARTIAL    {select name from them where id = '$local_part'}}
+         # oldstyle server spec, prepended to lookup string, fails with taint
+         set acl_m0 =  FAIL: ${lookup pgsql     {servers=SSPEC; select name from them where id = '$local_part'}}
+
+         # In list-stle lookup, tainted lookup string is ok if server spec comes from main-option
+  warn   set acl_m0 =  ok:   hostlist
+         hosts =       net-pgsql;select * from them where id='$local_part'
+         # ... but setting a per-query servers spec fails due to the taint
+  warn   set acl_m0 =  FAIL: hostlist
+         hosts =       <& net-pgsql;servers=SSPEC; select * from them where id='$local_part'
+
+         # The newer server-list-as-option-to-lookup-type is not a solution to tainted data in the lookup, because
+         # string-expansion is done before list-expansion so the taint contaminates the entire list.
+  warn   set acl_m0 =  FAIL: hostlist
+         hosts =       <& net-pgsql,servers=SSPEC; select * from them where id='$local_part'
+
   accept  domains = +local_domains
   accept  hosts = +relay_hosts
   deny    message = relay not permitted
   accept  domains = +local_domains
   accept  hosts = +relay_hosts
   deny    message = relay not permitted