hi,
i'm not sure if i've discovered a bug or if i'm not following the IMAP
specs correctly.
observations:
{ echo -en "a1 login foo bar\r\na2 notify set (subscribed (FlagChange
SubscriptionChange MessageNew MessageExpunge))\r\n"; cat - } | openssl s_client
-connect [my_dovecot_server]:993
produces the following output (aside from the openssl s_client
cert-inspection stuff):
2020-06-21 12:26:02 * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID
ENABLE IDLE LITERAL+ AUTH=PLAIN AUTH=LOGIN] Dovecot (Debian) ready.
2020-06-21 12:26:02 a1 OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID
ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS
THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN
NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT
SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY LITERAL+
NOTIFY SPECIAL-USE] Logged in
2020-06-21 12:26:02 a2 OK NOTIFY completed (0.005 + 0.000 + 0.004 secs).
2020-06-21 12:26:02 a2 OK NOTIFY completed (0.002 + 0.000 + 0.001 secs).
the first line is the pre-login welcome prompt, the second one the
result of the "a1 login .." command and the third and fourth seem to be
the answer to the "a2 notify set .." command, twice. from the different
timings given, it seems the a2 command is actually executed twice.
is this a case of "you're not allowed to pipeline commands like this"
or a bug in dovecot (or both)?
i attached the output of `dovecot -n`.
best,
dario
# dovecot -n
# 2.3.4.1 (f79e8e7e4): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.5.4 ()
# OS: Linux 4.19.0-6-amd64 x86_64 Debian 10.4
# Hostname: hetzner.deaktualisierung.org
doveconf: Warning: please set ssl_dh=</etc/dovecot/dh.pem
doveconf: Warning: You can generate it with: dd
if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam -inform
der > /etc/dovecot/dh.pem
auth_mechanisms = plain login
auth_username_format = %n
mail_home = /mail/%u
mail_location = Maildir:~/mail
mail_log_prefix = "%s(%u): "
namespace inbox {
inbox = yes
list = yes
location =
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = subscribe
special_use = \Junk
}
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox "Sent Messages" {
auto = subscribe
special_use = \Sent
}
mailbox trash {
auto = subscribe
special_use = \Trash
}
prefix =
separator = .
subscriptions = yes
type = private
}
passdb {
args = scheme=SHA256-CRYPT username_format=%n /etc/dovecot/users
driver = passwd-file
}
plugin {
imapsieve_mailbox1_before = file:/etc/dovecot/sieve/report-spam.sieve
imapsieve_mailbox1_causes = COPY
imapsieve_mailbox1_name = Junk
imapsieve_mailbox2_before = file:/etc/dovecot/sieve/report-ham.sieve
imapsieve_mailbox2_causes = COPY
imapsieve_mailbox2_from = Junk
imapsieve_mailbox2_name = *
mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename
mail_log_fields = uid box msgid size
sieve = file:~/.dovecot.sieve
sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.debug
sieve_pipe_bin_dir = /etc/dovecot/sieve/bin
sieve_plugins = sieve_imapsieve sieve_extprograms
sieve_user_log = ~/.dovecot.sieve.log
}
protocols = " imap lmtp"
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
}
service imap-login {
inet_listener imaps {
port = 993
ssl = yes
}
process_min_avail = 0
service_count = 1
}
service imap {
process_limit = 128
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
}
ssl_cert = </etc/dovecot/letsencrypt-ssl-cert-and-key.pem
ssl_cipher_list =
EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:-3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA:EDH-RSA-DES-CBC3-SHA:DES-CBC3-SHA
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
userdb {
args = username_format=%n /etc/dovecot/users
default_fields = uid=vmail gid=vmail home=/mail/%u
driver = passwd-file
}
protocol lmtp {
mail_plugins = " sieve fts fts_lucene"
plugin {
fts = lucene
fts_autoindex = yes
}
}
protocol imap {
imap_client_workarounds = tb-extra-mailbox-sep tb-lsub-flags
imap_idle_notify_interval = 2 mins
mail_max_userip_connections = 100
mail_plugins = " fts fts_lucene imap_sieve"
}