aboutsummaryrefslogtreecommitdiff
path: root/mail/dovecot/files
diff options
context:
space:
mode:
authorNorikatsu Shigemura <nork@FreeBSD.org>2003-05-03 21:50:26 +0000
committerNorikatsu Shigemura <nork@FreeBSD.org>2003-05-03 21:50:26 +0000
commit3a0a28ac11328e76e4c6624305adb41bceab0abd (patch)
treeaec1bf6bf202bb353acb5bc914bb4d677871a368 /mail/dovecot/files
parent33cbc7497b79baa4f6e04e6812a1cca75e00c4fd (diff)
downloadports-3a0a28ac11328e76e4c6624305adb41bceab0abd.tar.gz
ports-3a0a28ac11328e76e4c6624305adb41bceab0abd.zip
Notes
Diffstat (limited to 'mail/dovecot/files')
-rw-r--r--mail/dovecot/files/README.FreeBSD58
-rw-r--r--mail/dovecot/files/dovecot.sh.sample (renamed from mail/dovecot/files/dovecot-imapd.sh)0
-rw-r--r--mail/dovecot/files/patch-allow-zero-gid172
-rw-r--r--mail/dovecot/files/patch-dovecot-example.conf160
-rw-r--r--mail/dovecot/files/patch-mkcert.sh11
-rw-r--r--mail/dovecot/files/patch-src::imap-fetch-body-section.c34
-rw-r--r--mail/dovecot/files/patch-src::imap::cmd-list.c109
-rw-r--r--mail/dovecot/files/patch-src::lib-imap::imap-parser.c30
-rw-r--r--mail/dovecot/files/patch-src::lib-storage::index::maildir::maildir-list.c12
-rw-r--r--mail/dovecot/files/patch-src::lib-storage::index::maildir::maildir-storage.c11
10 files changed, 376 insertions, 221 deletions
diff --git a/mail/dovecot/files/README.FreeBSD b/mail/dovecot/files/README.FreeBSD
new file mode 100644
index 000000000000..093fdf57ea81
--- /dev/null
+++ b/mail/dovecot/files/README.FreeBSD
@@ -0,0 +1,58 @@
+#
+# README.FreeBSD
+#
+# $FreeBSD$
+#
+
+ o Dovecot currently will not allow users with a user or group id of 0
+ to login. Because of this you will not be able to open root's
+ mailbox, or any of the mailboxes of users in the wheel group. This is
+ intended as a security feature, and isn't an issue on Linux because
+ the concept of wheel is not enforced by GNU su.
+
+ + 2003/04/15
+ It is now possible to change this behavior to allow wheel users to
+ check their mailboxes with Dovecot. Add the following line to your
+ dovecot.conf:
+
+ allow_zero_gid = yes
+
+ o The configuration which is supplied with this port is installed into
+ PREFIX/etc/dovecot-example.conf and PREFIX defaults to /usr/local.
+ I have attempted to choose what appears to be the best mixture of
+ performance and compatibility and set Dovecot up to start POP3 and
+ IMAP services for all the local users of the machine. This should be
+ enough for the simplest sites to get up and running straight away.
+
+ o Enabling SSL services should be easy, the Dovecot port is configured
+ by default to keep its SSL information under /var/dovecot/ssl, if you
+ already have certificates you wish to use then you can override this
+ in the configuration. If you don't have a certificate and wish to
+ make your own it should be as simple as:
+
+ # cd PREFIX/share/doc/dovecot/
+ # vi dovecot-openssl.conf
+
+ Add information which describes your enivironment.
+
+ # sh mkcert.sh
+
+ Execute the certificate generator. This will put a new certificate
+ and private key under /var/dovecot/ssl.
+
+ # cd PREFIX/etc/
+ # vi dovecot.conf
+
+ Reconfigure Dovecot to use SSL.
+
+ The variables you will want to set in dovecot.conf to allow a SSL
+ secured POP3 and IMAP service are:
+
+ + protocols = imap imaps pop3 pop3s
+ + ssl_disable = no
+
+ You may wish to also change the following variables to reflect the
+ location of SSL certificates on your system.
+
+ + ssl_cert_file = /var/dovecot/ssl/certs/imapd.pem
+ + ssl_key_file = /var/dovecot/ssl/private/imapd.pem
diff --git a/mail/dovecot/files/dovecot-imapd.sh b/mail/dovecot/files/dovecot.sh.sample
index 625021fa6def..625021fa6def 100644
--- a/mail/dovecot/files/dovecot-imapd.sh
+++ b/mail/dovecot/files/dovecot.sh.sample
diff --git a/mail/dovecot/files/patch-allow-zero-gid b/mail/dovecot/files/patch-allow-zero-gid
new file mode 100644
index 000000000000..ac8f08b63cab
--- /dev/null
+++ b/mail/dovecot/files/patch-allow-zero-gid
@@ -0,0 +1,172 @@
+Index: src/lib/restrict-access.c
+===================================================================
+RCS file: /home/cvs/dovecot/src/lib/restrict-access.c,v
+retrieving revision 1.10
+diff -u -3 -p -r1.10 restrict-access.c
+--- src/lib/restrict-access.c 4 Mar 2003 04:00:13 -0000 1.10
++++ src/lib/restrict-access.c 15 Apr 2003 17:37:26 -0000
+@@ -31,12 +31,14 @@
+ #include <grp.h>
+
+ void restrict_access_set_env(const char *user, uid_t uid, gid_t gid,
+- const char *chroot_dir)
++ const char *chroot_dir, int allow_zg)
+ {
+ if (user != NULL && *user != '\0')
+ env_put(t_strconcat("RESTRICT_USER=", user, NULL));
+ if (chroot_dir != NULL && *chroot_dir != '\0')
+ env_put(t_strconcat("RESTRICT_CHROOT=", chroot_dir, NULL));
++ if (allow_zg == TRUE)
++ env_put(t_strdup("ALLOW_ZERO_GID=TRUE"));
+
+ env_put(t_strdup_printf("RESTRICT_SETUID=%s", dec2str(uid)));
+ env_put(t_strdup_printf("RESTRICT_SETGID=%s", dec2str(gid)));
+@@ -45,6 +47,7 @@ void restrict_access_set_env(const char
+ void restrict_access_by_env(int disallow_root)
+ {
+ const char *env;
++ int allow_zero_gid;
+ gid_t gid;
+ uid_t uid;
+
+@@ -97,8 +100,14 @@ void restrict_access_by_env(int disallow
+ i_fatal("We couldn't drop root privileges");
+ }
+
+- if ((gid != 0 && uid != 0) || disallow_root) {
++ /* allow users with zero group id permission for BSD */
++ env = getenv("ALLOW_ZERO_GID");
++ allow_zero_gid = env == NULL ? FALSE : TRUE;
++
++ if (allow_zero_gid == FALSE &&
++ ((gid != 0 && uid != 0) || disallow_root)) {
+ if (getgid() == 0 || getegid() == 0 || setgid(0) == 0)
+ i_fatal("We couldn't drop root group privileges");
+ }
++
+ }
+Index: src/lib/restrict-access.h
+===================================================================
+RCS file: /home/cvs/dovecot/src/lib/restrict-access.h,v
+retrieving revision 1.4
+diff -u -3 -p -r1.4 restrict-access.h
+--- src/lib/restrict-access.h 4 Mar 2003 04:00:13 -0000 1.4
++++ src/lib/restrict-access.h 15 Apr 2003 17:37:26 -0000
+@@ -4,7 +4,7 @@
+ /* set environment variables so they can be read with
+ restrict_access_by_env() */
+ void restrict_access_set_env(const char *user, uid_t uid, gid_t gid,
+- const char *chroot_dir);
++ const char *chroot_dir, int allow_zg);
+
+ /* chroot, setuid() and setgid() based on environment variables.
+ If disallow_roots is TRUE, we'll kill ourself if we didn't have the
+Index: src/master/auth-process.c
+===================================================================
+RCS file: /home/cvs/dovecot/src/master/auth-process.c,v
+retrieving revision 1.41
+diff -u -3 -p -r1.41 auth-process.c
+--- src/master/auth-process.c 2 Apr 2003 02:09:41 -0000 1.41
++++ src/master/auth-process.c 15 Apr 2003 17:37:27 -0000
+@@ -307,7 +307,7 @@ static pid_t create_auth_process(struct
+
+ /* setup access environment */
+ restrict_access_set_env(group->set->user, pwd->pw_uid, pwd->pw_gid,
+- group->set->chroot);
++ group->set->chroot, set->allow_zero_gid);
+
+ /* set other environment */
+ env_put(t_strconcat("AUTH_PROCESS=", dec2str(getpid()), NULL));
+Index: src/master/login-process.c
+===================================================================
+RCS file: /home/cvs/dovecot/src/master/login-process.c,v
+retrieving revision 1.40
+diff -u -3 -p -r1.40 login-process.c
+--- src/master/login-process.c 15 Apr 2003 16:58:48 -0000 1.40
++++ src/master/login-process.c 15 Apr 2003 17:37:27 -0000
+@@ -384,7 +384,8 @@ static void login_process_init_env(struc
+ clean_child_process() since it clears environment */
+ restrict_access_set_env(group->set->user,
+ group->set->uid, set->login_gid,
+- set->login_chroot ? set->login_dir : NULL);
++ set->login_chroot ? set->login_dir : NULL,
++ FALSE);
+
+ env_put("DOVECOT_MASTER=1");
+
+Index: src/master/mail-process.c
+===================================================================
+RCS file: /home/cvs/dovecot/src/master/mail-process.c,v
+retrieving revision 1.13
+diff -u -3 -p -r1.13 mail-process.c
+--- src/master/mail-process.c 15 Apr 2003 16:58:48 -0000 1.13
++++ src/master/mail-process.c 15 Apr 2003 17:37:28 -0000
+@@ -25,7 +25,7 @@ static int validate_uid_gid(uid_t uid, g
+ return FALSE;
+ }
+
+- if (uid != 0 && gid == 0) {
++ if (set->allow_zero_gid == FALSE && uid != 0 && gid == 0) {
+ i_error("mail process isn't allowed to be in group 0");
+ return FALSE;
+ }
+@@ -38,8 +38,9 @@ static int validate_uid_gid(uid_t uid, g
+ return FALSE;
+ }
+
+- if (gid < (gid_t)set->first_valid_gid ||
+- (set->last_valid_gid != 0 && gid > (gid_t)set->last_valid_gid)) {
++ if (set->allow_zero_gid == FALSE &&
++ (gid < (gid_t)set->first_valid_gid ||
++ (set->last_valid_gid != 0 && gid > (gid_t)set->last_valid_gid))) {
+ i_error("mail process isn't allowed to use "
+ "GID %s (UID is %s)", dec2str(gid), dec2str(uid));
+ return FALSE;
+@@ -150,7 +151,8 @@ int create_mail_process(int socket, stru
+ (paranoia about filling up environment without noticing) */
+ restrict_access_set_env(data + reply->system_user_idx,
+ reply->uid, reply->gid,
+- reply->chroot ? data + reply->home_idx : NULL);
++ reply->chroot ? data + reply->home_idx : NULL,
++ set->allow_zero_gid);
+
+ restrict_process_size(process_size, (unsigned int)-1);
+
+Index: src/master/master-settings.c
+===================================================================
+RCS file: /home/cvs/dovecot/src/master/master-settings.c,v
+retrieving revision 1.16
+diff -u -3 -p -r1.16 master-settings.c
+--- src/master/master-settings.c 2 Apr 2003 02:09:41 -0000 1.16
++++ src/master/master-settings.c 15 Apr 2003 17:37:28 -0000
+@@ -46,6 +46,7 @@ static struct setting_def setting_defs[]
+ DEF(SET_INT, max_mail_processes),
+ DEF(SET_BOOL, verbose_proctitle),
+
++ DEF(SET_BOOL, allow_zero_gid),
+ DEF(SET_INT, first_valid_uid),
+ DEF(SET_INT, last_valid_uid),
+ DEF(SET_INT, first_valid_gid),
+@@ -153,6 +154,7 @@ struct settings default_settings = {
+ MEMBER(max_mail_processes) 1024,
+ MEMBER(verbose_proctitle) FALSE,
+
++ MEMBER(allow_zero_gid) FALSE,
+ MEMBER(first_valid_uid) 500,
+ MEMBER(last_valid_uid) 0,
+ MEMBER(first_valid_gid) 1,
+Index: src/master/master-settings.h
+===================================================================
+RCS file: /home/cvs/dovecot/src/master/master-settings.h,v
+retrieving revision 1.10
+diff -u -3 -p -r1.10 master-settings.h
+--- src/master/master-settings.h 2 Apr 2003 02:09:41 -0000 1.10
++++ src/master/master-settings.h 15 Apr 2003 17:37:29 -0000
+@@ -32,6 +32,7 @@ struct settings {
+ unsigned int max_mail_processes;
+ int verbose_proctitle;
+
++ int allow_zero_gid;
+ unsigned int first_valid_uid, last_valid_uid;
+ unsigned int first_valid_gid, last_valid_gid;
+
diff --git a/mail/dovecot/files/patch-dovecot-example.conf b/mail/dovecot/files/patch-dovecot-example.conf
index 569318cf52f4..21bd705f7319 100644
--- a/mail/dovecot/files/patch-dovecot-example.conf
+++ b/mail/dovecot/files/patch-dovecot-example.conf
@@ -1,6 +1,6 @@
---- dovecot-example.conf Tue Feb 11 19:35:49 2003
-+++ dovecot-example.conf Thu Feb 13 21:23:56 2003
-@@ -7,7 +7,7 @@
+--- dovecot-example.conf.orig Fri Apr 4 13:17:25 2003
++++ dovecot-example.conf Sat Apr 19 14:11:40 2003
+@@ -7,11 +7,11 @@
# --with-ssldir=/etc/ssl
# Base directory where to store runtime data.
@@ -9,16 +9,35 @@
# Protocols we want to be serving:
# imap imaps pop3 pop3s
-@@ -38,7 +38,7 @@
+-#protocols = imap imaps
++protocols = imap pop3
+
+ # IP or host address where to listen in for connections. It's not currently
+ # possible to specify multiple addresses. "*" listens in all IPv4 interfaces.
+@@ -27,18 +27,18 @@
+ #pop3s_listen =
+
+ # Disable SSL/TLS support.
+-#ssl_disable = no
++ssl_disable = yes
+
+ # PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
+ # dropping root privileges, so keep the key file unreadable by anyone but
+ # root. Included doc/mkcert.sh can be used to easily generate self-signed
+ # certificate, just make sure to update the domains in dovecot-openssl.cnf
+-#ssl_cert_file = /etc/ssl/certs/dovecot.pem
+-#ssl_key_file = /etc/ssl/private/dovecot.pem
++ssl_cert_file = %%SSLDIR%%/certs/imapd.pem
++ssl_key_file = %%SSLDIR%%/private/imapd.pem
# SSL parameter file. Master process generates this file for login processes.
# It contains Diffie Hellman and RSA parameters.
-#ssl_parameters_file = /var/run/dovecot/ssl-parameters.dat
-+#ssl_parameters_file = /var/dovecot/ssl/parameters.dat
++ssl_parameters_file = %%SSLDIR%%/parameters.dat
# How often to regenerate the SSL parameters file. Generation is quite CPU
# intensive operation. The value is in hours, 0 disables regeneration
-@@ -67,7 +67,7 @@
+@@ -67,11 +67,11 @@
# Directory where authentication process places authentication UNIX sockets
# which login needs to be able to connect to. The sockets are created when
# running as root, so you don't have to worry about permissions.
@@ -27,57 +46,148 @@
# chroot login process to the login_dir. Only reason not to do this is if you
# wish to run the whole Dovecot without roots.
-@@ -81,7 +81,7 @@
+-#login_chroot = yes
++login_chroot = yes
+
+
+ ##
+@@ -81,12 +81,12 @@
login = imap
# Executable location.
-#login_executable = /usr/libexec/dovecot/imap-login
-+login_executable = %%PREFIX%%/lib/dovecot/imap-login
++login_executable = %%PREFIX%%/libexec/dovecot/imap-login
# User to use for the login process. The user must belong to a group where
# only it has access, it's used to control access for authentication process
+ # named sockets.
+-#login_user = dovecot
++login_user = dovecot
+
+ # Set max. process size in megabytes. If you don't use
+ # login_process_per_connection you might need to grow this.
+@@ -100,7 +100,7 @@
+
+ # Number of login processes to create. If login_process_per_user is
+ # yes, this is the number of extra processes waiting for users to log in.
+-#login_processes_count = 3
++login_processes_count = 1
+
+ # Maximum number of extra login processes to create. The extra process count
+ # usually stays at login_processes_count, but when multiple users start logging
@@ -126,7 +126,7 @@
login = pop3
# Exception to above rule being the executable location.
-#login_executable = /usr/libexec/dovecot/pop3-login
-+login_executable = %%PREFIX%%/lib/dovecot/pop3-login
++login_executable = %%PREFIX%%/libexec/dovecot/pop3-login
##
## Mail processes
-@@ -292,7 +292,7 @@
+@@ -139,10 +139,10 @@
+ # Show more verbose process titles (in ps). Currently shows user name and
+ # IP address. Useful for seeing who are actually using the IMAP processes
+ # (eg. shared mailboxes or if same uid is used for multiple accounts).
+-#verbose_proctitle = no
++verbose_proctitle = yes
+
+ # Show protocol level SSL errors.
+-#verbose_ssl = no
++verbose_ssl = yes
+
+ # Valid UID/GID ranges for users, defaults to 500 and above. This is mostly
+ # to make sure that users can't log in as daemons or other system users.
+@@ -160,7 +160,7 @@
+ # WARNING: Never add directories here which local users can modify, that
+ # may lead to root exploit. Usually this should be done only if you don't
+ # allow shell access for users. See doc/configuration.txt for more information.
+-#valid_chroot_dirs =
++valid_chroot_dirs = /var/mail
+
+ # Default MAIL environment to use when it's not set. By leaving this empty
+ # dovecot tries to do some automatic detection as described in
+@@ -179,7 +179,7 @@
+ # mbox:~/mail/:INBOX=/var/mail/%u
+ # mbox:/var/mail/%d/%n/:INDEX=/var/indexes/%d/%n
+ #
+-#default_mail_env =
++default_mail_env = mbox:/var/mail/%u
+
+ # Space-separated list of fields to cache for all mails. Currently these
+ # fields are allowed followed by a list of commands they speed up:
+@@ -224,7 +224,7 @@
+ # arrives in half a hour, Dovecot closes the connection. This is still
+ # fine, except Outlook doesn't connect back so you don't see if new mail
+ # arrives.
+-#client_workarounds =
++client_workarounds = oe6-fetch-no-newmail outlook-idle
+
+ # Dovecot can notify client of new mail in selected mailbox soon after it's
+ # received. This setting specifies the minimum interval in seconds between
+@@ -249,7 +249,7 @@
+ # Save mails with CR+LF instead of plain LF. This makes sending those mails
+ # take less CPU, especially with sendfile() syscall with Linux and FreeBSD.
+ # But it also creates a bit more disk I/O which may just make it slower.
+-#mail_save_crlf = no
++mail_save_crlf = yes
+
+ # Use mmap() instead of read() to read mail files. read() seems to be a bit
+ # faster with my Linux/x86 and it's better with NFS, so that's the default.
+@@ -261,7 +261,7 @@
+ # know any MUA which would modify mail files directly. IMAP protocol also
+ # requires that the mails don't change, so it would be problematic in any case.
+ # If you care about performance, enable it.
+-#maildir_copy_with_hardlinks = no
++maildir_copy_with_hardlinks = yes
+
+ # Check if mails' content has been changed by external programs. This slows
+ # down things as extra stat() needs to be called for each file. If changes are
+@@ -280,7 +280,7 @@
+ # with is important to avoid deadlocks if other MTAs/MUAs are using both fcntl
+ # and flock. Some operating systems don't allow using both of them
+ # simultaneously, eg. BSDs. If dotlock is used, it's always created first.
+-#mbox_locks = dotlock fcntl
++mbox_locks = fcntl
+
+ # Should we create dotlock file even when we want only a read-lock? Setting
+ # this to yes hurts the performance when the mailbox is accessed simultaneously
+@@ -310,7 +310,7 @@
##
# Executable location
-#imap_executable = /usr/libexec/dovecot/imap
-+#imap_executable = %%PREFIX%%/lib/dovecot/imap
++imap_executable = %%PREFIX%%/libexec/dovecot/imap
# Set max. process size in megabytes. Most of the memory goes to mmap()ing
# files, so it shouldn't harm much even if this limit is set pretty high.
-@@ -303,7 +303,7 @@
+@@ -321,7 +321,7 @@
##
# Executable location
-#pop3_executable = /usr/libexec/dovecot/pop3
-+#pop3_executable = %%PREFIX%%/lib/dovecot/pop3
++pop3_executable = %%PREFIX%%/libexec/dovecot/pop3
# Set max. process size in megabytes. Most of the memory goes to mmap()ing
# files, so it shouldn't harm much even if this limit is set pretty high.
-@@ -357,7 +357,7 @@
- auth_passdb = pam
+@@ -374,10 +374,10 @@
+ # vpopmail: vpopmail authentication
+ # ldap <config path>: LDAP, see doc/dovecot-ldap.conf
+ # pgsql <config path>: a PostgreSQL database, see doc/dovecot-pgsql.conf
+-auth_passdb = pam
++auth_passdb = passwd
# Executable location
-#auth_executable = /usr/libexec/dovecot/dovecot-auth
-+#auth_executable = %%PREFIX%%/lib/dovecot/dovecot-auth
++auth_executable = %%PREFIX%%/libexec/dovecot/dovecot-auth
# Set max. process size in megabytes.
#auth_process_size = 256
-@@ -388,7 +388,7 @@
- #auth_userdb = passwd-file /etc/passwd.imap
- #auth_passdb = passwd-file /etc/passwd.imap
- #auth_user = imapauth
--#auth_chroot = /var/run/dovecot/auth
-+#auth_chroot = /var/dovecot/auth
-
- # if you plan to use only passwd-file, you don't need the two auth processes,
- # simply set "auth_methods = plain digest-md5"
+@@ -402,7 +402,7 @@
+
+ # More verbose logging. Useful for figuring out why authentication isn't
+ # working.
+-#auth_verbose = no
++auth_verbose = yes
+
+ # digest-md5 authentication process. It requires special MD5 passwords which
+ # /etc/shadow and PAM doesn't support, so we never need roots to handle it.
diff --git a/mail/dovecot/files/patch-mkcert.sh b/mail/dovecot/files/patch-mkcert.sh
new file mode 100644
index 000000000000..1874649612a2
--- /dev/null
+++ b/mail/dovecot/files/patch-mkcert.sh
@@ -0,0 +1,11 @@
+--- doc/mkcert.sh Tue Apr 15 14:28:24 2003
++++ mkcert.sh.new Tue Apr 15 14:28:52 2003
+@@ -4,7 +4,7 @@
+ # Edit dovecot-openssl.cnf before running this.
+
+ OPENSSL=${OPENSSL-openssl}
+-SSLDIR=${SSLDIR-/etc/ssl}
++SSLDIR=${SSLDIR-%%SSLDIR%%}
+ OPENSSLCONFIG=${OPENSSLCONFIG-dovecot-openssl.cnf}
+
+ CERTFILE=$SSLDIR/certs/imapd.pem
diff --git a/mail/dovecot/files/patch-src::imap-fetch-body-section.c b/mail/dovecot/files/patch-src::imap-fetch-body-section.c
deleted file mode 100644
index 8da8100613ff..000000000000
--- a/mail/dovecot/files/patch-src::imap-fetch-body-section.c
+++ /dev/null
@@ -1,34 +0,0 @@
---- 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) {
diff --git a/mail/dovecot/files/patch-src::imap::cmd-list.c b/mail/dovecot/files/patch-src::imap::cmd-list.c
deleted file mode 100644
index b677441ebb42..000000000000
--- a/mail/dovecot/files/patch-src::imap::cmd-list.c
+++ /dev/null
@@ -1,109 +0,0 @@
---- 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();
diff --git a/mail/dovecot/files/patch-src::lib-imap::imap-parser.c b/mail/dovecot/files/patch-src::lib-imap::imap-parser.c
deleted file mode 100644
index d9f82ee8d11e..000000000000
--- a/mail/dovecot/files/patch-src::lib-imap::imap-parser.c
+++ /dev/null
@@ -1,30 +0,0 @@
---- 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) {
diff --git a/mail/dovecot/files/patch-src::lib-storage::index::maildir::maildir-list.c b/mail/dovecot/files/patch-src::lib-storage::index::maildir::maildir-list.c
deleted file mode 100644
index f99c846d3d56..000000000000
--- a/mail/dovecot/files/patch-src::lib-storage::index::maildir::maildir-list.c
+++ /dev/null
@@ -1,12 +0,0 @@
---- 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) {
diff --git a/mail/dovecot/files/patch-src::lib-storage::index::maildir::maildir-storage.c b/mail/dovecot/files/patch-src::lib-storage::index::maildir::maildir-storage.c
deleted file mode 100644
index 4dccbc5a9897..000000000000
--- a/mail/dovecot/files/patch-src::lib-storage::index::maildir::maildir-storage.c
+++ /dev/null
@@ -1,11 +0,0 @@
---- 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);