Re: [Dovecot] recipient_delimiter -- feature request

2014-01-28 Thread Patrick Domack

To make it work the current way, is simple.

--- a/src/lmtp/commands.c   2013-02-05 18:31:36.0 -0500
+++ b/src/lmtp/commands.c   2014-01-28 18:15:01.011677816 -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);


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/






Re: [Dovecot] recipient_delimiter -- feature request

2014-01-28 Thread Patrick Domack


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.0 -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(ret0) {
+   username=t_strdup(address);
+   if(strlen(detail)0)
+   detail = ;
+   }
+
if (ret  0) {
prefix = t_strdup_printf(ERRSTR_TEMP_USERDB_FAIL_PREFIX,
 username);