Problem solved!

Finally it's not related to dovecot but to a misconfiguration of my
ldap_table in postfix.

So when my auto-reply message was send to the original sender, postfix did
a ldap query that did not take the domain part into account.

My original ldap_table was:

server_host = ldap.example.com
serverport = 389
bind = no
version = 3
search_base = ou=People,dc=example,dc=com
query_filter = (mailLocalAddress=%u)
result_attribute = mailRoutingAddress
start_tls = yes

The solution was to modify my search base with %2 instead of example.

Now when postfix do a query with another domain name, there's no result
because the search base doesn't exist.

Destination is not considered as local and forwarded to my relay host.

Bellow the update version of my ldap_table:

server_host = ldap.example.com
serverport = 389
bind = no
version = 3
search_base = ou=People,dc=%2,dc=com
query_filter = (mailLocalAddress=%u)
result_attribute = mailRoutingAddress
start_tls = yes

Le mar. 4 déc. 2018 à 16:16, fins <svin...@gmail.com> a écrit :

> After some additional research and testing, it seems that my vacation
> auto-reply is working when the sender doesn't have the same username (%n)
> as a local account on the recipient imap server.
>
> If t...@xyz.com sends an email to  te...@example.com, the vacation
> auto-reply is triggered but delivered to the wrong mailbox.
>
> Suppose I have an account t...@example.com on my imap server, this
> account has the same %n (test) as the sender address.
>
> In this case the vacation auto-reply is delivered locally to the
> t...@example.com account instead of t...@example.xyz
>
> If I delete the t...@example.com account from my imap server then the
> vacation auto-reply is send through my relayhost and delivered to original
> sender as expected.
>
> Now I need to figure out how to solve this problem.
>
> Le lun. 3 déc. 2018 à 16:07, fins <svin...@gmail.com> a écrit :
>
>> Hello,
>>
>>
>> I have a complete Postfix + Dovecot + openLDAP setup almost working, the
>> only issue I have is the vacation script auto-reply that doesn't work
>> properly.
>>
>> If I send an email to a user with the vacation filter enabled, the
>> auto-reply is send to a local recipient with the same account name.
>>
>> So for example if I send a mail from t...@xyz.com to t...@example.com,
>> the auto-reply is received on the t...@example.com address instead of
>> the t...@xyz.com who's the original sender.
>>
>> Here's a log file:
>>
>>
>> Dec  3 13:52:48 imap dovecot: lda(t...@example.com): Debug: sieve:
>> executing script from /var/mail/example.com/test/.dovecot.svbin
>> Dec  3 13:52:48 imap dovecot: lda(t...@example.com): sieve: msgid=<
>> dovecot-sieve-1543841568-83631...@imap.example.com>: discarding vacation
>> response to auto-submitted message from <MAILER-DAEMON>
>> Dec  3 13:52:48 imap dovecot: lda(t...@example.com): sieve: msgid=<
>> dovecot-sieve-1543841568-83631...@imap.example.com>: stored mail into
>> mailbox 'INBOX'
>> Dec  3 13:52:48 imap postfix/pipe[6663]: D835A300E05: to=<
>> t...@example.com>, orig_to=<t...@xyz.com>, relay=dovecot, delay=0.1,
>> delays=0.03/0.01/0/0.06, dsn=2.0.0, status=sent (delivered via dovecot
>> service)
>>
>>
>> Can somebody help with this issue and/or point where to go for debugging?
>>
>>
>> Please find my dovecot configuration bellow:
>>
>>
>>
>> dovecot -n
>>> # 2.2.10: /etc/dovecot/dovecot.conf
>>> # OS: Linux 3.10.0-862.11.6.el7.x86_64 x86_64 CentOS Linux release 7.5.1804 
>>> (Core)  xfs
>>> auth_debug = yes
>>> auth_mechanisms = plain login
>>> auth_verbose = yes
>>> lda_mailbox_autocreate = yes
>>> lda_mailbox_autosubscribe = yes
>>> mail_debug = yes
>>> mail_gid = mail
>>> mail_home = /var/mail/%d/%n
>>> mail_location = maildir:/var/mail/%d/%n/Maildir
>>> mail_plugins = " quota"
>>> mail_uid = vmail
>>> managesieve_notify_capability = mailto
>>> managesieve_sieve_capability = fileinto reject envelope encoded-character 
>>> vacation subaddress comparator-i;ascii-numeric relational regex imap4flags 
>>> copy include variables body enotify environment mailbox date ihave
>>> mbox_write_locks = fcntl
>>> namespace inbox {
>>>   inbox = yes
>>>   location =
>>>   mailbox Drafts {
>>>     special_use = \Drafts
>>>   }
>>>   mailbox Junk {
>>>     special_use = \Junk
>>>   }
>>>   mailbox Sent {
>>>     special_use = \Sent
>>>   }
>>>   mailbox "Sent Messages" {
>>>     special_use = \Sent
>>>   }
>>>   mailbox Trash {
>>>     special_use = \Trash
>>>   }
>>>   prefix =
>>> }
>>> passdb {
>>>   args = /etc/dovecot/dovecot-ldap.conf.ext
>>>   driver = ldap
>>> }
>>> plugin {
>>>   quota = maildir:User quota
>>>   quota_grace = 10%%
>>>   quota_rule2 = Trash:storage=+100M
>>>   quota_status_nouser = DUNNO
>>>   quota_status_overquota = 552 5.2.2 Mailbox is full
>>>   quota_status_success = DUNNO
>>>   quota_warning = storage=95%% quota-warning 95 %u it
>>>   quota_warning2 = storage=80%% quota-warning 80 %u it
>>>   sieve = ~/.dovecot.sieve
>>>   sieve_dir = ~/sieve
>>> }
>>> protocols = imap pop3 lmtp sieve
>>> service auth {
>>>   unix_listener /var/spool/postfix/private/auth {
>>>     group = postfix
>>>     mode = 0666
>>>     user = postfix
>>>   }
>>>   unix_listener auth-userdb {
>>>     group = mail
>>>     mode = 0600
>>>     user = vmail
>>>   }
>>> }
>>> service imap-login {
>>>   inet_listener imap {
>>>     port = 0
>>>   }
>>> }
>>> service managesieve-login {
>>>   inet_listener sieve {
>>>     port = 4190
>>>   }
>>> }
>>> service pop3-login {
>>>   inet_listener pop3 {
>>>     port = 0
>>>   }
>>>   inet_listener pop3s {
>>>     port = 0
>>>   }
>>> }
>>> service quota-status {
>>>   client_limit = 1
>>>   executable = quota-status -p postfix
>>>   inet_listener {
>>>     port = 12340
>>>   }
>>> }
>>> service quota-warning {
>>>   executable = script /usr/local/bin/quota-warning.sh
>>>   unix_listener quota-warning {
>>>     user = vmail
>>>   }
>>>   user = vmail
>>> }
>>> ssl = required
>>> ssl_cert = </etc/pki/tls/certs/imap.example.com.crt
>>> ssl_key = </etc/pki/tls/private/imap.example.com.key
>>> userdb {
>>>   args = /etc/dovecot/dovecot-ldap.conf.ext
>>>   driver = ldap
>>> }
>>> protocol lda {
>>>   mail_plugins = " quota sieve"
>>> }
>>> protocol imap {
>>>   mail_plugins = " quota imap_quota"
>>> }
>>>
>>>
>>
>> dovecot-ldap.conf.ext
>>
>>
>> hosts =  example.com
>>> base = ou=People,dc=example,dc=com
>>> ldap_version = 3
>>> auth_bind = yes
>>> user_filter = (&(objectClass=posixAccount)(uid=%n))
>>> pass_filter = (&(objectClass=posixAccount)(uid=%n))
>>>
>>> user_attrs = \
>>>  mailRoutingAddress=user, \
>>>  =uid=vmail, \
>>>  =gid=mail, \
>>>  =home=/var/mail/%d/%n, \
>>>  =quota_rule=*:bytes=%{ldap:departmentNumber}
>>>
>>>
>>> pass_attrs= mailRoutingAddress=user
>>>
>>> tls = yes
>>>
>>
>> My vacation script:
>>
>>
>> require ["date","relational","vacation"];
>>> # rule:[Vacation]
>>> if allof (currentdate :zone "+0100" :value "ge" "iso8601"
>>> "2018-12-02T02:00:00+01:00", currentdate :zone "+0100" :value "le"
>>> "iso8601" "2018-12-24T04:00:00+01:00")
>>> {
>>>     vacation :addresses "t...@example.com" :subject "Away" "I'm away";
>>> }
>>>
>>
>>
>>

Reply via email to