ph10 2007/08/23 11:16:51 BST
Modified files:
exim-doc/doc-txt ChangeLog NewStuff
exim-src/scripts MakeLinks
exim-src/src/lookups Makefile lf_functions.h mysql.c pgsql.c
exim-test/scripts/9100-MySQL 9100
exim-test/scripts/9200-PostgreSQL 9200
exim-test/stderr 9100 9200
exim-test/stdout 9100 9200
Added files:
exim-src/src/lookups lf_sqlperform.c
Log:
Add "server=" feature to MySQL and PostgreSQL lookups.
Revision Changes Path
1.526 +3 -0 exim/exim-doc/doc-txt/ChangeLog
1.156 +32 -0 exim/exim-doc/doc-txt/NewStuff
1.12 +1 -0 exim/exim-src/scripts/MakeLinks
1.6 +2 -1 exim/exim-src/src/lookups/Makefile
1.5 +3 -0 exim/exim-src/src/lookups/lf_functions.h
1.1 +139 -0 exim/exim-src/src/lookups/lf_sqlperform.c (new)
1.5 +5 -21 exim/exim-src/src/lookups/mysql.c
1.10 +5 -22 exim/exim-src/src/lookups/pgsql.c
1.2 +4 -0 exim/exim-test/scripts/9100-MySQL/9100
1.3 +4 -0 exim/exim-test/scripts/9200-PostgreSQL/9200
1.4 +57 -12 exim/exim-test/stderr/9100
1.6 +57 -13 exim/exim-test/stderr/9200
1.2 +4 -0 exim/exim-test/stdout/9100
1.3 +4 -0 exim/exim-test/stdout/9200
Index: ChangeLog
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
retrieving revision 1.525
retrieving revision 1.526
diff -u -r1.525 -r1.526
--- ChangeLog 22 Aug 2007 14:20:28 -0000 1.525
+++ ChangeLog 23 Aug 2007 10:16:51 -0000 1.526
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.525 2007/08/22 14:20:28 ph10 Exp $
+$Cambridge: exim/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 @@
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
-----------------
Index: NewStuff
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/NewStuff,v
retrieving revision 1.155
retrieving revision 1.156
diff -u -r1.155 -r1.156
--- NewStuff 22 Aug 2007 10:10:23 -0000 1.155
+++ NewStuff 23 Aug 2007 10:16:51 -0000 1.156
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.155 2007/08/22 10:10:23 ph10 Exp $
+$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.156 2007/08/23 10:16:51 ph10 Exp $
New Features in Exim
--------------------
@@ -119,6 +119,38 @@
"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
------------
Index: MakeLinks
===================================================================
RCS file: /home/cvs/exim/exim-src/scripts/MakeLinks,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- MakeLinks 26 Jun 2007 11:16:54 -0000 1.11
+++ MakeLinks 23 Aug 2007 10:16:51 -0000 1.12
@@ -1,5 +1,5 @@
#!/bin/sh
-# $Cambridge: exim/exim-src/scripts/MakeLinks,v 1.11 2007/06/26 11:16:54 ph10 Exp $
+# $Cambridge: exim/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/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 ..
Index: lf_sqlperform.c
====================================================================
/* $Cambridge: exim/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 */
Index: Makefile
===================================================================
RCS file: /home/cvs/exim/exim-src/src/lookups/Makefile,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Makefile 12 Sep 2005 13:50:03 -0000 1.5
+++ Makefile 23 Aug 2007 10:16:51 -0000 1.6
@@ -1,4 +1,4 @@
-# $Cambridge: exim/exim-src/src/lookups/Makefile,v 1.5 2005/09/12 13:50:03 ph10 Exp $
+# $Cambridge: exim/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 @@
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
Index: lf_functions.h
===================================================================
RCS file: /home/cvs/exim/exim-src/src/lookups/lf_functions.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- lf_functions.h 8 Jan 2007 10:50:19 -0000 1.4
+++ lf_functions.h 23 Aug 2007 10:16:51 -0000 1.5
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/lookups/lf_functions.h,v 1.4 2007/01/08 10:50:19 ph10 Exp $ */
+/* $Cambridge: exim/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 */
Index: mysql.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/lookups/mysql.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- mysql.c 8 Jan 2007 10:50:19 -0000 1.4
+++ mysql.c 23 Aug 2007 10:16:51 -0000 1.5
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/lookups/mysql.c,v 1.4 2007/01/08 10:50:19 ph10 Exp $ */
+/* $Cambridge: exim/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 @@
*************************************************/
/* 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);
}
Index: pgsql.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/lookups/pgsql.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- pgsql.c 8 Jan 2007 10:50:19 -0000 1.9
+++ pgsql.c 23 Aug 2007 10:16:51 -0000 1.10
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/lookups/pgsql.c,v 1.9 2007/01/08 10:50:19 ph10 Exp $ */
+/* $Cambridge: exim/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 @@
*************************************************/
/* 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);
}
Index: 9100
===================================================================
RCS file: /home/cvs/exim/exim-test/scripts/9100-MySQL/9100,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- 9100 7 Feb 2006 10:54:50 -0000 1.1
+++ 9100 23 Aug 2007 10:16:51 -0000 1.2
@@ -10,6 +10,10 @@
${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:<a@b>
Index: 9200
===================================================================
RCS file: /home/cvs/exim/exim-test/scripts/9200-PostgreSQL/9200,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- 9200 30 Jun 2006 13:57:46 -0000 1.2
+++ 9200 23 Aug 2007 10:16:51 -0000 1.3
@@ -10,6 +10,10 @@
${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>
Index: 9100
===================================================================
RCS file: /home/cvs/exim/exim-test/stderr/9100,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- 9100 26 Jul 2006 14:39:14 -0000 1.3
+++ 9100 23 Aug 2007 10:16:51 -0000 1.4
@@ -8,7 +8,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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
Index: 9200
===================================================================
RCS file: /home/cvs/exim/exim-test/stderr/9200,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- 9200 26 Jul 2006 14:39:14 -0000 1.5
+++ 9200 23 Aug 2007 10:16:51 -0000 1.6
@@ -8,7 +8,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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
Index: 9100
===================================================================
RCS file: /home/cvs/exim/exim-test/stdout/9100,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- 9100 7 Feb 2006 10:47:37 -0000 1.1
+++ 9100 23 Aug 2007 10:16:51 -0000 1.2
@@ -10,6 +10,10 @@
> 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
Index: 9200
===================================================================
RCS file: /home/cvs/exim/exim-test/stdout/9200,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- 9200 30 Jun 2006 13:57:46 -0000 1.2
+++ 9200 23 Aug 2007 10:16:51 -0000 1.3
@@ -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