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