Hi,

Wladimir Mutel <m...@mwg.dp.ua> writes:
>       Finally, I dared to strace atd and its subprocesses, and found the
>       difference between sendmail run for root and non-root user.
>       Being run from atd, sendmail process does not have open stdout and
>       stderr file descriptors. And courier's sendmail, being run for ordinary
>       user, checks that (fcntl(..., F_GETFD)) and reopens them to /dev/null.
>       For root user, it does not check/reopen them, so FDs 1 and 2 get
>       reused for other file descriptors (probably, in dlopen, as a socket
>       to connect to nscd service, and so on), and certain hell ensues as a
>       result.

I reported this issue to the courier-mta maintainers, but it shouldn't
hurt to fix this in at as well.

Can you try the patch below?  A dsc and deb (for amd64) is available
from http://www.43-1.org/~ansgar/at/ as well.

Regards,
Ansgar
diff --git a/atd.c b/atd.c
index bf28102..ed52327 100644
--- a/atd.c
+++ b/atd.c
@@ -468,6 +468,18 @@ run_file(const char *filename, uid_t uid, gid_t gid)
     if (open(filename, O_RDONLY) != STDIN_FILENO)
 	perr("Open of jobfile failed");
 
+    /* some sendmail implementations are confused if stdout, stderr are
+     * not available, so let them point to /dev/null
+     */
+    if ((fd_in = open("/dev/null", O_WRONLY)) < 0)
+	perr("Could not open /dev/null.");
+    if (dup2(fd_in, STDOUT_FILENO) < 0)
+	perr("Could not use /dev/null as standard output.");
+    if (dup2(fd_in, STDERR_FILENO) < 0)
+	perr("Could not use /dev/null as standard error.");
+    if (fd_in != STDOUT_FILENO && fd_in != STDERR_FILENO)
+	close(fd_in);
+
     unlink(filename);
 
     /* The job is now finished.  We can delete its input file.
diff --git a/debian/changelog b/debian/changelog
index c003ee1..80fba2b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+at (3.1.11-1+ab1) UNRELEASED; urgency=low
+
+  * make stdout, stderr available to sendmail process (Closes: #316442)
+
+ -- Ansgar Burchardt <ans...@43-1.org>  Sun, 15 Nov 2009 20:36:44 +0900
+
 at (3.1.11-1) unstable; urgency=low
 
   * New "upstream" release:

Reply via email to