diff -urbBN dbmail-2.0cvs011204.orig/auth/authsql.c dbmail-2.0cvs011204.new/auth/authsql.c
--- dbmail-2.0cvs011204.orig/auth/authsql.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/auth/authsql.c	2004-01-20 23:09:56.000000000 -0500
@@ -46,6 +46,8 @@
 #include <crypt.h>
 #endif
 
+#include "mydebug.h"
+
 /**
  * used for query strings
  */
@@ -680,6 +682,8 @@
 	     return -1;
 	}
 
+        my_free(escuser);
+
 	if (db_num_rows() == 0) {
 	     db_free_result();
 	     db_store_auth_result();
diff -urbBN dbmail-2.0cvs011204.orig/config.c dbmail-2.0cvs011204.new/config.c
--- dbmail-2.0cvs011204.orig/config.c	2004-01-07 10:00:15.000000000 -0500
+++ dbmail-2.0cvs011204.new/config.c	2004-01-20 21:44:23.000000000 -0500
@@ -35,6 +35,8 @@
 #include "list.h"
 #include "debug.h"
 
+#include "mydebug.h"
+
 #define LINESIZE 1024
 
 /*
diff -urbBN dbmail-2.0cvs011204.orig/db.c dbmail-2.0cvs011204.new/db.c
--- dbmail-2.0cvs011204.orig/db.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/db.c	2004-01-20 21:14:47.000000000 -0500
@@ -41,6 +41,8 @@
 #include <regex.h>
 #include <assert.h>
 
+#include "mydebug.h"
+
 static const char *db_flag_desc[] = {
     "seen_flag",
     "answered_flag",
@@ -265,6 +267,7 @@
 		(*user_ids)[i] = result_string ? 
 			strtoull(result_string, NULL, 10) : 0;
 	}
+        db_free_result();
 	return 1;
 }
 
@@ -443,6 +446,7 @@
 	    trace(TRACE_DEBUG, "%s,%s: found address [%s]",
 		  __FILE__, __FUNCTION__, *notify_address);
 	}
+        db_free_result();
     }
     return 0;
 }
@@ -475,6 +479,7 @@
 	    trace(TRACE_DEBUG, "%s,%s: found reply_body [%s]",
 		  __FILE__, __FUNCTION__, *reply_body);
 	}
+        db_free_result();
     }
     return 0;
 }
@@ -1404,6 +1409,7 @@
 		    return -1;
 	    }
     }
+    db_free_result();
     return 1;
 }
 
@@ -1507,6 +1513,7 @@
     }
     physmessage_id = strtoull(db_get_result(0, 0), NULL, 10);
 
+    db_free_result();
     memtst((buffer = (char *) my_malloc(WRITE_BUFFER_SIZE * 2)) == NULL);
 
     snprintf(query, DEF_QUERYSIZE,
diff -urbBN dbmail-2.0cvs011204.orig/dbmd5.c dbmail-2.0cvs011204.new/dbmd5.c
--- dbmail-2.0cvs011204.orig/dbmd5.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/dbmd5.c	2004-01-20 21:46:02.000000000 -0500
@@ -34,6 +34,8 @@
 #include "md5.h"
 #include "debug.h"
 
+#include "mydebug.h"
+
 unsigned char *makemd5(char *buf)
 {
 	struct GdmMD5Context mycontext;
diff -urbBN dbmail-2.0cvs011204.orig/dbmsgbuf.c dbmail-2.0cvs011204.new/dbmsgbuf.c
--- dbmail-2.0cvs011204.orig/dbmsgbuf.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/dbmsgbuf.c	2004-01-20 21:48:22.000000000 -0500
@@ -35,6 +35,8 @@
 #include <stdio.h>
 #include <string.h>
 
+#include "mydebug.h"
+
 #define MSGBUF_WINDOWSIZE (128ul*1024ul)
 
 static unsigned _msgrow_idx = 0;
diff -urbBN dbmail-2.0cvs011204.orig/dbsearch.c dbmail-2.0cvs011204.new/dbsearch.c
--- dbmail-2.0cvs011204.orig/dbsearch.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/dbsearch.c	2004-01-20 21:48:08.000000000 -0500
@@ -41,6 +41,8 @@
 #include <string.h>
 #include <limits.h>
 
+#include "mydebug.h"
+
 /**
  * abbreviated names of the months
  */
diff -urbBN dbmail-2.0cvs011204.orig/debug.c dbmail-2.0cvs011204.new/debug.c
--- dbmail-2.0cvs011204.orig/debug.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/debug.c	2004-01-20 21:45:33.000000000 -0500
@@ -30,6 +30,8 @@
 #include "debug.h"
 #include <string.h>
 
+#include "mydebug.h"
+
 struct debug_mem
 {
   long addr;
diff -urbBN dbmail-2.0cvs011204.orig/debug.h dbmail-2.0cvs011204.new/debug.h
--- dbmail-2.0cvs011204.orig/debug.h	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/debug.h	2004-01-20 22:18:47.000000000 -0500
@@ -58,8 +58,10 @@
 #define __DEBUG_TRACE_MEMALLOC
 */
 
+#ifndef DMALLOC
 #define my_malloc(s) malloc(s)
 #define my_free(p) free(p)
+#endif
 #ifdef __DEBUG_TRACE_MEMALLOC
 #undef __DEBUG_TRACE_MEMALLOC
 #endif
diff -urbBN dbmail-2.0cvs011204.orig/forward.c dbmail-2.0cvs011204.new/forward.c
--- dbmail-2.0cvs011204.orig/forward.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/forward.c	2004-01-21 00:11:48.000000000 -0500
@@ -37,6 +37,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "mydebug.h"
+
 extern struct list smtpItems;
 
 
diff -urbBN dbmail-2.0cvs011204.orig/imap4.c dbmail-2.0cvs011204.new/imap4.c
--- dbmail-2.0cvs011204.orig/imap4.c	2004-01-12 21:56:57.000000000 -0500
+++ dbmail-2.0cvs011204.new/imap4.c	2004-01-20 21:45:16.000000000 -0500
@@ -42,6 +42,8 @@
 #include "db.h"
 #include "auth.h"
 
+#include "mydebug.h"
+
 #define MAX_LINESIZE (10*1024)
 #define COMMAND_SHOW_LEVEL TRACE_ERROR
 
diff -urbBN dbmail-2.0cvs011204.orig/imapcommands.c dbmail-2.0cvs011204.new/imapcommands.c
--- dbmail-2.0cvs011204.orig/imapcommands.c	2004-01-12 21:57:41.000000000 -0500
+++ dbmail-2.0cvs011204.new/imapcommands.c	2004-01-20 21:10:48.000000000 -0500
@@ -49,6 +49,8 @@
 #include "proctitleutils.h"
 #endif
 
+#include "mydebug.h"
+
 #ifndef MAX_LINESIZE
 #define MAX_LINESIZE 1024
 #endif
diff -urbBN dbmail-2.0cvs011204.orig/imapd.c dbmail-2.0cvs011204.new/imapd.c
--- dbmail-2.0cvs011204.orig/imapd.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/imapd.c	2004-01-20 23:16:59.000000000 -0500
@@ -44,6 +44,9 @@
 #ifdef PROC_TITLES
 #include "proctitleutils.h"
 #endif
+#
+
+#include "mydebug.h"
 
 #define PNAME "dbmail/imap4d"
 
@@ -172,7 +175,12 @@
 
 void MainSigHandler(int sig, siginfo_t *info UNUSED, void *data UNUSED)
 {
+  #ifndef DMALLOC
   trace(TRACE_DEBUG, "MainSigHandler(): got signal [%d]", sig);
+  #else
+   dmalloc_log_stats();
+   dmalloc_log_unfreed();
+  #endif
 
   if (sig == SIGHUP)
     mainRestart = 1;
diff -urbBN dbmail-2.0cvs011204.orig/imaputil.c dbmail-2.0cvs011204.new/imaputil.c
--- dbmail-2.0cvs011204.orig/imaputil.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/imaputil.c	2004-01-20 21:11:29.000000000 -0500
@@ -45,6 +45,8 @@
 #include "dbsearch.h"
 #include "rfcmsg.h"
 
+#include "mydebug.h"
+
 #ifndef MAX_LINESIZE
 #define MAX_LINESIZE (10*1024)
 #endif
diff -urbBN dbmail-2.0cvs011204.orig/list.c dbmail-2.0cvs011204.new/list.c
--- dbmail-2.0cvs011204.orig/list.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/list.c	2004-01-20 21:45:49.000000000 -0500
@@ -32,6 +32,8 @@
 #include "debug.h"
 #include "list.h"
 
+#include "mydebug.h"
+
 void list_init(struct list *tlist)
 {
   tlist->start=NULL;
diff -urbBN dbmail-2.0cvs011204.orig/md5.c dbmail-2.0cvs011204.new/md5.c
--- dbmail-2.0cvs011204.orig/md5.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/md5.c	2004-01-20 21:46:17.000000000 -0500
@@ -49,6 +49,8 @@
 #include <string.h>		/* for memcpy() */
 #include "md5.h"
 
+#include "mydebug.h"
+
 #if BYTE_ORDER == LITTLE_ENDIAN
 #define byteReverse(buf, len)	/* Nothing */
 #else
diff -urbBN dbmail-2.0cvs011204.orig/memblock.c dbmail-2.0cvs011204.new/memblock.c
--- dbmail-2.0cvs011204.orig/memblock.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/memblock.c	2004-01-20 21:47:16.000000000 -0500
@@ -34,6 +34,8 @@
 #include <string.h>
 #include "debug.h"
 
+#include "mydebug.h"
+
 #define MAX_ERROR_SIZE 128
 
 enum __M_ERRORS { M_NOERROR, M_NOMEM, M_BADMEM, M_BADDATA, M_BADWHENCE, M_LASTERR };
diff -urbBN dbmail-2.0cvs011204.orig/mime.c dbmail-2.0cvs011204.new/mime.c
--- dbmail-2.0cvs011204.orig/mime.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/mime.c	2004-01-20 21:46:48.000000000 -0500
@@ -34,6 +34,8 @@
 #include <string.h>
 #include <unistd.h>
 
+#include "mydebug.h"
+
 /* extern char *header; */
 /* extern u64_t headersize; */
 
diff -urbBN dbmail-2.0cvs011204.orig/misc.c dbmail-2.0cvs011204.new/misc.c
--- dbmail-2.0cvs011204.orig/misc.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/misc.c	2004-01-20 21:47:00.000000000 -0500
@@ -31,6 +31,8 @@
 #include "dbmd5.h"
 #include "misc.h"
 
+#include "mydebug.h"
+
 int drop_privileges (char *newuser, char *newgroup)
 {
      /* will drop running program's priviledges to newuser and newgroup */
diff -urbBN dbmail-2.0cvs011204.orig/mydebug.h dbmail-2.0cvs011204.new/mydebug.h
--- dbmail-2.0cvs011204.orig/mydebug.h	1969-12-31 19:00:00.000000000 -0500
+++ dbmail-2.0cvs011204.new/mydebug.h	2004-01-21 00:44:35.000000000 -0500
@@ -0,0 +1,14 @@
+#ifndef MYDEBUG_H
+#define MYDEBUG_H
+
+/* use export of
+   DMALLOC_OPTIONS=debug=0x4f40d03,inter=100,log=/var/tmp/logfile.%p
+*/
+
+#ifdef DMALLOC
+#include <dmalloc.h>
+#define my_malloc(s) malloc(s)
+#define my_free(p) free(p)
+#endif
+
+#endif
diff -urbBN dbmail-2.0cvs011204.orig/mysql/dbmysql.c dbmail-2.0cvs011204.new/mysql/dbmysql.c
--- dbmail-2.0cvs011204.orig/mysql/dbmysql.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/mysql/dbmysql.c	2004-01-20 21:10:07.000000000 -0500
@@ -33,6 +33,9 @@
 #include "dbmailtypes.h"
 
 #include <string.h>
+#include "debug.h"
+
+#include "mydebug.h"
 
 #define DB_MYSQL_STANDARD_PORT 3306
 
@@ -64,6 +67,9 @@
 	/* connect */                                             
 	mysql_init(&conn);
 
+        /* auto re-connect */
+        conn.reconnect = 1;
+
 	/* use the standard MySQL port by default */
 	if (_db_params.port == 0)
 		_db_params.port = DB_MYSQL_STANDARD_PORT;
@@ -170,11 +176,16 @@
 int db_check_connection()
 {
 	if (mysql_ping(&conn) != 0) {
-	  trace(TRACE_ERROR, "%s,%s: connection error", 
+          trace(TRACE_DEBUG, "%s,%s: no database connection, trying "
+                "to establish one", __FILE__, __FUNCTION__);
+          if (db_connect() < 0) {
+               trace(TRACE_ERROR, "%s,%s: unable to connect to database",
 		__FILE__, __FUNCTION__);
 		return -1;
 	}
+     }
 	return 0;
+
 }
 u64_t db_insert_result(const char *sequence_identifier UNUSED)            
 {                                                             
diff -urbBN dbmail-2.0cvs011204.orig/pipe.c dbmail-2.0cvs011204.new/pipe.c
--- dbmail-2.0cvs011204.orig/pipe.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/pipe.c	2004-01-21 00:11:32.000000000 -0500
@@ -47,6 +47,7 @@
 #include "dbmd5.h"
 #include "misc.h"
 
+#include "mydebug.h"
 
 #define HEADER_BLOCK_SIZE 1024
 #define QUERY_SIZE 255
diff -urbBN dbmail-2.0cvs011204.orig/pop3.c dbmail-2.0cvs011204.new/pop3.c
--- dbmail-2.0cvs011204.orig/pop3.c	2004-01-12 21:35:00.000000000 -0500
+++ dbmail-2.0cvs011204.new/pop3.c	2004-01-21 00:12:11.000000000 -0500
@@ -39,6 +39,8 @@
 #endif
 #include "misc.h"
 
+#include "mydebug.h"
+
 #define INCOMING_BUFFER_SIZE 512
 #define APOP_STAMP_SIZE 255
 #define MAX_USERID_SIZE 100
diff -urbBN dbmail-2.0cvs011204.orig/quota.c dbmail-2.0cvs011204.new/quota.c
--- dbmail-2.0cvs011204.orig/quota.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/quota.c	2004-01-20 21:44:09.000000000 -0500
@@ -27,6 +27,8 @@
 #include "auth.h"
 #include "quota.h"
 
+#include "mydebug.h"
+
 /* Allocate a quota structure for `n_resources' resources. 
  * Returns NULL on failure.
  */
diff -urbBN dbmail-2.0cvs011204.orig/rfcmsg.c dbmail-2.0cvs011204.new/rfcmsg.c
--- dbmail-2.0cvs011204.orig/rfcmsg.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/rfcmsg.c	2004-01-20 21:47:31.000000000 -0500
@@ -38,6 +38,8 @@
 #include <string.h>
 #include <ctype.h>
 
+#include "mydebug.h"
+
 /* 
  * frees all the memory associated with a msg
  */
diff -urbBN dbmail-2.0cvs011204.orig/server.c dbmail-2.0cvs011204.new/server.c
--- dbmail-2.0cvs011204.orig/server.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/server.c	2004-01-20 23:21:13.000000000 -0500
@@ -47,6 +47,7 @@
 #include <netdb.h>
 #include <signal.h>
 
+#include "mydebug.h"
 
 int GeneralStopRequested = 0;
 int Restart = 0;
@@ -211,12 +212,16 @@
       trace(TRACE_INFO, "ParentSigHandler(): i'm no longer father");
       ChildSigHandler(sig, info, data); /* this call is for a child but it's handler is not yet installed */
     }
-
+#ifndef DMALLOC
 #ifdef _USE_STR_SIGNAL
   trace(TRACE_INFO, "ParentSigHandler(): got signal [%s]", strsignal(sig));
 #else
   trace(TRACE_INFO, "ParentSigHandler(): got signal [%d]", sig);
 #endif
+#else
+ dmalloc_log_stats();
+ dmalloc_log_unfreed();
+#endif
 
   switch (sig)
     {
diff -urbBN dbmail-2.0cvs011204.orig/serverchild.c dbmail-2.0cvs011204.new/serverchild.c
--- dbmail-2.0cvs011204.orig/serverchild.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/serverchild.c	2004-01-20 23:27:34.000000000 -0500
@@ -52,6 +52,8 @@
 #include "proctitleutils.h"
 #endif
 
+#include "mydebug.h"
+
 int ChildStopRequested = 0;
 int connected = 0;
 clientinfo_t client;
@@ -63,11 +65,16 @@
 {
   static int triedDisconnect = 0;
 
+#ifndef DMALLOC
 #ifdef _USE_STR_SIGNAL
   trace(TRACE_ERROR, "ChildSighandler(): got signal [%s]", strsignal(sig));
 #else
   trace(TRACE_ERROR, "ChildSighandler(): got signal [%d]", sig);
 #endif
+#else
+ dmalloc_log_stats();
+ dmalloc_log_unfreed();
+#endif
 
   /* perform reinit at SIGHUP otherwise exit */
   switch (sig)
diff -urbBN dbmail-2.0cvs011204.orig/shared_mailbox.c dbmail-2.0cvs011204.new/shared_mailbox.c
--- dbmail-2.0cvs011204.orig/shared_mailbox.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/shared_mailbox.c	2004-01-20 21:48:37.000000000 -0500
@@ -30,6 +30,8 @@
 #include <regex.h>
 #include <stdlib.h>
 
+#include "mydebug.h"
+
 #define SHARED_MAILBOX_OWNER 0
 
 /* find the mailbox_idnr of a shared mailbox. If only_subscribed is 1, the
diff -urbBN dbmail-2.0cvs011204.orig/user.c dbmail-2.0cvs011204.new/user.c
--- dbmail-2.0cvs011204.orig/user.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs011204.new/user.c	2004-01-21 00:13:05.000000000 -0500
@@ -44,6 +44,8 @@
 #endif
 #include "dbmd5.h"
 
+#include "mydebug.h"
+
 char *configFile = DEFAULT_CONFIG_FILE;
 
 #define SHADOWFILE "/etc/shadow"
