[Dovecot] Empty/corrupt mail leads to duplicate delivery

Marc Herbrechter mh at zebroc.de
Mon Oct 27 21:12:22 EET 2008


Hi,

when the attached mail was stored in a maildir, fetching mail via POP3
lead to multiple delivery of mails in that maildir to the client
(Outlook). I replaced the domain with dots.

This is the dovecot configuration:

--snip--
protocols = imap imaps pop3 pop3s
listen = *
disable_plaintext_auth = no
ssl_cert_file = /etc/ssl/dovecot/server.pem
ssl_key_file = /etc/ssl/dovecot/server.key
mail_location = maildir:~/.maildir

protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}

auth default {
  mechanisms = plain

  passdb pam {
    args = "*"
  }

  userdb passwd {
  }

  user = root

  socket listen {
    client {
    path = /var/spool/postfix/private/auth
    mode = 0660
    user = postfix
    group = postfix
    }
  }
}
--snip--

Version: dovecot-1.1.4-r1 (Gentoo)

Gentoo applies the attached "expire" patch.

I tried to reproduce the behavior, but when I send an empty mail via
telnet, nothing happens.

The box is running Amavis, don't know if that helps.

-- 
Mit freundlichen Grüßen,
with kind regards,

Marc Herbrechter <mh at zebroc.de>
-------------- next part --------------

# HG changeset patch
# User Timo Sirainen <tss at iki.fi>
# Date 1223320000 -10800
# Node ID 96dfe8fb57b8e061b4339cbf3d50fc8067dc50ec
# Parent 9f95b3c28cc392b6c9534a69e6a2aa75ea54f5eb
Expire plugin was crashing because of previous change.

--- a/src/plugins/expire/expire-plugin.c	Mon Oct 06 19:24:03 2008 +0300
+++ b/src/plugins/expire/expire-plugin.c	Mon Oct 06 22:06:40 2008 +0300
@@ -99,6 +99,7 @@ expire_mailbox_transaction_commit(struct
 {
 	struct expire_mailbox *xpr_box = EXPIRE_CONTEXT(t->box);
 	struct expire_transaction_context *xt = EXPIRE_CONTEXT(t);
+	struct mailbox *box = t->box;
 	time_t new_stamp;
 	bool update_dict = FALSE;
 	int ret;
@@ -117,13 +118,14 @@ expire_mailbox_transaction_commit(struct
 		i_free(xt);
 		return -1;
 	}
+	/* transaction is freed now */
+	t = NULL;
 
 	if (xt->first_expunged || xt->saves) T_BEGIN {
 		const char *key, *value;
 
 		key = t_strconcat(DICT_PATH_SHARED, expire.username, "/",
-				  t->box->storage->ns->prefix,
-				  t->box->name, NULL);
+				  box->storage->ns->prefix, box->name, NULL);
 		if (!xt->first_expunged && xt->saves) {
 			/* saved new mails. dict needs to be updated only if
 			   this is the first mail in the database */

-------------- next part --------------
Return-Path: <htefunny at dionis.r35.nalog.ru>
X-Original-To: wolf at ................de
Delivered-To: wolf at ................de
Received: from localhost (localhost [127.0.0.1])
	by mail.................de (Postfix) with ESMTP id 07E27B8047D
	for <wolf at ................de>; Mon, 27 Oct 2008 14:08:41 +0100 (CET)
Message-Id: <20081027130845.07E27B8047D at mail.................de>
Date: Mon, 27 Oct 2008 14:08:41 +0100 (CET)
From: htefunny at dionis.r35.nalog.ru
To: undisclosed-recipients:;
Content-Length: 0
Lines: 0



More information about the dovecot mailing list