1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-20 00:21:35 +00:00

New port: mail/dbmail21 -current branch of DBMail

Dbmail is the name of a group of programs that enable the possiblilty
	of storing and retrieving mail messages from a database (currently
	MySQL, PostgreSQL or SQLite).

	What are the advantages?

	    * Scalability.
	      Dbmail is as scalable as the database that is used for the
	      mail storage.
	    * Manageability.
	      Dbmail is based upon a database. Dbmail can be managed by
	      changing settings in the database (f.e. using PHP/Perl/SQL).
	    * Speed.
	      Dbmail uses very efficient, database specific queries for
	      retrieving mail information. This is much faster then parsing
	      a filesystem.
	    * Security.
	      Dbmail has got nothing to do with the filesystem or interaction
	      with other programs in the Unix environment which need special
	      permissions.  Dbmail is as secure as the database it's based
	      upon.
	    * Flexibility.
	      Changes on a Dbmail system (adding of users, changing passwords
	      etc.) are effective immediately.

	WWW: http://www.dbmail.org/

PR:		ports/101356
Submitted by:	Mark Starovoytov <mark_sf@kikg.ifmo.ru>
This commit is contained in:
Edwin Groothuis 2006-08-05 22:35:33 +00:00
parent 03b09c0d18
commit f45d770362
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=169781
30 changed files with 1470 additions and 200 deletions

View File

@ -1,89 +1,137 @@
# New ports collection makefile for: dbmail
# Date created: 07/26/2003
# Whom: Clement Laforet <sheepkiller@cultdeadsheep.org>
# Date created: 3 August 2006
# Whom: Mark Starovoytov <mark_sf@kikg.ifmo.ru>
#
# $FreeBSD$
#
PORTNAME= dbmail
PORTVERSION= 2.0.10
PORTVERSION= 2.1.7
CATEGORIES= mail
MASTER_SITES= http://www.dbmail.org/download/2.0/
PKGNAMESUFFIX= -${DATABASE}
MASTER_SITES= http://www.dbmail.org/download/2.1/
MAINTAINER= mark_sf@kikg.ifmo.ru
COMMENT= An SQL database-based mail system (POP3 and IMAP)
CONFLICTS= dbmail-*-2.0.*
OPTIONS= MYSQL "Build with MySQL support" on \
POSTGRESQL "Build with PostgreSQL support" off \
SQLITE "Build with SQLite support" off \
SIEVE "Build w. support for Sieve mail sorting language" off \
LDAP "Build with support for LDAP authentication" off
USE_AUTOTOOLS= libtool:15
GNU_CONFIGURE= YES
CONFIGURE_ARGS= --prefix=${PREFIX}
USE_GMAKE= YES
USE_OPENSSL= YES
USE_LDCONFIG= ${PREFIX}/lib/dbmail
USE_RC_SUBR= dbmail-pop3d.sh dbmail-lmtpd.sh dbmail-imapd.sh
INSTALLS_SHLIB= yes
CFLAGS += -fPIC
LIB_DEPENDS+= gmime-2.0.4:${PORTSDIR}/mail/gmime2
USE_GNOME= glib20
USE_OPENSSL= YES
USE_PTHREADS= YES
.if defined(WITH_POSTGRESQL)
CONFIGURE_ARGS+= --with-pgsql
USE_PGSQL= yes
DATABASE= postgresql
PLIST_SUB+= PGSQL=""
PLIST_SUB+= MYSQL="@comment "
LDFLAGS+= -L${LOCALBASE}/lib/
CFLAGS+= -fPIC -I${LOCALBASE}/include
LDFLAGS+= -pthread
CONFIGURE_ENV+= LDFLAGS="${LDFLAGS}" LOCALBASE=${LOCALBASE}
PORTDOCS= AUTHORS BUGS COPYING INSTALL NEWS README \
README.aliases README.exim README.ldap \
README.postfix README.qmail README.sieve \
README.smtp README.solaris README.usermap \
THANKS
MAN1= dbmail-smtp.1 dbmail.1
MAN5= dbmail.conf.5
MAN8= dbmail-export.8 dbmail-imapd.8 dbmail-lmtpd.8 \
dbmail-pop3d.8 dbmail-sievecmd.8 dbmail-timsieved.8 \
dbmail-users.8 dbmail-util.8
MANCOMPRESSED= no
MSG_FILE= ${PKGDIR}/pkg-message
PKGMESSAGE= ${WRKDIR}/pkg-message
PLIST_SUB+= PORTNAME=${PORTNAME}
.if defined(NOPORTDOCS)
PLIST_SUB+= PORTDOCS="@comment "
.else
USE_MYSQL= YES
CONFIGURE_ARGS+= --with-mysql
DATABASE= mysql
PLIST_SUB+= MYSQL=""
PLIST_SUB+= PGSQL="@comment "
CFLAGS+= -I${LOCALBASE}/include/mysql
LDFLAGS+= -L${LOCALBASE}/lib/mysql
PLIST_SUB+= PORTDOCS=""
.endif
CONFIGURE_ENV+= LDFLAGS="${LDFLAGS}" LOCALBASE=${LOCALBASE}
PORTDOCS= INSTALL README EXTRAS
.include <bsd.port.pre.mk>
MAN1= dbmail-smtp.1
MAN8= dbmail-imapd.8 dbmail-lmtpd.8 dbmail-pop3d.8 \
dbmail-users.8 dbmail-util.8
MANCOMPRESSED= no
.if defined(WITH_MYSQL)
CONFIGURE_ARGS+=--with-mysql
USE_MYSQL= YES
DATABASE+= mysql
PLIST_SUB+= MYSQL=""
.else
PLIST_SUB+= MYSQL="@comment "
.endif
pre-everything::
@${ECHO} ""
@${ECHO} "You may use the following build options:"
@${ECHO} " By default dbmail uses MySQL backend database."
@${ECHO} " To build dbmail with PostgreSQL as backend database,"
@${ECHO} " define WITH_POSTGRESQL"
@${ECHO} ""
.if defined(WITH_POSTGRESQL)
CONFIGURE_ARGS+=--with-pgsql
USE_PGSQL= yes
DATABASE+= postgresql
PLIST_SUB+= PGSQL=""
.else
PLIST_SUB+= PGSQL="@comment "
.endif
.if defined(WITH_SQLITE)
CONFIGURE_ARGS+=--with-sqlite
USE_SQLITE= yes
DATABASE+= sqlite
PLIST_SUB+= SQLITE=""
.else
PLIST_SUB+= SQLITE="@comment "
.endif
.if defined(WITH_SIEVE)
CONFIGURE_ARGS+=--with-sieve=${LOCALBASE}/include
LIB_DEPENDS+= sieve.1:${PORTSDIR}/mail/libsieve
PLIST_SUB+= SIEVE=""
.else
PLIST_SUB+= SIEVE="@comment "
.endif
.if defined(WITH_LDAP)
CONFIGURE_ARGS+=--with-auth-ldap=${LOCALBASE}/include
USE_OPENLDAP= yes
.endif
.if defined(WITHOUT_MYSQL) && defined(WITHOUT_POSTGRESQL) && defined(WITHOUT_SQLITE)
IGNORE="requires at least one database backend selected. Run 'make config'"
.endif
.if ( ${OSVERSION} < 503000 )
IGNORE="can be compiled only on FreeBSD 5.3-RELEASE or greater"
.endif
post-patch:
@${FIND} ${WRKSRC} -name CVS -type d | ${XARGS} ${RM} -fr
@${FIND} ${WRKSRC} -name '*.orig' -type f -delete
@${FIND} ${WRKSRC} -name *.orig -type f | ${XARGS} ${RM} -fr
${SED} -e 's|%%DATADIR%%|${DATADIR}|g' \
${MSG_FILE} > ${PKGMESSAGE}
post-configure:
@${REINPLACE_CMD} -i.orig 's!/etc/dbmail.conf!${PREFIX}/etc/dbmail.conf!g' \
${WRKSRC}/dbmail.h
${WRKSRC}/dbmail.h
post-install:
${INSTALL_DATA} ${WRKSRC}/dbmail.conf ${PREFIX}/etc/dbmail.conf-dist
@${MKDIR} ${DATADIR}/sql
${INSTALL_DATA} ${WRKSRC}/sql/${DATABASE}/* ${DATADIR}/sql
cd ${WRKSRC}/man && ${INSTALL_MAN} ${MAN1} ${MAN1PREFIX}/man/man1
@${INSTALL_DATA} ${WRKSRC}/dbmail.conf ${PREFIX}/etc/dbmail.conf-dist
@if [ ! -f ${PREFIX}/etc/dbmail.conf ] ; then \
${CP} -p ${PREFIX}/etc/dbmail.conf-dist ${PREFIX}/etc/dbmail.conf; \
fi
@${MKDIR} ${DATADIR}
@for f in ${DATABASE}; do \
${MKDIR} ${DATADIR}/$$f ; \
${INSTALL_DATA} ${WRKSRC}/sql/$$f/* ${DATADIR}/$$f; \
done
.if !defined(NOPORTDOCS)
@${MKDIR} ${DOCSDIR}
cd ${WRKSRC} && ${INSTALL_DATA} ${PORTDOCS} ${DOCSDIR}
@cd ${WRKSRC} && ${INSTALL_DATA} ${PORTDOCS} ${DOCSDIR}
.endif
@${ECHO} ""
@${ECHO} "IMPORTANT NOTE FOR ADMINS UPGRADING FROM 1.X->2.X!!!"
@${ECHO} ""
@${ECHO} " *) Don't forget to update the database using a script from"
@${ECHO} " ${DATADIR}/sql/"
@${ECHO} " *) Many programs have been renamed and their arguments changed."
@${ECHO} " *) Read the upgrading notes."
@${ECHO} " *) Don't be careless with this upgrade or mail will be lost!"
@${ECHO} " *) dbmail can be controled by setting dbmail_imapd_enable,"
@${ECHO} " dbmail_lmtpd_enable, and/or dbmail_pop3d_enable in"
@${ECHO} " /etc/rc.conf."
@${ECHO} ""
@${CAT} ${PKGMESSAGE}
.include <bsd.port.mk>
.include <bsd.port.post.mk>

View File

@ -1,3 +1,3 @@
MD5 (dbmail-2.0.10.tar.gz) = 985c41a6ded0a6094948c5835d9dd4ec
SHA256 (dbmail-2.0.10.tar.gz) = 249a57d7c163155c7bf2ca758fa1fabc676aa84d3a0d8403e497a8da7ff49716
SIZE (dbmail-2.0.10.tar.gz) = 632451
MD5 (dbmail-2.1.7.tar.gz) = b6523e36d228198eeaf631c9a78a7fec
SHA256 (dbmail-2.1.7.tar.gz) = f46272083fcf4a30cd79a4c97ef19d3e4abc047dbea39eb137eab66c1b6ae133
SIZE (dbmail-2.1.7.tar.gz) = 842237

View File

@ -8,7 +8,7 @@
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf to enable dbmail-pop3d:
# Add the following lines to /etc/rc.conf to enable dbmail-pop3d:
#
#dbmail_pop3d_enable="YES"
#

View File

@ -0,0 +1,44 @@
Index: modules/sortsieve.c
===================================================================
--- modules/sortsieve.c (revision 2211)
+++ modules/sortsieve.c (revision 2212)
@@ -198,11 +198,10 @@
}
/* If there were any imapflags, set them. */
+ memset(&msgflags, 0, IMAP_NFLAGS * sizeof(int));
if (flags) {
int i, j;
- memset(&msgflags, 0, IMAP_NFLAGS * sizeof(int));
-
for (i = 0; flags[i]; i++) { // Loop through all script/user-specified flags.
for (j = 0; imap_flag_desc[j]; i++) { // Find the ones we support.
if (g_strcasestr(imap_flag_desc[j], flags[i])) {
@@ -684,8 +683,10 @@
void sort_free_result(sort_result_t *result)
{
if (result == NULL) return;
- g_string_free(result->errormsg, TRUE);
- g_string_free(result->rejectmsg, TRUE);
+ if (result->errormsg != NULL)
+ g_string_free(result->errormsg, TRUE);
+ if (result->rejectmsg != NULL)
+ g_string_free(result->rejectmsg, TRUE);
dm_free(result);
}
Index: ChangeLog
===================================================================
--- ChangeLog (revision 2211)
+++ ChangeLog (revision 2212)
@@ -1,3 +1,9 @@
+2006-07-26 Aaron Stone <aaron@serendipity.cx>
+
+ * modules/sortsieve.c:
+ Accepted patch from maenaka (closes bug #383) to clear the IMAP flags
+ if none are given by the Sieve script.
+
2006-07-25 Paul J Stevens <paul@nfg.nl>
* misc.c:

View File

@ -0,0 +1,28 @@
Index: db.c
===================================================================
--- db.c (revision 2212)
+++ db.c (revision 2213)
@@ -2885,6 +2885,9 @@
*mailboxes = g_list_reverse(*mailboxes);
*errmsg = "Everything is peachy keen";
+ g_strfreev(chunks);
+ dm_free(cpy);
+
return DM_SUCCESS;
equery:
Index: ChangeLog
===================================================================
--- ChangeLog (revision 2212)
+++ ChangeLog (revision 2213)
@@ -3,6 +3,9 @@
* modules/sortsieve.c:
Accepted patch from maenaka (closes bug #383) to clear the IMAP flags
if none are given by the Sieve script.
+ * db.c:
+ Accepted patch from Leif Jackson to close a memory leak in
+ db_imap_split_mailbox.
2006-07-25 Paul J Stevens <paul@nfg.nl>

View File

@ -0,0 +1,52 @@
Index: debug.c
===================================================================
--- debug.c (revision 2214)
+++ debug.c (revision 2215)
@@ -103,6 +103,7 @@
fprintf(stderr, "%s %s", trace_to_text(level), message);
if (message[l] != '\n')
fprintf(stderr, "\n");
+ fflush(stderr);
}
if (level <= TRACE_SYSLOG) {
Index: modules/sortsieve.c
===================================================================
--- modules/sortsieve.c (revision 2214)
+++ modules/sortsieve.c (revision 2215)
@@ -187,7 +187,7 @@
extern const char * imap_flag_desc[];
const char * const * flags;
const char * mailbox;
- int msgflags[IMAP_NFLAGS];
+ int *msgflags = NULL;
mailbox = sieve2_getvalue_string(s, "mailbox");
flags = sieve2_getvalue_stringlist(s, "imapflags"); // TODO
@@ -198,9 +198,9 @@
}
/* If there were any imapflags, set them. */
- memset(&msgflags, 0, IMAP_NFLAGS * sizeof(int));
if (flags) {
int i, j;
+ msgflags = g_new0(int, IMAP_NFLASGS);
for (i = 0; flags[i]; i++) { // Loop through all script/user-specified flags.
for (j = 0; imap_flag_desc[j]; i++) { // Find the ones we support.
Index: ChangeLog
===================================================================
--- ChangeLog (revision 2214)
+++ ChangeLog (revision 2215)
@@ -1,3 +1,11 @@
+2006-07-27 Aaron Stone <aaron@serendipity.cx>
+
+ * debug.c:
+ Added fflush after fprintf (closes bug #388).
+ * modules/sortsieve.c:
+ Make sure that the msgflags pointer is NULL if there are no special
+ flags (closes bug #383).
+
2006-07-26 Paul J Stevens <paul@nfg.nl>
* debian/control, modules/sortsieve.c:

View File

@ -0,0 +1,14 @@
Index: modules/sortsieve.c
===================================================================
--- modules/sortsieve.c (revision 2215)
+++ modules/sortsieve.c (revision 2216)
@@ -222,6 +222,9 @@
m->result->cancelkeep = 1;
}
+ if (msgflags)
+ g_free(msgflasgs);
+
return SIEVE2_OK;
}

View File

@ -0,0 +1,138 @@
Index: ChangeLog
===================================================================
--- ChangeLog (revision 2216)
+++ ChangeLog (revision 2217)
@@ -1,3 +1,11 @@
+2006-07-30 Aaron Stone <aaron@serendipity.cx>
+
+ * sql/mysql/create_tables.mysql, migrate_from_2.0_to_2.1.mysql:
+ Accepted patch from Maenaka to only create Sieve tables once, in
+ InnoDB format (closes bug #386).
+ * pipe.c:
+ Attempt to resolve bug #372.
+
2006-07-27 Aaron Stone <aaron@serendipity.cx>
* debug.c:
Index: sql/mysql/migrate_from_2.0_to_2.1.mysql
===================================================================
--- sql/mysql/migrate_from_2.0_to_2.1.mysql (revision 2216)
+++ sql/mysql/migrate_from_2.0_to_2.1.mysql (revision 2217)
@@ -176,21 +176,18 @@
CREATE TABLE dbmail_sievescripts (
- id BIGINT NOT NULL AUTO_INCREMENT,
- owner_idnr BIGINT NOT NULL
- REFERENCES dbmail_users(user_idnr)
- ON UPDATE CASCADE ON DELETE CASCADE,
- active TINYINT(1) DEFAULT '0' NOT NULL,
- name VARCHAR(100) NOT NULL DEFAULT '',
- script TEXT NOT NULL DEFAULT '',
- PRIMARY KEY (id)
-);
+ owner_idnr bigint(21) DEFAULT '0' NOT NULL,
+ name varchar(100) NOT NULL,
+ script text,
+ active tinyint(1) default '0' not null,
+ INDEX (name),
+ INDEX (owner_idnr),
+ INDEX (owner_idnr, name),
+ FOREIGN KEY owner_idnr_fk (owner_idnr)
+ REFERENCES dbmail_users (user_idnr) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB;
-# Looking in db.c, the WHERE clauses are: owner, owner name, owner active.
-CREATE INDEX dbmail_sievescripts_1 on dbmail_sievescripts(owner_idnr,name);
-CREATE INDEX dbmail_sievescripts_2 on dbmail_sievescripts(owner_idnr,active);
-
# Add columns for storing the Sieve quota.
ALTER TABLE dbmail_users
ADD maxsieve_size BIGINT DEFAULT '0' NOT NULL,
Index: sql/mysql/create_tables.mysql
===================================================================
--- sql/mysql/create_tables.mysql (revision 2216)
+++ sql/mysql/create_tables.mysql (revision 2217)
@@ -207,7 +207,9 @@
active tinyint(1) default '0' not null,
INDEX (name),
INDEX (owner_idnr),
- INDEX (owner_idnr, name)
+ INDEX (owner_idnr, name),
+ FOREIGN KEY owner_idnr_fk (owner_idnr)
+ REFERENCES dbmail_users (user_idnr) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
@@ -359,25 +361,6 @@
UNIQUE KEY replycache_1 (to_addr,from_addr, handle)
) ENGINE=InnoDB;
-#
-# Add tables and columns to hold Sieve scripts.
-
-DROP TABLE IF EXISTS dbmail_sievescripts;
-CREATE TABLE dbmail_sievescripts (
- id BIGINT NOT NULL AUTO_INCREMENT,
- owner_idnr BIGINT NOT NULL
- REFERENCES dbmail_users(user_idnr)
- ON UPDATE CASCADE ON DELETE CASCADE,
- active TINYINT(1) DEFAULT '0' NOT NULL,
- name VARCHAR(100) NOT NULL DEFAULT '',
- script TEXT NOT NULL DEFAULT '',
- PRIMARY KEY (id)
-);
-
-# Looking in db.c, the WHERE clauses are: owner, owner name, owner active.
-CREATE INDEX dbmail_sievescripts_1 on dbmail_sievescripts(owner_idnr,name);
-CREATE INDEX dbmail_sievescripts_2 on dbmail_sievescripts(owner_idnr,active);
-
DROP TABLE IF EXISTS dbmail_usermap;
CREATE TABLE dbmail_usermap (
login VARCHAR(100) NOT NULL,
Index: pipe.c
===================================================================
--- pipe.c (revision 2216)
+++ pipe.c (revision 2217)
@@ -61,10 +61,12 @@
int sendwhat, char *sendmail_external)
{
FILE *mailpipe = NULL;
- char *escaped_to = NULL;
- char *escaped_from = NULL;
+ char *escaped_to = NULL, *parsed_to = NULL;
+ char *escaped_from = NULL, *parsed_from = NULL;
char *sendmail_command = NULL;
field_t sendmail, postmaster;
+ InternetAddressList *ialist;
+ InternetAddress *ia;
int result;
if (!from || strlen(from) < 1) {
@@ -94,13 +96,23 @@
trace(TRACE_DEBUG, "%s, %s: sendmail command is [%s]",
__FILE__, __func__, sendmail);
- if (! (escaped_to = dm_shellesc(to))) {
+ ialist = internet_address_parse_string(to);
+ ia = ialist->address;
+ parsed_to = internet_address_to_string(ia, TRUE);
+ internet_address_list_destroy(ialist);
+
+ if (! (escaped_to = dm_shellesc(parsed_to))) {
trace(TRACE_ERROR, "%s, %s: out of memory calling dm_shellesc",
__FILE__, __func__);
return -1;
}
- if (! (escaped_from = dm_shellesc(from))) {
+ ialist = internet_address_parse_string(from);
+ ia = ialist->address;
+ parsed_from = internet_address_to_string(ia, TRUE);
+ internet_address_list_destroy(ialist);
+
+ if (! (escaped_from = dm_shellesc(parsed_from))) {
trace(TRACE_ERROR, "%s, %s: out of memory calling dm_shellesc",
__FILE__, __func__);
return -1;

View File

@ -0,0 +1,76 @@
Index: config.c
===================================================================
--- config.c (revision 2217)
+++ config.c (revision 2218)
@@ -212,9 +212,10 @@
if (config_get_value("serverid", "DBMAIL", serverid_string) < 0)
trace(TRACE_FATAL, "%s,%s: error getting config!",
__FILE__, __func__);
+ if (config_get_value("encoding", "DBMAIL", db_params->encoding) < 0)
+ trace(TRACE_FATAL, "%s,%s: error getting config!",
+ __FILE__, __func__);
-
-
if (config_get_value("table_prefix", "DBMAIL", db_params->pfx) < 0)
trace(TRACE_FATAL, "%s,%s: error getting config!",
__FILE__, __func__);
Index: modules/dbmysql.c
===================================================================
--- modules/dbmysql.c (revision 2217)
+++ modules/dbmysql.c (revision 2218)
@@ -90,6 +90,16 @@
int collations_match = 0;
int i, j;
+ if (strlen(_db_params.encoding) > 0) {
+ snprintf(the_query, DEF_QUERYSIZE, "SET NAMES %s", _db_params.encoding);
+ if (db_query(the_query) == DM_EQUERY) {
+ trace(TRACE_ERROR,
+ "%s,%s: error setting collation", __FILE__, __func__);
+ return DM_EQUERY;
+ }
+ db_free_result();
+ }
+
snprintf(the_query, DEF_QUERYSIZE,
"SHOW VARIABLES LIKE 'collation_%%'");
if (db_query(the_query) == DM_EQUERY) {
Index: ChangeLog
===================================================================
--- ChangeLog (revision 2217)
+++ ChangeLog (revision 2218)
@@ -5,6 +5,9 @@
InnoDB format (closes bug #386).
* pipe.c:
Attempt to resolve bug #372.
+ * config.c, dbmail.conf, dbmailtypes.h, modules/dbmysql.c:
+ Accepted patch from Maenaka to allow configurable MySQL connection
+ encoding (closes bug #385).
2006-07-27 Aaron Stone <aaron@serendipity.cx>
Index: dbmail.conf
===================================================================
--- dbmail.conf (revision 2217)
+++ dbmail.conf (revision 2218)
@@ -18,6 +18,7 @@
pass= # Database password.
db=dbmail # Database name.
#table_prefix=dbmail_ # Table prefix. Defaults to "dbmail_" if not specified.
+#encoding=latin1 # MySQL connection encoding must match to table encoding.
#postmaster=DBMAIL-MAILER # Postmaster's email address for use in bounce messages.
sendmail=/usr/sbin/sendmail # Sendmail executable for forwards, replies, notifies, vacations.
Index: dbmailtypes.h
===================================================================
--- dbmailtypes.h (revision 2217)
+++ dbmailtypes.h (revision 2218)
@@ -99,6 +99,7 @@
field_t sock; /**< path to local unix socket (local connection) */
field_t pfx; /**< prefix for tables e.g. dbmail_ */
unsigned int serverid; /**< unique id for dbmail instance used in clusters */
+ field_t encoding; /**< character encoding to use */
} db_param_t;
/** configuration items */

View File

@ -0,0 +1,22 @@
Index: modules/sortsieve.c
===================================================================
--- modules/sortsieve.c (revision 2218)
+++ modules/sortsieve.c (revision 2219)
@@ -200,7 +200,7 @@
/* If there were any imapflags, set them. */
if (flags) {
int i, j;
- msgflags = g_new0(int, IMAP_NFLASGS);
+ msgflags = g_new0(int, IMAP_NFLAGS);
for (i = 0; flags[i]; i++) { // Loop through all script/user-specified flags.
for (j = 0; imap_flag_desc[j]; i++) { // Find the ones we support.
@@ -223,7 +223,7 @@
}
if (msgflags)
- g_free(msgflasgs);
+ g_free(msgflags);
return SIEVE2_OK;
}

View File

@ -0,0 +1,63 @@
Index: ChangeLog
===================================================================
--- ChangeLog (revision 2219)
+++ ChangeLog (revision 2220)
@@ -1,3 +1,9 @@
+2006-08-01 Aaron Stone <aaron@serendipity.cx>
+
+ * pipe.c:
+ Proper fix to prevent passing addresses with full names on the
+ sendmail command line (closes bug #372).
+
2006-07-30 Aaron Stone <aaron@serendipity.cx>
* sql/mysql/create_tables.mysql, migrate_from_2.0_to_2.1.mysql:
Index: pipe.c
===================================================================
--- pipe.c (revision 2219)
+++ pipe.c (revision 2220)
@@ -98,26 +98,40 @@
ialist = internet_address_parse_string(to);
ia = ialist->address;
- parsed_to = internet_address_to_string(ia, TRUE);
- internet_address_list_destroy(ialist);
+ if (ia->type != INTERNET_ADDRESS_NAME) {
+ // There isn't a valid address here. Bail...
+ internet_address_list_destroy(ialist);
+ return -1;
+ }
+ parsed_to = ia->value.addr;
if (! (escaped_to = dm_shellesc(parsed_to))) {
trace(TRACE_ERROR, "%s, %s: out of memory calling dm_shellesc",
__FILE__, __func__);
+ internet_address_list_destroy(ialist);
return -1;
}
+ internet_address_list_destroy(ialist);
+
ialist = internet_address_parse_string(from);
ia = ialist->address;
- parsed_from = internet_address_to_string(ia, TRUE);
- internet_address_list_destroy(ialist);
+ if (ia->type != INTERNET_ADDRESS_NAME) {
+ // There isn't a valid address here. Bail...
+ internet_address_list_destroy(ialist);
+ return -1;
+ }
+ parsed_from = ia->value.addr;
if (! (escaped_from = dm_shellesc(parsed_from))) {
trace(TRACE_ERROR, "%s, %s: out of memory calling dm_shellesc",
__FILE__, __func__);
+ internet_address_list_destroy(ialist);
return -1;
}
+ internet_address_list_destroy(ialist);
+
if (!sendmail_external) {
sendmail_command = g_strconcat(sendmail, " -f ", escaped_from, " ", escaped_to, NULL);
dm_free(escaped_to);

View File

@ -0,0 +1,116 @@
Index: pipe.c
===================================================================
--- pipe.c (revision 2220)
+++ pipe.c (revision 2221)
@@ -46,6 +46,31 @@
return ret;
}
+static int parse_and_escape(const char *in, char **out)
+{
+ InternetAddressList *ialist;
+ InternetAddress *ia;
+
+ TRACE(TRACE_DEBUG, "parsing address [%s]", in);
+ ialist = internet_address_parse_string(in);
+ ia = ialist->address;
+ if (ia->type != INTERNET_ADDRESS_NAME) {
+ TRACE(TRACE_MESSAGE, "unable to parse email address [%s]", in);
+ internet_address_list_destroy(ialist);
+ return -1;
+ }
+
+ if (! (*out = dm_shellesc(ia->value.addr))) {
+ TRACE(TRACE_ERROR, "out of memory calling dm_shellesc");
+ internet_address_list_destroy(ialist);
+ return -1;
+ }
+
+ internet_address_list_destroy(ialist);
+
+ return 0;
+}
+
// Send only certain parts of the message.
#define SENDNOTHING 0
#define SENDHEADERS 1
@@ -61,12 +86,10 @@
int sendwhat, char *sendmail_external)
{
FILE *mailpipe = NULL;
- char *escaped_to = NULL, *parsed_to = NULL;
- char *escaped_from = NULL, *parsed_from = NULL;
+ char *escaped_to = NULL;
+ char *escaped_from = NULL;
char *sendmail_command = NULL;
field_t sendmail, postmaster;
- InternetAddressList *ialist;
- InternetAddress *ia;
int result;
if (!from || strlen(from) < 1) {
@@ -93,60 +116,21 @@
return -1;
}
- trace(TRACE_DEBUG, "%s, %s: sendmail command is [%s]",
- __FILE__, __func__, sendmail);
-
- ialist = internet_address_parse_string(to);
- ia = ialist->address;
- if (ia->type != INTERNET_ADDRESS_NAME) {
- // There isn't a valid address here. Bail...
- internet_address_list_destroy(ialist);
- return -1;
- }
- parsed_to = ia->value.addr;
-
- if (! (escaped_to = dm_shellesc(parsed_to))) {
- trace(TRACE_ERROR, "%s, %s: out of memory calling dm_shellesc",
- __FILE__, __func__);
- internet_address_list_destroy(ialist);
- return -1;
- }
-
- internet_address_list_destroy(ialist);
-
- ialist = internet_address_parse_string(from);
- ia = ialist->address;
- if (ia->type != INTERNET_ADDRESS_NAME) {
- // There isn't a valid address here. Bail...
- internet_address_list_destroy(ialist);
- return -1;
- }
- parsed_from = ia->value.addr;
-
- if (! (escaped_from = dm_shellesc(parsed_from))) {
- trace(TRACE_ERROR, "%s, %s: out of memory calling dm_shellesc",
- __FILE__, __func__);
- internet_address_list_destroy(ialist);
- return -1;
- }
-
- internet_address_list_destroy(ialist);
-
if (!sendmail_external) {
+ parse_and_escape(to, &escaped_to);
+ parse_and_escape(from, &escaped_from);
sendmail_command = g_strconcat(sendmail, " -f ", escaped_from, " ", escaped_to, NULL);
dm_free(escaped_to);
dm_free(escaped_from);
if (!sendmail_command) {
- trace(TRACE_ERROR, "%s, %s: out of memory calling g_strconcat",
- __FILE__, __func__);
+ TRACE(TRACE_ERROR, "out of memory calling g_strconcat");
return -1;
}
} else {
sendmail_command = sendmail_external;
}
- trace(TRACE_INFO, "%s, %s: opening pipe to [%s]",
- __FILE__, __func__, sendmail_command);
+ TRACE(TRACE_INFO, "opening pipe to [%s]", sendmail_command);
if (!(mailpipe = popen(sendmail_command, "w"))) {
trace(TRACE_ERROR, "%s, %s: could not open pipe to sendmail",

View File

@ -1,22 +1,26 @@
Dbmail is the name of a group of programs that enable the possiblilty of storing
and retrieving mail messages from a database (currently MySQL or PostgreSQL).
Dbmail is the name of a group of programs that enable the possiblilty
of storing and retrieving mail messages from a database (currently
MySQL, PostgreSQL or SQLite).
What are the advantages?
* Scalability.
Dbmail is as scalable as the database that is used for the mail storage.
Dbmail is as scalable as the database that is used for the
mail storage.
* Manageability.
Dbmail is based upon a database. Dbmail can be managed by changing
settings in the database (f.e. using PHP/Perl/SQL).
Dbmail is based upon a database. Dbmail can be managed by
changing settings in the database (f.e. using PHP/Perl/SQL).
* Speed.
Dbmail uses very efficient, database specific queries for retrieving mail
information. This is much faster then parsing a filesystem.
Dbmail uses very efficient, database specific queries for
retrieving mail information. This is much faster then parsing
a filesystem.
* Security.
Dbmail has got nothing to do with the filesystem or interaction with other
programs in the Unix environment which need special permissions. Dbmail
is as secure as the database it's based upon.
Dbmail has got nothing to do with the filesystem or interaction
with other programs in the Unix environment which need special
permissions. Dbmail is as secure as the database it's based
upon.
* Flexibility.
Changes on a Dbmail system (adding of users, changing passwords etc.) are
effective immediately.
Changes on a Dbmail system (adding of users, changing passwords
etc.) are effective immediately.
WWW: http://www.dbmail.org/

View File

@ -0,0 +1,12 @@
IMPORTANT NOTE FOR ADMINS UPGRADING FROM 1.X->2.X!!!
*) Don't forget to update the database using a script from
%%DATADIR%%/
*) Many programs have been renamed and their arguments changed.
*) Read the upgrading notes.
*) Don't be careless with this upgrade or mail will be lost!
*) dbmail can be controled by setting dbmail_imapd_enable,
dbmail_lmtpd_enable, and/or dbmail_pop3d_enable in
/etc/rc.conf.

View File

@ -1,36 +1,54 @@
@unexec if cmp -s %D/etc/dbmail.conf-dist %D/etc/dbmail.conf; then rm -f %D/etc/dbmail.conf; fi
etc/dbmail.conf-dist
lib/dbmail/libauthdbmail.so.0
lib/dbmail/libauthdbmail.a
lib/dbmail/libauthdbmail.la
lib/dbmail/libauthdbmail.so
lib/dbmail/libsortdbmail.so.0
lib/dbmail/libsortdbmail.a
lib/dbmail/libsortdbmail.la
lib/dbmail/libsortdbmail.so
lib/libdbmail.so.0
lib/libdbmail.a
lib/libdbmail.la
lib/libdbmail.so
@exec if [ ! -f %D/etc/dbmail.conf ] ; then cp -p %D/%F %B/dbmail.conf; fi
@exec mkdir -p %D/lib/dbmail
lib/dbmail/libauth_ldap.a
lib/dbmail/libauth_ldap.la
lib/dbmail/libauth_ldap.so
lib/dbmail/libauth_ldap.so.0
lib/dbmail/libauth_sql.a
lib/dbmail/libauth_sql.la
lib/dbmail/libauth_sql.so
lib/dbmail/libauth_sql.so.0
lib/dbmail/libmysql.a
lib/dbmail/libmysql.la
lib/dbmail/libmysql.so
lib/dbmail/libmysql.so.0
lib/dbmail/libpgsql.a
lib/dbmail/libpgsql.la
lib/dbmail/libpgsql.so
lib/dbmail/libpgsql.so.0
lib/dbmail/libsort_sieve.a
lib/dbmail/libsort_sieve.la
lib/dbmail/libsort_sieve.so
lib/dbmail/libsort_sieve.so.0
lib/dbmail/libsqlite.a
lib/dbmail/libsqlite.la
lib/dbmail/libsqlite.so
lib/dbmail/libsqlite.so.0
@dirrm lib/dbmail
sbin/dbmail-export
sbin/dbmail-imapd
sbin/dbmail-lmtpd
sbin/dbmail-pop3d
sbin/dbmail-smtp
sbin/dbmail-users
sbin/dbmail-util
%%MYSQL%%%%DATADIR%%/sql/create_tables.mysql
%%MYSQL%%%%DATADIR%%/sql/create_tables_innoDB.mysql
%%MYSQL%%%%DATADIR%%/sql/migrate_from_1.x_to_2.0.mysql
%%MYSQL%%%%DATADIR%%/sql/migrate_from_1.x_to_2.0_innodb.mysql
%%MYSQL%%lib/dbmail/libmysqldbmail.so.0
%%MYSQL%%lib/dbmail/libmysqldbmail.a
%%MYSQL%%lib/dbmail/libmysqldbmail.la
%%MYSQL%%lib/dbmail/libmysqldbmail.so
%%PGSQL%%%%DATADIR%%/sql/create_tables.pgsql
%%PGSQL%%%%DATADIR%%/sql/migrate_from_1.x_to_2.0.pgsql
%%PGSQL%%lib/dbmail/libpgsqldbmail.so.0
%%PGSQL%%lib/dbmail/libpgsqldbmail.a
%%PGSQL%%lib/dbmail/libpgsqldbmail.la
%%PGSQL%%lib/dbmail/libpgsqldbmail.so
@dirrm lib/dbmail
@dirrm %%DATADIR%%/sql
@dirrm %%DATADIR%%
%%SIEVE%%sbin/dbmail-sievecmd
%%SIEVE%%sbin/dbmail-timsieved
@exec mkdir -p %D/share/%%PORTNAME%%
%%MYSQL%%@exec mkdir -p %D/share/PORTNAME/%%PORTNAME%%/mysql
%%MYSQL%%share/%%PORTNAME%%/mysql/create_tables.mysql
%%MYSQL%%share/%%PORTNAME%%/mysql/migrate_from_1.x_to_2.0_innodb.mysql
%%MYSQL%%share/%%PORTNAME%%/mysql/migrate_from_2.0_to_2.1.mysql
%%MYSQL%%share/%%PORTNAME%%/mysql/update_headervalue_01.mysql
%%MYSQL%%@dirrm share/%%PORTNAME%%/mysql
%%PGSQL%%@exec mkdir -p %D/share/PORTNAME/%%PORTNAME%%/postgresql
%%PGSQL%%share/%%PORTNAME%%/postgresql/create_tables.pgsql
%%PGSQL%%share/%%PORTNAME%%/postgresql/migrate_from_1.x_to_2.0.pgsql
%%PGSQL%%share/%%PORTNAME%%/postgresql/migrate_from_2.0_to_2.1.pgsql
%%PGSQL%%@dirrm share/%%PORTNAME%%/postgresql
%%SQLITE%%@exec mkdir -p %D/share/PORTNAME/%%PORTNAME%%/sqlite
%%SQLITE%%share/%%PORTNAME%%/sqlite/create_tables.sqlite
%%SQLITE%%@dirrm share/%%PORTNAME%%/sqlite
@dirrm share/%%PORTNAME%%

View File

@ -1,89 +1,137 @@
# New ports collection makefile for: dbmail
# Date created: 07/26/2003
# Whom: Clement Laforet <sheepkiller@cultdeadsheep.org>
# Date created: 3 August 2006
# Whom: Mark Starovoytov <mark_sf@kikg.ifmo.ru>
#
# $FreeBSD$
#
PORTNAME= dbmail
PORTVERSION= 2.0.10
PORTVERSION= 2.1.7
CATEGORIES= mail
MASTER_SITES= http://www.dbmail.org/download/2.0/
PKGNAMESUFFIX= -${DATABASE}
MASTER_SITES= http://www.dbmail.org/download/2.1/
MAINTAINER= mark_sf@kikg.ifmo.ru
COMMENT= An SQL database-based mail system (POP3 and IMAP)
CONFLICTS= dbmail-*-2.0.*
OPTIONS= MYSQL "Build with MySQL support" on \
POSTGRESQL "Build with PostgreSQL support" off \
SQLITE "Build with SQLite support" off \
SIEVE "Build w. support for Sieve mail sorting language" off \
LDAP "Build with support for LDAP authentication" off
USE_AUTOTOOLS= libtool:15
GNU_CONFIGURE= YES
CONFIGURE_ARGS= --prefix=${PREFIX}
USE_GMAKE= YES
USE_OPENSSL= YES
USE_LDCONFIG= ${PREFIX}/lib/dbmail
USE_RC_SUBR= dbmail-pop3d.sh dbmail-lmtpd.sh dbmail-imapd.sh
INSTALLS_SHLIB= yes
CFLAGS += -fPIC
LIB_DEPENDS+= gmime-2.0.4:${PORTSDIR}/mail/gmime2
USE_GNOME= glib20
USE_OPENSSL= YES
USE_PTHREADS= YES
.if defined(WITH_POSTGRESQL)
CONFIGURE_ARGS+= --with-pgsql
USE_PGSQL= yes
DATABASE= postgresql
PLIST_SUB+= PGSQL=""
PLIST_SUB+= MYSQL="@comment "
LDFLAGS+= -L${LOCALBASE}/lib/
CFLAGS+= -fPIC -I${LOCALBASE}/include
LDFLAGS+= -pthread
CONFIGURE_ENV+= LDFLAGS="${LDFLAGS}" LOCALBASE=${LOCALBASE}
PORTDOCS= AUTHORS BUGS COPYING INSTALL NEWS README \
README.aliases README.exim README.ldap \
README.postfix README.qmail README.sieve \
README.smtp README.solaris README.usermap \
THANKS
MAN1= dbmail-smtp.1 dbmail.1
MAN5= dbmail.conf.5
MAN8= dbmail-export.8 dbmail-imapd.8 dbmail-lmtpd.8 \
dbmail-pop3d.8 dbmail-sievecmd.8 dbmail-timsieved.8 \
dbmail-users.8 dbmail-util.8
MANCOMPRESSED= no
MSG_FILE= ${PKGDIR}/pkg-message
PKGMESSAGE= ${WRKDIR}/pkg-message
PLIST_SUB+= PORTNAME=${PORTNAME}
.if defined(NOPORTDOCS)
PLIST_SUB+= PORTDOCS="@comment "
.else
USE_MYSQL= YES
CONFIGURE_ARGS+= --with-mysql
DATABASE= mysql
PLIST_SUB+= MYSQL=""
PLIST_SUB+= PGSQL="@comment "
CFLAGS+= -I${LOCALBASE}/include/mysql
LDFLAGS+= -L${LOCALBASE}/lib/mysql
PLIST_SUB+= PORTDOCS=""
.endif
CONFIGURE_ENV+= LDFLAGS="${LDFLAGS}" LOCALBASE=${LOCALBASE}
PORTDOCS= INSTALL README EXTRAS
.include <bsd.port.pre.mk>
MAN1= dbmail-smtp.1
MAN8= dbmail-imapd.8 dbmail-lmtpd.8 dbmail-pop3d.8 \
dbmail-users.8 dbmail-util.8
MANCOMPRESSED= no
.if defined(WITH_MYSQL)
CONFIGURE_ARGS+=--with-mysql
USE_MYSQL= YES
DATABASE+= mysql
PLIST_SUB+= MYSQL=""
.else
PLIST_SUB+= MYSQL="@comment "
.endif
pre-everything::
@${ECHO} ""
@${ECHO} "You may use the following build options:"
@${ECHO} " By default dbmail uses MySQL backend database."
@${ECHO} " To build dbmail with PostgreSQL as backend database,"
@${ECHO} " define WITH_POSTGRESQL"
@${ECHO} ""
.if defined(WITH_POSTGRESQL)
CONFIGURE_ARGS+=--with-pgsql
USE_PGSQL= yes
DATABASE+= postgresql
PLIST_SUB+= PGSQL=""
.else
PLIST_SUB+= PGSQL="@comment "
.endif
.if defined(WITH_SQLITE)
CONFIGURE_ARGS+=--with-sqlite
USE_SQLITE= yes
DATABASE+= sqlite
PLIST_SUB+= SQLITE=""
.else
PLIST_SUB+= SQLITE="@comment "
.endif
.if defined(WITH_SIEVE)
CONFIGURE_ARGS+=--with-sieve=${LOCALBASE}/include
LIB_DEPENDS+= sieve.1:${PORTSDIR}/mail/libsieve
PLIST_SUB+= SIEVE=""
.else
PLIST_SUB+= SIEVE="@comment "
.endif
.if defined(WITH_LDAP)
CONFIGURE_ARGS+=--with-auth-ldap=${LOCALBASE}/include
USE_OPENLDAP= yes
.endif
.if defined(WITHOUT_MYSQL) && defined(WITHOUT_POSTGRESQL) && defined(WITHOUT_SQLITE)
IGNORE="requires at least one database backend selected. Run 'make config'"
.endif
.if ( ${OSVERSION} < 503000 )
IGNORE="can be compiled only on FreeBSD 5.3-RELEASE or greater"
.endif
post-patch:
@${FIND} ${WRKSRC} -name CVS -type d | ${XARGS} ${RM} -fr
@${FIND} ${WRKSRC} -name '*.orig' -type f -delete
@${FIND} ${WRKSRC} -name *.orig -type f | ${XARGS} ${RM} -fr
${SED} -e 's|%%DATADIR%%|${DATADIR}|g' \
${MSG_FILE} > ${PKGMESSAGE}
post-configure:
@${REINPLACE_CMD} -i.orig 's!/etc/dbmail.conf!${PREFIX}/etc/dbmail.conf!g' \
${WRKSRC}/dbmail.h
${WRKSRC}/dbmail.h
post-install:
${INSTALL_DATA} ${WRKSRC}/dbmail.conf ${PREFIX}/etc/dbmail.conf-dist
@${MKDIR} ${DATADIR}/sql
${INSTALL_DATA} ${WRKSRC}/sql/${DATABASE}/* ${DATADIR}/sql
cd ${WRKSRC}/man && ${INSTALL_MAN} ${MAN1} ${MAN1PREFIX}/man/man1
@${INSTALL_DATA} ${WRKSRC}/dbmail.conf ${PREFIX}/etc/dbmail.conf-dist
@if [ ! -f ${PREFIX}/etc/dbmail.conf ] ; then \
${CP} -p ${PREFIX}/etc/dbmail.conf-dist ${PREFIX}/etc/dbmail.conf; \
fi
@${MKDIR} ${DATADIR}
@for f in ${DATABASE}; do \
${MKDIR} ${DATADIR}/$$f ; \
${INSTALL_DATA} ${WRKSRC}/sql/$$f/* ${DATADIR}/$$f; \
done
.if !defined(NOPORTDOCS)
@${MKDIR} ${DOCSDIR}
cd ${WRKSRC} && ${INSTALL_DATA} ${PORTDOCS} ${DOCSDIR}
@cd ${WRKSRC} && ${INSTALL_DATA} ${PORTDOCS} ${DOCSDIR}
.endif
@${ECHO} ""
@${ECHO} "IMPORTANT NOTE FOR ADMINS UPGRADING FROM 1.X->2.X!!!"
@${ECHO} ""
@${ECHO} " *) Don't forget to update the database using a script from"
@${ECHO} " ${DATADIR}/sql/"
@${ECHO} " *) Many programs have been renamed and their arguments changed."
@${ECHO} " *) Read the upgrading notes."
@${ECHO} " *) Don't be careless with this upgrade or mail will be lost!"
@${ECHO} " *) dbmail can be controled by setting dbmail_imapd_enable,"
@${ECHO} " dbmail_lmtpd_enable, and/or dbmail_pop3d_enable in"
@${ECHO} " /etc/rc.conf."
@${ECHO} ""
@${CAT} ${PKGMESSAGE}
.include <bsd.port.mk>
.include <bsd.port.post.mk>

View File

@ -1,3 +1,3 @@
MD5 (dbmail-2.0.10.tar.gz) = 985c41a6ded0a6094948c5835d9dd4ec
SHA256 (dbmail-2.0.10.tar.gz) = 249a57d7c163155c7bf2ca758fa1fabc676aa84d3a0d8403e497a8da7ff49716
SIZE (dbmail-2.0.10.tar.gz) = 632451
MD5 (dbmail-2.1.7.tar.gz) = b6523e36d228198eeaf631c9a78a7fec
SHA256 (dbmail-2.1.7.tar.gz) = f46272083fcf4a30cd79a4c97ef19d3e4abc047dbea39eb137eab66c1b6ae133
SIZE (dbmail-2.1.7.tar.gz) = 842237

View File

@ -8,7 +8,7 @@
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf to enable dbmail-pop3d:
# Add the following lines to /etc/rc.conf to enable dbmail-pop3d:
#
#dbmail_pop3d_enable="YES"
#

View File

@ -0,0 +1,44 @@
Index: modules/sortsieve.c
===================================================================
--- modules/sortsieve.c (revision 2211)
+++ modules/sortsieve.c (revision 2212)
@@ -198,11 +198,10 @@
}
/* If there were any imapflags, set them. */
+ memset(&msgflags, 0, IMAP_NFLAGS * sizeof(int));
if (flags) {
int i, j;
- memset(&msgflags, 0, IMAP_NFLAGS * sizeof(int));
-
for (i = 0; flags[i]; i++) { // Loop through all script/user-specified flags.
for (j = 0; imap_flag_desc[j]; i++) { // Find the ones we support.
if (g_strcasestr(imap_flag_desc[j], flags[i])) {
@@ -684,8 +683,10 @@
void sort_free_result(sort_result_t *result)
{
if (result == NULL) return;
- g_string_free(result->errormsg, TRUE);
- g_string_free(result->rejectmsg, TRUE);
+ if (result->errormsg != NULL)
+ g_string_free(result->errormsg, TRUE);
+ if (result->rejectmsg != NULL)
+ g_string_free(result->rejectmsg, TRUE);
dm_free(result);
}
Index: ChangeLog
===================================================================
--- ChangeLog (revision 2211)
+++ ChangeLog (revision 2212)
@@ -1,3 +1,9 @@
+2006-07-26 Aaron Stone <aaron@serendipity.cx>
+
+ * modules/sortsieve.c:
+ Accepted patch from maenaka (closes bug #383) to clear the IMAP flags
+ if none are given by the Sieve script.
+
2006-07-25 Paul J Stevens <paul@nfg.nl>
* misc.c:

View File

@ -0,0 +1,28 @@
Index: db.c
===================================================================
--- db.c (revision 2212)
+++ db.c (revision 2213)
@@ -2885,6 +2885,9 @@
*mailboxes = g_list_reverse(*mailboxes);
*errmsg = "Everything is peachy keen";
+ g_strfreev(chunks);
+ dm_free(cpy);
+
return DM_SUCCESS;
equery:
Index: ChangeLog
===================================================================
--- ChangeLog (revision 2212)
+++ ChangeLog (revision 2213)
@@ -3,6 +3,9 @@
* modules/sortsieve.c:
Accepted patch from maenaka (closes bug #383) to clear the IMAP flags
if none are given by the Sieve script.
+ * db.c:
+ Accepted patch from Leif Jackson to close a memory leak in
+ db_imap_split_mailbox.
2006-07-25 Paul J Stevens <paul@nfg.nl>

View File

@ -0,0 +1,52 @@
Index: debug.c
===================================================================
--- debug.c (revision 2214)
+++ debug.c (revision 2215)
@@ -103,6 +103,7 @@
fprintf(stderr, "%s %s", trace_to_text(level), message);
if (message[l] != '\n')
fprintf(stderr, "\n");
+ fflush(stderr);
}
if (level <= TRACE_SYSLOG) {
Index: modules/sortsieve.c
===================================================================
--- modules/sortsieve.c (revision 2214)
+++ modules/sortsieve.c (revision 2215)
@@ -187,7 +187,7 @@
extern const char * imap_flag_desc[];
const char * const * flags;
const char * mailbox;
- int msgflags[IMAP_NFLAGS];
+ int *msgflags = NULL;
mailbox = sieve2_getvalue_string(s, "mailbox");
flags = sieve2_getvalue_stringlist(s, "imapflags"); // TODO
@@ -198,9 +198,9 @@
}
/* If there were any imapflags, set them. */
- memset(&msgflags, 0, IMAP_NFLAGS * sizeof(int));
if (flags) {
int i, j;
+ msgflags = g_new0(int, IMAP_NFLASGS);
for (i = 0; flags[i]; i++) { // Loop through all script/user-specified flags.
for (j = 0; imap_flag_desc[j]; i++) { // Find the ones we support.
Index: ChangeLog
===================================================================
--- ChangeLog (revision 2214)
+++ ChangeLog (revision 2215)
@@ -1,3 +1,11 @@
+2006-07-27 Aaron Stone <aaron@serendipity.cx>
+
+ * debug.c:
+ Added fflush after fprintf (closes bug #388).
+ * modules/sortsieve.c:
+ Make sure that the msgflags pointer is NULL if there are no special
+ flags (closes bug #383).
+
2006-07-26 Paul J Stevens <paul@nfg.nl>
* debian/control, modules/sortsieve.c:

View File

@ -0,0 +1,14 @@
Index: modules/sortsieve.c
===================================================================
--- modules/sortsieve.c (revision 2215)
+++ modules/sortsieve.c (revision 2216)
@@ -222,6 +222,9 @@
m->result->cancelkeep = 1;
}
+ if (msgflags)
+ g_free(msgflasgs);
+
return SIEVE2_OK;
}

View File

@ -0,0 +1,138 @@
Index: ChangeLog
===================================================================
--- ChangeLog (revision 2216)
+++ ChangeLog (revision 2217)
@@ -1,3 +1,11 @@
+2006-07-30 Aaron Stone <aaron@serendipity.cx>
+
+ * sql/mysql/create_tables.mysql, migrate_from_2.0_to_2.1.mysql:
+ Accepted patch from Maenaka to only create Sieve tables once, in
+ InnoDB format (closes bug #386).
+ * pipe.c:
+ Attempt to resolve bug #372.
+
2006-07-27 Aaron Stone <aaron@serendipity.cx>
* debug.c:
Index: sql/mysql/migrate_from_2.0_to_2.1.mysql
===================================================================
--- sql/mysql/migrate_from_2.0_to_2.1.mysql (revision 2216)
+++ sql/mysql/migrate_from_2.0_to_2.1.mysql (revision 2217)
@@ -176,21 +176,18 @@
CREATE TABLE dbmail_sievescripts (
- id BIGINT NOT NULL AUTO_INCREMENT,
- owner_idnr BIGINT NOT NULL
- REFERENCES dbmail_users(user_idnr)
- ON UPDATE CASCADE ON DELETE CASCADE,
- active TINYINT(1) DEFAULT '0' NOT NULL,
- name VARCHAR(100) NOT NULL DEFAULT '',
- script TEXT NOT NULL DEFAULT '',
- PRIMARY KEY (id)
-);
+ owner_idnr bigint(21) DEFAULT '0' NOT NULL,
+ name varchar(100) NOT NULL,
+ script text,
+ active tinyint(1) default '0' not null,
+ INDEX (name),
+ INDEX (owner_idnr),
+ INDEX (owner_idnr, name),
+ FOREIGN KEY owner_idnr_fk (owner_idnr)
+ REFERENCES dbmail_users (user_idnr) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB;
-# Looking in db.c, the WHERE clauses are: owner, owner name, owner active.
-CREATE INDEX dbmail_sievescripts_1 on dbmail_sievescripts(owner_idnr,name);
-CREATE INDEX dbmail_sievescripts_2 on dbmail_sievescripts(owner_idnr,active);
-
# Add columns for storing the Sieve quota.
ALTER TABLE dbmail_users
ADD maxsieve_size BIGINT DEFAULT '0' NOT NULL,
Index: sql/mysql/create_tables.mysql
===================================================================
--- sql/mysql/create_tables.mysql (revision 2216)
+++ sql/mysql/create_tables.mysql (revision 2217)
@@ -207,7 +207,9 @@
active tinyint(1) default '0' not null,
INDEX (name),
INDEX (owner_idnr),
- INDEX (owner_idnr, name)
+ INDEX (owner_idnr, name),
+ FOREIGN KEY owner_idnr_fk (owner_idnr)
+ REFERENCES dbmail_users (user_idnr) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
@@ -359,25 +361,6 @@
UNIQUE KEY replycache_1 (to_addr,from_addr, handle)
) ENGINE=InnoDB;
-#
-# Add tables and columns to hold Sieve scripts.
-
-DROP TABLE IF EXISTS dbmail_sievescripts;
-CREATE TABLE dbmail_sievescripts (
- id BIGINT NOT NULL AUTO_INCREMENT,
- owner_idnr BIGINT NOT NULL
- REFERENCES dbmail_users(user_idnr)
- ON UPDATE CASCADE ON DELETE CASCADE,
- active TINYINT(1) DEFAULT '0' NOT NULL,
- name VARCHAR(100) NOT NULL DEFAULT '',
- script TEXT NOT NULL DEFAULT '',
- PRIMARY KEY (id)
-);
-
-# Looking in db.c, the WHERE clauses are: owner, owner name, owner active.
-CREATE INDEX dbmail_sievescripts_1 on dbmail_sievescripts(owner_idnr,name);
-CREATE INDEX dbmail_sievescripts_2 on dbmail_sievescripts(owner_idnr,active);
-
DROP TABLE IF EXISTS dbmail_usermap;
CREATE TABLE dbmail_usermap (
login VARCHAR(100) NOT NULL,
Index: pipe.c
===================================================================
--- pipe.c (revision 2216)
+++ pipe.c (revision 2217)
@@ -61,10 +61,12 @@
int sendwhat, char *sendmail_external)
{
FILE *mailpipe = NULL;
- char *escaped_to = NULL;
- char *escaped_from = NULL;
+ char *escaped_to = NULL, *parsed_to = NULL;
+ char *escaped_from = NULL, *parsed_from = NULL;
char *sendmail_command = NULL;
field_t sendmail, postmaster;
+ InternetAddressList *ialist;
+ InternetAddress *ia;
int result;
if (!from || strlen(from) < 1) {
@@ -94,13 +96,23 @@
trace(TRACE_DEBUG, "%s, %s: sendmail command is [%s]",
__FILE__, __func__, sendmail);
- if (! (escaped_to = dm_shellesc(to))) {
+ ialist = internet_address_parse_string(to);
+ ia = ialist->address;
+ parsed_to = internet_address_to_string(ia, TRUE);
+ internet_address_list_destroy(ialist);
+
+ if (! (escaped_to = dm_shellesc(parsed_to))) {
trace(TRACE_ERROR, "%s, %s: out of memory calling dm_shellesc",
__FILE__, __func__);
return -1;
}
- if (! (escaped_from = dm_shellesc(from))) {
+ ialist = internet_address_parse_string(from);
+ ia = ialist->address;
+ parsed_from = internet_address_to_string(ia, TRUE);
+ internet_address_list_destroy(ialist);
+
+ if (! (escaped_from = dm_shellesc(parsed_from))) {
trace(TRACE_ERROR, "%s, %s: out of memory calling dm_shellesc",
__FILE__, __func__);
return -1;

View File

@ -0,0 +1,76 @@
Index: config.c
===================================================================
--- config.c (revision 2217)
+++ config.c (revision 2218)
@@ -212,9 +212,10 @@
if (config_get_value("serverid", "DBMAIL", serverid_string) < 0)
trace(TRACE_FATAL, "%s,%s: error getting config!",
__FILE__, __func__);
+ if (config_get_value("encoding", "DBMAIL", db_params->encoding) < 0)
+ trace(TRACE_FATAL, "%s,%s: error getting config!",
+ __FILE__, __func__);
-
-
if (config_get_value("table_prefix", "DBMAIL", db_params->pfx) < 0)
trace(TRACE_FATAL, "%s,%s: error getting config!",
__FILE__, __func__);
Index: modules/dbmysql.c
===================================================================
--- modules/dbmysql.c (revision 2217)
+++ modules/dbmysql.c (revision 2218)
@@ -90,6 +90,16 @@
int collations_match = 0;
int i, j;
+ if (strlen(_db_params.encoding) > 0) {
+ snprintf(the_query, DEF_QUERYSIZE, "SET NAMES %s", _db_params.encoding);
+ if (db_query(the_query) == DM_EQUERY) {
+ trace(TRACE_ERROR,
+ "%s,%s: error setting collation", __FILE__, __func__);
+ return DM_EQUERY;
+ }
+ db_free_result();
+ }
+
snprintf(the_query, DEF_QUERYSIZE,
"SHOW VARIABLES LIKE 'collation_%%'");
if (db_query(the_query) == DM_EQUERY) {
Index: ChangeLog
===================================================================
--- ChangeLog (revision 2217)
+++ ChangeLog (revision 2218)
@@ -5,6 +5,9 @@
InnoDB format (closes bug #386).
* pipe.c:
Attempt to resolve bug #372.
+ * config.c, dbmail.conf, dbmailtypes.h, modules/dbmysql.c:
+ Accepted patch from Maenaka to allow configurable MySQL connection
+ encoding (closes bug #385).
2006-07-27 Aaron Stone <aaron@serendipity.cx>
Index: dbmail.conf
===================================================================
--- dbmail.conf (revision 2217)
+++ dbmail.conf (revision 2218)
@@ -18,6 +18,7 @@
pass= # Database password.
db=dbmail # Database name.
#table_prefix=dbmail_ # Table prefix. Defaults to "dbmail_" if not specified.
+#encoding=latin1 # MySQL connection encoding must match to table encoding.
#postmaster=DBMAIL-MAILER # Postmaster's email address for use in bounce messages.
sendmail=/usr/sbin/sendmail # Sendmail executable for forwards, replies, notifies, vacations.
Index: dbmailtypes.h
===================================================================
--- dbmailtypes.h (revision 2217)
+++ dbmailtypes.h (revision 2218)
@@ -99,6 +99,7 @@
field_t sock; /**< path to local unix socket (local connection) */
field_t pfx; /**< prefix for tables e.g. dbmail_ */
unsigned int serverid; /**< unique id for dbmail instance used in clusters */
+ field_t encoding; /**< character encoding to use */
} db_param_t;
/** configuration items */

View File

@ -0,0 +1,22 @@
Index: modules/sortsieve.c
===================================================================
--- modules/sortsieve.c (revision 2218)
+++ modules/sortsieve.c (revision 2219)
@@ -200,7 +200,7 @@
/* If there were any imapflags, set them. */
if (flags) {
int i, j;
- msgflags = g_new0(int, IMAP_NFLASGS);
+ msgflags = g_new0(int, IMAP_NFLAGS);
for (i = 0; flags[i]; i++) { // Loop through all script/user-specified flags.
for (j = 0; imap_flag_desc[j]; i++) { // Find the ones we support.
@@ -223,7 +223,7 @@
}
if (msgflags)
- g_free(msgflasgs);
+ g_free(msgflags);
return SIEVE2_OK;
}

View File

@ -0,0 +1,63 @@
Index: ChangeLog
===================================================================
--- ChangeLog (revision 2219)
+++ ChangeLog (revision 2220)
@@ -1,3 +1,9 @@
+2006-08-01 Aaron Stone <aaron@serendipity.cx>
+
+ * pipe.c:
+ Proper fix to prevent passing addresses with full names on the
+ sendmail command line (closes bug #372).
+
2006-07-30 Aaron Stone <aaron@serendipity.cx>
* sql/mysql/create_tables.mysql, migrate_from_2.0_to_2.1.mysql:
Index: pipe.c
===================================================================
--- pipe.c (revision 2219)
+++ pipe.c (revision 2220)
@@ -98,26 +98,40 @@
ialist = internet_address_parse_string(to);
ia = ialist->address;
- parsed_to = internet_address_to_string(ia, TRUE);
- internet_address_list_destroy(ialist);
+ if (ia->type != INTERNET_ADDRESS_NAME) {
+ // There isn't a valid address here. Bail...
+ internet_address_list_destroy(ialist);
+ return -1;
+ }
+ parsed_to = ia->value.addr;
if (! (escaped_to = dm_shellesc(parsed_to))) {
trace(TRACE_ERROR, "%s, %s: out of memory calling dm_shellesc",
__FILE__, __func__);
+ internet_address_list_destroy(ialist);
return -1;
}
+ internet_address_list_destroy(ialist);
+
ialist = internet_address_parse_string(from);
ia = ialist->address;
- parsed_from = internet_address_to_string(ia, TRUE);
- internet_address_list_destroy(ialist);
+ if (ia->type != INTERNET_ADDRESS_NAME) {
+ // There isn't a valid address here. Bail...
+ internet_address_list_destroy(ialist);
+ return -1;
+ }
+ parsed_from = ia->value.addr;
if (! (escaped_from = dm_shellesc(parsed_from))) {
trace(TRACE_ERROR, "%s, %s: out of memory calling dm_shellesc",
__FILE__, __func__);
+ internet_address_list_destroy(ialist);
return -1;
}
+ internet_address_list_destroy(ialist);
+
if (!sendmail_external) {
sendmail_command = g_strconcat(sendmail, " -f ", escaped_from, " ", escaped_to, NULL);
dm_free(escaped_to);

View File

@ -0,0 +1,116 @@
Index: pipe.c
===================================================================
--- pipe.c (revision 2220)
+++ pipe.c (revision 2221)
@@ -46,6 +46,31 @@
return ret;
}
+static int parse_and_escape(const char *in, char **out)
+{
+ InternetAddressList *ialist;
+ InternetAddress *ia;
+
+ TRACE(TRACE_DEBUG, "parsing address [%s]", in);
+ ialist = internet_address_parse_string(in);
+ ia = ialist->address;
+ if (ia->type != INTERNET_ADDRESS_NAME) {
+ TRACE(TRACE_MESSAGE, "unable to parse email address [%s]", in);
+ internet_address_list_destroy(ialist);
+ return -1;
+ }
+
+ if (! (*out = dm_shellesc(ia->value.addr))) {
+ TRACE(TRACE_ERROR, "out of memory calling dm_shellesc");
+ internet_address_list_destroy(ialist);
+ return -1;
+ }
+
+ internet_address_list_destroy(ialist);
+
+ return 0;
+}
+
// Send only certain parts of the message.
#define SENDNOTHING 0
#define SENDHEADERS 1
@@ -61,12 +86,10 @@
int sendwhat, char *sendmail_external)
{
FILE *mailpipe = NULL;
- char *escaped_to = NULL, *parsed_to = NULL;
- char *escaped_from = NULL, *parsed_from = NULL;
+ char *escaped_to = NULL;
+ char *escaped_from = NULL;
char *sendmail_command = NULL;
field_t sendmail, postmaster;
- InternetAddressList *ialist;
- InternetAddress *ia;
int result;
if (!from || strlen(from) < 1) {
@@ -93,60 +116,21 @@
return -1;
}
- trace(TRACE_DEBUG, "%s, %s: sendmail command is [%s]",
- __FILE__, __func__, sendmail);
-
- ialist = internet_address_parse_string(to);
- ia = ialist->address;
- if (ia->type != INTERNET_ADDRESS_NAME) {
- // There isn't a valid address here. Bail...
- internet_address_list_destroy(ialist);
- return -1;
- }
- parsed_to = ia->value.addr;
-
- if (! (escaped_to = dm_shellesc(parsed_to))) {
- trace(TRACE_ERROR, "%s, %s: out of memory calling dm_shellesc",
- __FILE__, __func__);
- internet_address_list_destroy(ialist);
- return -1;
- }
-
- internet_address_list_destroy(ialist);
-
- ialist = internet_address_parse_string(from);
- ia = ialist->address;
- if (ia->type != INTERNET_ADDRESS_NAME) {
- // There isn't a valid address here. Bail...
- internet_address_list_destroy(ialist);
- return -1;
- }
- parsed_from = ia->value.addr;
-
- if (! (escaped_from = dm_shellesc(parsed_from))) {
- trace(TRACE_ERROR, "%s, %s: out of memory calling dm_shellesc",
- __FILE__, __func__);
- internet_address_list_destroy(ialist);
- return -1;
- }
-
- internet_address_list_destroy(ialist);
-
if (!sendmail_external) {
+ parse_and_escape(to, &escaped_to);
+ parse_and_escape(from, &escaped_from);
sendmail_command = g_strconcat(sendmail, " -f ", escaped_from, " ", escaped_to, NULL);
dm_free(escaped_to);
dm_free(escaped_from);
if (!sendmail_command) {
- trace(TRACE_ERROR, "%s, %s: out of memory calling g_strconcat",
- __FILE__, __func__);
+ TRACE(TRACE_ERROR, "out of memory calling g_strconcat");
return -1;
}
} else {
sendmail_command = sendmail_external;
}
- trace(TRACE_INFO, "%s, %s: opening pipe to [%s]",
- __FILE__, __func__, sendmail_command);
+ TRACE(TRACE_INFO, "opening pipe to [%s]", sendmail_command);
if (!(mailpipe = popen(sendmail_command, "w"))) {
trace(TRACE_ERROR, "%s, %s: could not open pipe to sendmail",

View File

@ -1,22 +1,26 @@
Dbmail is the name of a group of programs that enable the possiblilty of storing
and retrieving mail messages from a database (currently MySQL or PostgreSQL).
Dbmail is the name of a group of programs that enable the possiblilty
of storing and retrieving mail messages from a database (currently
MySQL, PostgreSQL or SQLite).
What are the advantages?
* Scalability.
Dbmail is as scalable as the database that is used for the mail storage.
Dbmail is as scalable as the database that is used for the
mail storage.
* Manageability.
Dbmail is based upon a database. Dbmail can be managed by changing
settings in the database (f.e. using PHP/Perl/SQL).
Dbmail is based upon a database. Dbmail can be managed by
changing settings in the database (f.e. using PHP/Perl/SQL).
* Speed.
Dbmail uses very efficient, database specific queries for retrieving mail
information. This is much faster then parsing a filesystem.
Dbmail uses very efficient, database specific queries for
retrieving mail information. This is much faster then parsing
a filesystem.
* Security.
Dbmail has got nothing to do with the filesystem or interaction with other
programs in the Unix environment which need special permissions. Dbmail
is as secure as the database it's based upon.
Dbmail has got nothing to do with the filesystem or interaction
with other programs in the Unix environment which need special
permissions. Dbmail is as secure as the database it's based
upon.
* Flexibility.
Changes on a Dbmail system (adding of users, changing passwords etc.) are
effective immediately.
Changes on a Dbmail system (adding of users, changing passwords
etc.) are effective immediately.
WWW: http://www.dbmail.org/

12
mail/dbmail21/pkg-message Normal file
View File

@ -0,0 +1,12 @@
IMPORTANT NOTE FOR ADMINS UPGRADING FROM 1.X->2.X!!!
*) Don't forget to update the database using a script from
%%DATADIR%%/
*) Many programs have been renamed and their arguments changed.
*) Read the upgrading notes.
*) Don't be careless with this upgrade or mail will be lost!
*) dbmail can be controled by setting dbmail_imapd_enable,
dbmail_lmtpd_enable, and/or dbmail_pop3d_enable in
/etc/rc.conf.

View File

@ -1,36 +1,54 @@
@unexec if cmp -s %D/etc/dbmail.conf-dist %D/etc/dbmail.conf; then rm -f %D/etc/dbmail.conf; fi
etc/dbmail.conf-dist
lib/dbmail/libauthdbmail.so.0
lib/dbmail/libauthdbmail.a
lib/dbmail/libauthdbmail.la
lib/dbmail/libauthdbmail.so
lib/dbmail/libsortdbmail.so.0
lib/dbmail/libsortdbmail.a
lib/dbmail/libsortdbmail.la
lib/dbmail/libsortdbmail.so
lib/libdbmail.so.0
lib/libdbmail.a
lib/libdbmail.la
lib/libdbmail.so
@exec if [ ! -f %D/etc/dbmail.conf ] ; then cp -p %D/%F %B/dbmail.conf; fi
@exec mkdir -p %D/lib/dbmail
lib/dbmail/libauth_ldap.a
lib/dbmail/libauth_ldap.la
lib/dbmail/libauth_ldap.so
lib/dbmail/libauth_ldap.so.0
lib/dbmail/libauth_sql.a
lib/dbmail/libauth_sql.la
lib/dbmail/libauth_sql.so
lib/dbmail/libauth_sql.so.0
lib/dbmail/libmysql.a
lib/dbmail/libmysql.la
lib/dbmail/libmysql.so
lib/dbmail/libmysql.so.0
lib/dbmail/libpgsql.a
lib/dbmail/libpgsql.la
lib/dbmail/libpgsql.so
lib/dbmail/libpgsql.so.0
lib/dbmail/libsort_sieve.a
lib/dbmail/libsort_sieve.la
lib/dbmail/libsort_sieve.so
lib/dbmail/libsort_sieve.so.0
lib/dbmail/libsqlite.a
lib/dbmail/libsqlite.la
lib/dbmail/libsqlite.so
lib/dbmail/libsqlite.so.0
@dirrm lib/dbmail
sbin/dbmail-export
sbin/dbmail-imapd
sbin/dbmail-lmtpd
sbin/dbmail-pop3d
sbin/dbmail-smtp
sbin/dbmail-users
sbin/dbmail-util
%%MYSQL%%%%DATADIR%%/sql/create_tables.mysql
%%MYSQL%%%%DATADIR%%/sql/create_tables_innoDB.mysql
%%MYSQL%%%%DATADIR%%/sql/migrate_from_1.x_to_2.0.mysql
%%MYSQL%%%%DATADIR%%/sql/migrate_from_1.x_to_2.0_innodb.mysql
%%MYSQL%%lib/dbmail/libmysqldbmail.so.0
%%MYSQL%%lib/dbmail/libmysqldbmail.a
%%MYSQL%%lib/dbmail/libmysqldbmail.la
%%MYSQL%%lib/dbmail/libmysqldbmail.so
%%PGSQL%%%%DATADIR%%/sql/create_tables.pgsql
%%PGSQL%%%%DATADIR%%/sql/migrate_from_1.x_to_2.0.pgsql
%%PGSQL%%lib/dbmail/libpgsqldbmail.so.0
%%PGSQL%%lib/dbmail/libpgsqldbmail.a
%%PGSQL%%lib/dbmail/libpgsqldbmail.la
%%PGSQL%%lib/dbmail/libpgsqldbmail.so
@dirrm lib/dbmail
@dirrm %%DATADIR%%/sql
@dirrm %%DATADIR%%
%%SIEVE%%sbin/dbmail-sievecmd
%%SIEVE%%sbin/dbmail-timsieved
@exec mkdir -p %D/share/%%PORTNAME%%
%%MYSQL%%@exec mkdir -p %D/share/PORTNAME/%%PORTNAME%%/mysql
%%MYSQL%%share/%%PORTNAME%%/mysql/create_tables.mysql
%%MYSQL%%share/%%PORTNAME%%/mysql/migrate_from_1.x_to_2.0_innodb.mysql
%%MYSQL%%share/%%PORTNAME%%/mysql/migrate_from_2.0_to_2.1.mysql
%%MYSQL%%share/%%PORTNAME%%/mysql/update_headervalue_01.mysql
%%MYSQL%%@dirrm share/%%PORTNAME%%/mysql
%%PGSQL%%@exec mkdir -p %D/share/PORTNAME/%%PORTNAME%%/postgresql
%%PGSQL%%share/%%PORTNAME%%/postgresql/create_tables.pgsql
%%PGSQL%%share/%%PORTNAME%%/postgresql/migrate_from_1.x_to_2.0.pgsql
%%PGSQL%%share/%%PORTNAME%%/postgresql/migrate_from_2.0_to_2.1.pgsql
%%PGSQL%%@dirrm share/%%PORTNAME%%/postgresql
%%SQLITE%%@exec mkdir -p %D/share/PORTNAME/%%PORTNAME%%/sqlite
%%SQLITE%%share/%%PORTNAME%%/sqlite/create_tables.sqlite
%%SQLITE%%@dirrm share/%%PORTNAME%%/sqlite
@dirrm share/%%PORTNAME%%