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