summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>2014-07-14 04:02:33 +0000
committerderaadt <deraadt@openbsd.org>2014-07-14 04:02:33 +0000
commit920f5a61b9ccb37fcc307d69cc3b5a4def2f8f09 (patch)
tree03caa9fa4af543a4c1b23d0ba4d095ce5a37e69c
parentNow that we have sendsyslog(2), we can directly use it in the (diff)
downloadwireguard-openbsd-920f5a61b9ccb37fcc307d69cc3b5a4def2f8f09.tar.xz
wireguard-openbsd-920f5a61b9ccb37fcc307d69cc3b5a4def2f8f09.zip
Create a socketpair() and tie one end to /dev/klog using ioctl LIOCSFD.
This allows us to receive messages direct from programs using the fd-safe sendsyslog(2), aka. syslog_r(3). Thanks to guenther for this part of the solution. ok beck tedu miod guenther
-rw-r--r--usr.sbin/syslogd/syslogd.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c
index 165100ef9a8..9d50ff51dee 100644
--- a/usr.sbin/syslogd/syslogd.c
+++ b/usr.sbin/syslogd/syslogd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: syslogd.c,v 1.110 2014/02/04 23:28:05 bluhm Exp $ */
+/* $OpenBSD: syslogd.c,v 1.111 2014/07/14 04:02:33 deraadt Exp $ */
/*
* Copyright (c) 1983, 1988, 1993, 1994
@@ -286,7 +286,7 @@ main(int argc, char *argv[])
socklen_t len;
char *p, *line;
char resolve[MAXHOSTNAMELEN];
- int lockpipe[2] = { -1, -1}, nullfd;
+ int lockpipe[2] = { -1, -1}, pair[2], nullfd;
struct addrinfo hints, *res, *res0;
FILE *fp;
@@ -436,6 +436,14 @@ main(int argc, char *argv[])
pfd[PFD_UNIX_0 + i].events = POLLIN;
}
+ nfunix++;
+ if (socketpair(AF_UNIX, SOCK_DGRAM, PF_UNSPEC, pair) == -1)
+ die(0);
+ fd = pair[0];
+ double_rbuf(fd);
+ pfd[PFD_UNIX_0 + i].fd = fd;
+ pfd[PFD_UNIX_0 + i].events = POLLIN;
+
if (ctlsock_path != NULL) {
fd = unix_socket(ctlsock_path, SOCK_STREAM, 0600);
if (fd != -1) {
@@ -456,6 +464,10 @@ main(int argc, char *argv[])
pfd[PFD_KLOG].events = POLLIN;
}
+ if (ioctl(fd, LIOCSFD, &pair[1]) == -1)
+ dprintf("LIOCSFD errno %d\n", errno);
+ close(pair[1]);
+
dprintf("off & running....\n");
chdir("/");