From root@server.beholder.ca Thu Jul 21 14:00:38 2005 Return-Path: Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C82E316A4A0; Thu, 21 Jul 2005 14:00:37 +0000 (GMT) (envelope-from root@server.beholder.ca) Received: from server.beholder.ca (server.beholder.ca [216.75.172.73]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6A0DA43E23; Thu, 21 Jul 2005 14:00:25 +0000 (GMT) (envelope-from root@server.beholder.ca) Received: by server.beholder.ca (Postfix, from userid 0) id 08E96C18; Thu, 21 Jul 2005 09:59:27 -0400 (EDT) Message-Id: <20050721135927.08E96C18@server.beholder.ca> Date: Thu, 21 Jul 2005 09:59:27 -0400 (EDT) From: Pat Wendorf To: FreeBSD-gnats-submit@freebsd.org Cc: seanc@FreeBSD.org Subject: [PATCH] mail/dbmail: update to 2.1.1 X-Send-Pr-Version: 3.113 X-GNATS-Notify: >Number: 83852 >Category: ports >Synopsis: [PATCH] mail/dbmail: update to 2.1.1 >Confidential: no >Severity: non-critical >Priority: low >Responsible: seanc >State: closed >Quarter: >Keywords: >Date-Required: >Class: update >Submitter-Id: current-users >Arrival-Date: Thu Jul 21 14:10:01 GMT 2005 >Closed-Date: Tue Sep 13 20:29:04 GMT 2005 >Last-Modified: Tue Sep 13 20:29:04 GMT 2005 >Originator: Pat Wendorf >Release: FreeBSD 5.4-STABLE i386 >Organization: The City of Barrie >Environment: System: FreeBSD server.lan 5.4-STABLE FreeBSD 5.4-STABLE #0: Fri Jul 8 21:42:35 EDT >Description: - Update to 2.1.1 Removed file(s): - files/patch-2.0.4_bug145_lmtp.c - files/patch-2.0.4_bug177 - files/patch-2.0.4_bug184 - files/patch-2.0.4_bug190_pool.c - files/patch-2.0.4_bug190_server.c - files/patch-2.0.4_bug190_serverchild.c - files/patch-2.0.4_bug198_pool.c - files/patch-2.0.4_bug199_server.c - files/patch-2.0.4_bug214_main.c - files/patch-2.0.4_bug216_header.c - files/patch-2.0.4_bug79_imaputil.c - files/patch-sort.c Port maintainer (seanc@FreeBSD.org) is cc'd. Generated with FreeBSD Port Tools 0.63 >How-To-Repeat: >Fix: --- dbmail-2.1.1_1.patch begins here --- diff -ruN --exclude=CVS /usr/ports/mail/dbmail/Makefile /root/dbmail/Makefile --- /usr/ports/mail/dbmail/Makefile Mon Jul 18 12:04:16 2005 +++ /root/dbmail/Makefile Thu Jul 21 09:58:36 2005 @@ -6,16 +6,18 @@ # PORTNAME= dbmail -PORTVERSION= 2.0.4 +PORTVERSION= 2.1.1 PORTREVISION= 1 CATEGORIES= mail -MASTER_SITES= http://www.dbmail.org/download/ -EXTRACT_SUFX= .tgz +MASTER_SITES= http://www.dbmail.org/download/2.1/ +EXTRACT_SUFX= .tar.gz MAINTAINER= seanc@FreeBSD.org COMMENT= An SQL database-based mail system (POP3 and IMAP) +LIB_DEPENDS= gmime-2.0:${PORTSDIR}/mail/gmime2 + USE_REINPLACE= YES GNU_CONFIGURE= YES CONFIGURE_ARGS= --prefix=${PREFIX} @@ -23,7 +25,8 @@ USE_OPENSSL= YES USE_RC_SUBR= dbmail-pop3d.sh dbmail-lmtpd.sh dbmail-imapd.sh -CFLAGS += -fPIC +CFLAGS += -fPIC -I${LOCALBASE}/include +LDFLAGS += -lpthread .if defined(WITH_POSTGRESQL) CONFIGURE_ARGS+= --with-pgsql @@ -31,7 +34,7 @@ DATABASE= postgresql PLIST_SUB+= PGSQL="" PLIST_SUB+= MYSQL="@comment " -LDFLAGS+= -L${LOCALBASE}/lib/ +LDFLAGS+= -L${LOCALBASE}/lib/ .else USE_MYSQL= YES CONFIGURE_ARGS+= --with-mysql diff -ruN --exclude=CVS /usr/ports/mail/dbmail/distinfo /root/dbmail/distinfo --- /usr/ports/mail/dbmail/distinfo Sat Jun 18 17:34:54 2005 +++ /root/dbmail/distinfo Thu Jul 21 08:57:56 2005 @@ -1,2 +1,2 @@ -MD5 (dbmail-2.0.4.tgz) = fc80ac11a24286aa78ee71dd78c965a1 -SIZE (dbmail-2.0.4.tgz) = 589603 +MD5 (dbmail-2.1.1.tar.gz) = e934737d6d3b469dd5922cfb3220c2d1 +SIZE (dbmail-2.1.1.tar.gz) = 674164 diff -ruN --exclude=CVS /usr/ports/mail/dbmail/files/patch-2.0.4_bug145_lmtp.c /root/dbmail/files/patch-2.0.4_bug145_lmtp.c --- /usr/ports/mail/dbmail/files/patch-2.0.4_bug145_lmtp.c Mon Jul 18 12:04:16 2005 +++ /root/dbmail/files/patch-2.0.4_bug145_lmtp.c Wed Dec 31 19:00:00 1969 @@ -1,66 +0,0 @@ -Index: lmtp.c -=================================================================== ---- lmtp.c (revision 1559) -+++ lmtp.c (revision 1700) -@@ -77,8 +77,9 @@ - * - -1 on error - * - 1 on success - */ --static int read_whole_message_network(FILE *instream, char **whole_message, -- u64_t *whole_message_size); -+static int read_whole_message_network(FILE *instream, -+ char **whole_message, u64_t *whole_message_size, -+ const char *prepend_format, ...) PRINTF_ARGS(4, 5); - - /** - * \function lmtp_error -@@ -624,7 +625,9 @@ - if (read_whole_message_network( - (FILE *) instream, - &whole_message, -- &whole_message_size) < 0) { -+ &whole_message_size, -+ "Return-Path: %s\r\n", -+ (char *)(list_getstart(&from)->data)) < 0) { - trace(TRACE_ERROR, - "%s,%s: read_whole_message_network() failed", - __FILE__, __func__); -@@ -755,8 +758,9 @@ - return 1; - } - --int read_whole_message_network(FILE *instream, char **whole_message, -- u64_t *whole_message_size) -+int read_whole_message_network(FILE *instream, -+ char **whole_message, u64_t *whole_message_size, -+ const char *prepend_format, ...) - { - char *tmpmessage = NULL; - char tmpline[MESSAGE_MAX_LINE_SIZE + 1]; -@@ -765,9 +769,17 @@ - size_t total_size = 0; - size_t current_pos = 0; - int error = 0; -+ va_list argp; - - memset(tmpline, '\0', MESSAGE_MAX_LINE_SIZE + 1); -- while (fgets(tmpline, MESSAGE_MAX_LINE_SIZE, instream) != NULL) { -+ -+ /* This adds the Return-Path header and any other -+ * important headers we might need; see RFC 2076. */ -+ va_start(argp, prepend_format); -+ line_size = vsnprintf(tmpline, MESSAGE_MAX_LINE_SIZE, prepend_format, argp); -+ va_end(argp); -+ -+ do { - line_size = strlen(tmpline); - - /* It sometimes happens that we read a line of size 0, -@@ -798,6 +810,7 @@ - - memset(tmpline, '\0', MESSAGE_MAX_LINE_SIZE + 1); - } -+ while (fgets(tmpline, MESSAGE_MAX_LINE_SIZE, instream) != NULL); - - if (ferror(instream)) { - trace(TRACE_ERROR, "%s,%s: error reading instream", diff -ruN --exclude=CVS /usr/ports/mail/dbmail/files/patch-2.0.4_bug177 /root/dbmail/files/patch-2.0.4_bug177 --- /usr/ports/mail/dbmail/files/patch-2.0.4_bug177 Mon Jul 18 12:04:16 2005 +++ /root/dbmail/files/patch-2.0.4_bug177 Wed Dec 31 19:00:00 1969 @@ -1,575 +0,0 @@ -Index: user.c -=================================================================== ---- user.c (revision 1711) -+++ user.c (revision 1712) -@@ -202,8 +202,8 @@ - memset(&change_flags, 0, sizeof(change_flags)); - - /* get options */ -- opterr = 0; /* suppress error message from getopt() */ -- while ((opt = getopt(argc, argv, -+ dm_opterr = 0; /* suppress error message from getopt() */ -+ while ((opt = dm_getopt(argc, argv, - "-a:d:c:e:l::x:" /* Major modes */ - "W::w:P::p:u:g:m:t:s:S:T:" /* Minor options */ - "i" "f:qnyvVh" /* Common options */ )) != -1) { -@@ -223,16 +223,16 @@ - if (mode) - mode_toomany = 1; - mode = opt; -- if (optarg && strlen(optarg)) -- user = dm_strdup(optarg); -+ if (dm_optarg && strlen(dm_optarg)) -+ user = dm_strdup(dm_optarg); - break; - - case 'x': - if (mode) - mode_toomany = 1; - mode = opt; -- if (optarg && strlen(optarg)) -- alias = dm_strdup(optarg); -+ if (dm_optarg && strlen(dm_optarg)) -+ alias = dm_strdup(dm_optarg); - break; - - case 'l': -@@ -241,8 +241,8 @@ - if (mode != 0 && mode != 'l') - mode_toomany = 1; - mode = opt; -- if (optarg && strlen(optarg)) -- userspec = dm_strdup(optarg); -+ if (dm_optarg && strlen(dm_optarg)) -+ userspec = dm_strdup(dm_optarg); - break; - - case 'i': -@@ -253,13 +253,13 @@ - /* Minor options */ - case 'w': - change_flags.newpasswd = 1; -- passwd = dm_strdup(optarg); -+ passwd = dm_strdup(dm_optarg); - break; - - case 'W': - change_flags.newpasswd = 1; -- if (optarg && strlen(optarg)) { -- passwdfile = dm_strdup(optarg); -+ if (dm_optarg && strlen(dm_optarg)) { -+ passwdfile = dm_strdup(dm_optarg); - change_flags.newpasswdfile = 1; - } else { - change_flags.newpasswdstdin = 1; -@@ -268,20 +268,20 @@ - - case 'u': - change_flags.newuser = 1; -- newuser = dm_strdup(optarg); -+ newuser = dm_strdup(dm_optarg); - break; - - case 'p': - if (!passwdtype) -- passwdtype = dm_strdup(optarg); -+ passwdtype = dm_strdup(dm_optarg); - // else - // Complain about only one type allowed. - break; - - case 'P': - change_flags.newpasswdshadow = 1; -- if (optarg && strlen(optarg)) -- passwdfile = dm_strdup(optarg); -+ if (dm_optarg && strlen(dm_optarg)) -+ passwdfile = dm_strdup(dm_optarg); - else - passwdfile = SHADOWFILE; - passwdtype = "shadow"; -@@ -289,42 +289,42 @@ - - case 'g': - change_flags.newclientid = 1; -- clientid = strtoull(optarg, NULL, 10); -+ clientid = strtoull(dm_optarg, NULL, 10); - break; - - case 'm': - change_flags.newmaxmail = 1; -- maxmail = strtomaxmail(optarg); -+ maxmail = strtomaxmail(dm_optarg); - break; - - case 's': - // Add this item to the user's aliases. -- if (optarg && (len = strlen(optarg))) -- list_nodeadd(&alias_add, optarg, len+1); -+ if (dm_optarg && (len = strlen(dm_optarg))) -+ list_nodeadd(&alias_add, dm_optarg, len+1); - break; - - case 'S': - // Delete this item from the user's aliases. -- if (optarg && (len = strlen(optarg))) -- list_nodeadd(&alias_del, optarg, len+1); -+ if (dm_optarg && (len = strlen(dm_optarg))) -+ list_nodeadd(&alias_del, dm_optarg, len+1); - break; - - case 't': - // Add this item to the alias's forwards. -- if (optarg && (len = strlen(optarg))) -- list_nodeadd(&fwds_add, optarg, len+1); -+ if (dm_optarg && (len = strlen(dm_optarg))) -+ list_nodeadd(&fwds_add, dm_optarg, len+1); - break; - - case 'T': - // Delete this item from the alias's forwards. -- if (optarg && (len = strlen(optarg))) -- list_nodeadd(&fwds_del, optarg, len+1); -+ if (dm_optarg && (len = strlen(dm_optarg))) -+ list_nodeadd(&fwds_del, dm_optarg, len+1); - break; - - /* Common options */ - case 'f': -- if (optarg && strlen(optarg) > 0) -- configFile = optarg; -+ if (dm_optarg && strlen(dm_optarg) > 0) -+ configFile = dm_optarg; - else { - qerrorf("dbmail-users: -f requires a filename\n\n"); - result = 1; -Index: lmtpd.c -=================================================================== ---- lmtpd.c (revision 1711) -+++ lmtpd.c (revision 1712) -@@ -100,8 +100,8 @@ - openlog(PNAME, LOG_PID, LOG_MAIL); - - /* get command-line options */ -- opterr = 0; /* suppress error message from getopt() */ -- while ((opt = getopt(argc, argv, "vVhqnf:p:")) != -1) { -+ dm_opterr = 0; /* suppress error message from getopt() */ -+ while ((opt = dm_getopt(argc, argv, "vVhqnf:p:")) != -1) { - switch (opt) { - case 'v': - /* TODO: Perhaps verbose should log to the console with -n? */ -@@ -121,8 +121,8 @@ - do_showhelp(); - return 0; - case 'p': -- if (optarg && strlen(optarg) > 0) -- pidFile = optarg; -+ if (dm_optarg && strlen(dm_optarg) > 0) -+ pidFile = dm_optarg; - else { - fprintf(stderr, - "dbmail-lmtpd: -p requires a filename " -@@ -131,8 +131,8 @@ - } - break; - case 'f': -- if (optarg && strlen(optarg) > 0) -- configFile = optarg; -+ if (dm_optarg && strlen(dm_optarg) > 0) -+ configFile = dm_optarg; - else { - fprintf(stderr, - "dbmail-lmtpd: -f requires a filename " -Index: dm_getopt.c -=================================================================== ---- dm_getopt.c (revision 1711) -+++ dm_getopt.c (revision 1712) -@@ -135,7 +135,7 @@ - */ - - int _dm_getopt_internal(int argc, char * argv[], const char *shortopts, -- const struct option *longopts, int *longind, -+ const struct dm_option *longopts, int *longind, - int long_only) - { - char mode, colon_mode = *shortopts; -@@ -261,13 +261,13 @@ - } - - int dm_getopt_long(int argc, char * argv[], const char *shortopts, -- const struct option *longopts, int *longind) -+ const struct dm_option *longopts, int *longind) - { - return _dm_getopt_internal(argc, argv, shortopts, longopts, longind, 0); - } - - int dm_getopt_long_only(int argc, char * argv[], const char *shortopts, -- const struct option *longopts, int *longind) -+ const struct dm_option *longopts, int *longind) - { - return _dm_getopt_internal(argc, argv, shortopts, longopts, longind, 1); - } -Index: maintenance.c -=================================================================== ---- maintenance.c (revision 1711) -+++ maintenance.c (revision 1712) -@@ -121,8 +121,8 @@ - setvbuf(stdout, 0, _IONBF, 0); - - /* get options */ -- opterr = 0; /* suppress error message from getopt() */ -- while ((opt = getopt(argc, argv, -+ dm_opterr = 0; /* suppress error message from getopt() */ -+ while ((opt = dm_getopt(argc, argv, - "-acrtl:pudb" /* Main options */ - "i" /* Maybe later options */ - "f:qnyvVh")) != -1) { /* Common options */ -@@ -173,8 +173,8 @@ - case 'l': - check_iplog = 1; - do_nothing = 0; -- if (optarg) -- strncpy(timespec, optarg, LEN); -+ if (dm_optarg) -+ strncpy(timespec, dm_optarg, LEN); - else - timespec[0] = 0; - -@@ -209,8 +209,8 @@ - break; - - case 'f': -- if (optarg && strlen(optarg) > 0) -- configFile = optarg; -+ if (dm_optarg && strlen(dm_optarg) > 0) -+ configFile = dm_optarg; - else { - qerrorf("dbmail-util: -f requires a filename\n\n" ); - return 1; -Index: dm_getopt.h -=================================================================== ---- dm_getopt.h (revision 1711) -+++ dm_getopt.h (revision 1712) -@@ -26,38 +26,23 @@ - */ - - #include "config.h" -+#ifndef DM_GETOPT_H -+#define DM_GETOPT_H - --#ifndef USE_DM_GETOPT --# include --#endif -+# ifndef USE_DM_GETOPT -+# include -+# define dm_getopt getopt -+# define dm_getopt_long getopt_long -+# define dm_getopt_long_only getopt_long_only -+# define _dm_getopt_internal _getopt_internal -+# define dm_opterr opterr -+# define dm_optind optind -+# define dm_optopt optopt -+# define dm_optarg optarg -+# endif - --#ifdef USE_DM_GETOPT -+# ifdef USE_DM_GETOPT - --# ifndef DM_GETOPT_H -- /* Our include guard first. */ --# define DM_GETOPT_H -- /* Try to kill the system getopt.h */ --# define _GETOPT_DECLARED --# define _GETOPT_H --# define GETOPT_H -- --# undef getopt --# define getopt dm_getopt --# undef getopt_long --# define getopt_long dm_getopt_long --# undef getopt_long_only --# define getopt_long_only dm_getopt_long_only --# undef _getopt_internal --# define _getopt_internal _dm_getopt_internal --# undef opterr --# define opterr dm_opterr --# undef optind --# define optind dm_optind --# undef optopt --# define optopt dm_optopt --# undef optarg --# define optarg dm_optarg -- - # ifdef __cplusplus - extern "C" { - # endif -@@ -68,7 +53,7 @@ - extern int dm_optind, dm_opterr, dm_optopt; - extern char *dm_optarg; - --struct option { -+struct dm_option { - const char *name; - int has_arg; - int *flag; -@@ -76,28 +61,25 @@ - }; - - /* human-readable values for has_arg */ --# undef no_argument --# define no_argument 0 --# undef required_argument --# define required_argument 1 --# undef optional_argument --# define optional_argument 2 -+# define dm_getopt_no_argument 0 -+# define dm_getopt_required_argument 1 -+# define dm_getopt_optional_argument 2 - - /* GNU-style long-argument parsers */ - extern int dm_getopt_long(int argc, char * argv[], const char *shortopts, -- const struct option *longopts, int *longind); -+ const struct dm_option *longopts, int *longind); - - extern int dm_getopt_long_only(int argc, char * argv[], const char *shortopts, -- const struct option *longopts, int *longind); -+ const struct dm_option *longopts, int *longind); - - extern int _dm_getopt_internal(int argc, char * argv[], const char *shortopts, -- const struct option *longopts, int *longind, -+ const struct dm_option *longopts, int *longind, - int long_only); - - # ifdef __cplusplus - } - # endif - --# endif /* DM_GETOPT_H */ -+# endif /* USE_DM_GETOPT */ - --#endif /* USE_DM_GETOPT */ -+#endif /* DM_GETOPT_H */ -Index: timsieved.c -=================================================================== ---- timsieved.c (revision 1711) -+++ timsieved.c (revision 1712) -@@ -99,8 +99,8 @@ - openlog(PNAME, LOG_PID, LOG_MAIL); - - /* get command-line options */ -- opterr = 0; /* suppress error message from getopt() */ -- while ((opt = getopt(argc, argv, "vVhqnf:p:")) != -1) { -+ dm_opterr = 0; /* suppress error message from getopt() */ -+ while ((opt = dm_getopt(argc, argv, "vVhqnf:p:")) != -1) { - switch (opt) { - case 'v': - /* TODO: Perhaps verbose should log to the console with -n? */ -@@ -120,8 +120,8 @@ - do_showhelp(); - return 0; - case 'p': -- if (optarg && strlen(optarg) > 0) -- pidFile = optarg; -+ if (dm_optarg && strlen(dm_optarg) > 0) -+ pidFile = dm_optarg; - else { - fprintf(stderr, - "dbmail-timsieved: -p requires a filename " -@@ -130,8 +130,8 @@ - } - break; - case 'f': -- if (optarg && strlen(optarg) > 0) -- configFile = optarg; -+ if (dm_optarg && strlen(dm_optarg) > 0) -+ configFile = dm_optarg; - else { - fprintf(stderr, - "dbmail-timsieved: -f requires a filename " -Index: pop3d.c -=================================================================== ---- pop3d.c (revision 1711) -+++ pop3d.c (revision 1712) -@@ -103,8 +103,8 @@ - openlog(PNAME, LOG_PID, LOG_MAIL); - - /* get command-line options */ -- opterr = 0; /* suppress error message from getopt() */ -- while ((opt = getopt(argc, argv, "vVhqnf:p:")) != -1) { -+ dm_opterr = 0; /* suppress error message from getopt() */ -+ while ((opt = dm_getopt(argc, argv, "vVhqnf:p:")) != -1) { - switch (opt) { - case 'v': - /* TODO: Perhaps verbose should log to the console with -n? */ -@@ -124,8 +124,8 @@ - do_showhelp(); - return 0; - case 'p': -- if (optarg && strlen(optarg) > 0) -- pidFile = optarg; -+ if (dm_optarg && strlen(dm_optarg) > 0) -+ pidFile = dm_optarg; - else { - fprintf(stderr, - "dbmail-pop3d: -p requires a filename " -@@ -134,8 +134,8 @@ - } - break; - case 'f': -- if (optarg && strlen(optarg) > 0) -- configFile = optarg; -+ if (dm_optarg && strlen(dm_optarg) > 0) -+ configFile = dm_optarg; - else { - fprintf(stderr, - "dbmail-pop3d: -f requires a filename " -Index: imapd.c -=================================================================== ---- imapd.c (revision 1711) -+++ imapd.c (revision 1712) -@@ -97,8 +97,8 @@ - openlog(PNAME, LOG_PID, LOG_MAIL); - - /* get command-line options */ -- opterr = 0; /* suppress error message from getopt() */ -- while ((opt = getopt(argc, argv, "vVhqnf:p:")) != -1) { -+ dm_opterr = 0; /* suppress error message from getopt() */ -+ while ((opt = dm_getopt(argc, argv, "vVhqnf:p:")) != -1) { - switch (opt) { - case 'v': - /* TODO: Perhaps verbose should log to the console with -n? */ -@@ -118,8 +118,8 @@ - do_showhelp(); - return 0; - case 'p': -- if (optarg && strlen(optarg) > 0) -- pidFile = optarg; -+ if (dm_optarg && strlen(dm_optarg) > 0) -+ pidFile = dm_optarg; - else { - fprintf(stderr, - "dbmail-imapd: -p requires a filename " -@@ -128,8 +128,8 @@ - } - break; - case 'f': -- if (optarg && strlen(optarg) > 0) -- configFile = optarg; -+ if (dm_optarg && strlen(dm_optarg) > 0) -+ configFile = dm_optarg; - else { - fprintf(stderr, - "dbmail-imapd: -f requires a filename " -Index: sievecmd.c -=================================================================== ---- sievecmd.c (revision 1711) -+++ sievecmd.c (revision 1712) -@@ -57,7 +57,7 @@ - char *user_name = NULL; - char *name = NULL; - FILE *source = NULL; -- extern char *optarg; -+ extern char *dm_optarg; - - openlog(PNAME, LOG_PID, LOG_MAIL); - -@@ -70,7 +70,7 @@ - configure_debug(TRACE_ERROR, 1, 0); - - while (opt != -1 && act != 'h') { -- opt = getopt(argc, argv, "a:d:i:r:u:l"); -+ opt = dm_getopt(argc, argv, "a:d:i:r:u:l"); - - switch (opt) { - case -1: -@@ -84,11 +84,11 @@ - act = 'h'; - else - act = opt; -- name = optarg; -+ name = dm_optarg; - source = stdin; // FIXME to take files as input, too - break; - case 'u': -- user_name = dm_strdup(optarg); -+ user_name = dm_strdup(dm_optarg); - break; - case 'l': - if (act != 0) -Index: main.c -=================================================================== ---- main.c (revision 1711) -+++ main.c (revision 1712) -@@ -189,7 +189,7 @@ - * with an immediately preceding option are return with option - * value '1'. We will use this to allow for multiple values to - * follow after each of the supported options. */ -- while ((c = getopt(argc, argv, "-t::m:u:d:r: f:qnyvVh")) != EOF) { -+ while ((c = dm_getopt(argc, argv, "-t::m:u:d:r: f:qnyvVh")) != EOF) { - /* Received an n-th value following the last option, - * so recall the last known option to be used in the switch. */ - if (c == 1) -@@ -200,13 +200,13 @@ - case 't': - trace(TRACE_INFO, "main(): using NORMAL_DELIVERY"); - -- if (optarg) { -+ if (dm_optarg) { - if (deliver_to_header) { - printf - ("Only one header field may be specified.\n"); - usage_error = 1; - } else -- deliver_to_header = optarg; -+ deliver_to_header = dm_optarg; - } else - deliver_to_header = "deliver-to"; - -@@ -221,7 +221,7 @@ - ("Only one header field may be specified.\n"); - usage_error = 1; - } else -- deliver_to_mailbox = optarg; -+ deliver_to_mailbox = dm_optarg; - - break; - -@@ -231,8 +231,8 @@ - - /* Add argument onto the returnpath list. */ - if (list_nodeadd -- (&returnpath, optarg, -- strlen(optarg) + 1) == 0) { -+ (&returnpath, dm_optarg, -+ strlen(dm_optarg) + 1) == 0) { - trace(TRACE_ERROR, - "main(): list_nodeadd reports out of memory" - " while adding to returnpath"); -@@ -247,7 +247,7 @@ - "main(): using SPECIAL_DELIVERY to usernames"); - - dsnuser_init(&dsnuser); -- dsnuser.address = dm_strdup(optarg); -+ dsnuser.address = dm_strdup(dm_optarg); - - /* Add argument onto the users list. */ - if (list_nodeadd -@@ -267,7 +267,7 @@ - "main(): using SPECIAL_DELIVERY to email addresses"); - - dsnuser_init(&dsnuser); -- dsnuser.address = dm_strdup(optarg); -+ dsnuser.address = dm_strdup(dm_optarg); - - /* Add argument onto the users list. */ - if (list_nodeadd -@@ -284,8 +284,8 @@ - - /* Common command line options. */ - case 'f': -- if (optarg && strlen(optarg) > 0) -- configFile = optarg; -+ if (dm_optarg && strlen(dm_optarg) > 0) -+ configFile = dm_optarg; - else { - fprintf(stderr, - "dbmail-smtp: -f requires a filename\n\n" ); diff -ruN --exclude=CVS /usr/ports/mail/dbmail/files/patch-2.0.4_bug184 /root/dbmail/files/patch-2.0.4_bug184 --- /usr/ports/mail/dbmail/files/patch-2.0.4_bug184 Mon Jul 18 12:04:16 2005 +++ /root/dbmail/files/patch-2.0.4_bug184 Wed Dec 31 19:00:00 1969 @@ -1,66 +0,0 @@ -Index: configure.in -=================================================================== ---- configure.in (revision 1751) -+++ configure.in (revision 1761) -@@ -42,6 +42,7 @@ - DBMAIL_CHECK_SIEVE_LIBS - DBMAIL_CHECK_GC - DBMAIL_CHECK_GETOPT -+DBMAIL_CHECK_SOCKLEN_T - - AC_PROG_CC - AC_COMPILE_WARNINGS -Index: acinclude.m4 -=================================================================== ---- acinclude.m4 (revision 1751) -+++ acinclude.m4 (revision 1761) -@@ -513,3 +513,49 @@ - - # Prerequisites of lib/getopt*. - AC_DEFUN([CHECK_PREREQ_GETOPT], [:]) -+ -+# -+# socklen_t -+# from curl -+ -+dnl Check for socklen_t: historically on BSD it is an int, and in -+dnl POSIX 1g it is a type of its own, but some platforms use different -+dnl types for the argument to getsockopt, getpeername, etc. So we -+dnl have to test to find something that will work. -+AC_DEFUN([DBMAIL_CHECK_SOCKLEN_T], -+[ -+ AC_CHECK_TYPE([socklen_t], ,[ -+ AC_MSG_CHECKING([for socklen_t equivalent]) -+ AC_CACHE_VAL([socklen_t_equiv], -+ [ -+ # Systems have either "struct sockaddr *" or -+ # "void *" as the second argument to getpeername -+ socklen_t_equiv= -+ for arg2 in "struct sockaddr" void; do -+ for t in int size_t unsigned long "unsigned long"; do -+ AC_TRY_COMPILE([ -+ #include -+ #include -+ -+ int getpeername (int, $arg2 *, $t *); -+ ],[ -+ $t len; -+ getpeername(0,0,&len); -+ ],[ -+ socklen_t_equiv="$t" -+ break -+ ]) -+ done -+ done -+ -+ if test "x$socklen_t_equiv" = x; then -+ AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) -+ fi -+ ]) -+ AC_MSG_RESULT($socklen_t_equiv) -+ AC_DEFINE_UNQUOTED(socklen_t, $socklen_t_equiv, -+ [type to use in place of socklen_t if not defined])], -+ [#include -+#include ]) -+]) -+ diff -ruN --exclude=CVS /usr/ports/mail/dbmail/files/patch-2.0.4_bug190_pool.c /root/dbmail/files/patch-2.0.4_bug190_pool.c --- /usr/ports/mail/dbmail/files/patch-2.0.4_bug190_pool.c Mon Jul 18 12:04:16 2005 +++ /root/dbmail/files/patch-2.0.4_bug190_pool.c Wed Dec 31 19:00:00 1969 @@ -1,126 +0,0 @@ -Index: pool.c -=================================================================== ---- pool.c (revision 1600) -+++ pool.c (revision 1758) -@@ -73,8 +73,10 @@ - void scoreboard_new(serverConfig_t * conf) - { - int serr; -- if ((shmid = shmget(IPC_PRIVATE, P_SIZE, 0644 | IPC_CREAT)) == -1) -- trace(TRACE_FATAL, "%s,%s: shmget failed",__FILE__,__func__); -+ if ((shmid = shmget(IPC_PRIVATE, P_SIZE, 0644 | IPC_CREAT)) == -1) { -+ serr = errno; -+ trace(TRACE_FATAL, "%s,%s: shmget failed [%s]",__FILE__,__func__, strerror(serr)); -+ } - scoreboard = shmat(shmid, (void *) 0, 0); - serr=errno; - if (scoreboard == (Scoreboard_t *) (-1)) { -@@ -222,7 +236,7 @@ - } - scoreboard_unlck(); - trace(TRACE_FATAL, -- "%s,%s: pid NOT found on scoreboard [%d]", __FILE__, __FUNCTION__, pid); -+ "%s,%s: pid NOT found on scoreboard [%d]", __FILE__, __func__, pid); - return -1; - } - -@@ -238,25 +252,25 @@ - { - int i; - trace(TRACE_MESSAGE, "%s,%s: register child [%d]", -- __FILE__, __FUNCTION__, getpid()); -+ __FILE__, __func__, getpid()); - - scoreboard_wrlck(); - for (i = 0; i < scoreboard->conf->maxChildren; i++) { - if (scoreboard->child[i].pid == -1) - break; - if (scoreboard->child[i].pid == getpid()) { -- trace(TRACE_ERROR, -+ scoreboard_unlck(); -+ trace(TRACE_FATAL, - "%s,%s: child already registered.", -- __FILE__, __FUNCTION__); -- scoreboard_unlck(); -+ __FILE__, __func__); - return -1; - } - } - if (i == scoreboard->conf->maxChildren) { -+ scoreboard_unlck(); - trace(TRACE_WARNING, - "%s,%s: no empty slot found", -- __FILE__, __FUNCTION__); -- scoreboard_unlck(); -+ __FILE__, __func__); - return -1; - } - -@@ -264,8 +278,8 @@ - scoreboard->child[i].status = STATE_IDLE; - scoreboard_unlck(); - -- trace(TRACE_INFO, "%s,%s: initializing child_state [%d] using slot [%d]", -- __FILE__, __FUNCTION__, getpid(), i); -+ trace(TRACE_MESSAGE, "%s,%s: initializing child_state [%d] using slot [%d]", -+ __FILE__, __func__, getpid(), i); - return 0; - } - -@@ -281,7 +295,7 @@ - scoreboard->child[key].status = STATE_CONNECTED; - scoreboard_unlck(); - -- trace(TRACE_DEBUG, "%s,%s: [%d]", __FILE__, __FUNCTION__, -+ trace(TRACE_DEBUG, "%s,%s: [%d]", __FILE__, __func__, - getpid()); - } - -@@ -297,7 +311,7 @@ - scoreboard->child[key].status = STATE_IDLE; - scoreboard_unlck(); - -- trace(TRACE_DEBUG, "%s,%s: [%d]", __FILE__, __FUNCTION__, -+ trace(TRACE_DEBUG, "%s,%s: [%d]", __FILE__, __func__, - getpid()); - } - -@@ -320,7 +334,7 @@ - scoreboard_unlck(); - - trace(TRACE_MESSAGE, -- "%s,%s: child [%d] unregistered", __FILE__, __FUNCTION__, -+ "%s,%s: child [%d] unregistered", __FILE__, __func__, - getpid()); - } - -@@ -346,7 +360,7 @@ - manage_stop_children(); - trace(TRACE_FATAL, - "%s,%s: could not create children. Fatal.", -- __FILE__, __FUNCTION__); -+ __FILE__, __func__); - exit(0); - } - } -@@ -360,10 +374,17 @@ - if (chpid == -1) - continue; - if (waitpid(chpid, NULL, WNOHANG|WUNTRACED) == chpid) { -+ scoreboard_release(chpid); - trace(TRACE_MESSAGE,"%s,%s: child [%d] exited. Restarting...", -- __FILE__, __FUNCTION__, chpid); -- scoreboard_release(chpid); -- CreateChild(&childinfo); -+ __FILE__, __func__, chpid); -+ if (CreateChild(&childinfo)== -1) { -+ trace(TRACE_ERROR,"%s,%s: createchild failed. Bailout...", -+ __FILE__, __func__); -+ GeneralStopRequested=1; -+ manage_stop_children(); -+ -+ exit(1); -+ } - } - } - sleep(1); diff -ruN --exclude=CVS /usr/ports/mail/dbmail/files/patch-2.0.4_bug190_server.c /root/dbmail/files/patch-2.0.4_bug190_server.c --- /usr/ports/mail/dbmail/files/patch-2.0.4_bug190_server.c Mon Jul 18 12:04:16 2005 +++ /root/dbmail/files/patch-2.0.4_bug190_server.c Wed Dec 31 19:00:00 1969 @@ -1,41 +0,0 @@ -Index: server.c -=================================================================== ---- server.c (revision 1600) -+++ server.c (revision 1758) -@@ -119,9 +119,15 @@ - alarm(10); - - trace(TRACE_DEBUG, "StartServer(): children created, starting main service loop"); -- while (!GeneralStopRequested) -- manage_restart_children(); -- -+ while (!GeneralStopRequested) { -+ if (db_connect() != 0) { -+ GeneralStopRequested=1; -+ } else { -+ db_disconnect(); -+ manage_restart_children(); -+ } -+ } -+ - manage_stop_children(); - scoreboard_delete(); - -@@ -131,6 +137,8 @@ - - void ParentSigHandler(int sig, siginfo_t * info, void *data) - { -+ int saved_errno = errno; -+ - if (ParentPID != getpid()) { - trace(TRACE_INFO, - "ParentSigHandler(): i'm no longer father"); -@@ -162,6 +170,8 @@ - default: - GeneralStopRequested = 1; - } -+ -+ errno = saved_errno; - } - - diff -ruN --exclude=CVS /usr/ports/mail/dbmail/files/patch-2.0.4_bug190_serverchild.c /root/dbmail/files/patch-2.0.4_bug190_serverchild.c --- /usr/ports/mail/dbmail/files/patch-2.0.4_bug190_serverchild.c Mon Jul 18 12:04:16 2005 +++ /root/dbmail/files/patch-2.0.4_bug190_serverchild.c Wed Dec 31 19:00:00 1969 @@ -1,267 +0,0 @@ -Index: serverchild.c -=================================================================== ---- serverchild.c (revision 1600) -+++ serverchild.c (revision 1758) -@@ -66,13 +66,13 @@ - void client_close(void) - { - if (client.tx) { -- trace(TRACE_DEBUG,"%s,%s: closing write stream", __FILE__,__FUNCTION__); -+ trace(TRACE_DEBUG,"%s,%s: closing write stream", __FILE__,__func__); - fflush(client.tx); - fclose(client.tx); /* closes clientSocket as well */ - client.tx = NULL; - } - if (client.rx) { -- trace(TRACE_DEBUG,"%s,%s: closing read stream", __FILE__,__FUNCTION__); -+ trace(TRACE_DEBUG,"%s,%s: closing read stream", __FILE__,__func__); - shutdown(fileno(client.rx), SHUT_RDWR); - fclose(client.rx); - client.rx = NULL; -@@ -86,7 +86,7 @@ - - trace(TRACE_DEBUG, - "%s,%s: database connection still open, closing", -- __FILE__,__FUNCTION__); -+ __FILE__,__func__); - db_disconnect(); - auth_disconnect(); - connected = 0; /* FIXME a signal between this line and the previous one -@@ -99,18 +99,22 @@ - - void noop_child_sig_handler(int sig, siginfo_t *info UNUSED, void *data UNUSED) - { -- trace(TRACE_DEBUG, "%s,%s: ignoring signal [%d]", __FILE__, __FUNCTION__, sig); -+ int saved_errno = errno; -+ trace(TRACE_DEBUG, "%s,%s: ignoring signal [%d]", __FILE__, __func__, sig); -+ errno = saved_errno; - } - - void active_child_sig_handler(int sig, siginfo_t * info UNUSED, void *data UNUSED) - { -+ int saved_errno = errno; -+ - static int triedDisconnect = 0; - - #ifdef _USE_STR_SIGNAL -- trace(TRACE_ERROR, "%s,%s: got signal [%s]", __FILE__, __FUNCTION__, -+ trace(TRACE_ERROR, "%s,%s: got signal [%s]", __FILE__, __func__, - strsignal(sig)); - #else -- trace(TRACE_ERROR, "%s,%s: got signal [%d]", __FILE__, __FUNCTION__, sig); -+ trace(TRACE_ERROR, "%s,%s: got signal [%d]", __FILE__, __func__, sig); - #endif - - /* perform reinit at SIGHUP otherwise exit, but do nothing on -@@ -118,10 +122,10 @@ - switch (sig) { - case SIGCHLD: - trace(TRACE_DEBUG, "%s,%s: SIGCHLD received... ignoring", -- __FILE__, __FUNCTION__); -+ __FILE__, __func__); - break; - case SIGALRM: -- trace(TRACE_DEBUG, "%s,%s: timeout received", __FILE__, __FUNCTION__); -+ trace(TRACE_DEBUG, "%s,%s: timeout received", __FILE__, __func__); - client_close(); - break; - -@@ -132,23 +136,23 @@ - if (ChildStopRequested) { - trace(TRACE_DEBUG, - "%s,%s: already caught a stop request. Closing right now", -- __FILE__,__FUNCTION__); -+ __FILE__,__func__); - - /* already caught this signal, exit the hard way now */ - client_close(); - disconnect_all(); - child_unregister(); -- trace(TRACE_DEBUG, "%s,%s: exit",__FILE__,__FUNCTION__); -+ trace(TRACE_DEBUG, "%s,%s: exit",__FILE__,__func__); - exit(1); - } -- trace(TRACE_DEBUG, "%s,%s: setting stop request",__FILE__,__FUNCTION__); -+ trace(TRACE_DEBUG, "%s,%s: setting stop request",__FILE__,__func__); - DelChildSigHandler(); - ChildStopRequested = 1; - break; - default: - /* bad shtuff, exit */ - trace(TRACE_DEBUG, -- "%s,%s: cannot ignore this. Terminating",__FILE__,__FUNCTION__); -+ "%s,%s: cannot ignore this. Terminating",__FILE__,__func__); - - /* - * For some reason i have not yet determined the process starts eating up -@@ -164,10 +168,12 @@ - disconnect_all(); - } - -- trace(TRACE_DEBUG, "%s,%s: exit", __FILE__, __FUNCTION__); -+ trace(TRACE_DEBUG, "%s,%s: exit", __FILE__, __func__); - child_unregister(); - exit(1); - } -+ -+ errno = saved_errno; - } - - -@@ -239,16 +245,19 @@ - if (! pid) { - if (child_register() == -1) { - trace(TRACE_FATAL, "%s,%s: child_register failed", -- __FILE__, __FUNCTION__); -+ __FILE__, __func__); - exit(0); - - } - - ChildStopRequested = 0; - SetChildSigHandler(); -- trace(TRACE_INFO, "%s,%s: signal handler placed, going to perform task now", -- __FILE__, __FUNCTION__); -- PerformChildTask(info); -+ -+ trace(TRACE_INFO, "%s,%s: signal handler placed, going to perform task now", -+ __FILE__, __func__); -+ -+ if (PerformChildTask(info)== -1) -+ return -1; - child_unregister(); - exit(0); - } else { -@@ -269,22 +278,22 @@ - struct hostent *clientHost; - - if (!info) { -- trace(TRACE_ERROR, -- "PerformChildTask(): NULL info supplied"); -+ trace(TRACE_ERROR, "%s,%s: NULL info supplied", -+ __FILE__, __func__); - return -1; - } - - if (db_connect() != 0) { -- trace(TRACE_ERROR, -- "PerformChildTask(): could not connect to database"); -+ trace(TRACE_ERROR, "%s,%s: could not connect to database", -+ __FILE__, __func__); - return -1; - } - if (db_check_version() != 0) - return -1; - - if (auth_connect() != 0) { -- trace(TRACE_ERROR, -- "PerformChildTask(): could not connect to authentication"); -+ trace(TRACE_ERROR, "%s,%s: could not connect to authentication", -+ __FILE__, __func__); - return -1; - } - -@@ -294,12 +303,13 @@ - for (i = 0; i < info->maxConnect && !ChildStopRequested; i++) { - - if (db_check_connection()) { -- trace(TRACE_ERROR, "%s,%s: database has gone away", __FILE__, __func__); -+ trace(TRACE_ERROR, "%s,%s: database has gone away", -+ __FILE__, __func__); - return -1; - } - -- trace(TRACE_INFO, -- "PerformChildTask(): waiting for connection"); -+ trace(TRACE_INFO, "%s,%s: waiting for connection", -+ __FILE__, __func__); - - child_reg_disconnected(); - -@@ -312,8 +322,8 @@ - - if (clientSocket == -1) { - i--; /* don't count this as a connect */ -- trace(TRACE_INFO, -- "PerformChildTask(): accept failed"); -+ trace(TRACE_INFO, "%s,%s: accept failed", -+ __FILE__, __func__); - continue; /* accept failed, refuse connection & continue */ - } - -@@ -337,30 +347,29 @@ - strncpy(client.clientname, - clientHost->h_name, FIELDSIZE); - -- trace(TRACE_MESSAGE, -- "PerformChildTask(): incoming connection from [%s (%s)]", -+ trace(TRACE_MESSAGE, "%s,%s: incoming connection from [%s (%s)]", -+ __FILE__, __func__, - client.ip, - client.clientname[0] ? client. - clientname : "Lookup failed"); - } else { -- trace(TRACE_MESSAGE, -- "PerformChildTask(): incoming connection from [%s]", -- client.ip); -+ trace(TRACE_MESSAGE, "%s,%s: incoming connection from [%s]", -+ __FILE__, __func__, client.ip); - } - - /* make streams */ - if (!(client.rx = fdopen(dup(clientSocket), "r"))) { - /* read-FILE opening failure */ -- trace(TRACE_ERROR, -- "PerformChildTask(): error opening read file stream"); -+ trace(TRACE_ERROR, "%s,%s: error opening read file stream", -+ __FILE__, __func__); - close(clientSocket); - continue; - } - - if (!(client.tx = fdopen(clientSocket, "w"))) { - /* write-FILE opening failure */ -- trace(TRACE_ERROR, -- "PerformChildTask(): error opening write file stream"); -+ trace(TRACE_ERROR, "%s,%s: error opening write file stream", -+ __FILE__, __func__); - fclose(client.rx); - close(clientSocket); - memset(&client, 0, sizeof(client)); -@@ -370,8 +379,8 @@ - setvbuf(client.tx, (char *) NULL, _IOLBF, 0); - setvbuf(client.rx, (char *) NULL, _IOLBF, 0); - -- trace(TRACE_DEBUG, -- "PerformChildTask(): client info init complete, calling client handler"); -+ trace(TRACE_DEBUG, "%s,%s: client info init complete, calling client handler", -+ __FILE__, __func__); - - /* streams are ready, perform handling */ - info->ClientHandler(&client); -@@ -379,17 +388,19 @@ - set_proc_title("%s", "Idle"); - #endif - -- trace(TRACE_DEBUG, -- "PerformChildTask(): client handling complete, closing streams"); -+ trace(TRACE_DEBUG, "%s,%s: client handling complete, closing streams", -+ __FILE__, __func__); - client_close(); -- trace(TRACE_INFO, "PerformChildTask(): connection closed"); -+ trace(TRACE_INFO, "%s,%s: connection closed", -+ __FILE__, __func__); - } - - if (!ChildStopRequested) -- trace(TRACE_ERROR, -- "PerformChildTask(): maximum number of connections reached, stopping now"); -+ trace(TRACE_ERROR, "%s,%s: maximum number of connections reached, stopping now", -+ __FILE__, __func__); - else -- trace(TRACE_ERROR, "PerformChildTask(): stop requested"); -+ trace(TRACE_ERROR, "%s,%s: stop requested", -+ __FILE__, __func__); - - child_reg_disconnected(); - disconnect_all(); diff -ruN --exclude=CVS /usr/ports/mail/dbmail/files/patch-2.0.4_bug198_pool.c /root/dbmail/files/patch-2.0.4_bug198_pool.c --- /usr/ports/mail/dbmail/files/patch-2.0.4_bug198_pool.c Mon Jul 18 12:04:16 2005 +++ /root/dbmail/files/patch-2.0.4_bug198_pool.c Wed Dec 31 19:00:00 1969 @@ -1,13 +0,0 @@ -Index: pool.c -=================================================================== ---- pool.c (revision 1763) -+++ pool.c (revision 1787) -@@ -433,7 +433,7 @@ - - for (i = 0; i < scoreboard->conf->maxChildren; i++) { - chpid = scoreboard->child[i].pid; -- if (chpid != 0) -+ if (chpid > 0) - kill(chpid, SIGKILL);; - scoreboard_release(chpid); - } diff -ruN --exclude=CVS /usr/ports/mail/dbmail/files/patch-2.0.4_bug199_server.c /root/dbmail/files/patch-2.0.4_bug199_server.c --- /usr/ports/mail/dbmail/files/patch-2.0.4_bug199_server.c Mon Jul 18 12:04:16 2005 +++ /root/dbmail/files/patch-2.0.4_bug199_server.c Wed Dec 31 19:00:00 1969 @@ -1,35 +0,0 @@ -Index: server.c -=================================================================== ---- server.c (revision 1763) -+++ server.c (revision 1787) -@@ -69,7 +69,7 @@ - - act.sa_sigaction = ParentSigHandler; - sigemptyset(&act.sa_mask); -- act.sa_flags = SA_SIGINFO; -+ act.sa_flags = SA_SIGINFO | SA_NOCLDSTOP; - - sigaction(SIGCHLD, &act, 0); - sigaction(SIGINT, &act, 0); -@@ -152,6 +152,7 @@ - - void ParentSigHandler(int sig, siginfo_t * info, void *data) - { -+ pid_t chpid; - int saved_errno = errno; - - if (ParentPID != getpid()) { -@@ -175,7 +176,12 @@ - break; - - case SIGCHLD: -- break; /* ignore, wait for child in main loop */ -+ /* ignore, wait for child in main loop */ -+ /* but we need to catch zombie */ -+ if ((chpid = waitpid(-1,&sig,WNOHANG)) > 0) -+ scoreboard_release(chpid); -+ -+ break; - - case SIGHUP: - trace(TRACE_DEBUG, diff -ruN --exclude=CVS /usr/ports/mail/dbmail/files/patch-2.0.4_bug214_main.c /root/dbmail/files/patch-2.0.4_bug214_main.c --- /usr/ports/mail/dbmail/files/patch-2.0.4_bug214_main.c Mon Jul 18 12:04:16 2005 +++ /root/dbmail/files/patch-2.0.4_bug214_main.c Wed Dec 31 19:00:00 1969 @@ -1,20 +0,0 @@ -Index: main.c -=================================================================== ---- main.c (revision 1793) -+++ main.c (revision 1796) -@@ -133,6 +133,7 @@ - trace(TRACE_ERROR, "%s,%s: error reading message", - __FILE__, __func__); - dm_free(tmpmessage); -+ tmpmessage=NULL; - return -1; - } - -@@ -371,6 +372,7 @@ - trace(TRACE_ERROR, "%s,%s splitmessage failed", - __FILE__, __func__); - dm_free(whole_message); -+ whole_message=NULL; - exitcode = EX_TEMPFAIL; - goto freeall; - } diff -ruN --exclude=CVS /usr/ports/mail/dbmail/files/patch-2.0.4_bug216_header.c /root/dbmail/files/patch-2.0.4_bug216_header.c --- /usr/ports/mail/dbmail/files/patch-2.0.4_bug216_header.c Mon Jul 18 12:04:16 2005 +++ /root/dbmail/files/patch-2.0.4_bug216_header.c Wed Dec 31 19:00:00 1969 @@ -1,37 +0,0 @@ -Index: header.c -=================================================================== ---- header.c (revision 1796) -+++ header.c (revision 1813) -@@ -176,15 +176,17 @@ - if (message_content[line_content_size] == '\n') { - tmp_line_size = line_content_size + 1; - tmp_line_rfcsize = tmp_line_size + 1; -- } else { -- if (message_content[line_content_size] == '\r' && -- message_content[line_content_size + 1] == '\n') { -+ } else if (message_content[line_content_size] == '\r') { -+ if (message_content[line_content_size + 1] == '\n') { -+ /* This is the right behaviour */ - tmp_line_size = line_content_size + 2; - tmp_line_rfcsize = tmp_line_size; - } else { -- trace(TRACE_ERROR, "%s,%s: error reading header line", -- __FILE__, __func__); -- return -1; -+ /* This is broken behaviour, but it's better -+ * than not handling it at all. -+ */ -+ tmp_line_size = line_content_size + 1; -+ tmp_line_rfcsize = tmp_line_size + 1; - } - } - } -@@ -197,7 +199,6 @@ - __FILE__, __func__); - return 0; - } -- else -- return 1; -+ return 1; - - } diff -ruN --exclude=CVS /usr/ports/mail/dbmail/files/patch-2.0.4_bug79_imaputil.c /root/dbmail/files/patch-2.0.4_bug79_imaputil.c --- /usr/ports/mail/dbmail/files/patch-2.0.4_bug79_imaputil.c Mon Jul 18 12:04:16 2005 +++ /root/dbmail/files/patch-2.0.4_bug79_imaputil.c Wed Dec 31 19:00:00 1969 @@ -1,80 +0,0 @@ -Index: imaputil.c -=================================================================== ---- imaputil.c (revision 1726) -+++ imaputil.c (revision 1793) -@@ -65,7 +65,7 @@ - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - /* returned by date_sql2imap() */ --#define IMAP_STANDARD_DATE "03-Nov-1979 00:00:00 +0000" -+#define IMAP_STANDARD_DATE "Sat, 03-Nov-1979 00:00:00 +0000" - char _imapdate[IMAP_INTERNALDATE_LEN] = IMAP_STANDARD_DATE; - - /* returned by date_imap2sql() */ -@@ -1776,50 +1776,35 @@ - - /* - * convert a mySQL date (yyyy-mm-dd hh:mm:ss) to a valid IMAP internal date: -- * 0123456789012345678 -- * dd-mon-yyyy hh:mm:ss with mon characters (i.e. 'Apr' for april) -- * 01234567890123456789 -+ * [Mon, 30 May 2005 10:01:55 +0100] with mon characters (i.e. 'Apr' for april) - * return value is valid until next function call. - * NOTE: if date is not valid, IMAP_STANDARD_DATE is returned - */ - char *date_sql2imap(const char *sqldate) - { -- char *last_char; -- struct tm tm_localtime, tm_sqldate; -- time_t td; -+ struct tm tm_sql_date; -+ struct tm *tm_imap_date; -+ -+ time_t ltime; -+ char *last; - -- /* we need to get the localtime to get the current timezone */ -- if (time(&td) == -1) { -- trace(TRACE_ERROR, "%s,%s: error getting time()", -- __FILE__, __func__); -- return IMAP_STANDARD_DATE; -- } -- tm_localtime = *localtime(&td); -+ last = strptime(sqldate,"%Y-%m-%d %T", &tm_sql_date); -+ if ( (last == NULL) || (*last != '\0') ) { -+ strcpy(_imapdate, IMAP_STANDARD_DATE); -+ return _imapdate; -+ } - -- /* parse sqldate */ -- last_char = strptime(sqldate, "%Y-%m-%d %T", &tm_sqldate); -- if (last_char == NULL || *last_char != '\0') { -- trace(TRACE_DEBUG, "%s,%s, error parsing date [%s]", -- __FILE__, __func__, sqldate); -- strcpy(_imapdate, IMAP_STANDARD_DATE); -- return _imapdate; -- } -- /* copy DST information from localtime */ -- tm_sqldate.tm_gmtoff = tm_localtime.tm_gmtoff; -- tm_sqldate.tm_isdst = tm_localtime.tm_isdst; -+ /* FIXME: this works fine on linux, but may cause dst offsets in netbsd. */ -+ ltime = mktime (&tm_sql_date); -+ tm_imap_date = localtime(<ime); - -- (void) strftime(_imapdate, IMAP_INTERNALDATE_LEN, -- "%d-%b-%Y %T %z", &tm_sqldate); -- -- return _imapdate; -+ strftime(_imapdate, sizeof(_imapdate), "%a, %d %b %Y %H:%M:%S %z", tm_imap_date); -+ return _imapdate; - } - -- - /* - * convert TO a mySQL date (yyyy-mm-dd) FROM a valid IMAP internal date: -- * 0123456789 - * dd-mon-yyyy with mon characters (i.e. 'Apr' for april) -- * 01234567890 - * OR - * d-mon-yyyy - * return value is valid until next function call. diff -ruN --exclude=CVS /usr/ports/mail/dbmail/files/patch-sort.c /root/dbmail/files/patch-sort.c --- /usr/ports/mail/dbmail/files/patch-sort.c Sat Jun 18 17:34:54 2005 +++ /root/dbmail/files/patch-sort.c Wed Dec 31 19:00:00 1969 @@ -1,11 +0,0 @@ ---- sort/sort.c.orig Tue Mar 15 00:54:00 2005 -+++ sort/sort.c Mon Apr 11 13:46:46 2005 -@@ -58,7 +58,7 @@ - * - * Then do it! - * */ --dsn_class_t sort_and_deliver(u64_t msgidnr, -+sort_result_t sort_and_deliver(u64_t msgidnr, - const char *header UNUSED, - u64_t headersize UNUSED, - u64_t totalmsgsize, --- dbmail-2.1.1_1.patch ends here --- >Release-Note: >Audit-Trail: Responsible-Changed-From-To: freebsd-ports-bugs->seanc Responsible-Changed-By: pav Responsible-Changed-When: Thu Jul 21 15:33:28 GMT 2005 Responsible-Changed-Why: Over to maintainer http://www.freebsd.org/cgi/query-pr.cgi?pr=83852 From: Mark Starovoytov To: bug-followup@FreeBSD.org, dungeons@gmail.com Cc: Subject: Re: ports/83852: [PATCH] mail/dbmail: update to 2.1.1 Date: Fri, 22 Jul 2005 10:52:14 +0400 (MSD) If you really want to have 2.1.1 in ports then it will be better to make independent port, i.e. mail/dbmail-devel. I've tried to run dbmail 2.1.1 on my FreeBSD 5.4-STABLE box and in my opinion it is not stable enough. State-Changed-From-To: open->closed State-Changed-By: pav State-Changed-When: Tue Sep 13 20:28:03 GMT 2005 State-Changed-Why: Update to 2.0.7 was committed instead. 2.1.X is considered a development series, right? Thank you for your work anyway. http://www.freebsd.org/cgi/query-pr.cgi?pr=83852 >Unformatted: