--- report.c.orig Sun Oct 1 00:41:10 2000 +++ report.c Thu May 16 11:34:33 2002 @@ -45,6 +45,8 @@ #include #include +#include +#include #include #include #include @@ -70,6 +72,8 @@ #define PLURAL(n) ((n) == 1 || (n) == -1 ? "" : "s") +extern char *Watcher; + static int cdepth; /* number of outstanding children */ static char *fmtdate(time_t); @@ -240,7 +244,7 @@ register FILE *f; char tempfile[64], cpu[64], os[64]; char *fmt = "%20s: %s\n"; - char *watcher = WATCHER; + char *watcher = Watcher ? Watcher : WATCHER; char *watchee = WATCHEE; char *sendmail = PATH_SENDMAIL; char *unknown = ""; @@ -344,6 +348,25 @@ exit(1); } /* XXX Need to freopen()? */ + + /* + * Open /dev/null as stdout and stderr so that sendmail 8.12.1 (and + * above ?) won't complain about missing file descriptors. + */ + if ((fd = open(_PATH_DEVNULL, O_RDWR)) == -1) { + syslog(LOG_ERR, "Cannot open %s: %m", _PATH_DEVNULL); + exit(1); + } + if (dup2(fd, STDOUT_FILENO) == -1) { + syslog(LOG_ERR, "Cannot dup2 %s to stdout: %m", _PATH_DEVNULL); + exit(1); + } + if (dup2(fd, STDERR_FILENO) == -1) { + syslog(LOG_ERR, "Cannot dup2 %s to stderr: %m", _PATH_DEVNULL); + exit(1); + } + close(fd); + /* Always Deliver interactively (pause when child depth gets large) */ execl(sendmail, "sendmail", "-odi", watcher, NULL); syslog(LOG_ERR, "execl: %s: %m", sendmail);