16 Jan 2010

Dovecot 1.2 upgrade changes deliver path

After upgrading Dovecot from 1.0 to 1.2, I just spent the last hour trying to get the sieve plugin working again (after the rewrite from cmusieve). When deliver invoked sieve, the latter would die with the following error:

/usr/lib64/dovecot/lda/lib90_sieve_plugin.so: undefined symbol: tried_default_save

… which would cause deliver to reject the mail, in turn causing Postfix to delay delivery. After a lot of debugging and tail-chasing, I found that Postfix was set to invoke deliver at:

/usr/libexec/dovecot/lda/deliver

which was the old Dovecot 1.0 path (on Gentoo, at least). Sometime between 1.0 and 1.2 they changed the path to drop the lda directory:

/usr/libexec/dovecot/deliver

The problem is, the original file was left sitting around by the ebuild, so Postfix was invoking an old deliver that was linked against an old version of sieve. Moral of the story: don’t trust that the package maintainers will do the right thing (such as removing binaries that are not used anymore and linked against old versions of libraries) and don’t assume that they won’t be at fault!