xref: /freebsd/usr.sbin/syslogd/tests/syslogd_forwarded_format_test.sh (revision b1bebaaba9b9c0ddfe503c43ca8e9e3917ee2c57)
1#-
2# SPDX-License-Identifier: BSD-2-Clause
3#
4# Copyright (c) 2024 Michal Scigocki <michal.os@hotmail.com>
5#
6
7. $(atf_get_srcdir)/syslogd_format_test_common.sh
8
9SERVER_1_PORT="5140"
10SERVER_2_PORT="5141"
11
12# Forwarded Message Tests
13# Two servers, one sending syslog messages to the other over UDP
14setup_forwarded_format_test()
15{
16    local format="$1"
17    local pcapfile="$2"
18
19    confirm_INET_support_or_skip
20
21    # Begin packet capture for single packet
22    tcpdump --immediate-mode -c 1 -i lo0 -w "${pcapfile}" \
23        dst port "${SERVER_1_PORT}" &
24    tcpdump_pid="$!"
25
26    # Start first server: receive UDP, log to file
27    printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "$(config_filename ${SERVER_1_PORT})"
28    syslogd_start_on_port "${SERVER_1_PORT}" -O "${format}"
29
30    # Start second server: send UDP, log to first server
31    printf "user.debug\t@127.0.0.1:${SERVER_1_PORT}\n" \
32        > "$(config_filename ${SERVER_2_PORT})"
33    syslogd_start_on_port "${SERVER_2_PORT}" -O "${format}"
34
35    # Send test syslog message
36    syslogd_log -4 -p user.debug -t "${TAG}" -h 127.0.0.1 \
37        -P "${SERVER_2_PORT}" -H "${HOSTNAME}" "${MSG}"
38
39    wait "${tcpdump_pid}" # Wait for packet capture to finish
40}
41
42atf_test_case "O_flag_bsd_forwarded" "cleanup"
43O_flag_bsd_forwarded_head()
44{
45    atf_set descr "bsd format test on a forwarded syslog message"
46    set_common_atf_metadata
47}
48O_flag_bsd_forwarded_body()
49{
50    local format="bsd"
51    local pcapfile="${PWD}/${format}_forwarded.pcap"
52
53    setup_forwarded_format_test "${format}" "${pcapfile}"
54
55    atf_expect_fail \
56        "PR 220246 syslog -O bsd deviates from RFC 3164 recommendations"
57    syslogd_check_log "${REGEX_RFC3164_LOGFILE}"
58    atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC3164_PAYLOAD}" \
59        tcpdump -A -r "${pcapfile}"
60}
61O_flag_bsd_forwarded_cleanup()
62{
63    syslogd_stop_on_ports \
64        "${SERVER_1_PORT}" \
65        "${SERVER_2_PORT}"
66}
67
68atf_test_case "O_flag_rfc3164_forwarded" "cleanup"
69O_flag_rfc3164_forwarded_head()
70{
71    atf_set descr "rfc3164 format test on a forwarded syslog message"
72    set_common_atf_metadata
73}
74O_flag_rfc3164_forwarded_body()
75{
76    local format="rfc3164"
77    local pcapfile="${PWD}/${format}_forwarded.pcap"
78
79    setup_forwarded_format_test "${format}" "${pcapfile}"
80
81    atf_expect_fail \
82        "PR 220246 syslog -O rfc3164 deviates from RFC 3164 recommendations"
83    syslogd_check_log "${REGEX_RFC3164_LOGFILE}"
84    atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC3164_PAYLOAD}" \
85        tcpdump -A -r "${pcapfile}"
86}
87O_flag_rfc3164_forwarded_cleanup()
88{
89    syslogd_stop_on_ports \
90        "${SERVER_1_PORT}" \
91        "${SERVER_2_PORT}"
92}
93
94atf_test_case "O_flag_rfc3164strict_forwarded" "cleanup"
95O_flag_rfc3164strict_forwarded_head()
96{
97    atf_set descr "rfc3164-strict format test on a forwarded syslog message"
98    set_common_atf_metadata
99}
100O_flag_rfc3164strict_forwarded_body()
101{
102    local format="rfc3164-strict"
103    local pcapfile="${PWD}/${format}_forwarded.pcap"
104
105    setup_forwarded_format_test "${format}" "${pcapfile}"
106
107    syslogd_check_log "${REGEX_RFC3164_LOGFILE}"
108    atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC3164_PAYLOAD}" \
109        tcpdump -A -r "${pcapfile}"
110}
111O_flag_rfc3164strict_forwarded_cleanup()
112{
113    syslogd_stop_on_ports \
114        "${SYSLOGD_UDP_PORT_1}" \
115        "${SYSLOGD_UDP_PORT_2}"
116}
117
118atf_test_case "O_flag_syslog_forwarded" "cleanup"
119O_flag_syslog_forwarded_head()
120{
121    atf_set descr "syslog format test on a forwarded syslog message"
122    set_common_atf_metadata
123}
124O_flag_syslog_forwarded_body()
125{
126    local format="syslog"
127    local pcapfile="${PWD}/${format}_forwarded.pcap"
128
129    setup_forwarded_format_test "${format}" "${pcapfile}"
130
131    syslogd_check_log "${REGEX_RFC5424_LOGFILE}"
132    atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC5424_PAYLOAD}" \
133        tcpdump -A -r "${pcapfile}"
134}
135O_flag_syslog_forwarded_cleanup()
136{
137    syslogd_stop_on_ports \
138        "${SERVER_1_PORT}" \
139        "${SERVER_2_PORT}"
140}
141
142atf_test_case "O_flag_rfc5424_forwarded" "cleanup"
143O_flag_rfc5424_forwarded_head()
144{
145    atf_set descr "rfc5424 format test on a forwarded syslog message"
146    set_common_atf_metadata
147}
148O_flag_rfc5424_forwarded_body()
149{
150    local format="rfc5424"
151    local pcapfile="${PWD}/${format}_forwarded.pcap"
152
153    setup_forwarded_format_test "${format}" "${pcapfile}"
154
155    syslogd_check_log "${REGEX_RFC5424_LOGFILE}"
156    atf_check -s exit:0 -e ignore -o match:"${REGEX_RFC5424_PAYLOAD}" \
157        tcpdump -A -r "${pcapfile}"
158}
159O_flag_rfc5424_forwarded_cleanup()
160{
161    syslogd_stop_on_ports \
162        "${SERVER_1_PORT}" \
163        "${SERVER_2_PORT}"
164}
165
166# Legacy bsd/rfc3164 format tests
167# The legacy syntax was introduced in FreeBSD PR 7055, circa 1998
168atf_test_case "O_flag_bsd_forwarded_legacy" "cleanup"
169O_flag_bsd_forwarded_legacy_head()
170{
171    atf_set descr "legacy bsd format test on a forwarded syslog message"
172    set_common_atf_metadata
173}
174O_flag_bsd_forwarded_legacy_body()
175{
176    local format="bsd"
177    local pcapfile="${PWD}/${format}_forwarded.pcap"
178
179    setup_forwarded_format_test "${format}" "${pcapfile}"
180
181    syslogd_check_log "${REGEX_RFC3164_LEGACY_LOGFILE}"
182    atf_check -s exit:0 -e ignore \
183        -o match:"${REGEX_RFC3164_LEGACY_PAYLOAD}" \
184        tcpdump -A -r "${pcapfile}"
185}
186O_flag_bsd_forwarded_legacy_cleanup()
187{
188    syslogd_stop_on_ports \
189        "${SERVER_1_PORT}" \
190        "${SERVER_2_PORT}"
191}
192
193atf_test_case "O_flag_rfc3164_forwarded_legacy" "cleanup"
194O_flag_rfc3164_forwarded_legacy_head()
195{
196    atf_set descr \
197        "legacy rfc3164 format test on a forwarded syslog message"
198    set_common_atf_metadata
199}
200O_flag_rfc3164_forwarded_legacy_body()
201{
202    local format="rfc3164"
203    local pcapfile="${PWD}/${format}_forwarded.pcap"
204
205    setup_forwarded_format_test "${format}" "${pcapfile}"
206
207    syslogd_check_log "${REGEX_RFC3164_LEGACY_LOGFILE}"
208    atf_check -s exit:0 -e ignore \
209        -o match:"${REGEX_RFC3164_LEGACY_PAYLOAD}" \
210        tcpdump -A -r "${pcapfile}"
211}
212O_flag_rfc3164_forwarded_legacy_cleanup()
213{
214    syslogd_stop_on_ports \
215        "${SERVER_1_PORT}" \
216        "${SERVER_2_PORT}"
217}
218
219atf_init_test_cases()
220{
221    atf_add_test_case "O_flag_bsd_forwarded"
222    atf_add_test_case "O_flag_rfc3164_forwarded"
223    atf_add_test_case "O_flag_rfc3164strict_forwarded"
224    atf_add_test_case "O_flag_syslog_forwarded"
225    atf_add_test_case "O_flag_rfc5424_forwarded"
226
227    atf_add_test_case "O_flag_bsd_forwarded_legacy"
228    atf_add_test_case "O_flag_rfc3164_forwarded_legacy"
229}
230