[Dovecot] SASL abort causes 5s delay, triggered by UW libc-client
Arne Nordmark
nordmark at mech.kth.se
Sat Mar 12 14:26:16 EET 2011
Since upgrding to Debian squeeze, the web mail system (Imp4/Horde3)
suffers delays every time a new IMAP connection is needed. Tracing the
authentication conversation, we find:
08:45:55.270609: 00000000 AUTHENTICATE GSSAPI
08:45:55.271277: +
08:45:55.271761: *
08:45:55.271782: 00000000 BAD Authentication aborted by client.
08:45:55.271815: 00000001 AUTHENTICATE PLAIN
08:46:00.271008: +
and the PLAIN login succeeds.
Imp4 is using php5-imap which is using libc-client, and the delays makes
the interface so slow to hardly usable.
For reasons best known to its authors, libc-client first initiates
GSSAPI authentication, then checks if there is a Kerberos ticket it can
use (there is none), then realizes its mistake and aborts SASL, and
tries PLAIN. At this point dovecot delays for 5000ms.
While not defending libs-client's odd behaviour of not checking for
tickets first, it has probably done so for a long time, and dovecot from
Debian lenny does not delay at this point.
I am lost as how to get around this without changing the code. The
"nodelay" parameter can not be used with PAM passdb, according to the
documentation.
I would be inclined to call always call client_auth_failed with
nodelay=TRUE in the SASL_SERVER_REPLY_AUTH_ABORTED case.
Arne Nordmark
Config:
# 1.2.15: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-5-amd64 x86_64 Debian 6.0 ext3
log_timestamp: %Y-%m-%d %H:%M:%S
protocols: imap
listen: *, [::]
ssl_ca_file: /etc/ssl/certs/mechca_cert.pem
ssl_cert_file: /etc/ssl/certs/ano4/ano4_crt.pem
ssl_key_file: /etc/ssl/certs/ano4/ano4_key.pem
login_dir: /var/run/dovecot/login
login_executable: /usr/lib/dovecot/imap-login
mail_privileged_group: mail
mail_location: maildir:/var/mail/maildir/%u
mbox_write_locks: fcntl dotlock
lda:
postmaster_address: postmaster at ano.mech.kth.se
mail_plugins: sieve
auth default:
mechanisms: plain gssapi
failure_delay: 0
debug: yes
passdb:
driver: pam
userdb:
driver: passwd
socket:
type: listen
master:
path: /var/run/dovecot/auth-master
mode: 384
user: root
plugin:
sieve: ~/.dovecot.sieve
sieve_dir: ~/sieve
More information about the dovecot
mailing list