xref: /openbsd-src/regress/usr.sbin/syslogd/logflush.c (revision b7041c0781c8668129da8084451ded41b0c43954)
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