1*b7041c07Sderaadt /* $OpenBSD: logflush.c,v 1.2 2021/10/24 21:24:21 deraadt Exp $ */
264a2a974Sbluhm
364a2a974Sbluhm /*
464a2a974Sbluhm * Copyright (c) 2021 Alexander Bluhm <bluhm@openbsd.org>
564a2a974Sbluhm *
664a2a974Sbluhm * Permission to use, copy, modify, and distribute this software for any
764a2a974Sbluhm * purpose with or without fee is hereby granted, provided that the above
864a2a974Sbluhm * copyright notice and this permission notice appear in all copies.
964a2a974Sbluhm *
1064a2a974Sbluhm * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1164a2a974Sbluhm * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1264a2a974Sbluhm * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1364a2a974Sbluhm * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1464a2a974Sbluhm * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1564a2a974Sbluhm * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1664a2a974Sbluhm * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1764a2a974Sbluhm */
1864a2a974Sbluhm
1964a2a974Sbluhm #include <sys/ioctl.h>
2064a2a974Sbluhm #include <sys/socket.h>
2164a2a974Sbluhm
2264a2a974Sbluhm #include <err.h>
2364a2a974Sbluhm #include <fcntl.h>
2464a2a974Sbluhm #include <paths.h>
2564a2a974Sbluhm #include <stdarg.h>
2664a2a974Sbluhm #include <stdio.h>
2764a2a974Sbluhm #include <stdlib.h>
2864a2a974Sbluhm #include <syslog.h>
2964a2a974Sbluhm #include <unistd.h>
3064a2a974Sbluhm
3164a2a974Sbluhm __dead void
usage()3264a2a974Sbluhm usage()
3364a2a974Sbluhm {
3464a2a974Sbluhm fprintf(stderr, "usage: %s\n", getprogname());
3564a2a974Sbluhm exit(2);
3664a2a974Sbluhm }
3764a2a974Sbluhm
3864a2a974Sbluhm int
main(int argc,char * argv[])3964a2a974Sbluhm main(int argc, char *argv[])
4064a2a974Sbluhm {
4164a2a974Sbluhm int pair[2], klog, val;
4264a2a974Sbluhm
4364a2a974Sbluhm if (argc != 1)
4464a2a974Sbluhm usage();
4564a2a974Sbluhm
4664a2a974Sbluhm if (socketpair(AF_UNIX, SOCK_DGRAM, PF_UNSPEC, pair) == -1)
4764a2a974Sbluhm err(1, "socketpair");
4864a2a974Sbluhm
4964a2a974Sbluhm val = 1<<20;
5064a2a974Sbluhm if (setsockopt(pair[0], SOL_SOCKET, SO_RCVBUF, &val, sizeof(val)) == -1)
5164a2a974Sbluhm err(1, "setsockopt SO_RCVBUF");
5264a2a974Sbluhm if (setsockopt(pair[1], SOL_SOCKET, SO_SNDBUF, &val, sizeof(val)) == -1)
5364a2a974Sbluhm err(1, "setsockopt SO_SNDBUF");
5464a2a974Sbluhm
55*b7041c07Sderaadt if ((klog = open(_PATH_KLOG, O_RDONLY)) == -1)
5664a2a974Sbluhm err(1, "open %s", _PATH_KLOG);
5764a2a974Sbluhm /* Use /dev/klog to register sendsyslog(2) receiver. */
5864a2a974Sbluhm if (ioctl(klog, LIOCSFD, &pair[1]) == -1)
5964a2a974Sbluhm err(1, "ioctl klog LIOCSFD sendsyslog");
6064a2a974Sbluhm close(pair[1]);
6164a2a974Sbluhm
6264a2a974Sbluhm /* Send message via libc, flushes log stash in kernel. */
6364a2a974Sbluhm openlog("syslogd-regress", LOG_PID, LOG_SYSLOG);
6464a2a974Sbluhm syslog(LOG_DEBUG, "logflush");
6564a2a974Sbluhm
6664a2a974Sbluhm return 0;
6764a2a974Sbluhm }
68