xref: /openbsd-src/regress/usr.sbin/syslogd/args-selector-syslog.pl (revision a77c6a27ba7d02f3b26a820c662c515d14028c39)
1# The client connects with TCP.
2# The syslogd writes local messages into multiple files depending on priority.
3# The syslogd writes it into a file and through a pipe.
4# The syslogd passes it via UDP to the loghost.
5# The server receives the message on its UDP socket.
6# Find the message in client, file, pipe, syslogd, server log.
7# Check that local syslog messages end up the correct priority file.
8
9use strict;
10use warnings;
11use Socket;
12use Sys::Syslog;
13
14my %selector2messages = (
15    "syslog.*"       =>
16	[qw{ start .*accepted .*close .*accepted .*peer exiting.* }],
17    "syslog.debug"   =>
18	[qw{ start .*accepted .*close .*accepted .*peer exiting.* }],
19    "syslog.info"    => [qw{ start .*peer exiting.* }],
20    "syslog.notice"  => [qw{ .*peer exiting.* }],
21    "syslog.warning" => [qw{ exiting.* }],
22    "syslog.err"     => [qw{ exiting.* }],
23    "syslog.crit"    => [],
24    "syslog.alert"   => [],
25    "syslog.emerg"   => [],
26    "syslog.none"    => [],
27);
28
29our %args = (
30    client => {
31	connect => { domain => AF_INET, proto => "tcp", addr => "127.0.0.1",
32	    port => 514 },
33	redo => 2,
34	func => sub {
35	    my $self = shift;
36	    $self->{redo}--;
37	    if ($self->{redo}) {
38		write_message($self, get_testlog());
39		IO::Handle::flush(\*STDOUT);
40		${$self->{syslogd}}->loggrep(get_testgrep(), 2);
41	    } else {
42		write_message($self, get_testlog());
43		IO::Handle::flush(\*STDOUT);
44		${$self->{syslogd}}->loggrep(get_testgrep(), 2, 2);
45		setsockopt(STDOUT, SOL_SOCKET, SO_LINGER, pack('ii', 1, 0))
46		    or die ref($self), " set socket linger failed: $!";
47		write_shutdown($self);
48	    }
49	},
50    },
51    syslogd => {
52	options => ["-T", "127.0.0.1:514"],
53	conf => selector2config(%selector2messages),
54    },
55    multifile => [
56	(map { { loggrep => $_ } } (selector2loggrep(%selector2messages))),
57    ],
58);
59
601;
61