From: Philip Hazel Date: Thu, 23 Aug 2007 10:16:51 +0000 (+0000) Subject: Add "server=" feature to MySQL and PostgreSQL lookups. X-Git-Tag: exim-4_68~9 X-Git-Url: https://git.exim.org/users/heiko/exim.git/commitdiff_plain/b7670459b9549ad6dcca2398580165e54b09b92d Add "server=" feature to MySQL and PostgreSQL lookups. --- diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 1e79291f3..9516dafbe 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.525 2007/08/22 14:20:28 ph10 Exp $ +$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.526 2007/08/23 10:16:51 ph10 Exp $ Change log file for Exim from version 4.21 ------------------------------------------- @@ -92,6 +92,9 @@ PH/10 It seems that peer DN values may contain newlines (and other non-printing characters?) which causes problems in log lines. The DN values are now passed through string_printing() before being added to log lines. +PH/11 Added the "servers=" facility to MySQL and PostgreSQL lookups. (Oracle + and InterBase are left for another time.) + Exim version 4.67 ----------------- diff --git a/doc/doc-txt/NewStuff b/doc/doc-txt/NewStuff index e3fddf3f7..f58687ddb 100644 --- a/doc/doc-txt/NewStuff +++ b/doc/doc-txt/NewStuff @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-txt/NewStuff,v 1.155 2007/08/22 10:10:23 ph10 Exp $ +$Cambridge: exim/doc/doc-txt/NewStuff,v 1.156 2007/08/23 10:16:51 ph10 Exp $ New Features in Exim -------------------- @@ -119,6 +119,38 @@ Version 4.68 "drop" verb in another ACL, it is the message from the other ACL that is used. +10. For MySQL and PostgreSQL lookups, it is now possible to specify a list of + servers with individual queries. This is done by starting the query with + "servers=x:y:z;", where each item in the list may take one of two forms: + + (1) If it is just a host name, the appropriate global option (mysql_servers + or pgsql_servers) is searched for a host of the same name, and the + remaining parameters (database, user, password) are taken from there. + + (2) If it contains any slashes, it is taken as a complete parameter set. + + The list of servers is used in exactly the same was as the global list. + Once a connection to a server has happened and a query has been + successfully executed, processing of the lookup ceases. + + This feature is intended for use in master/slave situations where updates + are occurring, and one wants to update a master rather than a slave. If the + masters are in the list for reading, you might have: + + mysql_servers = slave1/db/name/pw:slave2/db/name/pw:master/db/name/pw + + In an updating lookup, you could then write + + ${lookup mysql{servers=master; UPDATE ...} + + If, on the other hand, the master is not to be used for reading lookups: + + pgsql_servers = slave1/db/name/pw:slave2/db/name/pw + + you can still update the master by + + ${lookup pgsql{servers=master/db/name/pw; UPDATE ...} + Version 4.67 ------------ diff --git a/src/scripts/MakeLinks b/src/scripts/MakeLinks index ce125a8dd..c016e50c7 100755 --- a/src/scripts/MakeLinks +++ b/src/scripts/MakeLinks @@ -1,5 +1,5 @@ #!/bin/sh -# $Cambridge: exim/src/scripts/MakeLinks,v 1.11 2007/06/26 11:16:54 ph10 Exp $ +# $Cambridge: exim/src/scripts/MakeLinks,v 1.12 2007/08/23 10:16:51 ph10 Exp $ # Script to build links for all the exim source files from the system- # specific build directory. It should be run from within that directory. @@ -95,6 +95,7 @@ ln -s ../../src/lookups/whoson.c whoson.c ln -s ../../src/lookups/lf_functions.h lf_functions.h ln -s ../../src/lookups/lf_check_file.c lf_check_file.c ln -s ../../src/lookups/lf_quote.c lf_quote.c +ln -s ../../src/lookups/lf_sqlperform.c lf_sqlperform.c cd .. diff --git a/src/src/lookups/Makefile b/src/src/lookups/Makefile index 59237263c..fce944589 100644 --- a/src/src/lookups/Makefile +++ b/src/src/lookups/Makefile @@ -1,4 +1,4 @@ -# $Cambridge: exim/src/src/lookups/Makefile,v 1.5 2005/09/12 13:50:03 ph10 Exp $ +# $Cambridge: exim/src/src/lookups/Makefile,v 1.6 2007/08/23 10:16:51 ph10 Exp $ # Make file for building a library containing all the available lookups and # calling it lookups.a. This is called from the main make file, after cd'ing @@ -7,7 +7,7 @@ OBJ = cdb.o dbmdb.o dnsdb.o dsearch.o ibase.o ldap.o lsearch.o mysql.o nis.o \ nisplus.o oracle.o passwd.o pgsql.o spf.o sqlite.o testdb.o whoson.o \ - lf_check_file.o lf_quote.o + lf_check_file.o lf_quote.o lf_sqlperform.o lookups.a: $(OBJ) @$(RM_COMMAND) -f lookups.a @@ -22,6 +22,7 @@ lookups.a: $(OBJ) lf_check_file.o: $(HDRS) lf_check_file.c lf_functions.h lf_quote.o: $(HDRS) lf_quote.c lf_functions.h +lf_sqlperform.o: $(HDRS) lf_sqlperform.c lf_functions.h cdb.o: $(HDRS) cdb.c cdb.h dbmdb.o: $(HDRS) dbmdb.c dbmdb.h diff --git a/src/src/lookups/lf_functions.h b/src/src/lookups/lf_functions.h index 0cf06a2d7..7e9dec1dd 100644 --- a/src/src/lookups/lf_functions.h +++ b/src/src/lookups/lf_functions.h @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/lookups/lf_functions.h,v 1.4 2007/01/08 10:50:19 ph10 Exp $ */ +/* $Cambridge: exim/src/src/lookups/lf_functions.h,v 1.5 2007/08/23 10:16:51 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -12,5 +12,8 @@ extern int lf_check_file(int, uschar *, int, int, uid_t *, gid_t *, char *, uschar **); extern uschar *lf_quote(uschar *, uschar *, int, uschar *, int *, int *); +extern int lf_sqlperform(uschar *, uschar *, uschar *, uschar *, uschar **, + uschar **, BOOL *, int(*)(uschar *, uschar *, uschar **, + uschar **, BOOL *, BOOL *)); /* End of lf_functions.h */ diff --git a/src/src/lookups/lf_sqlperform.c b/src/src/lookups/lf_sqlperform.c new file mode 100644 index 000000000..2d50f70a0 --- /dev/null +++ b/src/src/lookups/lf_sqlperform.c @@ -0,0 +1,139 @@ +/* $Cambridge: exim/src/src/lookups/lf_sqlperform.c,v 1.1 2007/08/23 10:16:51 ph10 Exp $ */ + +/************************************************* +* Exim - an Internet mail transport agent * +*************************************************/ + +/* Copyright (c) University of Cambridge 1995 - 2007 */ +/* See the file NOTICE for conditions of use and distribution. */ + + +#include "../exim.h" +#include "lf_functions.h" + + + +/************************************************* +* Call SQL server(s) to run an actual query * +*************************************************/ + +/* All the SQL lookups are of the same form, with a list of servers to try +until one can be accessed. It is now also possible to provide the server data +as part of the query. This function manages server selection and looping; each +lookup has its own function for actually performing the lookup. + +Arguments: + name the lookup name, e.g. "MySQL" + optionname the name of the servers option, e.g. "mysql_servers" + optserverlist the value of the servers option + query the query + result where to pass back the result + errmsg where to pass back an error message + do_cache to be set FALSE if data is changed + func the lookup function to call + +Returns: the return from the lookup function, or DEFER +*/ + +int +lf_sqlperform(uschar *name, uschar *optionname, uschar *optserverlist, + uschar *query, uschar **result, uschar **errmsg, BOOL *do_cache, + int(*fn)(uschar *, uschar *, uschar **, uschar **, BOOL *, BOOL *)) +{ +int sep, rc; +uschar *server; +uschar *serverlist; +uschar buffer[512]; +BOOL defer_break = FALSE; + +DEBUG(D_lookup) debug_printf("%s query: %s\n", name, query); + +/* Handle queries that do not have server information at the start. */ + +if (Ustrncmp(query, "servers", 7) != 0) + { + sep = 0; + serverlist = optserverlist; + while ((server = string_nextinlist(&serverlist, &sep, buffer, + sizeof(buffer))) != NULL) + { + rc = (*fn)(query, server, result, errmsg, &defer_break, do_cache); + if (rc != DEFER || defer_break) return rc; + } + if (optserverlist == NULL) + *errmsg = string_sprintf("no %s servers defined (%s option)", name, + optionname); + } + +/* Handle queries that do have server information at the start. */ + +else + { + int qsep; + uschar *s, *ss; + uschar *qserverlist; + uschar *qserver; + uschar qbuffer[512]; + + s = query + 7; + while (isspace(*s)) s++; + if (*s++ != '=') + { + *errmsg = string_sprintf("missing = after \"servers\" in %s lookup", name); + return DEFER; + } + while (isspace(*s)) s++; + + ss = Ustrchr(s, ';'); + if (ss == NULL) + { + *errmsg = string_sprintf("missing ; after \"servers=\" in %s lookup", + name); + return DEFER; + } + + if (ss == s) + { + *errmsg = string_sprintf("\"servers=\" defines no servers in \"%s\"", + query); + return DEFER; + } + + qserverlist = string_sprintf("%.*s", ss - s, s); + qsep = 0; + + while ((qserver = string_nextinlist(&qserverlist, &qsep, qbuffer, + sizeof(qbuffer))) != NULL) + { + if (Ustrchr(qserver, '/') != NULL) + server = qserver; + else + { + int len = Ustrlen(qserver); + + sep = 0; + serverlist = optserverlist; + while ((server = string_nextinlist(&serverlist, &sep, buffer, + sizeof(buffer))) != NULL) + { + if (Ustrncmp(server, qserver, len) == 0 && server[len] == '/') + break; + } + + if (server == NULL) + { + *errmsg = string_sprintf("%s server \"%s\" not found in %s", name, + qserver, optionname); + return DEFER; + } + } + + rc = (*fn)(ss+1, server, result, errmsg, &defer_break, do_cache); + if (rc != DEFER || defer_break) return rc; + } + } + +return DEFER; +} + +/* End of lf_sqlperform.c */ diff --git a/src/src/lookups/mysql.c b/src/src/lookups/mysql.c index 56da5f95d..781b09575 100644 --- a/src/src/lookups/mysql.c +++ b/src/src/lookups/mysql.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/lookups/mysql.c,v 1.4 2007/01/08 10:50:19 ph10 Exp $ */ +/* $Cambridge: exim/src/src/lookups/mysql.c,v 1.5 2007/08/23 10:16:51 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -338,32 +338,16 @@ else *************************************************/ /* See local README for interface description. The handle and filename -arguments are not used. Loop through a list of servers while the query is -deferred with a retryable error. */ +arguments are not used. The code to loop through a list of servers while the +query is deferred with a retryable error is now in a separate function that is +shared with other SQL lookups. */ int mysql_find(void *handle, uschar *filename, uschar *query, int length, uschar **result, uschar **errmsg, BOOL *do_cache) { -int sep = 0; -uschar *server; -uschar *list = mysql_servers; -uschar buffer[512]; - -DEBUG(D_lookup) debug_printf("MYSQL query: %s\n", query); - -while ((server = string_nextinlist(&list, &sep, buffer, sizeof(buffer))) != NULL) - { - BOOL defer_break = FALSE; - int rc = perform_mysql_search(query, server, result, errmsg, &defer_break, - do_cache); - if (rc != DEFER || defer_break) return rc; - } - -if (mysql_servers == NULL) - *errmsg = US"no MYSQL servers defined (mysql_servers option)"; - -return DEFER; +return lf_sqlperform(US"MySQL", US"mysql_servers", mysql_servers, query, + result, errmsg, do_cache, perform_mysql_search); } diff --git a/src/src/lookups/pgsql.c b/src/src/lookups/pgsql.c index e6e8f70ba..eace0840d 100644 --- a/src/src/lookups/pgsql.c +++ b/src/src/lookups/pgsql.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/lookups/pgsql.c,v 1.9 2007/01/08 10:50:19 ph10 Exp $ */ +/* $Cambridge: exim/src/src/lookups/pgsql.c,v 1.10 2007/08/23 10:16:51 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -410,33 +410,16 @@ else *************************************************/ /* See local README for interface description. The handle and filename -arguments are not used. Loop through a list of servers while the query is -deferred with a retryable error. */ +arguments are not used. The code to loop through a list of servers while the +query is deferred with a retryable error is now in a separate function that is +shared with other SQL lookups. */ int pgsql_find(void *handle, uschar *filename, uschar *query, int length, uschar **result, uschar **errmsg, BOOL *do_cache) { -int sep = 0; -uschar *server; -uschar *list = pgsql_servers; -uschar buffer[512]; - -DEBUG(D_lookup) debug_printf("PGSQL query: %s\n", query); - -while ((server = string_nextinlist(&list, &sep, buffer, sizeof(buffer))) - != NULL) - { - BOOL defer_break = FALSE; - int rc = perform_pgsql_search(query, server, result, errmsg, &defer_break, - do_cache); - if (rc != DEFER || defer_break) return rc; - } - -if (pgsql_servers == NULL) - *errmsg = US"no PGSQL servers defined (pgsql_servers option)"; - -return DEFER; +return lf_sqlperform(US"PostgreSQL", US"pgsql_servers", pgsql_servers, query, + result, errmsg, do_cache, perform_pgsql_search); } diff --git a/test/scripts/9100-MySQL/9100 b/test/scripts/9100-MySQL/9100 index 3121ca950..fdf2caf9a 100644 --- a/test/scripts/9100-MySQL/9100 +++ b/test/scripts/9100-MySQL/9100 @@ -10,6 +10,10 @@ ${lookup mysql {select * from them where id='quote';}} ${lookup mysql {select * from them where id='filter';}} ${lookup mysql {select * from them where id='quote2';}} ${lookup mysql {select * from them where id='nlonly';}} +${lookup mysql {servers=x:localhost; select name from them where id='ph10';}} +${lookup mysql {servers=localhost:x; select name from them where id='ph10';}} +${lookup mysql {servers=localhost/test/root/:x; select name from them where id='ph10';}} +${lookup mysql {servers=HOST_IPV4/test/root/:localhost; select name from them where id='ph10';}} **** exim -d -bh 10.0.0.0 mail from: diff --git a/test/scripts/9200-PostgreSQL/9200 b/test/scripts/9200-PostgreSQL/9200 index c4440a89e..2dfb15b95 100644 --- a/test/scripts/9200-PostgreSQL/9200 +++ b/test/scripts/9200-PostgreSQL/9200 @@ -10,6 +10,10 @@ ${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: diff --git a/test/stderr/9100 b/test/stderr/9100 index 984484f1f..60c63ba08 100644 --- a/test/stderr/9100 +++ b/test/stderr/9100 @@ -8,7 +8,7 @@ LRU list: internal_search_find: file="NULL" type=mysql key="select name from them where id='CALLER';" database lookup required for select name from them where id='CALLER'; -MYSQL query: select name from them where id='CALLER'; +MySQL query: select name from them where id='CALLER'; MYSQL new connection: host=localhost port=0 socket=NULL database=test user=root lookup yielded: Philip Hazel search_open: mysql "NULL" @@ -28,7 +28,7 @@ LRU list: internal_search_find: file="NULL" type=mysql key="select name from them where id='xxxx';" database lookup required for select name from them where id='xxxx'; -MYSQL query: select name from them where id='xxxx'; +MySQL query: select name from them where id='xxxx'; MYSQL using cached connection for localhost/test/root MYSQL: no data found lookup failed @@ -40,7 +40,7 @@ LRU list: internal_search_find: file="NULL" type=mysql key="select name from them where id='nothing';" database lookup required for select name from them where id='nothing'; -MYSQL query: select name from them where id='nothing'; +MySQL query: select name from them where id='nothing'; MYSQL using cached connection for localhost/test/root MYSQL: no data found lookup failed @@ -52,7 +52,7 @@ LRU list: internal_search_find: file="NULL" type=mysql key="select id,name from them where id='nothing';" database lookup required for select id,name from them where id='nothing'; -MYSQL query: select id,name from them where id='nothing'; +MySQL query: select id,name from them where id='nothing'; MYSQL using cached connection for localhost/test/root lookup yielded: id=nothing name="" search_open: mysql "NULL" @@ -63,7 +63,7 @@ LRU list: internal_search_find: file="NULL" type=mysql key="delete from them where id='nonexist';" database lookup required for delete from them where id='nonexist'; -MYSQL query: delete from them where id='nonexist'; +MySQL query: delete from them where id='nonexist'; MYSQL using cached connection for localhost/test/root MYSQL: query was not one that returns data lookup forced cache cleanup @@ -76,7 +76,7 @@ LRU list: internal_search_find: file="NULL" type=mysql key="select * from them where id='quote';" database lookup required for select * from them where id='quote'; -MYSQL query: select * from them where id='quote'; +MySQL query: select * from them where id='quote'; MYSQL using cached connection for localhost/test/root lookup yielded: id=quote name="\"Q\" Oted" home=/home/quoted mail=quoted@xxx search_open: mysql "NULL" @@ -87,7 +87,7 @@ LRU list: internal_search_find: file="NULL" type=mysql key="select * from them where id='filter';" database lookup required for select * from them where id='filter'; -MYSQL query: select * from them where id='filter'; +MySQL query: select * from them where id='filter'; MYSQL using cached connection for localhost/test/root lookup yielded: id=filter name=filter home=filter mail="#Exim filter deliver postmaster" @@ -99,7 +99,7 @@ LRU list: internal_search_find: file="NULL" type=mysql key="select * from them where id='quote2';" database lookup required for select * from them where id='quote2'; -MYSQL query: select * from them where id='quote2'; +MySQL query: select * from them where id='quote2'; MYSQL using cached connection for localhost/test/root lookup yielded: id=quote2 name="\"qnosp" home=/home/q2 mail="" search_open: mysql "NULL" @@ -110,10 +110,55 @@ LRU list: internal_search_find: file="NULL" type=mysql key="select * from them where id='nlonly';" database lookup required for select * from them where id='nlonly'; -MYSQL query: select * from them where id='nlonly'; +MySQL query: select * from them where id='nlonly'; MYSQL using cached connection for localhost/test/root lookup yielded: id=nlonly name=filter home=filter mail="Before After" +search_open: mysql "NULL" + cached open +search_find: file="NULL" + key="servers=x:localhost; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 +LRU list: +internal_search_find: file="NULL" + type=mysql 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'; +MySQL query: servers=x:localhost; select name from them where id='CALLER'; +lookup deferred: MySQL server "x" not found in mysql_servers +search_open: mysql "NULL" + cached open +search_find: file="NULL" + key="servers=localhost:x; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 +LRU list: +internal_search_find: file="NULL" + type=mysql 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'; +MySQL query: servers=localhost:x; select name from them where id='CALLER'; +MYSQL using cached connection for localhost/test/root +lookup yielded: Philip Hazel +search_open: mysql "NULL" + cached open +search_find: file="NULL" + key="servers=localhost/test/root/:x; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 +LRU list: +internal_search_find: file="NULL" + type=mysql key="servers=localhost/test/root/:x; select name from them where id='CALLER';" +database lookup required for servers=localhost/test/root/:x; select name from them where id='CALLER'; +MySQL query: servers=localhost/test/root/:x; select name from them where id='CALLER'; +MYSQL using cached connection for localhost/test/root +lookup yielded: Philip Hazel +search_open: mysql "NULL" + cached open +search_find: file="NULL" + key="servers=HOST_IPV4/test/root/:localhost; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 +LRU list: +internal_search_find: file="NULL" + type=mysql key="servers=HOST_IPV4/test/root/:localhost; select name from them where id='CALLER';" +database lookup required for servers=HOST_IPV4/test/root/:localhost; select name from them where id='CALLER'; +MySQL query: servers=HOST_IPV4/test/root/:localhost; select name from them where id='CALLER'; +MYSQL new connection: host=HOST_IPV4 port=0 socket=NULL database=test user=root +MYSQL connection failed: Unknown MySQL server host 'HOST_IPV4' (1) +MYSQL using cached connection for localhost/test/root +lookup yielded: Philip Hazel search_tidyup called close MYSQL connection: localhost/test/root >>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>> @@ -161,7 +206,7 @@ LRU list: internal_search_find: file="NULL" type=mysql key="select * from them where id='10.0.0.0'" database lookup required for select * from them where id='10.0.0.0' -MYSQL query: select * from them where id='10.0.0.0' +MySQL query: select * from them where id='10.0.0.0' MYSQL new connection: host=localhost port=0 socket=NULL database=test user=root MYSQL: no data found lookup failed @@ -266,7 +311,7 @@ LRU list: internal_search_find: file="NULL" type=mysql key="select name from them where id='CALLER'" database lookup required for select name from them where id='CALLER' -MYSQL query: select name from them where id='CALLER' +MySQL query: select name from them where id='CALLER' MYSQL new connection: host=localhost port=0 socket=NULL database=test user=root lookup yielded: Philip Hazel calling r1 router @@ -309,7 +354,7 @@ LRU list: internal_search_find: file="NULL" type=mysql key="select id from them where id='CALLER'" database lookup required for select id from them where id='CALLER' -MYSQL query: select id from them where id='CALLER' +MySQL query: select id from them where id='CALLER' MYSQL new connection: host=localhost port=0 socket=NULL database=test user=root lookup yielded: CALLER appendfile: mode=600 notify_comsat=0 quota=0 warning=0 diff --git a/test/stderr/9200 b/test/stderr/9200 index 55143b46c..2fff471a3 100644 --- a/test/stderr/9200 +++ b/test/stderr/9200 @@ -8,7 +8,7 @@ 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'; -PGSQL query: 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 lookup yielded: Philip Hazel search_open: pgsql "NULL" @@ -28,7 +28,7 @@ LRU list: 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'; -PGSQL query: 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: no data found lookup failed @@ -40,7 +40,7 @@ LRU list: 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'; -PGSQL query: select name from them where id='nothing'; +PostgreSQL query: select name from them where id='nothing'; PGSQL using cached connection for localhost/test/CALLER lookup yielded: search_open: pgsql "NULL" @@ -51,7 +51,7 @@ LRU list: 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'; -PGSQL query: 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 lookup yielded: id=nothing name="" search_open: pgsql "NULL" @@ -62,7 +62,7 @@ LRU list: internal_search_find: file="NULL" type=pgsql key="delete from them where id='nonexist';" database lookup required for delete from them where id='nonexist'; -PGSQL query: delete from them where id='nonexist'; +PostgreSQL query: delete from them where id='nonexist'; PGSQL using cached connection for localhost/test/CALLER PGSQL: command does not return any data but was successful. Rows affected: 0 lookup forced cache cleanup @@ -75,7 +75,7 @@ LRU list: internal_search_find: file="NULL" type=pgsql key="select * from them where id='quote2';" database lookup required for select * from them where id='quote2'; -PGSQL query: select * from them where id='quote2'; +PostgreSQL query: select * from them where id='quote2'; PGSQL using cached connection for localhost/test/CALLER lookup yielded: name="\"stquot" id=quote2 search_open: pgsql "NULL" @@ -86,7 +86,7 @@ LRU list: internal_search_find: file="NULL" type=pgsql key="select * from them where id='newline';" database lookup required for select * from them where id='newline'; -PGSQL query: 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 after" id=newline @@ -98,7 +98,7 @@ LRU list: internal_search_find: file="NULL" type=pgsql key="select * from them where id='tab';" database lookup required for select * from them where id='tab'; -PGSQL query: select * from them where id='tab'; +PostgreSQL query: select * from them where id='tab'; PGSQL using cached connection for localhost/test/CALLER lookup yielded: name="x x" id=tab search_open: pgsql "NULL" @@ -109,10 +109,54 @@ LRU list: internal_search_find: file="NULL" type=pgsql key="select * from them where name='''stquot';" database lookup required for select * from them where name='''stquot'; -PGSQL query: select * from them where name='''stquot'; +PostgreSQL query: select * from them where name='''stquot'; PGSQL using cached connection for localhost/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 +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'; +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 +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 +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 +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 +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 +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 +lookup yielded: Philip Hazel 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 >>>>>>>>>>>>>>>> Exim version x.yz .... @@ -159,7 +203,7 @@ LRU list: 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' -PGSQL query: 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: no data found lookup failed @@ -290,7 +334,7 @@ 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' -PGSQL query: 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 lookup yielded: Philip Hazel calling r1 router @@ -333,7 +377,7 @@ 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' -PGSQL query: 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 appendfile: mode=600 notify_comsat=0 quota=0 warning=0 @@ -387,7 +431,7 @@ 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'; -PGSQL query: 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 lookup yielded: Philip Hazel search_tidyup called diff --git a/test/stdout/9100 b/test/stdout/9100 index 8ef63f6fe..460d76714 100644 --- a/test/stdout/9100 +++ b/test/stdout/9100 @@ -10,6 +10,10 @@ deliver postmaster" > id=quote2 name="\"qnosp" home=/home/q2 mail="" > id=nlonly name=filter home=filter mail="Before After" +> Failed: lookup of "servers=x:localhost; select name from them where id='CALLER';" gave DEFER: MySQL server "x" not found in mysql_servers +> Philip Hazel +> Philip Hazel +> Philip Hazel > **** SMTP testing session as if from host 10.0.0.0 diff --git a/test/stdout/9200 b/test/stdout/9200 index 4b97f9f71..d2ec96f9d 100644 --- a/test/stdout/9200 +++ b/test/stdout/9200 @@ -9,6 +9,10 @@ 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