Author: Christoph Schulz Date: To: exim-dev Subject: [exim-dev] Pipe transport and 64kB limit due to wrong (?) SIGPIPE
handling
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.