From: Jeremy Harris Date: Sun, 9 Jan 2022 20:53:57 +0000 (+0000) Subject: Testsuite: fix pgsql testcase X-Git-Tag: exim-4.96-RC0~103 X-Git-Url: https://git.exim.org/exim.git/commitdiff_plain/6dbf85ed0c969432afa9e821a81122193544bfdc?ds=sidebyside Testsuite: fix pgsql testcase --- diff --git a/test/confs/2620 b/test/confs/2620 index e63fca286..85d25035f 100644 --- a/test/confs/2620 +++ b/test/confs/2620 @@ -28,23 +28,23 @@ check_recipient: # 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'}} + set acl_m0 = ok: ${lookup pgsql,servers=SERVERS {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'}} + set acl_m0 = FAIL: ${lookup pgsql {servers=SERVERS; 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' + hosts = <& net-pgsql;servers=SERVERS; 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' + hosts = <& net-pgsql,servers=SERVERS; select * from them where id='$local_part' accept domains = +local_domains accept hosts = +relay_hosts diff --git a/test/stderr/2620 b/test/stderr/2620 index 620aa86b1..992a60904 100644 --- a/test/stderr/2620 +++ b/test/stderr/2620 @@ -270,16 +270,46 @@ check set acl_m0 = ok: ${lookup pgsql {select name from the search_open: pgsql "NULL" cached open search_find: file="NULL" - key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=SSPEC" + key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=localhost::1223/test/CALLER/" LRU list: internal_search_find: file="NULL" - type=pgsql key="select name from them where id = 'c'" opts="servers=SSPEC" + type=pgsql key="select name from them where id = 'c'" opts="servers=localhost::1223/test/CALLER/" cached data found but wrong opts; database lookup required for select name from them where id = 'c' - PostgreSQL query: "select name from them where id = 'c'" opts 'servers=SSPEC' - lookup deferred: PostgreSQL server "SSPEC" not found in pgsql_servers + PostgreSQL query: "select name from them where id = 'c'" opts 'servers=localhost::1223/test/CALLER/' + PGSQL using cached connection for localhost:1223/test/CALLER + PGSQL: no data found + replacing old cache entry + lookup failed +check set acl_m0 = ok: ${lookup pgsql,servers=localhost::1223/test/CALLER/ {select name from them where id = '$local_part'}} + = ok: + search_open: pgsql "NULL" + cached open + search_find: file="NULL" + key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=localhost::1223" + LRU list: + internal_search_find: file="NULL" + type=pgsql key="select name from them where id = 'c'" opts="servers=localhost::1223" + cached data found but wrong opts; database lookup required for select name from them where id = 'c' + PostgreSQL query: "select name from them where id = 'c'" opts 'servers=localhost::1223' + PGSQL using cached connection for localhost:1223/test/CALLER + PGSQL: no data found + replacing old cache entry + lookup failed +check set acl_m0 = ok: ${lookup pgsql,servers=localhost::1223 {select name from them where id = '$local_part'}} + = ok: + search_open: pgsql "NULL" + cached open + search_find: file="NULL" + key="servers=localhost::1223/test/CALLER/; select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts=NULL + LRU list: + internal_search_find: file="NULL" + type=pgsql key="servers=localhost::1223/test/CALLER/; select name from them where id = 'c'" opts=NULL + database lookup required for servers=localhost::1223/test/CALLER/; select name from them where id = 'c' + PostgreSQL query: "servers=localhost::1223/test/CALLER/; select name from them where id = 'c'" opts 'NULL' + lookup deferred: Tainted PostgreSQL server 'localhost:1223/test/CALLER/' warn: condition test deferred in ACL "check_recipient" LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "SSPEC" not found in pgsql_servers + H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: Tainted PostgreSQL server 'localhost:1223/test/CALLER/' processing "warn" (TESTSUITE/test-config 38) check set acl_m0 = ok: hostlist check hosts = net-pgsql;select * from them where id='$local_part' @@ -300,38 +330,38 @@ host in "net-pgsql;select * from them where id='c'"? no (end of list) warn: condition test failed in ACL "check_recipient" processing "warn" (TESTSUITE/test-config 41) check set acl_m0 = FAIL: hostlist -check hosts = <& net-pgsql;servers=SSPEC; select * from them where id='$local_part' +check hosts = <& net-pgsql;servers=localhost::1223/test/CALLER/; select * from them where id='$local_part' search_open: pgsql "NULL" cached open search_find: file="NULL" - key="servers=SSPEC; select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts=NULL + key="servers=localhost::1223/test/CALLER/; select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts=NULL LRU list: internal_search_find: file="NULL" - type=pgsql key="servers=SSPEC; select * from them where id='c'" opts=NULL -database lookup required for servers=SSPEC; select * from them where id='c' -PostgreSQL query: "servers=SSPEC; select * from them where id='c'" opts 'NULL' -lookup deferred: PostgreSQL server "SSPEC" not found in pgsql_servers -host in "<& net-pgsql;servers=SSPEC; select * from them where id='c'"? list match deferred for net-pgsql;servers=SSPEC; select * from them where id='c' + type=pgsql key="servers=localhost::1223/test/CALLER/; select * from them where id='c'" opts=NULL +database lookup required for servers=localhost::1223/test/CALLER/; select * from them where id='c' +PostgreSQL query: "servers=localhost::1223/test/CALLER/; select * from them where id='c'" opts 'NULL' +lookup deferred: Tainted PostgreSQL server 'localhost:1223/test/CALLER/' +host in "<& net-pgsql;servers=localhost::1223/test/CALLER/; select * from them where id='c'"? list match deferred for net-pgsql;servers=localhost::1223/test/CALLER/; select * from them where id='c' warn: condition test deferred in ACL "check_recipient" LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "SSPEC" not found in pgsql_servers + H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: Tainted PostgreSQL server 'localhost:1223/test/CALLER/' processing "warn" (TESTSUITE/test-config 46) check set acl_m0 = FAIL: hostlist -check hosts = <& net-pgsql,servers=SSPEC; select * from them where id='$local_part' +check hosts = <& net-pgsql,servers=localhost::1223/test/CALLER/; select * from them where id='$local_part' search_open: pgsql "NULL" cached open search_find: file="NULL" - key=" select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts="servers=SSPEC" + key=" select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts="servers=localhost::1223/test/CALLER/" LRU list: internal_search_find: file="NULL" - type=pgsql key=" select * from them where id='c'" opts="servers=SSPEC" + type=pgsql key=" select * from them where id='c'" opts="servers=localhost::1223/test/CALLER/" database lookup required for select * from them where id='c' -PostgreSQL query: " select * from them where id='c'" opts 'servers=SSPEC' -lookup deferred: PostgreSQL server "SSPEC" not found in pgsql_servers -host in "<& net-pgsql,servers=SSPEC; select * from them where id='c'"? list match deferred for net-pgsql,servers=SSPEC; select * from them where id='c' +PostgreSQL query: " select * from them where id='c'" opts 'servers=localhost::1223/test/CALLER/' +lookup deferred: Tainted PostgreSQL server 'localhost:1223/test/CALLER/' +host in "<& net-pgsql,servers=localhost::1223/test/CALLER/; select * from them where id='c'"? list match deferred for net-pgsql,servers=localhost::1223/test/CALLER/; select * from them where id='c' warn: condition test deferred in ACL "check_recipient" LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "SSPEC" not found in pgsql_servers + H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: Tainted PostgreSQL server 'localhost:1223/test/CALLER/' processing "accept" (TESTSUITE/test-config 49) check domains = +local_domains d in "@"? no (end of list) @@ -372,23 +402,57 @@ processing "warn" (TESTSUITE/test-config 27) LRU list: internal_search_find: file="NULL" type=pgsql key="select name from them where id = 'c'" opts=NULL - cached data used for lookup of select name from them where id = 'c' + cached data found but wrong opts; database lookup required for select name from them where id = 'c' + PostgreSQL query: "select name from them where id = 'c'" opts 'NULL' + PGSQL using cached connection for localhost:1223/test/CALLER + PGSQL: no data found + replacing old cache entry lookup failed check set acl_m0 = ok: ${lookup pgsql {select name from them where id = '$local_part'}} = ok: search_open: pgsql "NULL" cached open search_find: file="NULL" - key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=SSPEC" + key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=localhost::1223/test/CALLER/" LRU list: internal_search_find: file="NULL" - type=pgsql key="select name from them where id = 'c'" opts="servers=SSPEC" + type=pgsql key="select name from them where id = 'c'" opts="servers=localhost::1223/test/CALLER/" cached data found but wrong opts; database lookup required for select name from them where id = 'c' - PostgreSQL query: "select name from them where id = 'c'" opts 'servers=SSPEC' - lookup deferred: PostgreSQL server "SSPEC" not found in pgsql_servers + PostgreSQL query: "select name from them where id = 'c'" opts 'servers=localhost::1223/test/CALLER/' + PGSQL using cached connection for localhost:1223/test/CALLER + PGSQL: no data found + replacing old cache entry + lookup failed +check set acl_m0 = ok: ${lookup pgsql,servers=localhost::1223/test/CALLER/ {select name from them where id = '$local_part'}} + = ok: + search_open: pgsql "NULL" + cached open + search_find: file="NULL" + key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=localhost::1223" + LRU list: + internal_search_find: file="NULL" + type=pgsql key="select name from them where id = 'c'" opts="servers=localhost::1223" + cached data found but wrong opts; database lookup required for select name from them where id = 'c' + PostgreSQL query: "select name from them where id = 'c'" opts 'servers=localhost::1223' + PGSQL using cached connection for localhost:1223/test/CALLER + PGSQL: no data found + replacing old cache entry + lookup failed +check set acl_m0 = ok: ${lookup pgsql,servers=localhost::1223 {select name from them where id = '$local_part'}} + = ok: + search_open: pgsql "NULL" + cached open + search_find: file="NULL" + key="servers=localhost::1223/test/CALLER/; select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts=NULL + LRU list: + internal_search_find: file="NULL" + type=pgsql key="servers=localhost::1223/test/CALLER/; select name from them where id = 'c'" opts=NULL + database lookup required for servers=localhost::1223/test/CALLER/; select name from them where id = 'c' + PostgreSQL query: "servers=localhost::1223/test/CALLER/; select name from them where id = 'c'" opts 'NULL' + lookup deferred: Tainted PostgreSQL server 'localhost:1223/test/CALLER/' warn: condition test deferred in ACL "check_recipient" LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "SSPEC" not found in pgsql_servers + H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: Tainted PostgreSQL server 'localhost:1223/test/CALLER/' processing "warn" (TESTSUITE/test-config 38) check set acl_m0 = ok: hostlist check hosts = net-pgsql;select * from them where id='$local_part' @@ -405,38 +469,38 @@ host in "net-pgsql;select * from them where id='c'"? no (end of list) warn: condition test failed in ACL "check_recipient" processing "warn" (TESTSUITE/test-config 41) check set acl_m0 = FAIL: hostlist -check hosts = <& net-pgsql;servers=SSPEC; select * from them where id='$local_part' +check hosts = <& net-pgsql;servers=localhost::1223/test/CALLER/; select * from them where id='$local_part' search_open: pgsql "NULL" cached open search_find: file="NULL" - key="servers=SSPEC; select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts=NULL + key="servers=localhost::1223/test/CALLER/; select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts=NULL LRU list: internal_search_find: file="NULL" - type=pgsql key="servers=SSPEC; select * from them where id='c'" opts=NULL -database lookup required for servers=SSPEC; select * from them where id='c' -PostgreSQL query: "servers=SSPEC; select * from them where id='c'" opts 'NULL' -lookup deferred: PostgreSQL server "SSPEC" not found in pgsql_servers -host in "<& net-pgsql;servers=SSPEC; select * from them where id='c'"? list match deferred for net-pgsql;servers=SSPEC; select * from them where id='c' + type=pgsql key="servers=localhost::1223/test/CALLER/; select * from them where id='c'" opts=NULL +database lookup required for servers=localhost::1223/test/CALLER/; select * from them where id='c' +PostgreSQL query: "servers=localhost::1223/test/CALLER/; select * from them where id='c'" opts 'NULL' +lookup deferred: Tainted PostgreSQL server 'localhost:1223/test/CALLER/' +host in "<& net-pgsql;servers=localhost::1223/test/CALLER/; select * from them where id='c'"? list match deferred for net-pgsql;servers=localhost::1223/test/CALLER/; select * from them where id='c' warn: condition test deferred in ACL "check_recipient" LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "SSPEC" not found in pgsql_servers + H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: Tainted PostgreSQL server 'localhost:1223/test/CALLER/' processing "warn" (TESTSUITE/test-config 46) check set acl_m0 = FAIL: hostlist -check hosts = <& net-pgsql,servers=SSPEC; select * from them where id='$local_part' +check hosts = <& net-pgsql,servers=localhost::1223/test/CALLER/; select * from them where id='$local_part' search_open: pgsql "NULL" cached open search_find: file="NULL" - key=" select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts="servers=SSPEC" + key=" select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts="servers=localhost::1223/test/CALLER/" LRU list: internal_search_find: file="NULL" - type=pgsql key=" select * from them where id='c'" opts="servers=SSPEC" + type=pgsql key=" select * from them where id='c'" opts="servers=localhost::1223/test/CALLER/" database lookup required for select * from them where id='c' -PostgreSQL query: " select * from them where id='c'" opts 'servers=SSPEC' -lookup deferred: PostgreSQL server "SSPEC" not found in pgsql_servers -host in "<& net-pgsql,servers=SSPEC; select * from them where id='c'"? list match deferred for net-pgsql,servers=SSPEC; select * from them where id='c' +PostgreSQL query: " select * from them where id='c'" opts 'servers=localhost::1223/test/CALLER/' +lookup deferred: Tainted PostgreSQL server 'localhost:1223/test/CALLER/' +host in "<& net-pgsql,servers=localhost::1223/test/CALLER/; select * from them where id='c'"? list match deferred for net-pgsql,servers=localhost::1223/test/CALLER/; select * from them where id='c' warn: condition test deferred in ACL "check_recipient" LOG: MAIN - H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "SSPEC" not found in pgsql_servers + H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: Tainted PostgreSQL server 'localhost:1223/test/CALLER/' processing "accept" (TESTSUITE/test-config 49) check domains = +local_domains d in "@"? no (end of list)