Bug#989260: exim4-config: Default configuration enables sieve filters but cannot deliver from them
anomie at users.sourceforge.net
anomie at users.sourceforge.net
Sun May 30 16:51:58 BST 2021
Package: exim4-config
Version: 4.94.2-6
The default configuration provided by exim4-config allows for sieve
filters to be used in ~/.forward, but if a user attempts to configure
such a filter their mail delivery will most likely break.
More specifically, the keep action (including the default "keep" when
nothing matches the filter) will fail to deliver mail with an error
along the lines of
2021-05-30 15:17:10 1lnNBd-0000rr-U4 == save inbox <test at localhost> R=userforward T=address_file defer (-21): appendfile: file or directory name "inbox" is not absolute
Most uses of a fileinto action will do the same, unless the user
specifies an absolute path to the desired mailbox file rather than the
plain mailbox name that the sieve specification calls for.
This can be tested as follows, using `docker run --rm -it debian:sid`:
# Install exim
apt-get update
apt-get -y install dialog
apt-get -y install exim4
# Create test user and .forward file
useradd --create-home test
touch /home/test/.forward
chown test.test /home/test/.forward
chmod 0644 /home/test/.forward
# Test 1: Default "keep", should deliver to /var/mail/test but fails
echo '# Sieve filter' > /home/test/.forward
mail test at localhost <<<"Testing"
sleep 1
# Test 2: Relative folder name, should deliver to /home/test/mail/testing but fails
echo '# Sieve filter' > /home/test/.forward
echo 'require "fileinto";' >> /home/test/.forward
echo 'fileinto "testing";' >> /home/test/.forward
mail test at localhost <<<"Testing 2"
sleep 1
# Test 3: Absolute path, will deliver to /home/test/somefile
echo '# Sieve filter' > /home/test/.forward
echo 'require "fileinto";' >> /home/test/.forward
echo 'fileinto "/home/test/somefile";' >> /home/test/.forward
mail test at localhost <<<"Testing 3"
sleep 1
# Show logs
cat /var/log/exim4/mainlog
Adding the following to the "address_file" transport seems to fix it:
group = mail
file = ${if eq{$address_file}{inbox} \
{/var/mail/$local_part_data} \
{${if eq{${substr_0_1:$address_file}}{/} \
{$address_file} \
{$home/mail/$address_file} \
}} \
}
Or if you'd rather just disable sieve filters by default (so manual
configuration is needed to enable them), you might set
`forbid_sieve_filter` in the "userforward" router.
P.S. README.SIEVE.gz needs updating for the taint change in 4.94-18, it
uses $local_part rather than $local_part_data.
More information about the Pkg-exim4-maintainers
mailing list