diff --git a/usr.sbin/syslogd/syslogd.h b/usr.sbin/syslogd/syslogd.h --- a/usr.sbin/syslogd/syslogd.h +++ b/usr.sbin/syslogd/syslogd.h @@ -314,6 +314,7 @@ extern int MarkInterval; extern int MaxForwardLen; extern int family; +extern int kq; extern int logflags; extern int no_compress; extern int nulldesc; diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c --- a/usr.sbin/syslogd/syslogd.c +++ b/usr.sbin/syslogd/syslogd.c @@ -155,6 +155,7 @@ int MarkInterval = 20 * 60; /* interval between marks in seconds */ int MaxForwardLen = 1024; /* max length of forwared message */ int family = PF_UNSPEC; /* protocol family */ +int kq; /* kqueue descriptor */ int logflags = O_WRONLY | O_APPEND; /* flags used to open log files */ int no_compress; /* don't compress messages (1=pipes, 2=all) */ int nulldesc; /* /dev/null descriptor */ @@ -1306,7 +1307,7 @@ struct socklist *sl; sigset_t sigset = { }; pid_t ppid = -1, spid; - int ch, kq, error; + int ch, error; char *p; bool bflag = false, pflag = false, Sflag = false; diff --git a/usr.sbin/syslogd/syslogd_log.c b/usr.sbin/syslogd/syslogd_log.c --- a/usr.sbin/syslogd/syslogd_log.c +++ b/usr.sbin/syslogd/syslogd_log.c @@ -61,6 +61,7 @@ */ #include +#include #include #include #include @@ -119,6 +120,7 @@ static int p_open(const char *prog, int *rpd) { + struct kevent ev; int pfd[2], pd; pid_t pid; sigset_t sigset = { }; @@ -178,6 +180,11 @@ (int)pid); logerror(errmsg); } + EV_SET(&ev, pd, EVFILT_PROCDESC, EV_ADD, 0, 0, NULL); + if (kevent(kq, &ev, 1, NULL, 0, NULL) == -1) { + logerror("kqueue"); + exit(1); + } *rpd = pd; return (pfd[1]); }