I found this[1] thread that describes the same problem with dovecot-LDA, but the solution (add X-Original-To: header) has no effect with LMTP.

My sendmail LMTP configuration:
FEATURE(`local_lmtp',`[IPC]',`FILE /var/run/dovecot/lmtp')

Sendmail's address test indicates that sendmail is providing user+detail to LMTP (see below). Except for this problem, dovecot, LMTP, and sieve are all working perfectly. Is there something I'm missing, or is this a bug?

[1] http://dovecot.org/pipermail/dovecot/2012-July/136987.htm


Script started on Sun Jan  5 23:25:04 2014
$ doveconf -n
# 2.2.9: /usr/local/etc/dovecot/dovecot.conf
# OS: FreeBSD 9.2-STABLE amd64 auth_verbose = yes
mail_debug = yes
mail_location = mdbox:~/.mdbox
mail_plugins = " quota"
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 editheader 
vnd.dovecot.debug vnd.dovecot.duplicate imapflags notify vnd.dovecot.pipe 
vnd.dovecot.filter vnd.dovecot.execute
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 = %s
  driver = pam
}
plugin {
  quota = fs:%n@%{hostname} %h %Us %{pid}:
  quota_warning = storage=95%% quota-warning 95 %u
  quota_warning2 = storage=80%% quota-warning 80 %u
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
  sieve_execute_bin_dir = ~/sieve/sieve-execute
  sieve_execute_socket_dir = sieve-execute
  sieve_extensions = +notify +imapflags +editheader +vnd.dovecot.duplicate 
+vnd.dovecot.pipe +vnd.dovecot.filter +vnd.dovecot.execute +vnd.dovecot.debug
  sieve_filter_bin_dir = ~/sieve/sieve-filter
  sieve_filter_socket_dir = sieve-filter
  sieve_global_dir = /usr/local/etc/dovecot/sieve
  sieve_max_actions = 0
  sieve_max_redirects = 16
  sieve_max_script_size = 0
  sieve_pipe_bin_dir = ~/sieve/sieve-pipe
  sieve_pipe_socket_dir = sieve-pipe
  sieve_plugins = sieve_extprograms
}
postmaster_address = postmas...@tharned.org
protocols = imap lmtp sieve
quota_full_tempfail = yes
service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  unix_listener quota-warning {
    user = dovecot
  }
  user = dovecot
}
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem
userdb {
  driver = passwd
}
verbose_proctitle = yes
protocol lmtp {
  mail_plugins = " quota sieve"
}
protocol lda {
  mail_plugins = " quota sieve"
}
protocol imap {
  mail_max_userip_connections = 100
  mail_plugins = " quota imap_quota"
}

$ sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
=M
mailer 0 (prog): P=/bin/sh S=EnvFromL/HdrFromL R=EnvToL/HdrToL M=0 U=-1:-1 
F=9DFMeloqsu L=0 E=\n T=X-Unix/X-Unix/X-Unix r=100 A=sh -c $u
mailer 1 (*file*): P=[FILE] S=parse/parse R=parse/parse M=0 U=-1:-1 
F=9DEFMPloqsu L=0 E=\n T=X-Unix/X-Unix/X-Unix r=100 A=FILE $u
mailer 2 (*include*): P=/dev/null S=parse/parse R=parse/parse M=0 U=-1:-1 F=su L=0 E=\n 
T=<undefined>/<undefined>/<undefined> r=100 A=INCLUDE $u
mailer 3 (local): P=[IPC] S=EnvFromSMTP/HdrFromL R=EnvToL/HdrToL M=0 U=-1:-1 
F=/59:@ADFMPSXlmnqswz| L=0 E=\r\n T=DNS/RFC822/SMTP r=100 A=FILE 
/var/run/dovecot/lmtp
mailer 4 (smtp): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=EnvToSMTP/EnvToSMTP M=0 
U=-1:-1 F=DFMXmu L=990 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h
mailer 5 (esmtp): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=EnvToSMTP/EnvToSMTP M=0 
U=-1:-1 F=DFMXamu L=990 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h
mailer 6 (smtp8): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=EnvToSMTP/EnvToSMTP M=0 
U=-1:-1 F=8DFMXmu L=990 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h
mailer 7 (dsmtp): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=EnvToSMTP/EnvToSMTP M=0 
U=-1:-1 F=%DFMXamu L=990 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h
mailer 8 (relay): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=MasqSMTP/MasqSMTP M=0 
U=-1:-1 F=8DFMXamu L=2040 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h
/try local gcr+det...@tharned.org
Trying envelope recipient address gcr+det...@tharned.org for mailer local
canonify           input: gcr + DeTaIl @ tharned . org
Canonify2          input: gcr + DeTaIl < @ tharned . org >
Canonify2        returns: gcr + DeTaIl < @ tharned . org . >
canonify         returns: gcr + DeTaIl < @ tharned . org . >
2                  input: gcr + DeTaIl < @ tharned . org . >
2                returns: gcr + DeTaIl < @ tharned . org . >
EnvToL             input: gcr + DeTaIl < @ tharned . org . >
EnvToL           returns: gcr + DeTaIl
final              input: gcr + DeTaIl
final            returns: gcr + DeTaIl
Rcode = 0, addr = gcr+DeTaIl
^D

$ cat .dovecot.sieve
require ["envelope", "subaddress", "variables", "vnd.dovecot.debug"];
if envelope :matches "to" "*" { set "to" "${1}"; }
if envelope :user :matches "to" "*" { set "user" "${1}"; }
if envelope :detail :matches "to" "*" { set "detail" "${1}"; }
if envelope :matches "from" "*" { set "from" "${1}"; }
debug_log "EnvelopeTo=${to}, EnvelopeFrom=${from}";
debug_log "EnvelopeToUser=${user}, EnvelopeToDetail=${detail}";

$ telnet localhost smtp Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 tharned.org ESMTP Sendmail 8.14.7/8.14.7; Sun, 5 Jan 2014 23:56:22 -0600 (CST)
mail from:<g...@tharned.org>
250 2.1.0 <g...@tharned.org>... Sender ok
rcpt to:<gcr+det...@tharned.org>
250 2.1.5 <gcr+det...@tharned.org>... Recipient ok
data 354 Enter mail, end with "." on a line by itself
.
250 2.0.0 s065uMYM069381 Message accepted for delivery
quit
221 2.0.0 tharned.org closing connection
Connection closed by foreign host.

$ tail -4 .dovecot.sieve.log
sieve: info: started log at Jan 05 23:57:21.
main script: line 5: info: DEBUG: EnvelopeTo=gcr, EnvelopeFrom=g...@tharned.org.
main script: line 9: info: DEBUG: EnvelopeToUser=gcr, EnvelopeToDetail=.
info: msgid=<201401060557.s065umym069...@tharned.org>: stored mail into mailbox 
'INBOX'.

$ exit
Script done on Sun Jan  5 23:57:55 2014

--
Greg Rivers

Reply via email to