1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-01 05:45:45 +00:00

o obsolete rc.d script update

o addition of iconv dependancy
o fix a number of problems

PR:		ports/50615, ports/49026, ports/49027
Submitted by:	Dominic Marks <dom@cus.org.uk> (maintainer)
		Kimura Fuyuki <fuyuki@hadaly.org>
This commit is contained in:
Norikatsu Shigemura 2003-04-19 17:42:27 +00:00
parent 3c238e2165
commit 38f392c9a9
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=79300
14 changed files with 414 additions and 8 deletions

View File

@ -13,12 +13,16 @@ MASTER_SITES= http://dovecot.procontrol.fi/
MAINTAINER= d.marks@student.umist.ac.uk
COMMENT= Secure and compact IMAP and POP3 servers
LIB_DEPENDS= iconv.3:${PORTSDIR}/converters/libiconv
USE_REINPLACE= yes
GNU_CONFIGURE= yes
CONFIGURE_ARGS+= --without-shadow --enable-ipv6 \
--localstatedir=/var/dovecot --with-ssl=openssl \
--with-ssldir=/var/dovecot/ssl --with-pop3d \
--with-ldap --with-pam
CONFIGURE_ENV+= CPPFLAGS=-I${LOCALBASE}/include \
LDFLAGS=-L${LOCALBASE}/lib
#
# SASL2 support
@ -45,9 +49,12 @@ BUILD_DEPENDS+= ${VPOPMAIL}:${PORTSDIR}/mail/vpopmail
CONFIGURE_ARGS+= --with-vpopmail
.endif
pre-build:
post-patch:
@${REINPLACE_CMD} -e 's,%%PREFIX%%,${PREFIX},' \
${WRKSRC}/dovecot-example.conf
@${REINPLACE_CMD} -e 's,^LIBS.*,& -liconv,' \
${WRKSRC}/src/imap/Makefile.in \
${WRKSRC}/src/pop3/Makefile.in
pre-install:
@${SETENV} ${SCRIPTS_ENV} PKG_PREFIX="${PREFIX}" \

View File

@ -7,11 +7,11 @@ fi
case "$1" in
start)
[ -x ${PREFIX}/sbin/imap-master ] && \
${PREFIX}/sbin/imap-master && echo -n ' dovecot-imapd'
[ -x ${PREFIX}/sbin/dovecot ] && \
${PREFIX}/sbin/dovecot && echo -n ' dovecot'
;;
stop)
/usr/bin/killall imap-master && echo -n ' dovecot-imapd'
/usr/bin/killall dovecot && echo -n ' dovecot'
;;
*)
echo "Usage: `basename $0` { start | stop }" >&2

View File

@ -0,0 +1,34 @@
--- src/imap/imap-fetch-body-section.c.orig Sun Jan 26 10:38:34 2003
+++ src/imap/imap-fetch-body-section.c Sun Apr 20 02:33:03 2003
@@ -78,6 +78,7 @@
struct istream *stream;
const char *str;
int skip_cr;
+ uoff_t size;
off_t ret;
stream = mail->get_stream(mail, &hdr_size, &body_size);
@@ -87,8 +88,13 @@
if (fetch_header)
message_size_add(&body_size, &hdr_size);
- str = t_strdup_printf("%s {%"PRIuUOFF_T"}\r\n",
- ctx->prefix, body_size.virtual_size);
+ if (body->skip >= body_size.virtual_size)
+ size = 0;
+ else {
+ size = body_size.virtual_size - body->skip;
+ if (size > body->max_size) size = body->max_size;
+ }
+ str = t_strdup_printf("%s {%"PRIuUOFF_T"}\r\n", ctx->prefix, size);
if (o_stream_send_str(ctx->output, str) < 0)
return FALSE;
@@ -96,6 +102,7 @@
&partial, stream,
fetch_header ? 0 : hdr_size.physical_size,
body->skip);
+
ret = message_send(ctx->output, stream, &body_size,
skip_cr, body->max_size);
if (ret > 0) {

View File

@ -0,0 +1,109 @@
--- src/imap/cmd-list.c.orig Wed Feb 26 05:58:45 2003
+++ src/imap/cmd-list.c Sun Apr 20 02:32:27 2003
@@ -24,16 +24,17 @@
const char *response_name;
const char *sep;
struct imap_match_glob *glob;
- int listext;
+ int listext, no_placeholder;
};
-static const char *mailbox_flags2str(enum mailbox_flags flags, int listext)
+static const char *mailbox_flags2str(enum mailbox_flags flags,
+ int listext, int no_placeholder)
{
const char *str;
if (flags & MAILBOX_PLACEHOLDER) {
- if (flags == MAILBOX_PLACEHOLDER) {
- if (!listext)
+ if ((flags & ~MAILBOX_CHILDREN) == MAILBOX_PLACEHOLDER) {
+ if (!listext || no_placeholder)
flags = MAILBOX_NOSELECT;
} else {
/* it was at one point, but then we got better specs */
@@ -59,7 +60,6 @@
static void list_node_update(pool_t pool, struct list_node **node,
const char *path, char separator,
- enum mailbox_flags dir_flags,
enum mailbox_flags flags)
{
const char *name, *parent;
@@ -88,7 +88,8 @@
/* not found, create it */
*node = p_new(pool, struct list_node, 1);
(*node)->name = p_strdup(pool, name);
- (*node)->flags = *path == '\0' ? flags : dir_flags;
+ (*node)->flags = *path == '\0' ? flags :
+ MAILBOX_PLACEHOLDER;
} else {
if (*path == '\0') {
if (((*node)->flags & MAILBOX_NOSELECT) != 0 &&
@@ -139,16 +140,24 @@
buf = str_unescape(t_strdup_noconst(name));
match = imap_match(ctx->glob, buf);
- if (match == IMAP_MATCH_CHILDREN) {
+ /* FIXME: IMAP spec says this should be done, but
+ a) this is broken, we shouldn't give \NoSelect for
+ this folder if it actually works.
+ b) at least mozilla's subscriptions list breaks if
+ this is sent
+ c) cyrus and courier doesn't do this either..
+
+ if (match == IMAP_MATCH_CHILDREN) {
send_name = t_strconcat(name, ctx->sep, NULL);
buf = str_unescape(t_strdup_noconst(send_name));
match = imap_match(ctx->glob, buf);
- }
+ }*/
}
if (match == IMAP_MATCH_YES) {
/* node->name should already be escaped */
- flagstr = mailbox_flags2str(node->flags, ctx->listext);
+ flagstr = mailbox_flags2str(node->flags, ctx->listext,
+ ctx->no_placeholder);
str = t_strdup_printf("* %s (%s) \"%s\" \"%s\"",
ctx->response_name, flagstr,
ctx->sep, send_name);
@@ -171,19 +180,15 @@
struct mailbox_list *list;
struct list_node *nodes;
struct list_send_context send_ctx;
- enum mailbox_flags dir_flags;
pool_t pool;
- dir_flags = (list_flags & MAILBOX_LIST_SUBSCRIBED) ?
- MAILBOX_PLACEHOLDER : MAILBOX_NOSELECT;
-
pool = pool_alloconly_create("list_mailboxes", 10240);
nodes = NULL;
while ((list = client->storage->list_mailbox_next(ctx)) != NULL) {
list_node_update(pool, &nodes, list->name,
client->storage->hierarchy_sep,
- dir_flags, list->flags);
+ list->flags);
}
send_ctx.client = client;
@@ -192,6 +197,7 @@
send_ctx.glob = imap_match_init(data_stack_pool, mask, TRUE,
client->storage->hierarchy_sep);
send_ctx.listext = listext;
+ send_ctx.no_placeholder = (list_flags & MAILBOX_LIST_SUBSCRIBED) == 0;
list_send(&send_ctx, nodes, NULL);
imap_match_deinit(send_ctx.glob);
@@ -212,7 +218,8 @@
else
name = str_escape(list->name);
str = t_strdup_printf("* %s (%s) \"%s\" \"%s\"", reply,
- mailbox_flags2str(list->flags, listext),
+ mailbox_flags2str(list->flags, listext,
+ FALSE),
sep, name);
client_send_line(client, str);
t_pop();

View File

@ -0,0 +1,30 @@
--- src/lib-imap/imap-parser.c.orig Wed Mar 12 06:05:57 2003
+++ src/lib-imap/imap-parser.c Sun Apr 20 02:32:45 2003
@@ -451,7 +451,6 @@
imap_parser_save_arg(parser, data,
(size_t)parser->literal_size);
parser->cur_pos = (size_t)parser->literal_size;
- parser->eol = TRUE;
return TRUE;
}
} else {
@@ -560,8 +559,8 @@
{
parser->flags = flags;
- while (count == 0 || parser->root_list->size < count ||
- IS_UNFINISHED(parser)) {
+ while (!parser->eol && (count == 0 || parser->root_list->size < count ||
+ IS_UNFINISHED(parser))) {
if (!imap_parser_read_arg(parser))
break;
@@ -580,7 +579,7 @@
} else if ((!IS_UNFINISHED(parser) && count > 0 &&
parser->root_list->size >= count) || parser->eol) {
/* all arguments read / end of line. */
- i_stream_skip(parser->input, parser->cur_pos);
+ i_stream_skip(parser->input, parser->cur_pos);
parser->cur_pos = 0;
if (parser->list_arg != NULL) {

View File

@ -0,0 +1,12 @@
--- src/lib-storage/index/maildir/maildir-list.c.orig Wed Feb 26 05:58:45 2003
+++ src/lib-storage/index/maildir/maildir-list.c Sun Apr 20 02:36:41 2003
@@ -242,7 +242,8 @@
continue; /* ignore inboxes */
if (match == IMAP_MATCH_PARENT) {
- ctx->list.flags = MAILBOX_NOSELECT;
+ ctx->list.flags =
+ MAILBOX_PLACEHOLDER | MAILBOX_CHILDREN;
while ((p = strrchr(fname, '.')) != NULL) {
fname = t_strdup_until(fname, p);
if (imap_match(ctx->glob, fname) > 0) {

View File

@ -0,0 +1,11 @@
--- src/lib-storage/index/maildir/maildir-storage.c.orig Wed Feb 26 05:58:45 2003
+++ src/lib-storage/index/maildir/maildir-storage.c Sun Apr 20 02:33:17 2003
@@ -434,7 +434,7 @@
i_assert(oldnamelen <= strlen(list->name));
t_push();
- new_listname = t_strconcat(newname, ".",
+ new_listname = t_strconcat(newname,
list->name + oldnamelen, NULL);
oldpath = maildir_get_path(storage, list->name);
newpath = maildir_get_path(storage, new_listname);

View File

@ -13,12 +13,16 @@ MASTER_SITES= http://dovecot.procontrol.fi/
MAINTAINER= d.marks@student.umist.ac.uk
COMMENT= Secure and compact IMAP and POP3 servers
LIB_DEPENDS= iconv.3:${PORTSDIR}/converters/libiconv
USE_REINPLACE= yes
GNU_CONFIGURE= yes
CONFIGURE_ARGS+= --without-shadow --enable-ipv6 \
--localstatedir=/var/dovecot --with-ssl=openssl \
--with-ssldir=/var/dovecot/ssl --with-pop3d \
--with-ldap --with-pam
CONFIGURE_ENV+= CPPFLAGS=-I${LOCALBASE}/include \
LDFLAGS=-L${LOCALBASE}/lib
#
# SASL2 support
@ -45,9 +49,12 @@ BUILD_DEPENDS+= ${VPOPMAIL}:${PORTSDIR}/mail/vpopmail
CONFIGURE_ARGS+= --with-vpopmail
.endif
pre-build:
post-patch:
@${REINPLACE_CMD} -e 's,%%PREFIX%%,${PREFIX},' \
${WRKSRC}/dovecot-example.conf
@${REINPLACE_CMD} -e 's,^LIBS.*,& -liconv,' \
${WRKSRC}/src/imap/Makefile.in \
${WRKSRC}/src/pop3/Makefile.in
pre-install:
@${SETENV} ${SCRIPTS_ENV} PKG_PREFIX="${PREFIX}" \

View File

@ -7,11 +7,11 @@ fi
case "$1" in
start)
[ -x ${PREFIX}/sbin/imap-master ] && \
${PREFIX}/sbin/imap-master && echo -n ' dovecot-imapd'
[ -x ${PREFIX}/sbin/dovecot ] && \
${PREFIX}/sbin/dovecot && echo -n ' dovecot'
;;
stop)
/usr/bin/killall imap-master && echo -n ' dovecot-imapd'
/usr/bin/killall dovecot && echo -n ' dovecot'
;;
*)
echo "Usage: `basename $0` { start | stop }" >&2

View File

@ -0,0 +1,34 @@
--- src/imap/imap-fetch-body-section.c.orig Sun Jan 26 10:38:34 2003
+++ src/imap/imap-fetch-body-section.c Sun Apr 20 02:33:03 2003
@@ -78,6 +78,7 @@
struct istream *stream;
const char *str;
int skip_cr;
+ uoff_t size;
off_t ret;
stream = mail->get_stream(mail, &hdr_size, &body_size);
@@ -87,8 +88,13 @@
if (fetch_header)
message_size_add(&body_size, &hdr_size);
- str = t_strdup_printf("%s {%"PRIuUOFF_T"}\r\n",
- ctx->prefix, body_size.virtual_size);
+ if (body->skip >= body_size.virtual_size)
+ size = 0;
+ else {
+ size = body_size.virtual_size - body->skip;
+ if (size > body->max_size) size = body->max_size;
+ }
+ str = t_strdup_printf("%s {%"PRIuUOFF_T"}\r\n", ctx->prefix, size);
if (o_stream_send_str(ctx->output, str) < 0)
return FALSE;
@@ -96,6 +102,7 @@
&partial, stream,
fetch_header ? 0 : hdr_size.physical_size,
body->skip);
+
ret = message_send(ctx->output, stream, &body_size,
skip_cr, body->max_size);
if (ret > 0) {

View File

@ -0,0 +1,109 @@
--- src/imap/cmd-list.c.orig Wed Feb 26 05:58:45 2003
+++ src/imap/cmd-list.c Sun Apr 20 02:32:27 2003
@@ -24,16 +24,17 @@
const char *response_name;
const char *sep;
struct imap_match_glob *glob;
- int listext;
+ int listext, no_placeholder;
};
-static const char *mailbox_flags2str(enum mailbox_flags flags, int listext)
+static const char *mailbox_flags2str(enum mailbox_flags flags,
+ int listext, int no_placeholder)
{
const char *str;
if (flags & MAILBOX_PLACEHOLDER) {
- if (flags == MAILBOX_PLACEHOLDER) {
- if (!listext)
+ if ((flags & ~MAILBOX_CHILDREN) == MAILBOX_PLACEHOLDER) {
+ if (!listext || no_placeholder)
flags = MAILBOX_NOSELECT;
} else {
/* it was at one point, but then we got better specs */
@@ -59,7 +60,6 @@
static void list_node_update(pool_t pool, struct list_node **node,
const char *path, char separator,
- enum mailbox_flags dir_flags,
enum mailbox_flags flags)
{
const char *name, *parent;
@@ -88,7 +88,8 @@
/* not found, create it */
*node = p_new(pool, struct list_node, 1);
(*node)->name = p_strdup(pool, name);
- (*node)->flags = *path == '\0' ? flags : dir_flags;
+ (*node)->flags = *path == '\0' ? flags :
+ MAILBOX_PLACEHOLDER;
} else {
if (*path == '\0') {
if (((*node)->flags & MAILBOX_NOSELECT) != 0 &&
@@ -139,16 +140,24 @@
buf = str_unescape(t_strdup_noconst(name));
match = imap_match(ctx->glob, buf);
- if (match == IMAP_MATCH_CHILDREN) {
+ /* FIXME: IMAP spec says this should be done, but
+ a) this is broken, we shouldn't give \NoSelect for
+ this folder if it actually works.
+ b) at least mozilla's subscriptions list breaks if
+ this is sent
+ c) cyrus and courier doesn't do this either..
+
+ if (match == IMAP_MATCH_CHILDREN) {
send_name = t_strconcat(name, ctx->sep, NULL);
buf = str_unescape(t_strdup_noconst(send_name));
match = imap_match(ctx->glob, buf);
- }
+ }*/
}
if (match == IMAP_MATCH_YES) {
/* node->name should already be escaped */
- flagstr = mailbox_flags2str(node->flags, ctx->listext);
+ flagstr = mailbox_flags2str(node->flags, ctx->listext,
+ ctx->no_placeholder);
str = t_strdup_printf("* %s (%s) \"%s\" \"%s\"",
ctx->response_name, flagstr,
ctx->sep, send_name);
@@ -171,19 +180,15 @@
struct mailbox_list *list;
struct list_node *nodes;
struct list_send_context send_ctx;
- enum mailbox_flags dir_flags;
pool_t pool;
- dir_flags = (list_flags & MAILBOX_LIST_SUBSCRIBED) ?
- MAILBOX_PLACEHOLDER : MAILBOX_NOSELECT;
-
pool = pool_alloconly_create("list_mailboxes", 10240);
nodes = NULL;
while ((list = client->storage->list_mailbox_next(ctx)) != NULL) {
list_node_update(pool, &nodes, list->name,
client->storage->hierarchy_sep,
- dir_flags, list->flags);
+ list->flags);
}
send_ctx.client = client;
@@ -192,6 +197,7 @@
send_ctx.glob = imap_match_init(data_stack_pool, mask, TRUE,
client->storage->hierarchy_sep);
send_ctx.listext = listext;
+ send_ctx.no_placeholder = (list_flags & MAILBOX_LIST_SUBSCRIBED) == 0;
list_send(&send_ctx, nodes, NULL);
imap_match_deinit(send_ctx.glob);
@@ -212,7 +218,8 @@
else
name = str_escape(list->name);
str = t_strdup_printf("* %s (%s) \"%s\" \"%s\"", reply,
- mailbox_flags2str(list->flags, listext),
+ mailbox_flags2str(list->flags, listext,
+ FALSE),
sep, name);
client_send_line(client, str);
t_pop();

View File

@ -0,0 +1,30 @@
--- src/lib-imap/imap-parser.c.orig Wed Mar 12 06:05:57 2003
+++ src/lib-imap/imap-parser.c Sun Apr 20 02:32:45 2003
@@ -451,7 +451,6 @@
imap_parser_save_arg(parser, data,
(size_t)parser->literal_size);
parser->cur_pos = (size_t)parser->literal_size;
- parser->eol = TRUE;
return TRUE;
}
} else {
@@ -560,8 +559,8 @@
{
parser->flags = flags;
- while (count == 0 || parser->root_list->size < count ||
- IS_UNFINISHED(parser)) {
+ while (!parser->eol && (count == 0 || parser->root_list->size < count ||
+ IS_UNFINISHED(parser))) {
if (!imap_parser_read_arg(parser))
break;
@@ -580,7 +579,7 @@
} else if ((!IS_UNFINISHED(parser) && count > 0 &&
parser->root_list->size >= count) || parser->eol) {
/* all arguments read / end of line. */
- i_stream_skip(parser->input, parser->cur_pos);
+ i_stream_skip(parser->input, parser->cur_pos);
parser->cur_pos = 0;
if (parser->list_arg != NULL) {

View File

@ -0,0 +1,12 @@
--- src/lib-storage/index/maildir/maildir-list.c.orig Wed Feb 26 05:58:45 2003
+++ src/lib-storage/index/maildir/maildir-list.c Sun Apr 20 02:36:41 2003
@@ -242,7 +242,8 @@
continue; /* ignore inboxes */
if (match == IMAP_MATCH_PARENT) {
- ctx->list.flags = MAILBOX_NOSELECT;
+ ctx->list.flags =
+ MAILBOX_PLACEHOLDER | MAILBOX_CHILDREN;
while ((p = strrchr(fname, '.')) != NULL) {
fname = t_strdup_until(fname, p);
if (imap_match(ctx->glob, fname) > 0) {

View File

@ -0,0 +1,11 @@
--- src/lib-storage/index/maildir/maildir-storage.c.orig Wed Feb 26 05:58:45 2003
+++ src/lib-storage/index/maildir/maildir-storage.c Sun Apr 20 02:33:17 2003
@@ -434,7 +434,7 @@
i_assert(oldnamelen <= strlen(list->name));
t_push();
- new_listname = t_strconcat(newname, ".",
+ new_listname = t_strconcat(newname,
list->name + oldnamelen, NULL);
oldpath = maildir_get_path(storage, list->name);
newpath = maildir_get_path(storage, new_listname);