23 Jun 2012 09:30
Pipe transport and 64kB limit due to wrong (?) SIGPIPE handling
Christoph Schulz <develop <at> kristov.de>
2012-06-23 07:30:18 GMT
2012-06-23 07:30:18 GMT
Hello,
since exim 4.75, my pipe transport is not able to transfer more than
64kB of data. It is configured as follows:
e2s_transport:
driver = pipe
ignore_status = true
path = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin
command = /usr/bin/email2system $address_data
max_output = 50M
user = mail
group = mail
initgroups = true
home_directory = /var/spool/mail
In the shell script /usr/bin/email2system, I use "tee" to read the
data from standard input and to save it into a file ("tee" because I
also send it to a shell function for further processing). From exim
4.75 on, this file receives at most 65536 bytes.
I tracked down the problem to the following line in src/child.c,
introduced in exim 4.75 (line 343, line 341 in exim 4.80):
signal(SIGPIPE, SIG_DFL);
If I remove this line in current exim 4.80, everything works as
expected. So I think that enabling default handling for SIGPIPE is
wrong as it leads to data loss.
(Continue reading)
Regards,
Christoph
RSS Feed