diff -ru -I Id: -x CVS -N dbmail/config.c dbmail.working/config.c
--- dbmail/config.c	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/config.c	2002-12-05 21:43:06.000000000 +1300
@@ -185,5 +185,14 @@
   GetConfigValue("pass", cfg, pass);
 }
 
+void GetDBReadParams(field_t host, field_t db, field_t user, field_t pass, field_t port, struct list *cfg)
+{
+  GetConfigValue("read_host", cfg, host);
+  GetConfigValue("read_db", cfg, db);
+  GetConfigValue("read_user", cfg, user);
+  GetConfigValue("read_pass", cfg, pass);
+  GetConfigValue("read_port", cfg, port);
+}
+
 
 
diff -ru -I Id: -x CVS -N dbmail/config.h dbmail.working/config.h
--- dbmail/config.h	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/config.h	2002-12-05 21:43:06.000000000 +1300
@@ -13,6 +13,7 @@
 
 #define FIELDSIZE 1024
 #define FIELDLEN FIELDSIZE
+
 typedef char field_t[FIELDSIZE];
  
 typedef struct
@@ -25,6 +26,7 @@
 
 /* some common used functions reading config options */
 void GetDBParams(field_t host, field_t db, field_t user, field_t pass, struct list *cfg);
+void GetDBReadParams(field_t host, field_t db, field_t user, field_t pass, field_t port, struct list *cfg);
 void SetTraceLevel(struct list *cfg);
 
 
diff -ru -I Id: -x CVS -N dbmail/db.h dbmail.working/db.h
--- dbmail/db.h	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/db.h	2002-12-06 11:21:10.000000000 +1300
@@ -28,6 +28,8 @@
 #define CONFIG_MANDATORY 1			
 #define CONFIG_EMPTY 0
 
+/* use a read database for all select queries */
+//#define READ_DATABASE
 
 struct session;
 struct list;
diff -ru -I Id: -x CVS -N dbmail/dbmail.conf dbmail.working/dbmail.conf
--- dbmail/dbmail.conf	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/dbmail.conf	2002-12-05 21:43:06.000000000 +1300
@@ -12,6 +12,12 @@
 user=root
 pass=
 db=dbmail
+#read parameters must be set when using a READ_DATABASE
+#read_host=localhost
+#read_user=root
+#read_pass=
+#read_db=dbmail
+#read_port=3307
 # trace level for dbmail-maintenance	
 TRACE_LEVEL=2      
 
diff -ru -I Id: -x CVS -N dbmail/imapd.c dbmail.working/imapd.c
--- dbmail/imapd.c	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/imapd.c	2002-12-05 21:43:06.000000000 +1300
@@ -29,6 +29,14 @@
 extern field_t _db_user;
 extern field_t _db_pass;
 
+#ifdef READ_DATABASE
+extern field_t _db_host_r;
+extern field_t _db_db_r;
+extern field_t _db_user_r;
+extern field_t _db_pass_r;
+extern field_t _db_port_r;
+#endif
+
 
 void SetConfigItems(serverConfig_t *config, struct list *items);
 void Daemonize();
@@ -74,6 +82,9 @@
       SetConfigItems(&config, &imapItems);
       SetTraceLevel(&imapItems);
       GetDBParams(_db_host, _db_db, _db_user, _db_pass, &sysItems);
+#ifdef READ_DATABASE
+      GetDBReadParams(_db_host_r, _db_db_r, _db_user_r, _db_pass_r, _db_port_r, &sysItems);
+#endif
 
       config.ClientHandler = IMAPClientHandler;
       config.timeoutMsg = IMAP_TIMEOUT_MSG;
diff -ru -I Id: -x CVS -N dbmail/main.c dbmail.working/main.c
--- dbmail/main.c	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/main.c	2002-12-05 21:43:06.000000000 +1300
@@ -25,7 +25,7 @@
 
 struct list sysItems, smtpItems; /* config item lists */
 
-char *configFile = "dbmail.conf";
+char *configFile = "/etc/dbmail.conf";
 
 /* set up database login data */
 extern field_t _db_host;
@@ -33,6 +33,14 @@
 extern field_t _db_user;
 extern field_t _db_pass;
 
+#ifdef READ_DATABASE
+extern field_t _db_host_r;
+extern field_t _db_db_r;
+extern field_t _db_user_r;
+extern field_t _db_pass_r;
+extern field_t _db_port_r;
+#endif
+
 
 int mode;			/* how should we process */
   
@@ -64,6 +72,9 @@
   ReadConfig("SMTP", configFile, &smtpItems);
   SetTraceLevel(&smtpItems);
   GetDBParams(_db_host, _db_db, _db_user, _db_pass, &sysItems);
+#ifdef READ_DATABASE
+  GetDBReadParams(_db_host_r, _db_db_r, _db_user_r, _db_pass_r, _db_port_r, &sysItems);
+#endif
 
   if (db_connect() < 0) 
     trace(TRACE_FATAL,"main(): database connection failed");
diff -ru -I Id: -x CVS -N dbmail/maintenance.c dbmail.working/maintenance.c
--- dbmail/maintenance.c	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/maintenance.c	2002-12-06 11:20:18.000000000 +1300
@@ -27,6 +27,14 @@
 extern field_t _db_user;
 extern field_t _db_pass;
 
+#ifdef READ_DATABASE
+extern field_t _db_host_r;
+extern field_t _db_db_r;
+extern field_t _db_user_r;
+extern field_t _db_pass_r;
+extern field_t _db_port_r;
+#endif
+
 
 void find_time(char *timestr, const char *timespec);
 
@@ -56,6 +64,9 @@
   ReadConfig("DBMAIL", configFile, &sysItems);
   SetTraceLevel(&sysItems);
   GetDBParams(_db_host, _db_db, _db_user, _db_pass, &sysItems);
+#ifdef READ_DATABASE
+  GetDBReadParams(_db_host_r, _db_db_r, _db_user_r, _db_pass_r, _db_port_r, &sysItems);
+#endif
 	
   setvbuf(stdout,0,_IONBF,0);
   printf ("*** dbmail-maintenance ***\n");
diff -ru -I Id: -x CVS -N dbmail/mysql/dbauthmysql.c dbmail.working/mysql/dbauthmysql.c
--- dbmail/mysql/dbauthmysql.c	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/mysql/dbauthmysql.c	2002-12-06 11:37:52.000000000 +1300
@@ -33,6 +33,13 @@
 MYSQL __auth_conn;
 #endif
 
+#ifdef READ_DATABASE
+extern MYSQL read_conn;
+#define __auth_read_conn read_conn
+#else
+#define __auth_read_conn __auth_conn
+#endif
+
 MYSQL_RES *__auth_res;
 MYSQL_ROW __auth_row;
 
@@ -63,6 +70,9 @@
 int auth_disconnect()
 {
   mysql_close(&__auth_conn);
+#ifdef READ_DATABASE
+  mysql_close(&__auth_read_conn);
+#endif
   return 0;
 }
 
@@ -96,12 +106,23 @@
 
   trace(TRACE_DEBUG,"__auth_query(): executing query [%s]", q);
 
-  if (mysql_real_query(&__auth_conn, q, strlen(q)) < 0)
+  if (strncasecmp(q, "SELECT", 6) == 0) 
     {
-      trace(TRACE_ERROR, "__auth_query(): query failed: [%s]",mysql_error(&__auth_conn));
-      return -1;
+    if (mysql_real_query(&__auth_read_conn, q, strlen(q)) < 0)
+      {
+        trace(TRACE_ERROR, "__auth_query(): query failed: [%s]",mysql_error(&__auth_read_conn));
+        return -1;
+      }
     }
-  
+  else
+    {
+    if (mysql_real_query(&__auth_conn, q, strlen(q)) < 0)
+      {
+        trace(TRACE_ERROR, "__auth_query(): query failed: [%s]",mysql_error(&__auth_conn));
+        return -1;
+      }
+    }
+    
   return 0;
 }
 
@@ -129,9 +150,9 @@
       return -1;
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL) 
+  if ((__auth_res = mysql_store_result(&__auth_read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"auth_user_exists: mysql_store_result failed: %s",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_user_exists: mysql_store_result failed: %s",mysql_error(&__auth_read_conn));
       return -1;
     }
   
@@ -165,9 +186,9 @@
       return -1;
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL) 
+  if ((__auth_res = mysql_store_result(&__auth_read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"auth_get_known_users(): mysql_store_result failed: %s",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_get_known_users(): mysql_store_result failed: %s",mysql_error(&__auth_read_conn));
       return -1;
     }
   
@@ -197,9 +218,9 @@
       return -1;
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL)
+  if ((__auth_res = mysql_store_result(&__auth_read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"auth_getclientid(): could not store query result: [%s]\n",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_getclientid(): could not store query result: [%s]\n",mysql_error(&__auth_read_conn));
       return -1;
     }
 
@@ -223,10 +244,10 @@
       return -1;
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL)
+  if ((__auth_res = mysql_store_result(&__auth_read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"auth_getmaxmailsize(): could not store query result: [%s]\n",
-	    mysql_error(&__auth_conn));
+	    mysql_error(&__auth_read_conn));
       return -1;
     }
 
@@ -271,10 +292,10 @@
       return __auth_encryption_desc_string; /* return empty */
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL)
+  if ((__auth_res = mysql_store_result(&__auth_read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"auth_getencryption(): could not store query result: [%s]\n",
-	    mysql_error(&__auth_conn));
+	    mysql_error(&__auth_read_conn));
       return __auth_encryption_desc_string; /* return empty */
     }
 
@@ -310,9 +331,9 @@
   if (__auth_query(__auth_query_data)==-1)
       return 0;
   
-  if ((myres = mysql_store_result(&__auth_conn)) == NULL) 
+  if ((myres = mysql_store_result(&__auth_read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"auth_check_user: mysql_store_result failed: [%s]",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_check_user: mysql_store_result failed: [%s]",mysql_error(&__auth_read_conn));
       return 0;
     }
 
@@ -398,9 +419,9 @@
   if (__auth_query(__auth_query_data)==-1)
       return 0;
   
-  if ((myres = mysql_store_result(&__auth_conn)) == NULL) 
+  if ((myres = mysql_store_result(&__auth_read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"auth_check_user_ext(): mysql_store_result failed: [%s]",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_check_user_ext(): mysql_store_result failed: [%s]",mysql_error(&__auth_read_conn));
       return 0;
     }
 
@@ -472,9 +493,9 @@
       return -1;
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL) 
+  if ((__auth_res = mysql_store_result(&__auth_read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"auth_adduser(): mysql_store_result failed: %s",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_adduser(): mysql_store_result failed: %s",mysql_error(&__auth_read_conn));
       return 0;
     }
 
@@ -642,9 +663,9 @@
       return -1;
     }
 	
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL)
+  if ((__auth_res = mysql_store_result(&__auth_read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"auth_validate(): mysql_store_result failed: %s\n",mysql_error(&__auth_conn));
+      trace (TRACE_ERROR,"auth_validate(): mysql_store_result failed: %s\n",mysql_error(&__auth_read_conn));
       return -1;
     }
 
@@ -706,13 +727,13 @@
 	
   if (__auth_query(__auth_query_data)==-1)
     {
-      trace(TRACE_ERROR, "auth_md5_validate(): query failed: %s",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR, "auth_md5_validate(): query failed: %s",mysql_error(&__auth_read_conn));
       return -1;
     }
 	
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL)
+  if ((__auth_res = mysql_store_result(&__auth_read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"auth_md5_validate(): mysql_store_result failed:  %s",mysql_error(&__auth_conn));
+      trace (TRACE_ERROR,"auth_md5_validate(): mysql_store_result failed:  %s",mysql_error(&__auth_read_conn));
       
       return -1;
     }
@@ -786,9 +807,9 @@
       return 0;
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL) 
+  if ((__auth_res = mysql_store_result(&__auth_read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"auth_get_userid(): mysql_store_result failed: %s",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_get_userid(): mysql_store_result failed: %s",mysql_error(&__auth_read_conn));
       
       return 0;
     }
diff -ru -I Id: -x CVS -N dbmail/mysql/dbmsgbufmysql.c dbmail.working/mysql/dbmsgbufmysql.c
--- dbmail/mysql/dbmsgbufmysql.c	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/mysql/dbmsgbufmysql.c	2002-12-06 11:20:18.000000000 +1300
@@ -19,7 +19,12 @@
  * var's from dbmysql.c: 
  */
 extern char *query; 
+#ifdef READ_DATABASE
+extern MYSQL read_conn;
+#else
 extern MYSQL conn;
+#define read_conn conn
+#endif
 extern MYSQL_RES *res;
 extern MYSQL_ROW row;
 
@@ -71,10 +76,10 @@
       return (-1);
     }
 
-  if ((_msg_result = mysql_store_result(&conn)) == NULL)
+  if ((_msg_result = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_init_msgfetch(): mysql_store_result failed: %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return (-1);
     }
 
@@ -110,10 +115,10 @@
       return (-1);
     }
 
-  if ((_msg_result = mysql_store_result(&conn)) == NULL)
+  if ((_msg_result = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_init_msgfetch(): mysql_store_result failed: %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       my_free(blklengths);
       blklengths = NULL;
       return (-1);
@@ -381,9 +386,9 @@
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_dump_range(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_dump_range(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
 
diff -ru -I Id: -x CVS -N dbmail/mysql/dbmysql.c dbmail.working/mysql/dbmysql.c
--- dbmail/mysql/dbmysql.c	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/mysql/dbmysql.c	2002-12-06 11:20:18.000000000 +1300
@@ -22,6 +22,11 @@
 
 
 MYSQL conn;  
+#ifdef READ_DATABASE
+MYSQL read_conn;
+#else
+#define read_conn conn
+#endif
 MYSQL_RES *res;
 MYSQL_RES *checkres;
 MYSQL_ROW row;
@@ -30,6 +35,9 @@
 typedef MYSQL db_conn_t;
 
 field_t _db_host, _db_user, _db_db, _db_pass;
+#ifdef READ_DATABASE
+field_t _db_host_r, _db_user_r, _db_db_r, _db_pass_r, _db_port_r;
+#endif
 
 const char *db_flag_desc[] = 
 {
@@ -60,11 +68,24 @@
       return -1;
     }
 
+#ifdef READ_DATABASE
+  mysql_init(&read_conn);
+  if (mysql_real_connect (&read_conn, _db_host_r, _db_user_r, _db_pass_r, _db_db_r, atoi(_db_port_r), NULL, 0) == NULL)
+    {
+      trace(TRACE_ERROR,"dbconnect(): mysql_real_connect failed: %s",mysql_error(&read_conn));
+      return -1;
+    }
+#endif
+
 #ifdef mysql_errno
   if (mysql_errno(&conn)) {
     trace(TRACE_ERROR,"dbconnect(): mysql_real_connect failed: %s",mysql_error(&conn));
     return -1;
   }
+  if (mysql_errno(&read_conn)) {
+    trace(TRACE_ERROR,"dbconnect(): mysql_real_connect failed: %s",mysql_error(&read_conn));
+    return -1;
+  }
 #endif
 	
   return 0;
@@ -90,11 +111,24 @@
       if (querysize > 0 )
 	{
 	  trace(TRACE_DEBUG, "db_query(): executing [%s]", thequery);
-	  if (mysql_real_query(&conn, thequery, querysize) <0) 
+	  // If it's a select query use the read_conn conection
+	  if (strncasecmp(thequery, "SELECT", 6) == 0) 
 	    {
-	      trace(TRACE_ERROR,"db_query(): query [%s] failed: ", thequery);
-	      trace(TRACE_ERROR,"db_query(): mysql_real_query failed: %s\n",mysql_error(&conn)); 
-	      return -1;
+  	  if ( mysql_real_query(&read_conn, thequery, querysize)<0) 
+  	    {
+  	      trace(TRACE_ERROR,"db_query(): query [%s] failed: ", thequery);
+  	      trace(TRACE_ERROR,"db_query(): mysql_real_query failed: %s\n",mysql_error(&read_conn)); 
+  	      return -1;
+  	    }
+	    }
+	  else
+	    {
+  	  if ( mysql_real_query(&conn, thequery, querysize)<0) 
+  	    {
+  	      trace(TRACE_ERROR,"db_query(): query [%s] failed: ", thequery);
+  	      trace(TRACE_ERROR,"db_query(): mysql_real_query failed: %s\n",mysql_error(&conn)); 
+  	      return -1;
+  	    }
 	    }
 	}
       else
@@ -132,7 +166,7 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR, "db_get_quotum_used(): could not store query result");
       return -1;
@@ -174,7 +208,7 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR, "db_get_user_from_alias(): could not store query result");
       return -1;
@@ -211,7 +245,7 @@
       return NULL;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR, "db_get_deliver_from_alias(): could not store query result");
       return NULL;
@@ -259,7 +293,7 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR, "db_addalias(): could not store query result");
       return -1;
@@ -320,7 +354,7 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR, "db_addalias_ext(): could not store query result");
       return -1;
@@ -403,9 +437,9 @@
       return -1;
     }
  
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"db_get_nofity_address(): mysql_store_result failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_nofity_address(): mysql_store_result failed: %s",mysql_error(&read_conn));
       return 0;
     }
 
@@ -445,9 +479,9 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"db_get_reply_body(): mysql_store_result failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_reply_body(): mysql_store_result failed: %s",mysql_error(&read_conn));
       return 0;
     }
 
@@ -490,9 +524,9 @@
       return 0;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"db_get_mailboxid(): mysql_store_result failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_mailboxid(): mysql_store_result failed: %s",mysql_error(&read_conn));
       return 0;
     }
 
@@ -532,10 +566,10 @@
       return 0;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR,"db_get_message_mailboxid(): mysql_store_result failed: %s",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       
       return 0;
     }
@@ -579,9 +613,9 @@
       return 0;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"db_get_useridnr(): mysql_store_result failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_useridnr(): mysql_store_result failed: %s",mysql_error(&read_conn));
       return 0;
     }
 
@@ -671,14 +705,14 @@
   if (db_query(query) == -1)
     {
       trace(TRACE_ERROR,"db_update_message_multiple(): could not select messages: [%s]",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR,"db_update_message_multiple(): mysql_store_result failed: [%s]",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
@@ -859,13 +893,13 @@
 
   if (db_query(query) == -1)
     {
-      trace(TRACE_ERROR,"db_rollback_insert(): could not select message-id: %s", mysql_error(&conn));
+      trace(TRACE_ERROR,"db_rollback_insert(): could not select message-id: %s", mysql_error(&read_conn));
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"db_rollback_insert(): mysql_store_result failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_rollback_insert(): mysql_store_result failed: %s",mysql_error(&read_conn));
       return -1;
     }
   
@@ -922,9 +956,9 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"db_get_user_aliases(): mysql_store_result failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_user_aliases(): mysql_store_result failed: %s",mysql_error(&read_conn));
       return -1;
     }
   
@@ -975,9 +1009,9 @@
       return 0;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_send_message_lines: mysql_store_result failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_send_message_lines: mysql_store_result failed: %s",mysql_error(&read_conn));
       my_free(buffer);
       return 0;
     }
@@ -1109,9 +1143,9 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_createsession(): mysql_store_result failed:  %s",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_createsession(): mysql_store_result failed:  %s",mysql_error(&read_conn));
       
       return -1;
     }
@@ -1235,10 +1269,10 @@
       return -1;
     }
   
-  if ((localres = mysql_store_result(&conn)) == NULL)
+  if ((localres = mysql_store_result(&read_conn)) == NULL)
     {
       trace (TRACE_ERROR,"db_check_mailboxsize(): mysql_store_result failed: %s\n",
-	     mysql_error(&conn));
+	     mysql_error(&read_conn));
       
       return -1;
     }
@@ -1288,10 +1322,10 @@
       return -1;
     }
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace (TRACE_ERROR,"db_check_sizelimit(): mysql_store_result failed: %s\n",
-	     mysql_error(&conn));
+	     mysql_error(&read_conn));
       
       return -1;
     }
@@ -1383,13 +1417,13 @@
   if (db_query(query)==-1)
     {
       trace(TRACE_ERROR,"db_deleted_purge(): Cound not fetch message ID numbers: [%s]",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_deleted_purge(): mysql_store_result failed: [%s]",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_deleted_purge(): mysql_store_result failed: [%s]",mysql_error(&read_conn));
       return -1;
     }
   
@@ -1492,14 +1526,14 @@
   if (db_query(query) == -1)
     {
       trace(TRACE_ERROR,"db_log_ip(): could not access ip-log table (pop/imap-before-smtp): %s",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_log_ip(): could not check ip-log (pop/imap-before-smtp): %s",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
@@ -1573,7 +1607,7 @@
 	}
 
       /* store & free result set */
-      if ((res = mysql_store_result(&conn)) != NULL)
+      if ((res = mysql_store_result(&read_conn)) != NULL)
 	mysql_free_result(res);
       
     }
@@ -1601,13 +1635,13 @@
   if (db_query(query) == -1)
     {
       trace(TRACE_ERROR,"db_empty_mailbox(): error executing query: [%s]",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_empty_mailbox(): mysql_store_result failed: [%s]",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_empty_mailbox(): mysql_store_result failed: [%s]",mysql_error(&read_conn));
       return -1;
     }
 
@@ -1671,9 +1705,9 @@
       return -1;
     }
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_icheck_messageblks(): mysql_store_result failed:  %s",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_icheck_messageblks(): mysql_store_result failed:  %s",mysql_error(&read_conn));
       return -1;
     }
 
@@ -1699,9 +1733,9 @@
 	  return -1;
 	}
       
-      if ((res = mysql_store_result(&conn)) == NULL)
+      if ((res = mysql_store_result(&read_conn)) == NULL)
 	{
-	  trace (TRACE_ERROR,"db_icheck_messageblks(): mysql_store_result failed:  %s",mysql_error(&conn));
+	  trace (TRACE_ERROR,"db_icheck_messageblks(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	  return -1;
 	}
 
@@ -1745,9 +1779,9 @@
 	      return -1;
 	    }
 	  
-	  if ((res = mysql_store_result(&conn)) == NULL)
+	  if ((res = mysql_store_result(&read_conn)) == NULL)
 	    {
-	      trace (TRACE_ERROR,"db_icheck_messageblks(): mysql_store_result failed:  %s",mysql_error(&conn));
+	      trace (TRACE_ERROR,"db_icheck_messageblks(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	      return -1;
 	    }
 
@@ -1803,9 +1837,9 @@
       return -1;
     }
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_icheck_messages(): mysql_store_result failed:  %s",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_icheck_messages(): mysql_store_result failed:  %s",mysql_error(&read_conn));
       return -1;
     }
 
@@ -1831,9 +1865,9 @@
 	  return -1;
 	}
       
-      if ((res = mysql_store_result(&conn)) == NULL)
+      if ((res = mysql_store_result(&read_conn)) == NULL)
 	{
-	  trace (TRACE_ERROR,"db_icheck_messages(): mysql_store_result failed:  %s",mysql_error(&conn));
+	  trace (TRACE_ERROR,"db_icheck_messages(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	  return -1;
 	}
 
@@ -1877,9 +1911,9 @@
 	      return -1;
 	    }
 	  
-	  if ((res = mysql_store_result(&conn)) == NULL)
+	  if ((res = mysql_store_result(&read_conn)) == NULL)
 	    {
-	      trace (TRACE_ERROR,"db_icheck_messages(): mysql_store_result failed:  %s",mysql_error(&conn));
+	      trace (TRACE_ERROR,"db_icheck_messages(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	      return -1;
 	    }
 
@@ -1935,9 +1969,9 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_icheck_mailboxes(): mysql_store_result failed:  %s",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_icheck_mailboxes(): mysql_store_result failed:  %s",mysql_error(&read_conn));
       return -1;
     }
 
@@ -1963,9 +1997,9 @@
 	  return -1;
 	}
       
-      if ((res = mysql_store_result(&conn)) == NULL)
+      if ((res = mysql_store_result(&read_conn)) == NULL)
 	{
-	  trace (TRACE_ERROR,"db_icheck_mailboxes(): mysql_store_result failed:  %s",mysql_error(&conn));
+	  trace (TRACE_ERROR,"db_icheck_mailboxes(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	  return -1;
 	}
 
@@ -2009,9 +2043,9 @@
 	      return -1;
 	    }
 	  
-	  if ((res = mysql_store_result(&conn)) == NULL)
+	  if ((res = mysql_store_result(&read_conn)) == NULL)
 	    {
-	      trace (TRACE_ERROR,"db_icheck_mailboxes(): mysql_store_result failed:  %s",mysql_error(&conn));
+	      trace (TRACE_ERROR,"db_icheck_mailboxes(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	      mysql_free_result(res);
 	      return -1;
 	    }
@@ -2067,9 +2101,9 @@
       return -1;
     }
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_icheck_null_messages(): mysql_store_result failed:  %s",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_icheck_null_messages(): mysql_store_result failed:  %s",mysql_error(&read_conn));
       return -1;
     }
 
@@ -2095,9 +2129,9 @@
 	  return -1;
 	}
       
-      if ((res = mysql_store_result(&conn)) == NULL)
+      if ((res = mysql_store_result(&read_conn)) == NULL)
 	{
-	  trace (TRACE_ERROR,"db_icheck_null_messages(): mysql_store_result failed:  %s",mysql_error(&conn));
+	  trace (TRACE_ERROR,"db_icheck_null_messages(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	  return -1;
 	}
 
@@ -2140,9 +2174,9 @@
 	      return -1;
 	    }
 	  
-	  if ((res = mysql_store_result(&conn)) == NULL)
+	  if ((res = mysql_store_result(&read_conn)) == NULL)
 	    {
-	      trace (TRACE_ERROR,"db_icheck_null_messages(): mysql_store_result failed:  %s",mysql_error(&conn));
+	      trace (TRACE_ERROR,"db_icheck_null_messages(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	      list_freelist(&lostlist->start);
 	      my_free(msgids);
 	      return -1;
@@ -2221,13 +2255,13 @@
   if (db_query(query) == -1)
     {
       trace(TRACE_ERROR, "db_delete_mailbox(): could not select message ID's for mailbox [%llu]: [%s]", 
-	    uid, mysql_error(&conn));
+	    uid, mysql_error(&read_conn));
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_delete_mailbox(): mysql_store_result() failed [%s]",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_delete_mailbox(): mysql_store_result() failed [%s]",mysql_error(&read_conn));
       return -1;
     }
 
@@ -2309,6 +2343,10 @@
   query = NULL;
 
   mysql_close(&conn);
+#ifdef READ_DATABASE
+  mysql_close(&read_conn);
+#endif
+    
   return 0;
 }
 
@@ -2535,9 +2573,9 @@
     }
 
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_findmailbox(): mysql_store_result failed:  %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_findmailbox(): mysql_store_result failed:  %s\n",mysql_error(&read_conn));
       return (u64_t)(-1);
     }
   
@@ -2587,10 +2625,10 @@
     }
 
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_findmailbox_by_regex(): mysql_store_result failed:  %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return (-1);
     }
   
@@ -2683,9 +2721,9 @@
     }
 
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_getmailbox(): mysql_store_result failed:  %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_getmailbox(): mysql_store_result failed:  %s\n",mysql_error(&read_conn));
       return -1;
     }
 
@@ -2719,9 +2757,9 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_getmailbox(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_getmailbox(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return -1;
     }
 
@@ -2766,9 +2804,9 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_getmailbox(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_getmailbox(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       
       my_free(mb->seq_list);
       mb->seq_list = NULL;
@@ -2837,10 +2875,10 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_listmailboxchildren(): mysql_store_result failed: %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
@@ -2862,10 +2900,10 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_listmailboxchildren(): mysql_store_result failed: %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
@@ -2968,9 +3006,9 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_isselectable(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_isselectable(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return -1;
     }
 
@@ -3016,9 +3054,9 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_noinferiors(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_noinferiors(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return -1;
     }
 
@@ -3119,9 +3157,9 @@
 	  return -1;
 	}
       
-      if ((res = mysql_store_result(&conn)) == NULL)
+      if ((res = mysql_store_result(&read_conn)) == NULL)
 	{
-	  trace(TRACE_ERROR,"db_expunge(): mysql_store_result failed: %s\n",mysql_error(&conn));
+	  trace(TRACE_ERROR,"db_expunge(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
 	  return -1;
 	}
 
@@ -3237,9 +3275,9 @@
 	  return -1;
 	}
 
-      if ((res = mysql_store_result(&conn)) == NULL)
+      if ((res = mysql_store_result(&read_conn)) == NULL)
 	{
-	  trace(TRACE_ERROR,"db_copymsg(): mysql_store_result failed: %s\n",mysql_error(&conn));
+	  trace(TRACE_ERROR,"db_copymsg(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
 	  return -1;
 	}
 
@@ -3407,9 +3445,9 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_getmailboxname(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_getmailboxname(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return -1;
     }
 
@@ -3472,9 +3510,9 @@
       return (u64_t)(-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_first_unseen(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_first_unseen(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (u64_t)(-1);
     }
   
@@ -3575,9 +3613,9 @@
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_get_msgflag(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_msgflag(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
   
@@ -3621,9 +3659,9 @@
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_get_msgflag_all(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_msgflag_all(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
   
@@ -3829,9 +3867,9 @@
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_get_msgdate(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_msgdate(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
 
@@ -3889,9 +3927,9 @@
       return -1;
     }
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_get_rfcsize(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_rfcsize(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
 
@@ -3944,10 +3982,10 @@
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_get_msginfo_range(): mysql_store_result failed: %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return (-1);
     }
   
@@ -4035,10 +4073,10 @@
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_get_main_header(): mysql_store_result failed: %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return (-1);
     }
 
@@ -4118,9 +4156,9 @@
       return 0;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_search_range(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_search_range(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return 0;
     }
 
@@ -4205,9 +4243,9 @@
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_mailbox_msg_match(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_mailbox_msg_match(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
 
diff -ru -I Id: -x CVS -N dbmail/mysql/dbsearchmysql.c dbmail.working/mysql/dbsearchmysql.c
--- dbmail/mysql/dbsearchmysql.c	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/mysql/dbsearchmysql.c	2002-12-05 21:43:06.000000000 +1300
@@ -17,7 +17,12 @@
  * var's from dbmysql.c: 
  */
 extern char *query; 
+#ifdef READ_DATABASE
+extern MYSQL read_conn;
+#else
 extern MYSQL conn;
+#define read_conn conn
+#endif
 extern MYSQL_RES *res;
 extern MYSQL_ROW row;
 
@@ -63,9 +68,9 @@
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_search(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_search(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
 
@@ -352,9 +357,9 @@
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_search_messages(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_search_messages(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
 
diff -ru -I Id: -x CVS -N dbmail/pop3d.c dbmail.working/pop3d.c
--- dbmail/pop3d.c	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/pop3d.c	2002-12-06 11:20:18.000000000 +1300
@@ -36,6 +36,14 @@
 extern field_t _db_user;
 extern field_t _db_pass;
 
+#ifdef READ_DATABASE
+extern field_t _db_host_r;
+extern field_t _db_db_r;
+extern field_t _db_user_r;
+extern field_t _db_pass_r;
+extern field_t _db_port_r;
+#endif
+
 int error_count = 0;
 
 void SetConfigItems(serverConfig_t *config, struct list *items);
@@ -88,6 +96,9 @@
       SetConfigItems(&config, &popItems);
       SetTraceLevel(&popItems);
       GetDBParams(_db_host, _db_db, _db_user, _db_pass, &sysItems);
+#ifdef READ_DATABASE
+      GetDBReadParams(_db_host_r, _db_db_r, _db_user_r, _db_pass_r, _db_port_r, &sysItems);
+#endif
 
       config.ClientHandler = pop3_handle_connection;
       config.timeoutMsg = POP_TIMEOUT_MSG;
diff -ru -I Id: -x CVS -N dbmail/user.c dbmail.working/user.c
--- dbmail/user.c	2002-12-06 11:38:33.000000000 +1300
+++ dbmail.working/user.c	2002-12-06 11:20:18.000000000 +1300
@@ -32,6 +32,14 @@
 extern field_t _db_user;
 extern field_t _db_pass;
 
+#ifdef READ_DATABASE
+extern field_t _db_host_r;
+extern field_t _db_db_r;
+extern field_t _db_user_r;
+extern field_t _db_pass_r;
+extern field_t _db_port_r;
+#endif
+
 
 /* valid characters for passwd/username */
 const char ValidChars[] = 
@@ -84,6 +92,9 @@
   ReadConfig("DBMAIL", configFile, &sysItems);
   SetTraceLevel(&sysItems);
   GetDBParams(_db_host, _db_db, _db_user, _db_pass, &sysItems);
+#ifdef READ_DATABASE
+  GetDBReadParams(_db_host_r, _db_db_r, _db_user_r, _db_pass_r, _db_port_r, &sysItems);
+#endif
 
   quiet_printf ("\n*** dbmail-adduser ***\n");
 	
