diff options
author | Jeremy Harris <jgh146exb@wizmail.org> | 2017-12-24 21:30:20 +0000 |
---|---|---|
committer | Jeremy Harris <jgh146exb@wizmail.org> | 2017-12-24 21:30:20 +0000 |
commit | 8143ff45b2b9edd3532fe4056d5736ecc4e0a766 (patch) | |
tree | b8a5f8efbdb24061fb0c88178e64dcd6812eb0d6 | |
parent | 032e3aa3d12b3c939c8602ff801847a8305bd849 (diff) | |
download | exim4-8143ff45b2b9edd3532fe4056d5736ecc4e0a766.tar.gz |
Lookups: fix pgsql multiple-row, single-column return
Report & fix from James <list@xdrv.co.uk>; additional tidying and testcase by JGH
Broken-by: acec9514b1
-rw-r--r-- | doc/doc-txt/ChangeLog | 7 | ||||
-rw-r--r-- | src/src/lookups/pgsql.c | 86 | ||||
-rw-r--r-- | test/confs/2620 (renamed from test/confs/9200) | 4 | ||||
-rw-r--r-- | test/log/2620 (renamed from test/log/9200) | 0 | ||||
-rw-r--r-- | test/mail/2620.ph10 (renamed from test/mail/9200.CALLER) | 0 | ||||
-rwxr-xr-x | test/runtest | 1 | ||||
-rw-r--r-- | test/scripts/2620-Postgresql/2620 | 63 | ||||
-rw-r--r-- | test/scripts/2620-Postgresql/REQUIRES | 1 | ||||
-rw-r--r-- | test/scripts/9200-PostgreSQL/9200 | 30 | ||||
-rw-r--r-- | test/stderr/2620 (renamed from test/stderr/9200) | 227 | ||||
-rw-r--r-- | test/stdout/2620 | 66 | ||||
-rw-r--r-- | test/stdout/9200 | 28 |
12 files changed, 323 insertions, 190 deletions
diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 824ae232e..08ed2ce9d 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -5,6 +5,13 @@ affect Exim's operation, with an unchanged configuration file. For new options, and new features, see the NewStuff file next to this ChangeLog. +Since Exim version 4.90 +----------------- + +JH/03 Fix pgsql lookup for multiple result-tuples with a single column. + Previously only the last row was returned. + + Exim version 4.90 ----------------- diff --git a/src/src/lookups/pgsql.c b/src/src/lookups/pgsql.c index 0b771f59c..cece43b66 100644 --- a/src/src/lookups/pgsql.c +++ b/src/src/lookups/pgsql.c @@ -140,7 +140,7 @@ has the password removed. This copy is also used for debugging output. */ for (i = 2; i >= 0; i--) { uschar *pp = Ustrrchr(server, '/'); - if (pp == NULL) + if (!pp) { *errmsg = string_sprintf("incomplete pgSQL server data: %s", (i == 2)? server : server_copy); @@ -156,18 +156,16 @@ for (i = 2; i >= 0; i--) start is the identification of the server (host or path). See if we have a cached connection to the server. */ -for (cn = pgsql_connections; cn != NULL; cn = cn->next) - { +for (cn = pgsql_connections; cn; cn = cn->next) if (Ustrcmp(cn->server, server_copy) == 0) { pg_conn = cn->handle; break; } - } /* If there is no cached connection, we must set one up. */ -if (cn == NULL) +if (!cn) { uschar *port = US""; @@ -178,7 +176,7 @@ if (cn == NULL) uschar *last_slash, *last_dot, *p; p = ++server; - while (*p != 0 && *p != ')') p++; + while (*p && *p != ')') p++; *p = 0; last_slash = Ustrrchr(server, '/'); @@ -191,10 +189,9 @@ if (cn == NULL) We have to call PQsetdbLogin with '/var/run/postgresql' as the hostname argument and put '5432' into the port variable. */ - if (last_slash == NULL || last_dot == NULL) + if (!last_slash || !last_dot) { - *errmsg = string_sprintf("PGSQL invalid filename for socket: %s", - server); + *errmsg = string_sprintf("PGSQL invalid filename for socket: %s", server); *defer_break = TRUE; return DEFER; } @@ -211,13 +208,13 @@ if (cn == NULL) else { uschar *p; - if ((p = Ustrchr(server, ':')) != NULL) + if ((p = Ustrchr(server, ':'))) { *p++ = 0; port = p; } - if (Ustrchr(server, '/') != NULL) + if (Ustrchr(server, '/')) { *errmsg = string_sprintf("unexpected slash in pgSQL server hostname: %s", server); @@ -280,37 +277,37 @@ else /* Run the query */ - pg_result = PQexec(pg_conn, CS query); - switch(PQresultStatus(pg_result)) - { - case PGRES_EMPTY_QUERY: - case PGRES_COMMAND_OK: - /* The command was successful but did not return any data since it was - not SELECT but either an INSERT, UPDATE or DELETE statement. Tell the - high level code to not cache this query, and clean the current cache for - this handle by setting *do_cache zero. */ - - result = string_cat(result, US PQcmdTuples(pg_result)); - *do_cache = 0; - DEBUG(D_lookup) debug_printf("PGSQL: command does not return any data " - "but was successful. Rows affected: %s\n", result->s); - break; +pg_result = PQexec(pg_conn, CS query); +switch(PQresultStatus(pg_result)) + { + case PGRES_EMPTY_QUERY: + case PGRES_COMMAND_OK: + /* The command was successful but did not return any data since it was + not SELECT but either an INSERT, UPDATE or DELETE statement. Tell the + high level code to not cache this query, and clean the current cache for + this handle by setting *do_cache zero. */ + + result = string_cat(result, US PQcmdTuples(pg_result)); + *do_cache = 0; + DEBUG(D_lookup) debug_printf("PGSQL: command does not return any data " + "but was successful. Rows affected: %s\n", string_from_gstring(result)); + break; - case PGRES_TUPLES_OK: - break; + case PGRES_TUPLES_OK: + break; - default: - /* This was the original code: - *errmsg = string_sprintf("PGSQL: query failed: %s\n", - PQresultErrorMessage(pg_result)); - This was suggested by a user: - */ - - *errmsg = string_sprintf("PGSQL: query failed: %s (%s) (%s)\n", - PQresultErrorMessage(pg_result), - PQresStatus(PQresultStatus(pg_result)), query); - goto PGSQL_EXIT; - } + default: + /* This was the original code: + *errmsg = string_sprintf("PGSQL: query failed: %s\n", + PQresultErrorMessage(pg_result)); + This was suggested by a user: + */ + + *errmsg = string_sprintf("PGSQL: query failed: %s (%s) (%s)\n", + PQresultErrorMessage(pg_result), + PQresStatus(PQresultStatus(pg_result)), query); + goto PGSQL_EXIT; + } /* Result is in pg_result. Find the number of fields returned. If this is one, we don't add field names to the data. Otherwise we do. If the query did not @@ -329,7 +326,7 @@ for (i = 0; i < num_tuples; i++) result = string_catn(result, US"\n", 1); if (num_fields == 1) - result = string_catn(NULL, + result = string_catn(result, US PQgetvalue(pg_result, i, 0), PQgetlength(pg_result, i, 0)); else { @@ -342,17 +339,13 @@ for (i = 0; i < num_tuples; i++) } } -/* If result is NULL then no data has been found and so we return FAIL. -Otherwise, we must terminate the string which has been built; string_cat() -always leaves enough room for a terminating zero. */ +/* If result is NULL then no data has been found and so we return FAIL. */ if (!result) { yield = FAIL; *errmsg = US"PGSQL: no data found"; } -else - store_reset(result->s + result->ptr + 1); /* Get here by goto from various error checks. */ @@ -367,6 +360,7 @@ if (pg_result) PQclear(pg_result); if (result) { + store_reset(result->s + result->ptr + 1); *resultptr = string_from_gstring(result); return OK; } diff --git a/test/confs/9200 b/test/confs/2620 index 04f52a9a0..009e74fd8 100644 --- a/test/confs/9200 +++ b/test/confs/2620 @@ -1,6 +1,6 @@ -# Exim test configuration 9200 +# Exim test configuration 2620 -SERVERS=localhost/test/ph10/ +SERVERS=localhost::PORT_N/test/CALLER/ .include DIR/aux-var/std_conf_prefix diff --git a/test/log/9200 b/test/log/2620 index 5ca026f38..5ca026f38 100644 --- a/test/log/9200 +++ b/test/log/2620 diff --git a/test/mail/9200.CALLER b/test/mail/2620.ph10 index 1e1294c18..1e1294c18 100644 --- a/test/mail/9200.CALLER +++ b/test/mail/2620.ph10 diff --git a/test/runtest b/test/runtest index a1259f769..d0de8622e 100755 --- a/test/runtest +++ b/test/runtest @@ -2428,6 +2428,7 @@ elsif (/^background$/) $_ = <SCRIPT>; $lineno++; chomp; + do_substitute($testno); $line = $_; if ($debug) { printf ">> daemon: $line >>test-stdout 2>>test-stderr\n"; } diff --git a/test/scripts/2620-Postgresql/2620 b/test/scripts/2620-Postgresql/2620 new file mode 100644 index 000000000..ba3a3bcc8 --- /dev/null +++ b/test/scripts/2620-Postgresql/2620 @@ -0,0 +1,63 @@ +# pgsql lookups +# +# first, populate a DB to test against +sudo rm -fr DIR/pgsql +perl +system 'initdb -D DIR/pgsql/data'; +**** +background +/usr/bin/postgres -D DIR/pgsql/data -p PORT_N -k DIR/pgsql +**** +perl +system 'createdb -h localhost -p PORT_N test'; +system 'psql -h localhost -p PORT_N -d test \ + -c "CREATE TABLE them ( name text, id text );" \ + -c "INSERT INTO them VALUES ( \'Philip Hazel\', \'ph10\' );" \ + -c "INSERT INTO them VALUES ( \'Aristotle\', \'aaaa\' );" \ + -c "INSERT INTO them VALUES ( \'\', \'nothing\' );" \ + -c "INSERT INTO them VALUES ( \'\"stquot\', \'quote2\' );" \ + -c "INSERT INTO them VALUES ( \'before\' || CHR(13) || CHR(10) || \'after\', \'newline\' );" \ + -c "INSERT INTO them VALUES ( \'x\' || CHR(9) || \'x\', \'tab\' );" \ + -c "INSERT INTO them VALUES ( CHR(39) || \'stquot\', \'quote1\' );" \ + '; +**** +# +# now, the tests +exim -d-all+lookup -be +${lookup pgsql {select name from them where id='ph10';}} +${lookup pgsql {select name from them where id='ph10';}} +${lookup pgsql {select name from them where id='xxxx';}} +${lookup pgsql {select name from them where id='nothing';}} +${lookup pgsql {select id,name from them where id='nothing';}} +${lookup pgsql {delete from them where id='nonexist';}} +${lookup pgsql {select * from them where id='quote2';}} +${lookup pgsql {select * from them where id='newline';}} +${lookup pgsql {select * from them where id='tab';}} +${lookup pgsql {select * from them where name='${quote_pgsql:'stquot}';}} +${lookup pgsql {servers=x:localhost; select name from them where id='ph10';}} +${lookup pgsql {servers=localhost::PORT_N:x; select name from them where id='ph10';}} +${lookup pgsql {servers=localhost::PORT_N/test/CALLER/:x; select name from them where id='ph10';}} +${lookup pgsql {servers=(DIR/pgsql/.s.PGSQL.PORT_N)/test/CALLER/:x; select name from them where id='ph10';}} +x +${lookup pgsql {SELECT name FROM them WHERE id IN ('ph10', 'aaaa');}} +${lookup pgsql {SELECT * FROM them WHERE id IN ('ph10', 'aaaa');}} +**** +exim -d -bh 10.0.0.0 +mail from:<a@b> +rcpt to:<c@d> +rcpt to:<c@d> +quit +**** +exim -odi -d CALLER +Test message +. +**** +exim -DSERVERS=\(DIR/pgsql/.s.PGSQL.PORT_N\)/test/CALLER/ -d-all+lookup -be +${lookup pgsql {select name from them where id='ph10';}} +**** +# +perl +system 'pg_ctl stop -D DIR/pgsql/data -m immediate'; +**** +killdaemon +sudo rm -fr DIR/pgsql diff --git a/test/scripts/2620-Postgresql/REQUIRES b/test/scripts/2620-Postgresql/REQUIRES new file mode 100644 index 000000000..5303be6ca --- /dev/null +++ b/test/scripts/2620-Postgresql/REQUIRES @@ -0,0 +1 @@ +lookup pgsql diff --git a/test/scripts/9200-PostgreSQL/9200 b/test/scripts/9200-PostgreSQL/9200 deleted file mode 100644 index 2dfb15b95..000000000 --- a/test/scripts/9200-PostgreSQL/9200 +++ /dev/null @@ -1,30 +0,0 @@ -# pgsql lookups - expects specific data -exim -d-all+lookup -be -${lookup pgsql {select name from them where id='ph10';}} -${lookup pgsql {select name from them where id='ph10';}} -${lookup pgsql {select name from them where id='xxxx';}} -${lookup pgsql {select name from them where id='nothing';}} -${lookup pgsql {select id,name from them where id='nothing';}} -${lookup pgsql {delete from them where id='nonexist';}} -${lookup pgsql {select * from them where id='quote2';}} -${lookup pgsql {select * from them where id='newline';}} -${lookup pgsql {select * from them where id='tab';}} -${lookup pgsql {select * from them where name='${quote_pgsql:'stquot}';}} -${lookup pgsql {servers=x:localhost; select name from them where id='ph10';}} -${lookup pgsql {servers=localhost:x; select name from them where id='ph10';}} -${lookup pgsql {servers=localhost/test/CALLER/:x; select name from them where id='ph10';}} -${lookup pgsql {servers=(/tmp/.s.PGSQL.5432)/test/ph10/:x; select name from them where id='ph10';}} -**** -exim -d -bh 10.0.0.0 -mail from:<a@b> -rcpt to:<c@d> -rcpt to:<c@d> -quit -**** -exim -odi -d CALLER -Test message -. -**** -exim -DSERVERS=\(/tmp/.s.PGSQL.5432\)/test/ph10/ -d-all+lookup -be -${lookup pgsql {select name from them where id='CALLER';}} -**** diff --git a/test/stderr/9200 b/test/stderr/2620 index 2fff471a3..b0bed6209 100644 --- a/test/stderr/9200 +++ b/test/stderr/2620 @@ -1,24 +1,28 @@ + +WARNING: enabling "trust" authentication for local connections +You can change this by editing pg_hba.conf or using the option -A, or +--auth-local and --auth-host, the next time you run initdb. Exim version x.yz .... configuration file is TESTSUITE/test-config admin user search_open: pgsql "NULL" search_find: file="NULL" - key="select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=pgsql key="select name from them where id='CALLER';" -database lookup required for select name from them where id='CALLER'; -PostgreSQL query: select name from them where id='CALLER'; -PGSQL new connection: host=localhost port= database=test user=CALLER + type=pgsql key="select name from them where id='ph10';" +database lookup required for select name from them where id='ph10'; +PostgreSQL query: select name from them where id='ph10'; +PGSQL new connection: host=localhost port=1223 database=test user=CALLER lookup yielded: Philip Hazel search_open: pgsql "NULL" cached open search_find: file="NULL" - key="select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=pgsql key="select name from them where id='CALLER';" -cached data used for lookup of select name from them where id='CALLER'; + type=pgsql key="select name from them where id='ph10';" +cached data used for lookup of select name from them where id='ph10'; lookup yielded: Philip Hazel search_open: pgsql "NULL" cached open @@ -29,7 +33,7 @@ internal_search_find: file="NULL" type=pgsql key="select name from them where id='xxxx';" database lookup required for select name from them where id='xxxx'; PostgreSQL query: select name from them where id='xxxx'; -PGSQL using cached connection for localhost/test/CALLER +PGSQL using cached connection for localhost:1223/test/CALLER PGSQL: no data found lookup failed search_open: pgsql "NULL" @@ -41,7 +45,7 @@ internal_search_find: file="NULL" type=pgsql key="select name from them where id='nothing';" database lookup required for select name from them where id='nothing'; PostgreSQL query: select name from them where id='nothing'; -PGSQL using cached connection for localhost/test/CALLER +PGSQL using cached connection for localhost:1223/test/CALLER lookup yielded: search_open: pgsql "NULL" cached open @@ -52,7 +56,7 @@ internal_search_find: file="NULL" type=pgsql key="select id,name from them where id='nothing';" database lookup required for select id,name from them where id='nothing'; PostgreSQL query: select id,name from them where id='nothing'; -PGSQL using cached connection for localhost/test/CALLER +PGSQL using cached connection for localhost:1223/test/CALLER lookup yielded: id=nothing name="" search_open: pgsql "NULL" cached open @@ -63,7 +67,7 @@ internal_search_find: file="NULL" type=pgsql key="delete from them where id='nonexist';" database lookup required for delete from them where id='nonexist'; PostgreSQL query: delete from them where id='nonexist'; -PGSQL using cached connection for localhost/test/CALLER +PGSQL using cached connection for localhost:1223/test/CALLER PGSQL: command does not return any data but was successful. Rows affected: 0 lookup forced cache cleanup lookup yielded: 0 @@ -76,7 +80,7 @@ internal_search_find: file="NULL" type=pgsql key="select * from them where id='quote2';" database lookup required for select * from them where id='quote2'; PostgreSQL query: select * from them where id='quote2'; -PGSQL using cached connection for localhost/test/CALLER +PGSQL using cached connection for localhost:1223/test/CALLER lookup yielded: name="\"stquot" id=quote2 search_open: pgsql "NULL" cached open @@ -87,8 +91,8 @@ internal_search_find: file="NULL" type=pgsql key="select * from them where id='newline';" database lookup required for select * from them where id='newline'; PostgreSQL query: select * from them where id='newline'; -PGSQL using cached connection for localhost/test/CALLER -lookup yielded: name="before +PGSQL using cached connection for localhost:1223/test/CALLER +lookup yielded: name="before
after" id=newline search_open: pgsql "NULL" cached open @@ -99,7 +103,7 @@ internal_search_find: file="NULL" type=pgsql key="select * from them where id='tab';" database lookup required for select * from them where id='tab'; PostgreSQL query: select * from them where id='tab'; -PGSQL using cached connection for localhost/test/CALLER +PGSQL using cached connection for localhost:1223/test/CALLER lookup yielded: name="x x" id=tab search_open: pgsql "NULL" cached open @@ -110,55 +114,79 @@ internal_search_find: file="NULL" type=pgsql key="select * from them where name='''stquot';" database lookup required for select * from them where name='''stquot'; PostgreSQL query: select * from them where name='''stquot'; -PGSQL using cached connection for localhost/test/CALLER +PGSQL using cached connection for localhost:1223/test/CALLER lookup yielded: name='stquot id=quote1 search_open: pgsql "NULL" cached open search_find: file="NULL" - key="servers=x:localhost; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="servers=x:localhost; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=pgsql key="servers=x:localhost; select name from them where id='CALLER';" -database lookup required for servers=x:localhost; select name from them where id='CALLER'; -PostgreSQL query: servers=x:localhost; select name from them where id='CALLER'; + type=pgsql key="servers=x:localhost; select name from them where id='ph10';" +database lookup required for servers=x:localhost; select name from them where id='ph10'; +PostgreSQL query: servers=x:localhost; select name from them where id='ph10'; lookup deferred: PostgreSQL server "x" not found in pgsql_servers search_open: pgsql "NULL" cached open search_find: file="NULL" - key="servers=localhost:x; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="servers=localhost::1223:x; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 +LRU list: +internal_search_find: file="NULL" + type=pgsql key="servers=localhost::1223:x; select name from them where id='ph10';" +database lookup required for servers=localhost::1223:x; select name from them where id='ph10'; +PostgreSQL query: servers=localhost::1223:x; select name from them where id='ph10'; +PGSQL using cached connection for localhost:1223/test/CALLER +lookup yielded: Philip Hazel +search_open: pgsql "NULL" + cached open +search_find: file="NULL" + key="servers=localhost::1223/test/CALLER/:x; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=pgsql key="servers=localhost:x; select name from them where id='CALLER';" -database lookup required for servers=localhost:x; select name from them where id='CALLER'; -PostgreSQL query: servers=localhost:x; select name from them where id='CALLER'; -PGSQL using cached connection for localhost/test/CALLER + type=pgsql key="servers=localhost::1223/test/CALLER/:x; select name from them where id='ph10';" +database lookup required for servers=localhost::1223/test/CALLER/:x; select name from them where id='ph10'; +PostgreSQL query: servers=localhost::1223/test/CALLER/:x; select name from them where id='ph10'; +PGSQL using cached connection for localhost:1223/test/CALLER lookup yielded: Philip Hazel search_open: pgsql "NULL" cached open search_find: file="NULL" - key="servers=localhost/test/CALLER/:x; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="servers=(TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER/:x; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=pgsql key="servers=localhost/test/CALLER/:x; select name from them where id='CALLER';" -database lookup required for servers=localhost/test/CALLER/:x; select name from them where id='CALLER'; -PostgreSQL query: servers=localhost/test/CALLER/:x; select name from them where id='CALLER'; -PGSQL using cached connection for localhost/test/CALLER + type=pgsql key="servers=(TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER/:x; select name from them where id='ph10';" +database lookup required for servers=(TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER/:x; select name from them where id='ph10'; +PostgreSQL query: servers=(TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER/:x; select name from them where id='ph10'; +PGSQL new connection: socket=TESTSUITE/pgsql/.s.PGSQL.1223 database=test user=CALLER lookup yielded: Philip Hazel search_open: pgsql "NULL" cached open search_find: file="NULL" - key="servers=(/tmp/.s.PGSQL.5432)/test/CALLER/:x; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="SELECT name FROM them WHERE id IN ('ph10', 'aaaa');" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=pgsql key="servers=(/tmp/.s.PGSQL.5432)/test/CALLER/:x; select name from them where id='CALLER';" -database lookup required for servers=(/tmp/.s.PGSQL.5432)/test/CALLER/:x; select name from them where id='CALLER'; -PostgreSQL query: servers=(/tmp/.s.PGSQL.5432)/test/CALLER/:x; select name from them where id='CALLER'; -PGSQL new connection: socket=/tmp/.s.PGSQL.5432 database=test user=CALLER + type=pgsql key="SELECT name FROM them WHERE id IN ('ph10', 'aaaa');" +database lookup required for SELECT name FROM them WHERE id IN ('ph10', 'aaaa'); +PostgreSQL query: SELECT name FROM them WHERE id IN ('ph10', 'aaaa'); +PGSQL using cached connection for localhost:1223/test/CALLER lookup yielded: Philip Hazel +Aristotle +search_open: pgsql "NULL" + cached open +search_find: file="NULL" + key="SELECT * FROM them WHERE id IN ('ph10', 'aaaa');" partial=-1 affix=NULL starflags=0 +LRU list: +internal_search_find: file="NULL" + type=pgsql key="SELECT * FROM them WHERE id IN ('ph10', 'aaaa');" +database lookup required for SELECT * FROM them WHERE id IN ('ph10', 'aaaa'); +PostgreSQL query: SELECT * FROM them WHERE id IN ('ph10', 'aaaa'); +PGSQL using cached connection for localhost:1223/test/CALLER +lookup yielded: name="Philip Hazel" id=ph10 +name=Aristotle id=aaaa search_tidyup called -close PGSQL connection: (/tmp/.s.PGSQL.5432)/test/CALLER -close PGSQL connection: localhost/test/CALLER ->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>> +close PGSQL connection: (TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER +close PGSQL connection: localhost:1223/test/CALLER +>>>>>>>>>>>>>>>> Exim pid=pppp (main: expansion test) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... changed uid/gid: forcing real = effective uid=uuuu gid=CALLER_GID pid=pppp @@ -186,6 +214,8 @@ host in helo_accept_junk_hosts? no (option unset) SMTP>> 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 smtp_setup_msg entered SMTP<< mail from:<a@b> +spool directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 msg_size = 0 +log directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 SMTP>> 250 OK SMTP<< rcpt to:<c@d> using ACL "check_recipient" @@ -193,7 +223,7 @@ processing "accept" check domains = +local_domains d in "@"? no (end of list) d in "+local_domains"? no (end of list) -accept: condition test failed +accept: condition test failed in ACL "check_recipient" processing "accept" check hosts = +relay_hosts search_open: pgsql "NULL" @@ -204,14 +234,16 @@ internal_search_find: file="NULL" type=pgsql key="select * from them where id='10.0.0.0'" database lookup required for select * from them where id='10.0.0.0' PostgreSQL query: select * from them where id='10.0.0.0' -PGSQL new connection: host=localhost port= database=test user=CALLER +PGSQL new connection: host=localhost port=1223 database=test user=CALLER PGSQL: no data found lookup failed host in "net-pgsql;select * from them where id='10.0.0.0'"? no (end of list) host in "+relay_hosts"? no (end of list) -accept: condition test failed +accept: condition test failed in ACL "check_recipient" processing "deny" -deny: condition test succeeded + message: relay not permitted +deny: condition test succeeded in ACL "check_recipient" +end of ACL "check_recipient": DENY SMTP>> 550 relay not permitted LOG: MAIN REJECT H=[10.0.0.0] F=<a@b> rejected RCPT <c@d>: relay not permitted @@ -221,7 +253,7 @@ processing "accept" check domains = +local_domains d in "@"? no (end of list) d in "+local_domains"? no (end of list) -accept: condition test failed +accept: condition test failed in ACL "check_recipient" processing "accept" check hosts = +relay_hosts search_open: pgsql "NULL" @@ -235,9 +267,11 @@ cached data used for lookup of select * from them where id='10.0.0.0' lookup failed host in "net-pgsql;select * from them where id='10.0.0.0'"? no (end of list) host in "+relay_hosts"? no (end of list) -accept: condition test failed +accept: condition test failed in ACL "check_recipient" processing "deny" -deny: condition test succeeded + message: relay not permitted +deny: condition test succeeded in ACL "check_recipient" +end of ACL "check_recipient": DENY SMTP>> 550 relay not permitted LOG: MAIN REJECT H=[10.0.0.0] F=<a@b> rejected RCPT <c@d>: relay not permitted @@ -246,8 +280,8 @@ SMTP>> 221 myhost.test.ex closing connection LOG: smtp_connection MAIN SMTP connection from [10.0.0.0] closed by QUIT search_tidyup called -close PGSQL connection: localhost/test/CALLER ->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>> +close PGSQL connection: localhost:1223/test/CALLER +>>>>>>>>>>>>>>>> Exim pid=pppp (main) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... changed uid/gid: forcing real = effective uid=uuuu gid=CALLER_GID pid=pppp @@ -260,6 +294,8 @@ getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME sender address = CALLER@myhost.test.ex set_process_info: pppp accepting a local non-SMTP message from <CALLER@myhost.test.ex> +spool directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 msg_size = 0 +log directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 Sender: CALLER@myhost.test.ex Recipients: CALLER @@ -274,6 +310,7 @@ I Message-Id: <E10HmaX-0005vi-00@myhost.test.ex> F From: CALLER_NAME <CALLER@myhost.test.ex> Date: Tue, 2 Mar 1999 09:44:33 +0000 +Data file name: TESTSUITE/spool//input//10HmaX-0005vi-00-D Data file written for message 10HmaX-0005vi-00 >>Generated Received: header line P Received: from CALLER by myhost.test.ex with local (Exim x.yz) @@ -282,7 +319,12 @@ P Received: from CALLER by myhost.test.ex with local (Exim x.yz) for CALLER@myhost.test.ex; Tue, 2 Mar 1999 09:44:33 +0000 calling local_scan(); timeout=300 local_scan() returned 0 NULL -Writing spool header file +Writing spool header file: TESTSUITE/spool//input//hdr.pppp +DSN: Write SPOOL :-dsn_envid NULL +DSN: Write SPOOL :-dsn_ret 0 +DSN: Flags :0 +DSN: **** SPOOL_OUT - address: |CALLER@myhost.test.ex| errorsto: |NULL| orcpt: |NULL| dsn_flags: 0 +Renaming spool header file: TESTSUITE/spool//input//10HmaX-0005vi-00-H Size of headers = sss LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local S=sss @@ -295,11 +337,11 @@ changed uid/gid: forcing real = effective configuration file is TESTSUITE/test-config trusted user admin user -skipping ACL configuration - not needed seeking password data for user "CALLER": cache not available getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID set_process_info: pppp delivering specified messages set_process_info: pppp delivering 10HmaX-0005vi-00 +Trying spool file TESTSUITE/spool//input//10HmaX-0005vi-00-D reading spool file 10HmaX-0005vi-00-H user=CALLER uid=CALLER_UID gid=CALLER_GID sender=CALLER@myhost.test.ex sender_local=1 ident=CALLER @@ -307,14 +349,17 @@ Non-recipients: Empty Tree ---- End of tree ---- recipients_count=1 +**** SPOOL_IN - No additional fields body_linecount=1 message_linecount=7 +DSN: set orcpt: NULL flags: 0 Delivery address list: CALLER@myhost.test.ex locking TESTSUITE/spool/db/retry.lockfile -locked TESTSUITE/spool/db/retry.lockfile -EXIM_DBOPEN(TESTSUITE/spool/db/retry) -returned from EXIM_DBOPEN +locked TESTSUITE/spool/db/retry.lockfile +EXIM_DBOPEN: file <TESTSUITE/spool/db/retry> dir <TESTSUITE/spool/db> flags=O_RDONLY +returned from EXIM_DBOPEN: (nil) ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim +failed to open DB file TESTSUITE/spool/db/retry.lockfile: No such file or directory no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Considering: CALLER@myhost.test.ex @@ -329,13 +374,13 @@ local_part=CALLER domain=myhost.test.ex processing address_data search_open: pgsql "NULL" search_find: file="NULL" - key="select name from them where id='CALLER'" partial=-1 affix=NULL starflags=0 + key="select name from them where id='ph10'" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=pgsql key="select name from them where id='CALLER'" -database lookup required for select name from them where id='CALLER' -PostgreSQL query: select name from them where id='CALLER' -PGSQL new connection: host=localhost port= database=test user=CALLER + type=pgsql key="select name from them where id='ph10'" +database lookup required for select name from them where id='ph10' +PostgreSQL query: select name from them where id='ph10' +PGSQL new connection: host=localhost port=1223 database=test user=CALLER lookup yielded: Philip Hazel calling r1 router r1 router called for CALLER@myhost.test.ex @@ -356,13 +401,14 @@ After routing: Failed addresses: Deferred addresses: search_tidyup called -close PGSQL connection: localhost/test/CALLER +close PGSQL connection: localhost:1223/test/CALLER >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> --------> CALLER@myhost.test.ex <-------- locking TESTSUITE/spool/db/retry.lockfile -locked TESTSUITE/spool/db/retry.lockfile -EXIM_DBOPEN(TESTSUITE/spool/db/retry) -returned from EXIM_DBOPEN +locked TESTSUITE/spool/db/retry.lockfile +EXIM_DBOPEN: file <TESTSUITE/spool/db/retry> dir <TESTSUITE/spool/db> flags=O_RDONLY +returned from EXIM_DBOPEN: (nil) +failed to open DB file TESTSUITE/spool/db/retry: No such file or directory no retry data available search_tidyup called changed uid/gid: local delivery to CALLER <CALLER@myhost.test.ex> transport=t1 @@ -372,31 +418,32 @@ set_process_info: pppp delivering 10HmaX-0005vi-00 to CALLER using t1 appendfile transport entered search_open: pgsql "NULL" search_find: file="NULL" - key="select id from them where id='CALLER'" partial=-1 affix=NULL starflags=0 + key="select id from them where id='ph10'" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=pgsql key="select id from them where id='CALLER'" -database lookup required for select id from them where id='CALLER' -PostgreSQL query: select id from them where id='CALLER' -PGSQL new connection: host=localhost port= database=test user=CALLER -lookup yielded: CALLER + type=pgsql key="select id from them where id='ph10'" +database lookup required for select id from them where id='ph10' +PostgreSQL query: select id from them where id='ph10' +PGSQL new connection: host=localhost port=1223 database=test user=CALLER +lookup yielded: ph10 appendfile: mode=600 notify_comsat=0 quota=0 warning=0 - file=TESTSUITE/test-mail/CALLER format=unix + file=TESTSUITE/test-mail/ph10 format=unix message_prefix=From ${if def:return_path{$return_path}{MAILER-DAEMON}} ${tod_bsdinbox}\n message_suffix=\n maildir_use_size_file=no locking by lockfile fcntl -lock name: TESTSUITE/test-mail/CALLER.lock -hitch name: TESTSUITE/test-mail/CALLER.lock.test.ex.dddddddd.pppppppp +lock name: TESTSUITE/test-mail/ph10.lock +hitch name: TESTSUITE/test-mail/ph10.lock.test.ex.dddddddd.pppppppp lock file created -mailbox TESTSUITE/test-mail/CALLER is locked -writing to file TESTSUITE/test-mail/CALLER +mailbox TESTSUITE/test-mail/ph10 is locked +writing to file TESTSUITE/test-mail/ph10 writing data block fd=dddd size=sss timeout=0 +cannot use sendfile for body: spoolfile not wireformat writing data block fd=dddd size=sss timeout=0 writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd search_tidyup called -close PGSQL connection: localhost/test/CALLER +close PGSQL connection: localhost:1223/test/CALLER journalling CALLER@myhost.test.ex t1 transport returned OK for CALLER@myhost.test.ex post-process CALLER@myhost.test.ex (0) @@ -409,31 +456,43 @@ changed uid/gid: post-delivery tidying set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00 Processing retry items Succeeded addresses: -CALLER@myhost.test.ex: no retry items + CALLER@myhost.test.ex: no retry items Failed addresses: Deferred addresses: end of retry processing +DSN: processing router : r1 +DSN: processing successful delivery address: CALLER@myhost.test.ex +DSN: Sender_address: CALLER@myhost.test.ex +DSN: orcpt: NULL flags: 0 +DSN: envid: NULL ret: 0 +DSN: Final recipient: CALLER@myhost.test.ex +DSN: Remote SMTP server supports DSN: 0 +DSN: not sending DSN success message LOG: MAIN Completed end delivery of 10HmaX-0005vi-00 search_tidyup called search_tidyup called ->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=pppp (main) terminating with rc=0 >>>>>>>>>>>>>>>> search_tidyup called ->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=pppp (main) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... configuration file is TESTSUITE/test-config admin user search_open: pgsql "NULL" search_find: file="NULL" - key="select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=pgsql key="select name from them where id='CALLER';" -database lookup required for select name from them where id='CALLER'; -PostgreSQL query: select name from them where id='CALLER'; -PGSQL new connection: socket=/tmp/.s.PGSQL.5432 database=test user=CALLER + type=pgsql key="select name from them where id='ph10';" +database lookup required for select name from them where id='ph10'; +PostgreSQL query: select name from them where id='ph10'; +PGSQL new connection: socket=TESTSUITE/pgsql/.s.PGSQL.1223 database=test user=CALLER lookup yielded: Philip Hazel search_tidyup called -close PGSQL connection: (/tmp/.s.PGSQL.5432)/test/CALLER ->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>> +close PGSQL connection: (TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER +>>>>>>>>>>>>>>>> Exim pid=pppp (main: expansion test) terminating with rc=0 >>>>>>>>>>>>>>>> + +******** SERVER ******** +LOG: redirecting log output to logging collector process +HINT: Future log output will appear in directory "pg_log". diff --git a/test/stdout/2620 b/test/stdout/2620 new file mode 100644 index 000000000..668eca73a --- /dev/null +++ b/test/stdout/2620 @@ -0,0 +1,66 @@ +The files belonging to this database system will be owned by user "CALLER". +This user must also own the server process. + +The database cluster will be initialized with locale "C". +The default database encoding has accordingly been set to "SQL_ASCII". +The default text search configuration will be set to "english". + +Data page checksums are disabled. + +creating directory TESTSUITE/pgsql/data ... ok +creating subdirectories ... ok +selecting default max_connections ... 100 +selecting default shared_buffers ... 128MB +selecting dynamic shared memory implementation ... posix +creating configuration files ... ok +running bootstrap script ... ok +performing post-bootstrap initialization ... ok +syncing data to disk ... ok + +Success. You can now start the database server using: + + pg_ctl -D TESTSUITE/pgsql/data -l logfile start + +CREATE TABLE +INSERT 0 1 +INSERT 0 1 +INSERT 0 1 +INSERT 0 1 +INSERT 0 1 +INSERT 0 1 +INSERT 0 1 +> Philip Hazel +> Philip Hazel +> +> +> id=nothing name="" +> 0 +> name="\"stquot" id=quote2 +> name="before
+after" id=newline +> name="x x" id=tab +> name='stquot id=quote1 +> Failed: lookup of "servers=x:localhost; select name from them where id='ph10';" gave DEFER: PostgreSQL server "x" not found in pgsql_servers +> Philip Hazel +> Philip Hazel +> Philip Hazel +> x +> Philip Hazel +Aristotle +> name="Philip Hazel" id=ph10 +name=Aristotle id=aaaa +> + +**** SMTP testing session as if from host 10.0.0.0 +**** 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 OK
+550 relay not permitted
+550 relay not permitted
+221 myhost.test.ex closing connection
+> Philip Hazel +> +waiting for server to shut down.... done +server stopped diff --git a/test/stdout/9200 b/test/stdout/9200 deleted file mode 100644 index d2ec96f9d..000000000 --- a/test/stdout/9200 +++ /dev/null @@ -1,28 +0,0 @@ -> Philip Hazel -> Philip Hazel -> -> -> id=nothing name="" -> 0 -> name="\"stquot" id=quote2 -> name="before -after" id=newline -> name="x x" id=tab -> name='stquot id=quote1 -> Failed: lookup of "servers=x:localhost; select name from them where id='CALLER';" gave DEFER: PostgreSQL server "x" not found in pgsql_servers -> Philip Hazel -> Philip Hazel -> Philip Hazel -> - -**** SMTP testing session as if from host 10.0.0.0 -**** 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 OK
-550 relay not permitted
-550 relay not permitted
-221 myhost.test.ex closing connection
-> Philip Hazel -> |