I have created https://github.com/cyrusimap/cyrus-imapd/issues/2191 to track this. Thanks for the patch!
Cheers,
Bron.
On Fri, 3 Nov 2017, at 00:38, Edda wrote:
Hi,that's surprising and the same here.I think there is a bug in imap/lmtpengine.c, function process_recipient:verify_user returns the correct error code as we can see with LOG_DEBUG"on":Nov 2 14:10:50 popc lmtp[2092]: verify_user(test@xxxxxxxxxxxx) failed:Over quotabut this return code is not used in process_recipientThere we have:[...]if (sl) {char *rcpt = xstrndup(addr, sl);mbname = mbname_from_recipient(rcpt, msg->ns);free(rcpt);int forcedowncase = config_getswitch(IMAPOPT_LMTP_DOWNCASE_RCPT);if (forcedowncase) mbname_downcaseuser(mbname);/* strip username if postuser */if (!strcmpsafe(mbname_localpart(mbname),config_getstring(IMAPOPT_POSTUSER))) {mbname_set_localpart(mbname, NULL);if (!config_virtdomains ||!strcmpsafe(mbname_domain(mbname), config_defdomain))mbname_set_domain(mbname, NULL);}if (verify_user(mbname,(quota_t) (ignorequota ? -1 : msg->size),ignorequota ? -1 : 1, msg->authstate)) {mbname_free(&mbname);}}if (!mbname) {const char *catchall =config_getstring(IMAPOPT_LMTP_CATCHALL_MAILBOX);if (catchall) {mbname = mbname_from_userid(catchall);if (verify_user(mbname,ignorequota ? -1 : msg->size,ignorequota ? -1 : 1, msg->authstate)) {mbname_free(&mbname);}}}if (!mbname) {/* we lost */return IMAP_MAILBOX_NONEXISTENT;}[...]means as far as I understand: if verify_user returns its error (forexample IMAP_QUOTA_EXCEEDED), mbname is freed and process_recipientalways returns IMAP_MAILBOX_NONEXISTENT.Below is a patch that works for me. But I don't know if this is a goodway to fix it.Hopefully one of the developers helps :)Regards, Eddadiff -Naur cyrus-imapd-3.0.4.orig/imap/lmtpengine.ccyrus-imapd-3.0.4/imap/lmtpengine.c--- cyrus-imapd-3.0.4.orig/imap/lmtpengine.c 2017-09-0402:09:46.000000000 +0200+++ cyrus-imapd-3.0.4/imap/lmtpengine.c 2017-11-02 13:59:56.764175245+0100@@ -830,6 +830,7 @@}mbname_t *mbname = NULL;+ int r = 0;size_t sl = strlen(addr);if (addr[sl-1] == '>') sl--;@@ -849,7 +850,7 @@mbname_set_domain(mbname, NULL);}- if (verify_user(mbname,+ if (r = verify_user(mbname,(quota_t) (ignorequota ? -1 : msg->size),ignorequota ? -1 : 1, msg->authstate)) {mbname_free(&mbname);@@ -860,7 +861,7 @@const char *catchall =config_getstring(IMAPOPT_LMTP_CATCHALL_MAILBOX);if (catchall) {mbname = mbname_from_userid(catchall);- if (verify_user(mbname,+ if (r = verify_user(mbname,ignorequota ? -1 : msg->size,ignorequota ? -1 : 1, msg->authstate)) {mbname_free(&mbname);@@ -870,6 +871,9 @@if (!mbname) {/* we lost */+ if (r) {+ return r;+ }return IMAP_MAILBOX_NONEXISTENT;}Am 02.11.17 um 09:27 schrieb Maros Vegh:Hello,i'm using compiled cyrus version 3.0.4 on Debian 9.2.When the Postfix server is trying to deliver a message via lmtp tocyrus mailbox which is over quota, it receives the 550-Mailbox unknownreturn code and not the 452 or 552 Over quota.In the previous version 2.5.10 it worked fine with default values inimapd.confIs it a bug or my fault?ThanksMaros Vegh----Cyrus Home Page: http://www.cyrusimap.org/List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/To Unsubscribe:
--
Bron Gondwana, CEO, FastMail Pty Ltd
brong@xxxxxxxxxxxxxxxx
---- Cyrus Home Page: http://www.cyrusimap.org/ List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/ To Unsubscribe: https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus