Quoting Patrick Domack <patric...@patrickdk.com>:

To make it work the current way, is simple.



I would love for it though, to lookup and see if an mailbox exists with the delim first, then if it doesn't lookup just the username part.


Quoting Andrew Ray <and...@freedomlives.net>:

Hi,

It would be nice if the recipient_delimiter configuration option supported multiple recipient delimiters as Postfix now does. e.g. now if I set: recipient_delimiter = +- in Postfix, then test-extens...@sample.com and test+extens...@sample.com are both recognized. But if I set: recipient_delimiter = +- in Dovecot, neither of the above are recognized and instead test+-extens...@sample.com is valid.

Well, presently this feature isn't that important to me, but I imagine it could be a source of confusion for people who are migrating from say qmail to postfix (as I am doing) and notice Postfix's cool ability to support both types of delimiters and assume Dovecot will as well (as I did).

Thanks,
Andrew Ray

--

Andrew Ray
+1 404-418-5443
+421 (0) 917 832 253
http://guns.freedomlives.net/


Well, to answer my own wishlist, this isn't by no means complete, as I only use lmtp, so I didn't bother to patch lda, but logins already worked good the way it was, so just needed lmtp to match with delim first, then try again without it.

--- dovecot-2.2.10/src/lmtp/commands.c  2013-08-21 16:30:17.000000000 -0400
+++ dovecot-2.2.10/src/lmtp/commands.c  2014-01-28 20:18:12.303577376 -0500
@@ -387,7 +387,7 @@
                return;

        domain = strchr(address, '@');
-       p = strstr(address, client->unexpanded_lda_set->recipient_delimiter);
+       p = strpbrk(address, client->unexpanded_lda_set->recipient_delimiter);
        if (p != NULL && (domain == NULL || p < domain)) {
                /* user+detail@domain */
                *username_r = t_strdup_until(*username_r, p);
@@ -536,7 +536,7 @@

        memset(&input, 0, sizeof(input));
        input.module = input.service = "lmtp";
-       input.username = username;
+       input.username = address;
        input.local_ip = client->local_ip;
        input.remote_ip = client->remote_ip;
        input.local_port = client->local_port;
@@ -545,6 +545,16 @@
        ret = mail_storage_service_lookup(storage_service, &input,
                                          &rcpt.service_user, &error);

+        if (ret<=0 && strlen(detail)>0) {
+               input.username = username;
+               ret = mail_storage_service_lookup(storage_service, &input,
+                                         &rcpt.service_user, &error);
+       } else if(ret>0) {
+               username=t_strdup(address);
+               if(strlen(detail)>0)
+                       detail = "";
+       }
+
        if (ret < 0) {
                prefix = t_strdup_printf(ERRSTR_TEMP_USERDB_FAIL_PREFIX,
                                         username);


Reply via email to