1#- 2# SPDX-License-Identifier: BSD-2-Clause 3# 4# Copyright (c) 2021, 2023 The FreeBSD Foundation 5# Copyright (c) 2024 Mark Johnston <markj@FreeBSD.org> 6# 7# This software was developed by Mark Johnston under sponsorship from 8# the FreeBSD Foundation. 9# 10# This software was developed by Jake Freeland under sponsorship from 11# the FreeBSD Foundation. 12# 13 14# Tests to-do: 15# actions: users 16 17. $(atf_get_srcdir)/syslogd_test_common.sh 18 19atf_test_case "unix" "cleanup" 20unix_head() 21{ 22 atf_set descr "Messages are logged over UNIX transport" 23 atf_set "require.progs" syslogd 24} 25unix_body() 26{ 27 printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 28 syslogd_start 29 30 syslogd_log -p user.debug -t unix -h "${SYSLOGD_LOCAL_SOCKET}" \ 31 "hello, world (unix)" 32 syslogd_check_log "unix: hello, world \(unix\)" 33} 34unix_cleanup() 35{ 36 syslogd_stop 37} 38 39atf_test_case "inet" "cleanup" 40inet_head() 41{ 42 atf_set descr "Messages are logged over INET transport" 43 atf_set "require.progs" syslogd 44} 45inet_body() 46{ 47 [ "$(sysctl -n kern.features.inet)" != "1" ] && 48 atf_skip "Kernel does not support INET" 49 50 printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 51 syslogd_start 52 53 # We have INET transport; make sure we can use it. 54 syslogd_log -4 -p user.debug -t inet -h 127.0.0.1 -P "${SYSLOGD_UDP_PORT}" \ 55 "hello, world (v4)" 56 syslogd_check_log "inet: hello, world \(v4\)" 57} 58inet_cleanup() 59{ 60 syslogd_stop 61} 62 63atf_test_case "inet6" "cleanup" 64inet6_head() 65{ 66 atf_set descr "Messages are logged over INET6 transport" 67 atf_set "require.progs" syslogd 68} 69inet6_body() 70{ 71 [ "$(sysctl -n kern.features.inet6)" != "1" ] && 72 atf_skip "Kernel does not support INET6" 73 74 printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 75 syslogd_start 76 77 # We have INET6 transport; make sure we can use it. 78 syslogd_log -6 -p user.debug -t unix -h ::1 -P "${SYSLOGD_UDP_PORT}" \ 79 "hello, world (v6)" 80 syslogd_check_log "unix: hello, world \(v6\)" 81} 82inet6_cleanup() 83{ 84 syslogd_stop 85} 86 87atf_test_case "reload" "cleanup" 88reload_head() 89{ 90 atf_set descr "SIGHUP correctly refreshes configuration" 91 atf_set "require.progs" syslogd 92} 93reload_body() 94{ 95 printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 96 syslogd_start 97 98 syslogd_log -p user.debug -t reload -h "${SYSLOGD_LOCAL_SOCKET}" \ 99 "pre-reload" 100 syslogd_check_log "reload: pre-reload" 101 102 # Override the old rule. 103 printf "news.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 104 syslogd_reload 105 106 syslogd_log -p user.debug -t reload -h "${SYSLOGD_LOCAL_SOCKET}" \ 107 "post-reload user" 108 syslogd_log -p news.debug -t reload -h "${SYSLOGD_LOCAL_SOCKET}" \ 109 "post-reload news" 110 sleep 0.5 111 syslogd_check_log_nopoll "reload: post-reload news" 112 syslogd_check_log_nomatch "reload: post-reload user" 113} 114reload_cleanup() 115{ 116 syslogd_stop 117} 118 119atf_test_case "prog_filter" "cleanup" 120prog_filter_head() 121{ 122 atf_set descr "Messages are only received from programs in the filter" 123 atf_set "require.progs" syslogd 124} 125prog_filter_body() 126{ 127 printf "!prog1,prog2\nuser.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 128 syslogd_start 129 130 syslogd_log -p user.debug -t "prog1" -h "${SYSLOGD_LOCAL_SOCKET}" \ 131 "hello this is prog1" 132 syslogd_check_log "prog1: hello this is prog1" 133 134 syslogd_log -p user.debug -t "prog2" -h "${SYSLOGD_LOCAL_SOCKET}" \ 135 "hello this is prog2" 136 syslogd_check_log "prog2: hello this is prog2" 137 138 syslogd_log -p user.debug -t "prog3" -h "${SYSLOGD_LOCAL_SOCKET}" \ 139 "hello this is prog3" 140 syslogd_check_log_nomatch "prog3: hello this is prog3" 141 142 # Override the old rule. 143 printf "!-prog1,prog2\nuser.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 144 syslogd_reload 145 146 syslogd_log -p user.debug -t "prog1" -h "${SYSLOGD_LOCAL_SOCKET}" \ 147 "hello this is prog1" 148 syslogd_check_log_nomatch "prog1: hello this is prog1" 149 150 syslogd_log -p user.debug -t "prog2" -h "${SYSLOGD_LOCAL_SOCKET}" \ 151 "hello this is prog2" 152 syslogd_check_log_nomatch "prog2: hello this is prog2" 153 154 syslogd_log -p user.debug -t "prog3" -h "${SYSLOGD_LOCAL_SOCKET}" \ 155 "hello this is prog3" 156 syslogd_check_log "prog3: hello this is prog3" 157} 158prog_filter_cleanup() 159{ 160 syslogd_stop 161} 162 163atf_test_case "host_filter" "cleanup" 164host_filter_head() 165{ 166 atf_set descr "Messages are only received from hostnames in the filter" 167 atf_set "require.progs" syslogd 168} 169host_filter_body() 170{ 171 printf "+host1,host2\nuser.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 172 syslogd_start 173 174 syslogd_log -p user.debug -t "host1" -H "host1" \ 175 -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host1" 176 syslogd_check_log "host1: hello this is host1" 177 syslogd_log -p user.debug -t "host2" -H "host2" \ 178 -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host2" 179 syslogd_check_log "host2: hello this is host2" 180 syslogd_log -p user.debug -t "host3" -H "host3" \ 181 -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host3" 182 syslogd_check_log_nomatch "host3: hello this is host3" 183 184 # Override the old rule. 185 printf "\-host1,host2\nuser.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 186 syslogd_reload 187 188 syslogd_log -p user.debug -t "host1" -H "host1" \ 189 -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host1" 190 syslogd_check_log_nomatch "host1: hello this is host1" 191 syslogd_log -p user.debug -t "host2" -H "host2" \ 192 -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host2" 193 syslogd_check_log_nomatch "host2: hello this is host2" 194 syslogd_log -p user.debug -t "host3" -H "host3" \ 195 -h "${SYSLOGD_LOCAL_SOCKET}" "hello this is host3" 196 syslogd_check_log "host3: hello this is host3" 197} 198host_filter_cleanup() 199{ 200 syslogd_stop 201} 202 203atf_test_case "prop_filter" "cleanup" 204prop_filter_head() 205{ 206 atf_set descr "Messages are received based on conditions in the propery based filter" 207 atf_set "require.progs" syslogd 208} 209prop_filter_body() 210{ 211 printf ":msg,contains,\"FreeBSD\"\nuser.debug\t${SYSLOGD_LOGFILE}\n" \ 212 > "${SYSLOGD_CONFIG}" 213 syslogd_start 214 215 syslogd_log -p user.debug -t "prop1" -h "${SYSLOGD_LOCAL_SOCKET}" "FreeBSD" 216 syslogd_log -p user.debug -t "prop2" -h "${SYSLOGD_LOCAL_SOCKET}" "freebsd" 217 syslogd_check_log "prop1: FreeBSD" 218 syslogd_check_log_nomatch "prop2: freebsd" 219 220 printf ":msg,!contains,\"FreeBSD\"\nuser.debug\t${SYSLOGD_LOGFILE}\n" \ 221 > "${SYSLOGD_CONFIG}" 222 syslogd_reload 223 224 syslogd_log -p user.debug -t "prop1" -h "${SYSLOGD_LOCAL_SOCKET}" "FreeBSD" 225 syslogd_log -p user.debug -t "prop2" -h "${SYSLOGD_LOCAL_SOCKET}" "freebsd" 226 syslogd_check_log_nomatch "prop1: FreeBSD" 227 syslogd_check_log "prop2: freebsd" 228 229 printf ":msg,icase_contains,\"FreeBSD\"\nuser.debug\t${SYSLOGD_LOGFILE}\n" \ 230 > "${SYSLOGD_CONFIG}" 231 syslogd_reload 232 233 syslogd_log -p user.debug -t "prop1" -h "${SYSLOGD_LOCAL_SOCKET}" "FreeBSD" 234 syslogd_check_log "prop1: FreeBSD" 235 syslogd_log -p user.debug -t "prop2" -h "${SYSLOGD_LOCAL_SOCKET}" "freebsd" 236 syslogd_check_log "prop2: freebsd" 237 238 printf ":msg,!icase_contains,\"FreeBSD\"\nuser.debug\t${SYSLOGD_LOGFILE}\n" \ 239 > "${SYSLOGD_CONFIG}" 240 syslogd_reload 241 242 syslogd_log -p user.debug -t "prop1" -h "${SYSLOGD_LOCAL_SOCKET}" "FreeBSD" 243 syslogd_log -p user.debug -t "prop2" -h "${SYSLOGD_LOCAL_SOCKET}" "freebsd" 244 syslogd_log -p user.debug -t "prop3" -h "${SYSLOGD_LOCAL_SOCKET}" "Solaris" 245 syslogd_check_log_nomatch "prop1: FreeBSD" 246 syslogd_check_log_nomatch "prop2: freebsd" 247 syslogd_check_log "prop3: Solaris" 248 249 printf ":msg,ereregex,\"substring1|substring2\"\nuser.debug\t${SYSLOGD_LOGFILE}\n" \ 250 > "${SYSLOGD_CONFIG}" 251 syslogd_reload 252 253 syslogd_log -p user.debug -t "prop1" -h "${SYSLOGD_LOCAL_SOCKET}" "substring1" 254 syslogd_check_log "prop1: substring1" 255 syslogd_log -p user.debug -t "prop2" -h "${SYSLOGD_LOCAL_SOCKET}" "substring2" 256 syslogd_check_log "prop2: substring2" 257 syslogd_log -p user.debug -t "prop3" -h "${SYSLOGD_LOCAL_SOCKET}" "substring3" 258 syslogd_check_log_nomatch "prop3: substring3" 259 260 printf ":msg,!ereregex,\"substring1|substring2\"\nuser.debug\t${SYSLOGD_LOGFILE}\n" \ 261 > "${SYSLOGD_CONFIG}" 262 syslogd_reload 263 264 syslogd_log -p user.debug -t "prop1" -h "${SYSLOGD_LOCAL_SOCKET}" "substring1" 265 syslogd_check_log_nomatch "prop1: substring1" 266 syslogd_log -p user.debug -t "prop2" -h "${SYSLOGD_LOCAL_SOCKET}" "substring2" 267 syslogd_check_log_nomatch "prop2: substring2" 268 syslogd_log -p user.debug -t "prop3" -h "${SYSLOGD_LOCAL_SOCKET}" "substring3" 269 syslogd_check_log "prop3: substring3" 270} 271prop_filter_cleanup() 272{ 273 syslogd_stop 274} 275 276atf_test_case "host_action" "cleanup" 277host_action_head() 278{ 279 atf_set descr "Sends a message to a specified host" 280 atf_set "require.progs" syslogd 281} 282host_action_body() 283{ 284 local addr="192.0.2.100" 285 286 atf_check ifconfig lo1 create 287 atf_check ifconfig lo1 inet "${addr}/24" 288 atf_check ifconfig lo1 up 289 290 printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 291 syslogd_start -b "${addr}" 292 293 printf "user.debug\t@${addr}\n" > "${SYSLOGD_CONFIG}.2" 294 syslogd_start \ 295 -f "${SYSLOGD_CONFIG}.2" \ 296 -P "${SYSLOGD_PIDFILE}.2" \ 297 -p "${SYSLOGD_LOCAL_SOCKET}.2" \ 298 -S "${SYSLOGD_LOCAL_PRIVSOCKET}.2" 299 300 syslogd_log -p user.debug -t "test" -h "${SYSLOGD_LOCAL_SOCKET}.2" \ 301 "message from syslogd2" 302 syslogd_check_log "test: message from syslogd2" 303} 304host_action_cleanup() 305{ 306 syslogd_stop 307 syslogd_stop \ 308 "${SYSLOGD_PIDFILE}.2" \ 309 "${SYSLOGD_LOCAL_SOCKET}.2" \ 310 "${SYSLOGD_LOCAL_PRIVSOCKET}.2" 311 atf_check ifconfig lo1 destroy 312} 313 314atf_test_case "pipe_action" "cleanup" 315pipe_action_head() 316{ 317 atf_set descr "The pipe action evaluates provided command in sh(1)" 318 atf_set "require.progs" syslogd 319} 320pipe_action_body() 321{ 322 printf "\"While I'm digging in the tunnel, the elves will often come to me \ 323 with solutions to my problem.\"\n-Saymore Crey" > testfile 324 325 printf "!pipe\nuser.debug\t| sed -i '' -e 's/Saymore Crey/Seymour Cray/g' \ 326 testfile\n" > "${SYSLOGD_CONFIG}" 327 syslogd_start 328 329 syslogd_log -p user.debug -t "pipe" -h "${SYSLOGD_LOCAL_SOCKET}" \ 330 "fix spelling error" 331 sleep 0.5 332 atf_check -o match:"Seymour Cray" cat testfile 333} 334pipe_action_cleanup() 335{ 336 syslogd_stop 337} 338 339atf_test_case "pipe_action_reload" "cleanup" 340pipe_action_reload_head() 341{ 342 atf_set descr "Pipe processes terminate gracefully on reload" 343 atf_set "require.progs" syslogd 344} 345pipe_action_reload_body() 346{ 347 local pipecmd="${PWD}/pipe_cmd.sh" 348 local pid 349 350 cat <<__EOF__ > "${pipecmd}" 351#!/bin/sh 352echo START > ${SYSLOGD_LOGFILE} 353while read msg; do 354 echo \${msg} >> ${SYSLOGD_LOGFILE} 355done 356echo END >> ${SYSLOGD_LOGFILE} 357exit 0 358__EOF__ 359 chmod +x "${pipecmd}" 360 361 printf "!pipe\nuser.debug\t| %s\n" "${pipecmd}" > "${SYSLOGD_CONFIG}" 362 syslogd_start 363 364 syslogd_log -p user.debug -t "pipe" -h "${SYSLOGD_LOCAL_SOCKET}" "MSG" 365 sleep 0.1 366 367 pid=$(cat "${SYSLOGD_PIDFILE}") 368 atf_check pkill -HUP -F "${1:-${SYSLOGD_PIDFILE}}" 369 sleep 0.1 370 syslogd_check_log_nopoll "END" 371 372 atf_check -o not-match:"[[:space:]]P[[:space:]]" procstat files "${pid}" 373} 374pipe_action_reload_cleanup() 375{ 376 syslogd_stop 377} 378 379 380atf_test_case "jail_noinet" "cleanup" 381jail_noinet_head() 382{ 383 atf_set descr "syslogd -ss can be run in a jail without INET support" 384 atf_set require.user root 385 atf_set "require.progs" syslogd 386} 387jail_noinet_body() 388{ 389 syslogd_mkjail syslogd_noinet 390 391 printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 392 syslogd_start -j syslogd_noinet -s -s 393 394 syslogd_log -p user.debug -t "test" -h "${SYSLOGD_LOCAL_SOCKET}" \ 395 "hello, world" 396 syslogd_check_log "test: hello, world" 397} 398jail_noinet_cleanup() 399{ 400 syslogd_cleanup 401} 402 403# Create a pair of jails, connected by an epair. The idea is to run syslogd in 404# one jail (syslogd_allowed_peer), listening on 169.254.0.1, and logger(1) can 405# send messages from the other jail (syslogd_client) using source addrs 406# 169.254.0.2 or 169.254.0.3. 407allowed_peer_test_setup() 408{ 409 syslogd_check_req epair 410 411 local epair 412 413 syslogd_mkjail syslogd_allowed_peer vnet 414 syslogd_mkjail syslogd_client vnet 415 416 atf_check -o save:epair ifconfig epair create 417 epair=$(cat epair) 418 epair=${epair%%a} 419 420 atf_check ifconfig ${epair}a vnet syslogd_allowed_peer 421 atf_check ifconfig ${epair}b vnet syslogd_client 422 atf_check jexec syslogd_allowed_peer ifconfig ${epair}a inet 169.254.0.1/16 423 atf_check jexec syslogd_client ifconfig ${epair}b inet 169.254.0.2/16 424 atf_check jexec syslogd_client ifconfig ${epair}b alias 169.254.0.3/16 425} 426 427allowed_peer_test_cleanup() 428{ 429 syslogd_cleanup 430} 431 432atf_test_case allowed_peer "cleanup" 433allowed_peer_head() 434{ 435 atf_set descr "syslogd -a works" 436 atf_set require.user root 437 atf_set "require.progs" syslogd 438} 439allowed_peer_body() 440{ 441 allowed_peer_test_setup 442 443 printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 444 syslogd_start -j syslogd_allowed_peer -b 169.254.0.1:514 -a '169.254.0.2/32' 445 446 # Make sure that a message from 169.254.0.2:514 is logged. 447 syslogd_log_jail syslogd_client \ 448 -p user.debug -t test1 -h 169.254.0.1 -S 169.254.0.2:514 "hello, world" 449 syslogd_check_log "test1: hello, world" 450 451 # ... but not a message from port 515. 452 syslogd_log_jail syslogd_client \ 453 -p user.debug -t test2 -h 169.254.0.1 -S 169.254.0.2:515 "hello, world" 454 sleep 0.5 455 syslogd_check_log_nomatch "test2: hello, world" 456 syslogd_log_jail syslogd_client \ 457 -p user.debug -t test2 -h 169.254.0.1 -S 169.254.0.3:515 "hello, world" 458 sleep 0.5 459 syslogd_check_log_nomatch "test2: hello, world" 460 461 syslogd_stop 462 463 # Now make sure that we can filter by port. 464 syslogd_start -j syslogd_allowed_peer -b 169.254.0.1:514 -a '169.254.0.2/32:515' 465 466 syslogd_log_jail syslogd_client \ 467 -p user.debug -t test3 -h 169.254.0.1 -S 169.254.0.2:514 "hello, world" 468 syslogd_check_log_nomatch "test3: hello, world" 469 syslogd_log_jail syslogd_client \ 470 -p user.debug -t test4 -h 169.254.0.1 -S 169.254.0.2:515 "hello, world" 471 syslogd_check_log "test4: hello, world" 472 473 syslogd_stop 474} 475allowed_peer_cleanup() 476{ 477 allowed_peer_test_cleanup 478} 479 480atf_test_case allowed_peer_forwarding "cleanup" 481allowed_peer_forwarding_head() 482{ 483 atf_set descr "syslogd forwards messages from its listening port" 484 atf_set require.user root 485 atf_set "require.progs" syslogd 486} 487allowed_peer_forwarding_body() 488{ 489 allowed_peer_test_setup 490 491 printf "user.debug\t@169.254.0.1\n" > client_config 492 printf "mark.debug\t@169.254.0.1:515\n" >> client_config 493 syslogd_start -j syslogd_client -b 169.254.0.2:514 -f ${PWD}/client_config 494 495 printf "+169.254.0.2\nuser.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 496 syslogd_start -j syslogd_allowed_peer -P ${SYSLOGD_PIDFILE}.2 \ 497 -b 169.254.0.1:514 -a 169.254.0.2/32 -p ${PWD}/peer 498 499 # A message forwarded to 169.254.0.1:514 should be logged, but one 500 # forwarded to 169.254.0.1:515 should not. 501 syslogd_log_jail syslogd_client \ 502 -h 169.254.0.2 -p user.debug -t test1 "hello, world" 503 syslogd_log_jail syslogd_client \ 504 -h 169.254.0.2 -p mark.debug -t test2 "hello, world" 505 506 syslogd_check_log "test1: hello, world" 507 syslogd_check_log_nomatch "test2: hello, world" 508} 509allowed_peer_forwarding_cleanup() 510{ 511 allowed_peer_test_cleanup 512} 513 514atf_test_case allowed_peer_wildcard "cleanup" 515allowed_peer_wildcard_head() 516{ 517 atf_set descr "syslogd -a works with port wildcards" 518 atf_set require.user root 519 atf_set "require.progs" syslogd 520} 521allowed_peer_wildcard_body() 522{ 523 allowed_peer_test_setup 524 525 printf "user.debug\t${SYSLOGD_LOGFILE}\n" > "${SYSLOGD_CONFIG}" 526 syslogd_start -j syslogd_allowed_peer -b 169.254.0.1:514 -a '169.254.0.2/32:*' 527 528 # Make sure that a message from 169.254.0.2:514 is logged. 529 syslogd_log_jail syslogd_client \ 530 -p user.debug -t test1 -h 169.254.0.1 -S 169.254.0.2:514 "hello, world" 531 syslogd_check_log "test1: hello, world" 532 533 # ... as is a message from 169.254.0.2:515, allowed by the wildcard. 534 syslogd_log_jail syslogd_client \ 535 -p user.debug -t test2 -h 169.254.0.1 -S 169.254.0.2:515 "hello, world" 536 syslogd_check_log "test2: hello, world" 537 538 # ... but not a message from 169.254.0.3. 539 syslogd_log_jail syslogd_client \ 540 -p user.debug -t test3 -h 169.254.0.1 -S 169.254.0.3:514 "hello, world" 541 syslogd_check_log_nomatch "test3: hello, world" 542 syslogd_log_jail syslogd_client \ 543 -p user.debug -t test3 -h 169.254.0.1 -S 169.254.0.3:515 "hello, world" 544 syslogd_check_log_nomatch "test3: hello, world" 545 546 syslogd_stop 547} 548allowed_peer_wildcard_cleanup() 549{ 550 allowed_peer_test_cleanup 551} 552 553atf_test_case "forward" "cleanup" 554forward_head() 555{ 556 atf_set descr "syslogd forwards messages to a remote host" 557 atf_set require.user root 558 atf_set "require.progs" syslogd 559} 560forward_body() 561{ 562 local epair 563 564 syslogd_check_req epair 565 566 atf_check -o save:epair ifconfig epair create 567 epair=$(cat epair) 568 epair=${epair%%a} 569 570 syslogd_mkjail syslogd_server vnet 571 atf_check ifconfig ${epair}a vnet syslogd_server 572 atf_check jexec syslogd_server ifconfig ${epair}a inet 169.254.0.1/16 573 atf_check jexec syslogd_server ifconfig ${epair}a alias 169.254.0.2/16 574 575 syslogd_mkjail syslogd_client vnet 576 atf_check ifconfig ${epair}b vnet syslogd_client 577 atf_check jexec syslogd_client ifconfig ${epair}b inet 169.254.0.3/16 578 579 cat <<__EOF__ > ./client_config 580user.debug @169.254.0.1 581mail.debug @169.254.0.2 582ftp.debug @169.254.0.1 583__EOF__ 584 585 cat <<__EOF__ > ./server_config 586user.debug ${SYSLOGD_LOGFILE} 587mail.debug ${SYSLOGD_LOGFILE} 588ftp.debug ${SYSLOGD_LOGFILE} 589__EOF__ 590 591 syslogd_start -j syslogd_server -f ${PWD}/server_config \ 592 -b 169.254.0.1 -b 169.254.0.2 593 syslogd_start -j syslogd_client -f ${PWD}/client_config \ 594 -p ${PWD}/client -P ${SYSLOGD_PIDFILE}.2 595 596 syslogd_log_jail syslogd_client \ 597 -h 169.254.0.3 -P $SYSLOGD_UDP_PORT -p user.debug -t test1 "hello, world" 598 syslogd_check_log "test1: hello, world" 599 600 syslogd_log_jail syslogd_client \ 601 -h 169.254.0.3 -P $SYSLOGD_UDP_PORT -p mail.debug -t test2 "you've got mail" 602 syslogd_check_log "test2: you've got mail" 603 604 syslogd_log_jail syslogd_client \ 605 -h 169.254.0.3 -P $SYSLOGD_UDP_PORT -p ftp.debug -t test3 "transfer complete" 606 syslogd_check_log "test3: transfer complete" 607} 608forward_cleanup() 609{ 610 syslogd_cleanup 611} 612 613atf_test_case "forward_reload" "cleanup" 614forward_reload_head() 615{ 616 atf_set descr "syslogd might start before routes are configured" 617 atf_set require.user root 618 atf_set "require.progs" syslogd 619} 620forward_reload_body() 621{ 622 local epair server client 623 624 server=syslogd_server$$ 625 client=syslogd_client$$ 626 627 syslogd_check_req epair 628 629 atf_check -o save:epair ifconfig epair create 630 epair=$(cat epair) 631 epair=${epair%%a} 632 633 syslogd_mkjail $server vnet 634 atf_check ifconfig ${epair}a vnet $server 635 atf_check jexec $server ifconfig ${epair}a inet6 fd00::2/64 636 637 syslogd_mkjail $client vnet 638 atf_check ifconfig ${epair}b vnet $client 639 640 cat <<__EOF__ > ./server_config 641user.debug ${SYSLOGD_LOGFILE} 642ftp.debug ${SYSLOGD_LOGFILE} 643__EOF__ 644 645 syslogd_start -j $server -f ${PWD}/server_config -b fd00::2 646 647 cat <<__EOF__ > ./client_config 648user.debug @[fd00::2] 649ftp.debug @[fd00::2] 650__EOF__ 651 652 syslogd_start -j $client -f ${PWD}/client_config \ 653 -p ${PWD}/client -P ${SYSLOGD_PIDFILE}.2 654 655 # Make sure the client can't reach the server with the current 656 # network configuration. 657 atf_check -s not-exit:0 -e match:"No route to host" \ 658 jexec $client ping6 -c 1 fd00::2 659 660 syslogd_log_jail $client -p user.debug -t test1 "hello there" 661 syslogd_log_jail $client -p ftp.debug -t test2 "hi there" 662 663 atf_check jexec $client ifconfig ${epair}b inet6 fd00::1/64 664 atf_check -o ignore jexec $client ping6 -c 1 fd00::2 665 666 syslogd_check_log_nomatch "test1: hello there" 667 syslogd_check_log_nomatch "test2: hi there" 668 669 syslogd_log_jail $client \ 670 -p user.debug -t test1 -h ${PWD}/client "how about now" 671 syslogd_check_log "test1: how about now" 672 673 syslogd_log_jail $client \ 674 -p ftp.debug -t test2 -h ${PWD}/client "bing bong" 675 syslogd_check_log "test2: bing bong" 676} 677forward_reload_cleanup() 678{ 679 syslogd_cleanup 680} 681 682atf_init_test_cases() 683{ 684 atf_add_test_case "unix" 685 atf_add_test_case "inet" 686 atf_add_test_case "inet6" 687 atf_add_test_case "reload" 688 atf_add_test_case "prog_filter" 689 atf_add_test_case "host_filter" 690 atf_add_test_case "prop_filter" 691 atf_add_test_case "host_action" 692 atf_add_test_case "pipe_action" 693 atf_add_test_case "pipe_action_reload" 694 atf_add_test_case "jail_noinet" 695 atf_add_test_case "allowed_peer" 696 atf_add_test_case "allowed_peer_forwarding" 697 atf_add_test_case "allowed_peer_wildcard" 698 atf_add_test_case "forward" 699 atf_add_test_case "forward_reload" 700} 701