aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/syslogd
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/syslogd')
-rw-r--r--usr.sbin/syslogd/syslog.conf.56
-rw-r--r--usr.sbin/syslogd/syslogd.c120
-rw-r--r--usr.sbin/syslogd/tests/syslogd_basic_format_test.sh28
-rw-r--r--usr.sbin/syslogd/tests/syslogd_format_test_common.sh4
-rw-r--r--usr.sbin/syslogd/tests/syslogd_forwarded_format_test.sh42
-rw-r--r--usr.sbin/syslogd/tests/syslogd_relayed_format_test.sh30
-rw-r--r--usr.sbin/syslogd/tests/syslogd_test.sh349
-rw-r--r--usr.sbin/syslogd/tests/syslogd_test_common.sh57
8 files changed, 341 insertions, 295 deletions
diff --git a/usr.sbin/syslogd/syslog.conf.5 b/usr.sbin/syslogd/syslog.conf.5
index 691f2cdd7062..f641aedee3e5 100644
--- a/usr.sbin/syslogd/syslog.conf.5
+++ b/usr.sbin/syslogd/syslog.conf.5
@@ -25,14 +25,12 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd December 10, 2020
+.Dd March 8, 2026
.Dt SYSLOG.CONF 5
.Os
.Sh NAME
.Nm syslog.conf
-.Nd
-.Xr syslogd 8
-configuration file
+.Nd syslogd system message log configuration file
.Sh DESCRIPTION
The
.Nm
diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c
index e06464c0e749..59cb56fd5970 100644
--- a/usr.sbin/syslogd/syslogd.c
+++ b/usr.sbin/syslogd/syslogd.c
@@ -370,43 +370,19 @@ static void increase_rcvbuf(int);
static void
close_filed(struct filed *f)
{
- switch (f->f_type) {
- case F_FORW:
- if (f->f_addr_fds != NULL) {
- free(f->f_addrs);
- for (size_t i = 0; i < f->f_num_addr_fds; ++i)
- close(f->f_addr_fds[i]);
- free(f->f_addr_fds);
- f->f_addr_fds = NULL;
- f->f_num_addr_fds = 0;
- }
- /* FALLTHROUGH */
- case F_FILE:
- case F_TTY:
- case F_CONSOLE:
- f->f_type = F_UNUSED;
- break;
- case F_PIPE:
- if (f->f_procdesc != -1) {
- /*
- * Close the procdesc, killing the underlying
- * process (if it is still alive).
- */
- (void)close(f->f_procdesc);
- f->f_procdesc = -1;
- /*
- * The pipe process is guaranteed to be dead now,
- * so remove it from the deadq.
- */
- if (f->f_dq != NULL) {
- deadq_remove(f->f_dq);
- f->f_dq = NULL;
- }
- }
- break;
- default:
- break;
+ if (f->f_type == F_FORW && f->f_addr_fds != NULL) {
+ free(f->f_addrs);
+ for (size_t i = 0; i < f->f_num_addr_fds; ++i)
+ close(f->f_addr_fds[i]);
+ free(f->f_addr_fds);
+ f->f_addr_fds = NULL;
+ f->f_num_addr_fds = 0;
+ } else if (f->f_type == F_PIPE && f->f_procdesc != -1) {
+ f->f_dq = deadq_enter(f->f_procdesc);
}
+
+ f->f_type = F_UNUSED;
+
if (f->f_file != -1)
(void)close(f->f_file);
f->f_file = -1;
@@ -805,23 +781,44 @@ main(int argc, char *argv[])
case EVFILT_SIGNAL:
switch (ev.ident) {
case SIGHUP:
+ /* Reload */
init(true);
break;
case SIGINT:
case SIGQUIT:
+ /* Ignore these unless -F and / or -d */
+ if (!Foreground && !Debug)
+ break;
+ /* FALLTHROUGH */
case SIGTERM:
- if (ev.ident == SIGTERM || Debug)
- die(ev.ident);
+ /* Terminate */
+ die(ev.ident);
break;
case SIGALRM:
+ /* Mark and flush */
markit();
break;
}
break;
case EVFILT_PROCDESC:
if ((ev.fflags & NOTE_EXIT) != 0) {
- log_deadchild(ev.ident, ev.data, ev.udata);
- close_filed(ev.udata);
+ struct filed *f = ev.udata;
+
+ log_deadchild(f->f_procdesc, ev.data, f);
+ (void)close(f->f_procdesc);
+
+ f->f_procdesc = -1;
+ if (f->f_dq != NULL) {
+ deadq_remove(f->f_dq);
+ f->f_dq = NULL;
+ }
+
+ /*
+ * If it is unused, then it was already closed.
+ * Free the file data in this case.
+ */
+ if (f->f_type == F_UNUSED)
+ free(f);
}
break;
}
@@ -2272,9 +2269,6 @@ die(int signo)
/* flush any pending output */
if (f->f_prevcount)
fprintlog_successive(f, 0);
- /* terminate existing pipe processes */
- if (f->f_type == F_PIPE)
- close_filed(f);
}
if (signo) {
dprintf("syslogd: exiting on signal %d\n", signo);
@@ -2517,23 +2511,7 @@ closelogfiles(void)
case F_FORW:
case F_CONSOLE:
case F_TTY:
- close_filed(f);
- break;
case F_PIPE:
- if (f->f_procdesc != -1) {
- struct kevent ev;
- /*
- * This filed is going to be freed.
- * Delete procdesc kevents that reference it.
- */
- EV_SET(&ev, f->f_procdesc, EVFILT_PROCDESC,
- EV_DELETE, NOTE_EXIT, 0, f);
- if (kevent(kq, &ev, 1, NULL, 0, NULL) == -1) {
- logerror("failed to delete procdesc"
- "kevent");
- exit(1);
- }
- }
close_filed(f);
break;
default:
@@ -2554,7 +2532,13 @@ closelogfiles(void)
}
free(f->f_prop_filter);
}
- free(f);
+
+ /*
+ * If a piped process is running, then defer the filed
+ * cleanup until it exits.
+ */
+ if (f->f_type != F_PIPE || f->f_procdesc == -1)
+ free(f);
}
}
@@ -2836,7 +2820,7 @@ prop_filter_compile(const char *cfilter)
pfilter.cmp_type = FILT_CMP_REGEX;
else if (strcasecmp(argv[1], "ereregex") == 0) {
pfilter.cmp_type = FILT_CMP_REGEX;
- pfilter.cmp_flags |= REG_EXTENDED;
+ pfilter.cmp_flags |= FILT_FLAG_EXTENDED;
} else {
dprintf("unknown cmp function");
goto error;
@@ -2954,8 +2938,9 @@ parse_selector(const char *p, struct filed *f)
pri = decode(buf, prioritynames);
if (pri < 0) {
- dprintf("unknown priority name \"%s\"", buf);
- return (NULL);
+ warnx("unknown priority name \"%s\", setting to 'info'",
+ buf);
+ pri = LOG_INFO;
}
}
if (!pri_cmp)
@@ -2977,11 +2962,12 @@ parse_selector(const char *p, struct filed *f)
} else {
i = decode(buf, facilitynames);
if (i < 0) {
- dprintf("unknown facility name \"%s\"", buf);
- return (NULL);
+ warnx("unknown facility name \"%s\", ignoring",
+ buf);
+ } else {
+ f->f_pmask[i >> 3] = pri;
+ f->f_pcmp[i >> 3] = pri_cmp;
}
- f->f_pmask[i >> 3] = pri;
- f->f_pcmp[i >> 3] = pri_cmp;
}
while (*p == ',' || *p == ' ')
p++;
diff --git a/usr.sbin/syslogd/tests/syslogd_basic_format_test.sh b/usr.sbin/syslogd/tests/syslogd_basic_format_test.sh
index 09477a568ba8..219c3e045676 100644
--- a/usr.sbin/syslogd/tests/syslogd_basic_format_test.sh
+++ b/usr.sbin/syslogd/tests/syslogd_basic_format_test.sh
@@ -11,9 +11,8 @@
setup_basic_format_test()
{
local format="$1"
- local logfile="$2"
- printf "user.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_start \
-O "${format}" \
@@ -33,11 +32,10 @@ O_flag_bsd_basic_head()
O_flag_bsd_basic_body()
{
local format="bsd"
- local logfile="${PWD}/O_flag_${format}_basic.log"
- setup_basic_format_test "${format}" "${logfile}"
+ setup_basic_format_test "${format}"
- atf_check -s exit:0 -o match:"${REGEX_RFC3164_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC3164_LOGFILE}"
}
O_flag_bsd_basic_cleanup()
{
@@ -52,11 +50,10 @@ O_flag_rfc3164_basic_head()
O_flag_rfc3164_basic_body()
{
local format="rfc3164"
- local logfile="${PWD}/O_flag_${format}_basic.log"
- setup_basic_format_test "${format}" "${logfile}"
+ setup_basic_format_test "${format}"
- atf_check -s exit:0 -o match:"${REGEX_RFC3164_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC3164_LOGFILE}"
}
O_flag_rfc3164_basic_cleanup()
{
@@ -71,11 +68,10 @@ O_flag_rfc3164strict_basic_head()
O_flag_rfc3164strict_basic_body()
{
local format="rfc3164-strict"
- local logfile="${PWD}/O_flag_${format}_basic.log"
- setup_basic_format_test "${format}" "${logfile}"
+ setup_basic_format_test "${format}"
- atf_check -s exit:0 -o match:"${REGEX_RFC3164_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC3164_LOGFILE}"
}
O_flag_rfc3164strict_basic_cleanup()
{
@@ -90,11 +86,10 @@ O_flag_syslog_basic_head()
O_flag_syslog_basic_body()
{
local format="syslog"
- local logfile="${PWD}/O_flag_${format}_basic.log"
- setup_basic_format_test "${format}" "${logfile}"
+ setup_basic_format_test "${format}"
- atf_check -s exit:0 -o match:"${REGEX_RFC5424_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC5424_LOGFILE}"
}
O_flag_syslog_basic_cleanup()
{
@@ -109,11 +104,10 @@ O_flag_rfc5424_basic_head()
O_flag_rfc5424_basic_body()
{
local format="rfc5424"
- local logfile="${PWD}/O_flag_${format}_basic.log"
- setup_basic_format_test "${format}" "${logfile}"
+ setup_basic_format_test "${format}"
- atf_check -s exit:0 -o match:"${REGEX_RFC5424_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC5424_LOGFILE}"
}
O_flag_rfc5424_basic_cleanup()
{
diff --git a/usr.sbin/syslogd/tests/syslogd_format_test_common.sh b/usr.sbin/syslogd/tests/syslogd_format_test_common.sh
index 995bb048881b..ea32561ccbb3 100644
--- a/usr.sbin/syslogd/tests/syslogd_format_test_common.sh
+++ b/usr.sbin/syslogd/tests/syslogd_format_test_common.sh
@@ -48,14 +48,12 @@ local_privsocket_filename()
confirm_INET_support_or_skip()
{
- if ! sysctl kern.conftxt | grep -qw INET; then
+ test "$(sysctl -inq kern.features.inet)" = 1 || \
atf_skip "Running kernel does not support INET"
- fi
}
set_common_atf_metadata()
{
- atf_set timeout 5
atf_set require.user root
}
diff --git a/usr.sbin/syslogd/tests/syslogd_forwarded_format_test.sh b/usr.sbin/syslogd/tests/syslogd_forwarded_format_test.sh
index b17627a935c8..db607a33d093 100644
--- a/usr.sbin/syslogd/tests/syslogd_forwarded_format_test.sh
+++ b/usr.sbin/syslogd/tests/syslogd_forwarded_format_test.sh
@@ -14,8 +14,7 @@ SERVER_2_PORT="5141"
setup_forwarded_format_test()
{
local format="$1"
- local logfile="$2"
- local pcapfile="$3"
+ local pcapfile="$2"
confirm_INET_support_or_skip
@@ -25,7 +24,7 @@ setup_forwarded_format_test()
tcpdump_pid="$!"
# Start first server: receive UDP, log to file
- printf "user.debug\t${logfile}\n" > "$(config_filename ${SERVER_1_PORT})"
+ printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "$(config_filename ${SERVER_1_PORT})"
syslogd_start_on_port "${SERVER_1_PORT}" -O "${format}"
# Start second server: send UDP, log to first server
@@ -49,14 +48,13 @@ O_flag_bsd_forwarded_head()
O_flag_bsd_forwarded_body()
{
local format="bsd"
- local logfile="${PWD}/${format}_forwarded.log"
local pcapfile="${PWD}/${format}_forwarded.pcap"
- setup_forwarded_format_test "${format}" "${logfile}" "${pcapfile}"
+ setup_forwarded_format_test "${format}" "${pcapfile}"
atf_expect_fail \
"PR 220246 syslog -O bsd deviates from RFC 3164 recommendations"
- atf_check -s exit:0 -o match:"${REGEX_RFC3164_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC3164_LOGFILE}"
atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC3164_PAYLOAD}" \
tcpdump -A -r "${pcapfile}"
}
@@ -76,14 +74,13 @@ O_flag_rfc3164_forwarded_head()
O_flag_rfc3164_forwarded_body()
{
local format="rfc3164"
- local logfile="${PWD}/${format}_forwarded.log"
local pcapfile="${PWD}/${format}_forwarded.pcap"
- setup_forwarded_format_test "${format}" "${logfile}" "${pcapfile}"
+ setup_forwarded_format_test "${format}" "${pcapfile}"
atf_expect_fail \
"PR 220246 syslog -O rfc3164 deviates from RFC 3164 recommendations"
- atf_check -s exit:0 -o match:"${REGEX_RFC3164_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC3164_LOGFILE}"
atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC3164_PAYLOAD}" \
tcpdump -A -r "${pcapfile}"
}
@@ -103,12 +100,11 @@ O_flag_rfc3164strict_forwarded_head()
O_flag_rfc3164strict_forwarded_body()
{
local format="rfc3164-strict"
- local logfile="${PWD}/${format}_forwarded.log"
local pcapfile="${PWD}/${format}_forwarded.pcap"
- setup_forwarded_format_test "${format}" "${logfile}" "${pcapfile}"
+ setup_forwarded_format_test "${format}" "${pcapfile}"
- atf_check -s exit:0 -o match:"${REGEX_RFC3164_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC3164_LOGFILE}"
atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC3164_PAYLOAD}" \
tcpdump -A -r "${pcapfile}"
}
@@ -128,12 +124,11 @@ O_flag_syslog_forwarded_head()
O_flag_syslog_forwarded_body()
{
local format="syslog"
- local logfile="${PWD}/${format}_forwarded.log"
local pcapfile="${PWD}/${format}_forwarded.pcap"
- setup_forwarded_format_test "${format}" "${logfile}" "${pcapfile}"
+ setup_forwarded_format_test "${format}" "${pcapfile}"
- atf_check -s exit:0 -o match:"${REGEX_RFC5424_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC5424_LOGFILE}"
atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC5424_PAYLOAD}" \
tcpdump -A -r "${pcapfile}"
}
@@ -153,12 +148,11 @@ O_flag_rfc5424_forwarded_head()
O_flag_rfc5424_forwarded_body()
{
local format="rfc5424"
- local logfile="${PWD}/${format}_forwarded.log"
local pcapfile="${PWD}/${format}_forwarded.pcap"
- setup_forwarded_format_test "${format}" "${logfile}" "${pcapfile}"
+ setup_forwarded_format_test "${format}" "${pcapfile}"
- atf_check -s exit:0 -o match:"${REGEX_RFC5424_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC5424_LOGFILE}"
atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC5424_PAYLOAD}" \
tcpdump -A -r "${pcapfile}"
}
@@ -180,13 +174,11 @@ O_flag_bsd_forwarded_legacy_head()
O_flag_bsd_forwarded_legacy_body()
{
local format="bsd"
- local logfile="${PWD}/${format}_forwarded_legacy.log"
local pcapfile="${PWD}/${format}_forwarded.pcap"
- setup_forwarded_format_test "${format}" "${logfile}" "${pcapfile}"
+ setup_forwarded_format_test "${format}" "${pcapfile}"
- atf_check -s exit:0 -o match:"${REGEX_RFC3164_LEGACY_LOGFILE}" \
- cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC3164_LEGACY_LOGFILE}"
atf_check -s exit:0 -e ignore \
-o match:"${REGEX_RFC3164_LEGACY_PAYLOAD}" \
tcpdump -A -r "${pcapfile}"
@@ -208,13 +200,11 @@ O_flag_rfc3164_forwarded_legacy_head()
O_flag_rfc3164_forwarded_legacy_body()
{
local format="rfc3164"
- local logfile="${PWD}/${format}_forwarded_legacy.log"
local pcapfile="${PWD}/${format}_forwarded.pcap"
- setup_forwarded_format_test "${format}" "${logfile}" "${pcapfile}"
+ setup_forwarded_format_test "${format}" "${pcapfile}"
- atf_check -s exit:0 -o match:"${REGEX_RFC3164_LEGACY_LOGFILE}" \
- cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC3164_LEGACY_LOGFILE}"
atf_check -s exit:0 -e ignore \
-o match:"${REGEX_RFC3164_LEGACY_PAYLOAD}" \
tcpdump -A -r "${pcapfile}"
diff --git a/usr.sbin/syslogd/tests/syslogd_relayed_format_test.sh b/usr.sbin/syslogd/tests/syslogd_relayed_format_test.sh
index d3e0db4e0f1c..6a5aeba77a25 100644
--- a/usr.sbin/syslogd/tests/syslogd_relayed_format_test.sh
+++ b/usr.sbin/syslogd/tests/syslogd_relayed_format_test.sh
@@ -15,8 +15,7 @@ readonly SERVER_3_PORT="5142"
setup_relayed_format_test()
{
local format="$1"
- local logfile="$2"
- local pcapfile="$3"
+ local pcapfile="$2"
confirm_INET_support_or_skip
@@ -26,7 +25,7 @@ setup_relayed_format_test()
tcpdump_pid="$!"
# Start first (central) server: receive UDP, log to file
- printf "user.debug\t${logfile}\n" \
+ printf "user.debug\t${SYSLOGD_LOGFILE}\n" \
> "$(config_filename ${SERVER_1_PORT})"
syslogd_start_on_port "${SERVER_1_PORT}" -O "${format}"
@@ -56,13 +55,12 @@ O_flag_bsd_relayed_head()
O_flag_bsd_relayed_body()
{
local format="bsd"
- local logfile="${PWD}/${format}_relayed.log"
local pcapfile="${PWD}/${format}_relayed.pcap"
- setup_relayed_format_test "${format}" "${logfile}" "${pcapfile}"
+ setup_relayed_format_test "${format}" "${pcapfile}"
atf_expect_fail "PR 220246 issue with the legacy bsd format"
- atf_check -s exit:0 -o match:"${REGEX_RFC3164_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC3164_LOGFILE}"
atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC3164_PAYLOAD}" \
tcpdump -A -r "${pcapfile}"
}
@@ -83,13 +81,12 @@ O_flag_rfc3164_relayed_head()
O_flag_rfc3164_relayed_body()
{
local format="rfc3164"
- local logfile="${PWD}/${format}_relayed.log"
local pcapfile="${PWD}/${format}_relayed.pcap"
- setup_relayed_format_test "${format}" "${logfile}" "${pcapfile}"
+ setup_relayed_format_test "${format}" "${pcapfile}"
atf_expect_fail "PR 220246 issue with the legacy rfc3164 format"
- atf_check -s exit:0 -o match:"${REGEX_RFC3164_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC3164_LOGFILE}"
atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC3164_PAYLOAD}" \
tcpdump -A -r "${pcapfile}"
}
@@ -110,12 +107,11 @@ O_flag_rfc3164strict_relayed_head()
O_flag_rfc3164strict_relayed_body()
{
local format="rfc3164-strict"
- local logfile="${PWD}/${format}_relayed.log"
local pcapfile="${PWD}/${format}_relayed.pcap"
- setup_relayed_format_test "${format}" "${logfile}" "${pcapfile}"
+ setup_relayed_format_test "${format}" "${pcapfile}"
- atf_check -s exit:0 -o match:"${REGEX_RFC3164_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC3164_LOGFILE}"
atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC3164_PAYLOAD}" \
tcpdump -A -r "${pcapfile}"
}
@@ -136,12 +132,11 @@ O_flag_syslog_relayed_head()
O_flag_syslog_relayed_body()
{
local format="syslog"
- local logfile="${PWD}/${format}_relayed.log"
local pcapfile="${PWD}/${format}_relayed.pcap"
- setup_relayed_format_test "${format}" "${logfile}" "${pcapfile}"
+ setup_relayed_format_test "${format}" "${pcapfile}"
- atf_check -s exit:0 -o match:"${REGEX_RFC5424_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC5424_LOGFILE}"
atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC5424_PAYLOAD}" \
tcpdump -A -r "${pcapfile}"
}
@@ -162,12 +157,11 @@ O_flag_rfc5424_relayed_head()
O_flag_rfc5424_relayed_body()
{
local format="rfc5424"
- local logfile="${PWD}/${format}_relayed.log"
local pcapfile="${PWD}/${format}_relayed.pcap"
- setup_relayed_format_test "${format}" "${logfile}" "${pcapfile}"
+ setup_relayed_format_test "${format}" "${pcapfile}"
- atf_check -s exit:0 -o match:"${REGEX_RFC5424_LOGFILE}" cat "${logfile}"
+ syslogd_check_log "${REGEX_RFC5424_LOGFILE}"
atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC5424_PAYLOAD}" \
tcpdump -A -r "${pcapfile}"
}
diff --git a/usr.sbin/syslogd/tests/syslogd_test.sh b/usr.sbin/syslogd/tests/syslogd_test.sh
index 2d093dd80c35..253a26258959 100644
--- a/usr.sbin/syslogd/tests/syslogd_test.sh
+++ b/usr.sbin/syslogd/tests/syslogd_test.sh
@@ -23,15 +23,12 @@ unix_head()
}
unix_body()
{
- local logfile="${PWD}/unix.log"
-
- printf "user.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_start
syslogd_log -p user.debug -t unix -h "${SYSLOGD_LOCAL_SOCKET}" \
"hello, world (unix)"
- atf_check -s exit:0 -o match:"unix: hello, world \(unix\)" \
- tail -n 1 "${logfile}"
+ syslogd_check_log "unix: hello, world \(unix\)"
}
unix_cleanup()
{
@@ -45,19 +42,16 @@ inet_head()
}
inet_body()
{
- local logfile="${PWD}/inet.log"
-
[ "$(sysctl -n kern.features.inet)" != "1" ] &&
atf_skip "Kernel does not support INET"
- printf "user.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_start
# We have INET transport; make sure we can use it.
syslogd_log -4 -p user.debug -t inet -h 127.0.0.1 -P "${SYSLOGD_UDP_PORT}" \
"hello, world (v4)"
- atf_check -s exit:0 -o match:"inet: hello, world \(v4\)" \
- tail -n 1 "${logfile}"
+ syslogd_check_log "inet: hello, world \(v4\)"
}
inet_cleanup()
{
@@ -71,19 +65,16 @@ inet6_head()
}
inet6_body()
{
- local logfile="${PWD}/inet6.log"
-
[ "$(sysctl -n kern.features.inet6)" != "1" ] &&
atf_skip "Kernel does not support INET6"
- printf "user.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_start
# We have INET6 transport; make sure we can use it.
syslogd_log -6 -p user.debug -t unix -h ::1 -P "${SYSLOGD_UDP_PORT}" \
"hello, world (v6)"
- atf_check -s exit:0 -o match:"unix: hello, world \(v6\)" \
- tail -n 1 "${logfile}"
+ syslogd_check_log "unix: hello, world \(v6\)"
}
inet6_cleanup()
{
@@ -97,25 +88,24 @@ reload_head()
}
reload_body()
{
- logfile="${PWD}/reload.log"
- printf "user.debug\t/${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_start
syslogd_log -p user.debug -t reload -h "${SYSLOGD_LOCAL_SOCKET}" \
"pre-reload"
- atf_check -s exit:0 -o match:"reload: pre-reload" tail -n 1 "${logfile}"
+ syslogd_check_log "reload: pre-reload"
# Override the old rule.
- truncate -s 0 "${logfile}"
- printf "news.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "news.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_reload
syslogd_log -p user.debug -t reload -h "${SYSLOGD_LOCAL_SOCKET}" \
"post-reload user"
syslogd_log -p news.debug -t reload -h "${SYSLOGD_LOCAL_SOCKET}" \
"post-reload news"
- atf_check -s exit:0 -o not-match:"reload: post-reload user" cat ${logfile}
- atf_check -s exit:0 -o match:"reload: post-reload news" cat ${logfile}
+ sleep 0.5
+ syslogd_check_log_nopoll "reload: post-reload news"
+ syslogd_check_log_nomatch "reload: post-reload user"
}
reload_cleanup()
{
@@ -129,30 +119,36 @@ prog_filter_head()
}
prog_filter_body()
{
- logfile="${PWD}/prog_filter.log"
- printf "!prog1,prog2\nuser.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "!prog1,prog2\nuser.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_start
- for i in 1 2 3; do
- syslogd_log -p user.debug -t "prog${i}" -h "${SYSLOGD_LOCAL_SOCKET}" \
- "hello this is prog${i}"
- done
- atf_check -s exit:0 -o match:"prog1: hello this is prog1" cat "${logfile}"
- atf_check -s exit:0 -o match:"prog2: hello this is prog2" cat "${logfile}"
- atf_check -s exit:0 -o not-match:"prog3: hello this is prog3" cat "${logfile}"
+ syslogd_log -p user.debug -t "prog1" -h "${SYSLOGD_LOCAL_SOCKET}" \
+ "hello this is prog1"
+ syslogd_check_log "prog1: hello this is prog1"
+
+ syslogd_log -p user.debug -t "prog2" -h "${SYSLOGD_LOCAL_SOCKET}" \
+ "hello this is prog2"
+ syslogd_check_log "prog2: hello this is prog2"
+
+ syslogd_log -p user.debug -t "prog3" -h "${SYSLOGD_LOCAL_SOCKET}" \
+ "hello this is prog3"
+ syslogd_check_log_nomatch "prog3: hello this is prog3"
# Override the old rule.
- truncate -s 0 ${logfile}
- printf "!-prog1,prog2\nuser.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "!-prog1,prog2\nuser.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_reload
- for i in 1 2 3; do
- syslogd_log -p user.debug -t "prog${i}" -h "${SYSLOGD_LOCAL_SOCKET}" \
- "hello this is prog${i}"
- done
- atf_check -s exit:0 -o not-match:"prog1: hello this is prog1" cat "${logfile}"
- atf_check -s exit:0 -o not-match:"prog2: hello this is prog2" cat "${logfile}"
- atf_check -s exit:0 -o match:"prog3: hello this is prog3" cat "${logfile}"
+ syslogd_log -p user.debug -t "prog1" -h "${SYSLOGD_LOCAL_SOCKET}" \
+ "hello this is prog1"
+ syslogd_check_log_nomatch "prog1: hello this is prog1"
+
+ syslogd_log -p user.debug -t "prog2" -h "${SYSLOGD_LOCAL_SOCKET}" \
+ "hello this is prog2"
+ syslogd_check_log_nomatch "prog2: hello this is prog2"
+
+ syslogd_log -p user.debug -t "prog3" -h "${SYSLOGD_LOCAL_SOCKET}" \
+ "hello this is prog3"
+ syslogd_check_log "prog3: hello this is prog3"
}
prog_filter_cleanup()
{
@@ -166,30 +162,32 @@ host_filter_head()
}
host_filter_body()
{
- logfile="${PWD}/host_filter.log"
- printf "+host1,host2\nuser.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "+host1,host2\nuser.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_start
- for i in 1 2 3; do
- syslogd_log -p user.debug -t "host${i}" -H "host${i}" \
- -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host${i}"
- done
- atf_check -s exit:0 -o match:"host1: hello this is host1" cat "${logfile}"
- atf_check -s exit:0 -o match:"host2: hello this is host2" cat "${logfile}"
- atf_check -s exit:0 -o not-match:"host3: hello this is host3" cat "${logfile}"
+ syslogd_log -p user.debug -t "host1" -H "host1" \
+ -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host1"
+ syslogd_check_log "host1: hello this is host1"
+ syslogd_log -p user.debug -t "host2" -H "host2" \
+ -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host2"
+ syslogd_check_log "host2: hello this is host2"
+ syslogd_log -p user.debug -t "host3" -H "host3" \
+ -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host3"
+ syslogd_check_log_nomatch "host3: hello this is host3"
# Override the old rule.
- truncate -s 0 ${logfile}
- printf "\-host1,host2\nuser.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "\-host1,host2\nuser.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_reload
- for i in 1 2 3; do
- syslogd_log -p user.debug -t "host${i}" -H "host${i}" \
- -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host${i}"
- done
- atf_check -s exit:0 -o not-match:"host1: hello this is host1" cat "${logfile}"
- atf_check -s exit:0 -o not-match:"host2: hello this is host2" cat "${logfile}"
- atf_check -s exit:0 -o match:"host3: hello this is host3" cat "${logfile}"
+ syslogd_log -p user.debug -t "host1" -H "host1" \
+ -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host1"
+ syslogd_check_log_nomatch "host1: hello this is host1"
+ syslogd_log -p user.debug -t "host2" -H "host2" \
+ -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host2"
+ syslogd_check_log_nomatch "host2: hello this is host2"
+ syslogd_log -p user.debug -t "host3" -H "host3" \
+ -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host3"
+ syslogd_check_log "host3: hello this is host3"
}
host_filter_cleanup()
{
@@ -203,47 +201,65 @@ prop_filter_head()
}
prop_filter_body()
{
- logfile="${PWD}/prop_filter.log"
- printf ":msg,contains,\"FreeBSD\"\nuser.debug\t${logfile}\n" \
+ printf ":msg,contains,\"FreeBSD\"\nuser.debug\t${SYSLOGD_LOGFILE}\n" \
> "${SYSLOGD_CONFIG}"
syslogd_start
syslogd_log -p user.debug -t "prop1" -h "${SYSLOGD_LOCAL_SOCKET}" "FreeBSD"
syslogd_log -p user.debug -t "prop2" -h "${SYSLOGD_LOCAL_SOCKET}" "freebsd"
- atf_check -s exit:0 -o match:"prop1: FreeBSD" cat "${logfile}"
- atf_check -s exit:0 -o not-match:"prop2: freebsd" cat "${logfile}"
+ syslogd_check_log "prop1: FreeBSD"
+ syslogd_check_log_nomatch "prop2: freebsd"
- truncate -s 0 ${logfile}
- printf ":msg,!contains,\"FreeBSD\"\nuser.debug\t${logfile}\n" \
+ printf ":msg,!contains,\"FreeBSD\"\nuser.debug\t${SYSLOGD_LOGFILE}\n" \
> "${SYSLOGD_CONFIG}"
syslogd_reload
syslogd_log -p user.debug -t "prop1" -h "${SYSLOGD_LOCAL_SOCKET}" "FreeBSD"
syslogd_log -p user.debug -t "prop2" -h "${SYSLOGD_LOCAL_SOCKET}" "freebsd"
- atf_check -s exit:0 -o not-match:"prop1: FreeBSD" cat "${logfile}"
- atf_check -s exit:0 -o match:"prop2: freebsd" cat "${logfile}"
+ syslogd_check_log_nomatch "prop1: FreeBSD"
+ syslogd_check_log "prop2: freebsd"
- truncate -s 0 ${logfile}
- printf ":msg,icase_contains,\"FreeBSD\"\nuser.debug\t${logfile}\n" \
+ printf ":msg,icase_contains,\"FreeBSD\"\nuser.debug\t${SYSLOGD_LOGFILE}\n" \
> "${SYSLOGD_CONFIG}"
syslogd_reload
syslogd_log -p user.debug -t "prop1" -h "${SYSLOGD_LOCAL_SOCKET}" "FreeBSD"
+ syslogd_check_log "prop1: FreeBSD"
syslogd_log -p user.debug -t "prop2" -h "${SYSLOGD_LOCAL_SOCKET}" "freebsd"
- atf_check -s exit:0 -o match:"prop1: FreeBSD" cat "${logfile}"
- atf_check -s exit:0 -o match:"prop2: freebsd" cat "${logfile}"
+ syslogd_check_log "prop2: freebsd"
- truncate -s 0 ${logfile}
- printf ":msg,!icase_contains,\"FreeBSD\"\nuser.debug\t${logfile}\n" \
+ printf ":msg,!icase_contains,\"FreeBSD\"\nuser.debug\t${SYSLOGD_LOGFILE}\n" \
> "${SYSLOGD_CONFIG}"
syslogd_reload
syslogd_log -p user.debug -t "prop1" -h "${SYSLOGD_LOCAL_SOCKET}" "FreeBSD"
syslogd_log -p user.debug -t "prop2" -h "${SYSLOGD_LOCAL_SOCKET}" "freebsd"
syslogd_log -p user.debug -t "prop3" -h "${SYSLOGD_LOCAL_SOCKET}" "Solaris"
- atf_check -s exit:0 -o not-match:"prop1: FreeBSD" cat "${logfile}"
- atf_check -s exit:0 -o not-match:"prop2: freebsd" cat "${logfile}"
- atf_check -s exit:0 -o match:"prop3: Solaris" cat "${logfile}"
+ syslogd_check_log_nomatch "prop1: FreeBSD"
+ syslogd_check_log_nomatch "prop2: freebsd"
+ syslogd_check_log "prop3: Solaris"
+
+ printf ":msg,ereregex,\"substring1|substring2\"\nuser.debug\t${SYSLOGD_LOGFILE}\n" \
+ > "${SYSLOGD_CONFIG}"
+ syslogd_reload
+
+ syslogd_log -p user.debug -t "prop1" -h "${SYSLOGD_LOCAL_SOCKET}" "substring1"
+ syslogd_check_log "prop1: substring1"
+ syslogd_log -p user.debug -t "prop2" -h "${SYSLOGD_LOCAL_SOCKET}" "substring2"
+ syslogd_check_log "prop2: substring2"
+ syslogd_log -p user.debug -t "prop3" -h "${SYSLOGD_LOCAL_SOCKET}" "substring3"
+ syslogd_check_log_nomatch "prop3: substring3"
+
+ printf ":msg,!ereregex,\"substring1|substring2\"\nuser.debug\t${SYSLOGD_LOGFILE}\n" \
+ > "${SYSLOGD_CONFIG}"
+ syslogd_reload
+
+ syslogd_log -p user.debug -t "prop1" -h "${SYSLOGD_LOCAL_SOCKET}" "substring1"
+ syslogd_check_log_nomatch "prop1: substring1"
+ syslogd_log -p user.debug -t "prop2" -h "${SYSLOGD_LOCAL_SOCKET}" "substring2"
+ syslogd_check_log_nomatch "prop2: substring2"
+ syslogd_log -p user.debug -t "prop3" -h "${SYSLOGD_LOCAL_SOCKET}" "substring3"
+ syslogd_check_log "prop3: substring3"
}
prop_filter_cleanup()
{
@@ -258,13 +274,12 @@ host_action_head()
host_action_body()
{
local addr="192.0.2.100"
- local logfile="${PWD}/host_action.log"
atf_check ifconfig lo1 create
atf_check ifconfig lo1 inet "${addr}/24"
atf_check ifconfig lo1 up
- printf "user.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_start -b "${addr}"
printf "user.debug\t@${addr}\n" > "${SYSLOGD_CONFIG}.2"
@@ -276,8 +291,7 @@ host_action_body()
syslogd_log -p user.debug -t "test" -h "${SYSLOGD_LOCAL_SOCKET}.2" \
"message from syslogd2"
- atf_check -s exit:0 -o match:"test: message from syslogd2" \
- cat "${logfile}"
+ syslogd_check_log "test: message from syslogd2"
}
host_action_cleanup()
{
@@ -296,23 +310,56 @@ pipe_action_head()
}
pipe_action_body()
{
- logfile="${PWD}/pipe_action.log"
printf "\"While I'm digging in the tunnel, the elves will often come to me \
- with solutions to my problem.\"\n-Saymore Crey" > ${logfile}
+ with solutions to my problem.\"\n-Saymore Crey" > testfile
printf "!pipe\nuser.debug\t| sed -i '' -e 's/Saymore Crey/Seymour Cray/g' \
- ${logfile}\n" > "${SYSLOGD_CONFIG}"
+ testfile\n" > "${SYSLOGD_CONFIG}"
syslogd_start
syslogd_log -p user.debug -t "pipe" -h "${SYSLOGD_LOCAL_SOCKET}" \
"fix spelling error"
- atf_check -s exit:0 -o match:"Seymour Cray" cat "${logfile}"
+ sleep 0.5
+ atf_check -o match:"Seymour Cray" cat testfile
}
pipe_action_cleanup()
{
syslogd_stop
}
+atf_test_case "pipe_action_reload" "cleanup"
+pipe_action_reload_head()
+{
+ atf_set descr "Pipe processes terminate gracefully on reload"
+}
+pipe_action_reload_body()
+{
+ local pipecmd="${PWD}/pipe_cmd.sh"
+
+ cat <<__EOF__ > "${pipecmd}"
+#!/bin/sh
+echo START > ${SYSLOGD_LOGFILE}
+while read msg; do
+ echo \${msg} >> ${SYSLOGD_LOGFILE}
+done
+echo END >> ${SYSLOGD_LOGFILE}
+exit 0
+__EOF__
+ chmod +x "${pipecmd}"
+
+ printf "!pipe\nuser.debug\t| %s\n" "${pipecmd}" > "${SYSLOGD_CONFIG}"
+ syslogd_start
+
+ syslogd_log -p user.debug -t "pipe" -h "${SYSLOGD_LOCAL_SOCKET}" "MSG"
+ atf_check pkill -HUP -F "${1:-${SYSLOGD_PIDFILE}}"
+ sleep 0.1
+ syslogd_check_log_nopoll "END"
+}
+pipe_action_reload_cleanup()
+{
+ syslogd_stop
+}
+
atf_test_case "jail_noinet" "cleanup"
jail_noinet_head()
{
@@ -321,17 +368,14 @@ jail_noinet_head()
}
jail_noinet_body()
{
- local logfile
-
syslogd_mkjail syslogd_noinet
- logfile="${PWD}/jail_noinet.log"
- printf "user.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_start -j syslogd_noinet -s -s
syslogd_log -p user.debug -t "test" -h "${SYSLOGD_LOCAL_SOCKET}" \
"hello, world"
- atf_check -s exit:0 -o match:"test: hello, world" cat "${logfile}"
+ syslogd_check_log "test: hello, world"
}
jail_noinet_cleanup()
{
@@ -358,10 +402,8 @@ allowed_peer_test_setup()
atf_check ifconfig ${epair}a vnet syslogd_allowed_peer
atf_check ifconfig ${epair}b vnet syslogd_client
atf_check jexec syslogd_allowed_peer ifconfig ${epair}a inet 169.254.0.1/16
- atf_check jexec syslogd_allowed_peer ifconfig lo0 inet 127.0.0.1/8
atf_check jexec syslogd_client ifconfig ${epair}b inet 169.254.0.2/16
atf_check jexec syslogd_client ifconfig ${epair}b alias 169.254.0.3/16
- atf_check jexec syslogd_client ifconfig lo0 inet 127.0.0.1/8
}
allowed_peer_test_cleanup()
@@ -377,37 +419,37 @@ allowed_peer_head()
}
allowed_peer_body()
{
- local logfile
-
allowed_peer_test_setup
- logfile="${PWD}/jail.log"
- printf "user.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_start -j syslogd_allowed_peer -b 169.254.0.1:514 -a '169.254.0.2/32'
# Make sure that a message from 169.254.0.2:514 is logged.
- atf_check jexec syslogd_client \
- logger -p user.debug -t test1 -h 169.254.0.1 -S 169.254.0.2:514 "hello, world"
- atf_check -o match:"test1: hello, world" cat "${logfile}"
+ syslogd_log_jail syslogd_client \
+ -p user.debug -t test1 -h 169.254.0.1 -S 169.254.0.2:514 "hello, world"
+ syslogd_check_log "test1: hello, world"
+
# ... but not a message from port 515.
- atf_check -o ignore jexec syslogd_client \
- logger -p user.debug -t test2 -h 169.254.0.1 -S 169.254.0.2:515 "hello, world"
- atf_check -o not-match:"test2: hello, world" cat "${logfile}"
- atf_check -o ignore jexec syslogd_client \
- logger -p user.debug -t test2 -h 169.254.0.1 -S 169.254.0.3:515 "hello, world"
- atf_check -o not-match:"test2: hello, world" cat "${logfile}"
+ syslogd_log_jail syslogd_client \
+ -p user.debug -t test2 -h 169.254.0.1 -S 169.254.0.2:515 "hello, world"
+ sleep 0.5
+ syslogd_check_log_nomatch "test2: hello, world"
+ syslogd_log_jail syslogd_client \
+ -p user.debug -t test2 -h 169.254.0.1 -S 169.254.0.3:515 "hello, world"
+ sleep 0.5
+ syslogd_check_log_nomatch "test2: hello, world"
syslogd_stop
# Now make sure that we can filter by port.
syslogd_start -j syslogd_allowed_peer -b 169.254.0.1:514 -a '169.254.0.2/32:515'
- atf_check jexec syslogd_client \
- logger -p user.debug -t test3 -h 169.254.0.1 -S 169.254.0.2:514 "hello, world"
- atf_check -o not-match:"test3: hello, world" cat "${logfile}"
- atf_check jexec syslogd_client \
- logger -p user.debug -t test4 -h 169.254.0.1 -S 169.254.0.2:515 "hello, world"
- atf_check -o match:"test4: hello, world" cat "${logfile}"
+ syslogd_log_jail syslogd_client \
+ -p user.debug -t test3 -h 169.254.0.1 -S 169.254.0.2:514 "hello, world"
+ syslogd_check_log_nomatch "test3: hello, world"
+ syslogd_log_jail syslogd_client \
+ -p user.debug -t test4 -h 169.254.0.1 -S 169.254.0.2:515 "hello, world"
+ syslogd_check_log "test4: hello, world"
syslogd_stop
}
@@ -424,28 +466,25 @@ allowed_peer_forwarding_head()
}
allowed_peer_forwarding_body()
{
- local logfile
-
allowed_peer_test_setup
printf "user.debug\t@169.254.0.1\n" > client_config
printf "mark.debug\t@169.254.0.1:515\n" >> client_config
syslogd_start -j syslogd_client -b 169.254.0.2:514 -f ${PWD}/client_config
- logfile="${PWD}/jail.log"
- printf "+169.254.0.2\nuser.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "+169.254.0.2\nuser.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_start -j syslogd_allowed_peer -P ${SYSLOGD_PIDFILE}.2 \
- -b 169.254.0.1:514 -a 169.254.0.2/32
+ -b 169.254.0.1:514 -a 169.254.0.2/32 -p ${PWD}/peer
# A message forwarded to 169.254.0.1:514 should be logged, but one
# forwarded to 169.254.0.1:515 should not.
- atf_check jexec syslogd_client \
- logger -h 169.254.0.2 -p user.debug -t test1 "hello, world"
- atf_check jexec syslogd_client \
- logger -h 169.254.0.2 -p mark.debug -t test2 "hello, world"
+ syslogd_log_jail syslogd_client \
+ -h 169.254.0.2 -p user.debug -t test1 "hello, world"
+ syslogd_log_jail syslogd_client \
+ -h 169.254.0.2 -p mark.debug -t test2 "hello, world"
- atf_check -o match:"test1: hello, world" cat "${logfile}"
- atf_check -o not-match:"test2: hello, world" cat "${logfile}"
+ syslogd_check_log "test1: hello, world"
+ syslogd_check_log_nomatch "test2: hello, world"
}
allowed_peer_forwarding_cleanup()
{
@@ -460,29 +499,28 @@ allowed_peer_wildcard_head()
}
allowed_peer_wildcard_body()
{
- local logfile
-
allowed_peer_test_setup
- logfile="${PWD}/jail.log"
- printf "user.debug\t${logfile}\n" > "${SYSLOGD_CONFIG}"
+ printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}"
syslogd_start -j syslogd_allowed_peer -b 169.254.0.1:514 -a '169.254.0.2/32:*'
# Make sure that a message from 169.254.0.2:514 is logged.
- atf_check jexec syslogd_client \
- logger -p user.debug -t test1 -h 169.254.0.1 -S 169.254.0.2:514 "hello, world"
- atf_check -o match:"test1: hello, world" cat "${logfile}"
+ syslogd_log_jail syslogd_client \
+ -p user.debug -t test1 -h 169.254.0.1 -S 169.254.0.2:514 "hello, world"
+ syslogd_check_log "test1: hello, world"
+
# ... as is a message from 169.254.0.2:515, allowed by the wildcard.
- atf_check jexec syslogd_client \
- logger -p user.debug -t test2 -h 169.254.0.1 -S 169.254.0.2:515 "hello, world"
- atf_check -o match:"test2: hello, world" cat "${logfile}"
+ syslogd_log_jail syslogd_client \
+ -p user.debug -t test2 -h 169.254.0.1 -S 169.254.0.2:515 "hello, world"
+ syslogd_check_log "test2: hello, world"
+
# ... but not a message from 169.254.0.3.
- atf_check -o ignore jexec syslogd_client \
- logger -p user.debug -t test3 -h 169.254.0.1 -S 169.254.0.3:514 "hello, world"
- atf_check -o not-match:"test3: hello, world" cat "${logfile}"
- atf_check -o ignore jexec syslogd_client \
- logger -p user.debug -t test3 -h 169.254.0.1 -S 169.254.0.3:515 "hello, world"
- atf_check -o not-match:"test3: hello, world" cat "${logfile}"
+ syslogd_log_jail syslogd_client \
+ -p user.debug -t test3 -h 169.254.0.1 -S 169.254.0.3:514 "hello, world"
+ syslogd_check_log_nomatch "test3: hello, world"
+ syslogd_log_jail syslogd_client \
+ -p user.debug -t test3 -h 169.254.0.1 -S 169.254.0.3:515 "hello, world"
+ syslogd_check_log_nomatch "test3: hello, world"
syslogd_stop
}
@@ -499,9 +537,9 @@ forward_head()
}
forward_body()
{
- syslogd_check_req epair
+ local epair
- local epair logfile
+ syslogd_check_req epair
atf_check -o save:epair ifconfig epair create
epair=$(cat epair)
@@ -511,12 +549,10 @@ forward_body()
atf_check ifconfig ${epair}a vnet syslogd_server
atf_check jexec syslogd_server ifconfig ${epair}a inet 169.254.0.1/16
atf_check jexec syslogd_server ifconfig ${epair}a alias 169.254.0.2/16
- atf_check jexec syslogd_server ifconfig lo0 inet 127.0.0.1/8
syslogd_mkjail syslogd_client vnet
atf_check ifconfig ${epair}b vnet syslogd_client
atf_check jexec syslogd_client ifconfig ${epair}b inet 169.254.0.3/16
- atf_check jexec syslogd_client ifconfig lo0 inet 127.0.0.1/8
cat <<__EOF__ > ./client_config
user.debug @169.254.0.1
@@ -524,26 +560,28 @@ mail.debug @169.254.0.2
ftp.debug @169.254.0.1
__EOF__
- logfile="${PWD}/jail.log"
cat <<__EOF__ > ./server_config
-user.debug ${logfile}
-mail.debug ${logfile}
-ftp.debug ${logfile}
+user.debug ${SYSLOGD_LOGFILE}
+mail.debug ${SYSLOGD_LOGFILE}
+ftp.debug ${SYSLOGD_LOGFILE}
__EOF__
- syslogd_start -j syslogd_server -f ${PWD}/server_config -b 169.254.0.1 -b 169.254.0.2
- syslogd_start -j syslogd_client -f ${PWD}/client_config -P ${SYSLOGD_PIDFILE}.2
+ syslogd_start -j syslogd_server -f ${PWD}/server_config \
+ -b 169.254.0.1 -b 169.254.0.2
+ syslogd_start -j syslogd_client -f ${PWD}/client_config \
+ -p ${PWD}/client -P ${SYSLOGD_PIDFILE}.2
+
+ syslogd_log_jail syslogd_client \
+ -h 169.254.0.3 -P $SYSLOGD_UDP_PORT -p user.debug -t test1 "hello, world"
+ syslogd_check_log "test1: hello, world"
- atf_check jexec syslogd_client \
- logger -h 169.254.0.3 -P $SYSLOGD_UDP_PORT -p user.debug -t test1 "hello, world"
- atf_check jexec syslogd_client \
- logger -h 169.254.0.3 -P $SYSLOGD_UDP_PORT -p mail.debug -t test2 "you've got mail"
- atf_check jexec syslogd_client \
- logger -h 169.254.0.3 -P $SYSLOGD_UDP_PORT -p ftp.debug -t test3 "transfer complete"
+ syslogd_log_jail syslogd_client \
+ -h 169.254.0.3 -P $SYSLOGD_UDP_PORT -p mail.debug -t test2 "you've got mail"
+ syslogd_check_log "test2: you've got mail"
- atf_check -o match:"test1: hello, world" cat "${logfile}"
- atf_check -o match:"test2: you've got mail" cat "${logfile}"
- atf_check -o match:"test3: transfer complete" cat "${logfile}"
+ syslogd_log_jail syslogd_client \
+ -h 169.254.0.3 -P $SYSLOGD_UDP_PORT -p ftp.debug -t test3 "transfer complete"
+ syslogd_check_log "test3: transfer complete"
}
forward_cleanup()
{
@@ -561,6 +599,7 @@ atf_init_test_cases()
atf_add_test_case "prop_filter"
atf_add_test_case "host_action"
atf_add_test_case "pipe_action"
+ atf_add_test_case "pipe_action_reload"
atf_add_test_case "jail_noinet"
atf_add_test_case "allowed_peer"
atf_add_test_case "allowed_peer_forwarding"
diff --git a/usr.sbin/syslogd/tests/syslogd_test_common.sh b/usr.sbin/syslogd/tests/syslogd_test_common.sh
index f06eb417d423..47fca62e66d0 100644
--- a/usr.sbin/syslogd/tests/syslogd_test_common.sh
+++ b/usr.sbin/syslogd/tests/syslogd_test_common.sh
@@ -15,6 +15,7 @@ readonly SYSLOGD_CONFIG="${PWD}/syslog.conf"
readonly SYSLOGD_LOCAL_SOCKET="${PWD}/log.sock"
readonly SYSLOGD_PIDFILE="${PWD}/syslogd.pid"
readonly SYSLOGD_LOCAL_PRIVSOCKET="${PWD}/logpriv.sock"
+readonly SYSLOGD_LOGFILE="${PWD}/log"
# Start a private syslogd instance.
syslogd_start()
@@ -22,9 +23,6 @@ syslogd_start()
local jail bind_arg conf_file pid_file socket privsocket
local opt next other_args
- # Setup loopback so we can deliver messages to ourself.
- atf_check ifconfig lo0 inet 127.0.0.1/16
-
OPTIND=1
while getopts ":b:f:j:P:p:S:" opt; do
case "${opt}" in
@@ -70,6 +68,16 @@ syslogd_start()
esac
done
+ socket=${socket:-${SYSLOGD_LOCAL_SOCKET}}
+ if [ -S "${socket}" ]; then
+ atf_fail "socket ${socket} already exists"
+ fi
+
+ # Setup loopback so we can deliver messages to ourself.
+ if [ $($jail sysctl -n security.jail.vnet) -ne 0 ]; then
+ atf_check $jail ifconfig lo0 inet 127.0.0.1/8
+ fi
+
$jail syslogd \
${bind_arg:--b :${SYSLOGD_UDP_PORT}} \
-C \
@@ -77,14 +85,19 @@ syslogd_start()
-f "${conf_file:-${SYSLOGD_CONFIG}}" \
-H \
-P "${pid_file:-${SYSLOGD_PIDFILE}}" \
- -p "${socket:-${SYSLOGD_LOCAL_SOCKET}}" \
+ -p "${socket}" \
-S "${privsocket:-${SYSLOGD_LOCAL_PRIVSOCKET}}" \
${other_args} \
&
# Give syslogd a bit of time to spin up.
+ if grep -q "[[:space:]]${SYSLOGD_LOGFILE}$" "${conf_file:-${SYSLOGD_CONFIG}}"; then
+ while [ ! -f "${SYSLOGD_LOGFILE}" ]; do
+ sleep 0.1
+ done
+ fi
while [ "$((i+=1))" -le 20 ]; do
- [ -S "${socket:-${SYSLOGD_LOCAL_SOCKET}}" ] && return
+ [ -S "${socket}" ] && return
sleep 0.1
done
atf_fail "timed out waiting for syslogd to start"
@@ -96,10 +109,19 @@ syslogd_log()
atf_check -s exit:0 -o empty -e empty logger $*
}
+syslogd_log_jail()
+{
+ local jailname=$1
+ shift
+ atf_check -s exit:0 -o empty -e empty jexec ${jailname} logger $*
+}
+
# Make syslogd reload its configuration file.
syslogd_reload()
{
+ atf_check truncate -s 0 ${SYSLOGD_LOGFILE}
atf_check pkill -HUP -F "${1:-${SYSLOGD_PIDFILE}}"
+ sleep 0.1
}
# Stop a private syslogd instance.
@@ -158,3 +180,28 @@ syslogd_cleanup()
ifconfig $(cat epair) destroy
fi
}
+
+# Check the last entry in the log file for a given message.
+syslogd_check_log_nopoll()
+{
+ local msg=$1
+
+ atf_check -o match:"${msg}" tail -n 1 "${SYSLOGD_LOGFILE}"
+}
+
+# Same as above, but first wait for syslogd to write to the log file.
+syslogd_check_log()
+{
+ local msg=$1
+
+ atf_check -r 10 -o match:"${msg}" tail -n 1 "${SYSLOGD_LOGFILE}"
+}
+
+# Make sure no log entry matching the given message exists.
+syslogd_check_log_nomatch()
+{
+ local msg=$1
+
+ sleep 0.5
+ atf_check -o not-match:"${msg}" cat "${SYSLOGD_LOGFILE}"
+}