1# $OpenBSD: Makefile,v 1.10 2021/07/14 05:04:08 anton Exp $ 2 3# Copyright (c) 2020 Alexander Bluhm <bluhm@openbsd.org> 4# 5# Permission to use, copy, modify, and distribute this software for any 6# purpose with or without fee is hereby granted, provided that the above 7# copyright notice and this permission notice appear in all copies. 8# 9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 17PROGS = client-tcp server-tcp 18SRCS_client-tcp = client-tcp.c util.c 19SRCS_server-tcp = server-tcp.c util.c 20WARNINGS = yes 21 22NC = ./netcat-regress 23 24CLEANFILES = ${NC:T} {client,server}.{out,err,port,sock} ktrace.out 25 26REGRESS_SETUP = setup 27setup: 28 pkill ${NC:T} || true 29 rm -f ${NC:T} 30 # copying global netcat to local name allows to pkill it during cleanup 31 cp /usr/bin/nc ${NC:T} 32 chmod 755 ${NC:T} 33 34REGRESS_CLEANUP = cleanup 35cleanup: 36 -pkill ${NC:T} || true 37 38REGRESS_TARGETS = 39 40SERVER_NC = rm -f server.err; echo greeting | ${NC} 41CLIENT_NC = rm -f client.err; echo command | ${NC} 42SERVER_BG = 2>&1 >server.out | tee server.err & 43CLIENT_BG = 2>&1 >client.out | tee client.err & 44SERVER_LOG = >server.out 2>server.err 45CLIENT_LOG = >client.out 2>client.err 46 47PORT_GET = \ 48 sed -E -n 's/(Listening|Bound) on .* //p' server.err >server.port 49PORT = `cat server.port` 50 51LISTEN_WAIT = \ 52 let timeout=`date +%s`+5; \ 53 until grep -q 'Listening on ' server.err; \ 54 do [[ `date +%s` -lt $$timeout ]] || { echo timeout; exit 1; }; done 55 56BIND_WAIT = \ 57 let timeout=`date +%s`+5; \ 58 until grep -q 'Bound on ' server.err; \ 59 do [[ `date +%s` -lt $$timeout ]] || { echo timeout; exit 1; }; done 60 61BIND_CLIENT_WAIT = \ 62 let timeout=`date +%s`+5; \ 63 until grep -q 'Bound on ' client.err; \ 64 do [[ `date +%s` -lt $$timeout ]] || { echo timeout; exit 1; }; done 65 66CONNECT_WAIT = \ 67 let timeout=`date +%s`+5; \ 68 until grep -q 'Connection to .* succeeded' client.err; \ 69 do [[ `date +%s` -lt $$timeout ]] || { echo timeout; exit 1; }; done 70 71TLS_WAIT = \ 72 let timeout=`date +%s`+5; \ 73 until grep -q 'Cert Hash:' client.err; \ 74 do [[ `date +%s` -lt $$timeout ]] || { echo timeout; exit 1; }; done 75 76TRANSFER_WAIT = \ 77 let timeout=`date +%s`+5; \ 78 until grep -q 'greeting' client.out && grep -q 'command' server.out; \ 79 do [[ `date +%s` -lt $$timeout ]] || { echo timeout; exit 1; }; done 80 81TRANSFER_CLIENT_WAIT = \ 82 let timeout=`date +%s`+5; \ 83 until grep -q 'greeting' client.out; \ 84 do [[ `date +%s` -lt $$timeout ]] || { echo timeout; exit 1; }; done 85 86TRANSFER_SERVER_WAIT = \ 87 let timeout=`date +%s`+5; \ 88 until grep -q 'command' server.out; \ 89 do [[ `date +%s` -lt $$timeout ]] || { echo timeout; exit 1; }; done 90 91RUNNING_WAIT = \ 92 let timeout=`date +%s`+5; \ 93 while ps -xww -o comm,stat | grep -q '${NC:T} .*R'; \ 94 do [[ `date +%s` -lt $$timeout ]] || { echo timeout; exit 1; }; done 95 96### TCP #### 97 98REGRESS_TARGETS += run-tcp 99run-tcp: 100 ${SERVER_NC} -n -v -l 127.0.0.1 0 ${SERVER_BG} 101 ${LISTEN_WAIT} 102 ${PORT_GET} 103 ${CLIENT_NC} -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 104 ${CONNECT_WAIT} 105 ${TRANSFER_WAIT} 106 grep '^greeting$$' client.out 107 grep '^command$$' server.out 108 grep 'Listening on 127.0.0.1 ' server.err 109 grep 'Connection received on 127.0.0.1 ' server.err 110 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 111 112REGRESS_TARGETS += run-tcp6 113run-tcp6: 114 ${SERVER_NC} -n -v -l ::1 0 ${SERVER_BG} 115 ${LISTEN_WAIT} 116 ${PORT_GET} 117 ${CLIENT_NC} -n -v ::1 ${PORT} ${CLIENT_BG} 118 ${CONNECT_WAIT} 119 ${TRANSFER_WAIT} 120 grep '^greeting$$' client.out 121 grep '^command$$' server.out 122 grep 'Listening on ::1 ' server.err 123 grep 'Connection received on ::1 ' server.err 124 grep 'Connection to ::1 .* succeeded!' client.err 125 126# TCP resolver 127 128REGRESS_TARGETS += run-tcp-localhost-server 129run-tcp-localhost-server: 130 ${SERVER_NC} -4 -v -l localhost 0 ${SERVER_BG} 131 ${LISTEN_WAIT} 132 ${PORT_GET} 133 ${CLIENT_NC} -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 134 ${CONNECT_WAIT} 135 ${TRANSFER_WAIT} 136 grep '^greeting$$' client.out 137 grep '^command$$' server.out 138 grep 'Listening on localhost ' server.err 139 grep 'Connection received on localhost ' server.err 140 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 141 142REGRESS_TARGETS += run-tcp6-localhost-server 143run-tcp6-localhost-server: 144 ${SERVER_NC} -6 -v -l localhost 0 ${SERVER_BG} 145 ${LISTEN_WAIT} 146 ${PORT_GET} 147 ${CLIENT_NC} -n -v ::1 ${PORT} ${CLIENT_BG} 148 ${CONNECT_WAIT} 149 ${TRANSFER_WAIT} 150 grep '^greeting$$' client.out 151 grep '^command$$' server.out 152 grep 'Listening on localhost ' server.err 153 grep 'Connection received on localhost ' server.err 154 grep 'Connection to ::1 .* succeeded!' client.err 155 156REGRESS_TARGETS += run-tcp-localhost-client 157run-tcp-localhost-client: 158 ${SERVER_NC} -n -v -l 127.0.0.1 0 ${SERVER_BG} 159 ${LISTEN_WAIT} 160 ${PORT_GET} 161 ${CLIENT_NC} -4 -v localhost ${PORT} ${CLIENT_BG} 162 ${CONNECT_WAIT} 163 ${TRANSFER_WAIT} 164 grep '^greeting$$' client.out 165 grep '^command$$' server.out 166 grep 'Listening on 127.0.0.1 ' server.err 167 grep 'Connection received on 127.0.0.1 ' server.err 168 grep 'Connection to localhost .* succeeded!' client.err 169 170REGRESS_TARGETS += run-tcp6-localhost-client 171run-tcp6-localhost-client: 172 ${SERVER_NC} -n -v -l ::1 0 ${SERVER_BG} 173 ${LISTEN_WAIT} 174 ${PORT_GET} 175 ${CLIENT_NC} -6 -v localhost ${PORT} ${CLIENT_BG} 176 ${CONNECT_WAIT} 177 ${TRANSFER_WAIT} 178 grep '^greeting$$' client.out 179 grep '^command$$' server.out 180 grep 'Listening on ::1 ' server.err 181 grep 'Connection received on ::1 ' server.err 182 grep 'Connection to localhost .* succeeded!' client.err 183 184REGRESS_TARGETS += run-tcp-bad-localhost-server 185run-tcp-bad-localhost-server: 186 ! ${NC} -4 -v -l ::1 0 ${SERVER_LOG} 187 grep 'no address associated with name' server.err 188 189REGRESS_TARGETS += run-tcp6-bad-localhost-server 190run-tcp6-bad-localhost-server: 191 ! ${NC} -6 -v -l 127.0.0.0 0 ${SERVER_LOG} 192 grep 'no address associated with name' server.err 193 194REGRESS_TARGETS += run-tcp-bad-localhost-client 195run-tcp-bad-localhost-client: 196 ${SERVER_NC} -n -v -l 127.0.0.1 0 ${SERVER_BG} 197 ${LISTEN_WAIT} 198 ${PORT_GET} 199 ! ${NC} -4 -v ::1 ${PORT} ${CLIENT_LOG} 200 grep 'no address associated with name' client.err 201 202REGRESS_TARGETS += run-tcp6-bad-localhost-client 203run-tcp6-bad-localhost-client: 204 ${SERVER_NC} -n -v -l 127.0.0.1 0 ${SERVER_BG} 205 ${LISTEN_WAIT} 206 ${PORT_GET} 207 ! ${NC} -6 -v 127.0.0.1 ${PORT} ${CLIENT_LOG} 208 grep 'no address associated with name' client.err 209 210REGRESS_TARGETS += run-tcp-sleep 211run-tcp-sleep: 212 ${SERVER_NC} -n -v -l 127.0.0.1 0 ${SERVER_BG} 213 ${LISTEN_WAIT} 214 ${PORT_GET} 215 ${CLIENT_NC} -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 216 ${CONNECT_WAIT} 217 ${TRANSFER_WAIT} 218 grep '^greeting$$' client.out 219 grep '^command$$' server.out 220 grep 'Listening on 127.0.0.1 ' server.err 221 grep 'Connection received on 127.0.0.1 ' server.err 222 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 223 # netcat waits for the other side to terminate, check it is sleeping 224 ${RUNNING_WAIT} 225 ps -xww -o comm,stat,args | grep '^${NC:T} .*S.* -v -l 127' 226 ps -xww -o comm,stat,args | grep '^${NC:T} .*S.* -v 127' 227 228# TCP keep 229 230REGRESS_TARGETS += run-tcp-keep 231run-tcp-keep: 232 ${SERVER_NC} -k -n -v -l 127.0.0.1 0 ${SERVER_BG} 233 ${LISTEN_WAIT} 234 ${PORT_GET} 235 ${CLIENT_NC} -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 236 ${CONNECT_WAIT} 237 ${TRANSFER_WAIT} 238 grep '^greeting$$' client.out 239 grep '^command$$' server.out 240 grep 'Listening on 127.0.0.1 ' server.err 241 grep 'Connection received on 127.0.0.1 ' server.err 242 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 243 # kill client and reconnect with a new one 244 :> server.err 245 pkill -l -f "^${NC} .* 127.0.0.1 ${PORT}$$" 246 rm -f client.{out,err} 247 :> server.out 248 # server closes the listen socket and binds a new one with new port 249 ${LISTEN_WAIT} 250 ${PORT_GET} 251 ${CLIENT_NC} -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 252 ${CONNECT_WAIT} 253 # server sends only one greeting, do not wait for a second one 254 ${TRANSFER_SERVER_WAIT} 255 ! grep 'greeting' client.out 256 # truncation of log results in NUL bytes, do not match ^ 257 grep 'command$$' server.out 258 grep 'Listening on 127.0.0.1 ' server.err 259 grep 'Connection received on 127.0.0.1 ' server.err 260 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 261 262### TLS ### 263 264REGRESS_TARGETS += run-tls 265run-tls: 127.0.0.1.crt 266 ${SERVER_NC} -c -C 127.0.0.1.crt -K 127.0.0.1.key -n -v -l 127.0.0.1 0 \ 267 ${SERVER_BG} 268 ${LISTEN_WAIT} 269 ${PORT_GET} 270 ${CLIENT_NC} -c -R 127.0.0.1.crt -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 271 ${CONNECT_WAIT} 272 ${TLS_WAIT} 273 ${TRANSFER_WAIT} 274 grep '^greeting$$' client.out 275 grep '^command$$' server.out 276 grep 'Listening on 127.0.0.1 ' server.err 277 grep 'Connection received on 127.0.0.1 ' server.err 278 # XXX success message should be issued after TLS handshake 279 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 280 grep 'Subject: .*/OU=server/CN=127.0.0.1' client.err 281 grep 'Issuer: .*/OU=server/CN=127.0.0.1' client.err 282 283REGRESS_TARGETS += run-tls6 284run-tls6: 1.crt 285 ${SERVER_NC} -c -C 1.crt -K 1.key -n -v -l ::1 0 ${SERVER_BG} 286 ${LISTEN_WAIT} 287 ${PORT_GET} 288 ${CLIENT_NC} -c -R 1.crt -n -v ::1 ${PORT} ${CLIENT_BG} 289 ${CONNECT_WAIT} 290 ${TLS_WAIT} 291 ${TRANSFER_WAIT} 292 grep '^greeting$$' client.out 293 grep '^command$$' server.out 294 grep 'Listening on ::1 ' server.err 295 grep 'Connection received on ::1 ' server.err 296 grep 'Connection to ::1 .* succeeded!' client.err 297 grep 'Subject: .*/OU=server/CN=::1' client.err 298 grep 'Issuer: .*/OU=server/CN=::1' client.err 299 300REGRESS_TARGETS += run-tls-localhost 301run-tls-localhost: server.crt ca.crt 302 ${SERVER_NC} -c -C server.crt -K server.key -v -l localhost 0 \ 303 ${SERVER_BG} 304 ${LISTEN_WAIT} 305 ${PORT_GET} 306 ${CLIENT_NC} -c -R ca.crt -v localhost ${PORT} ${CLIENT_BG} 307 ${CONNECT_WAIT} 308 ${TLS_WAIT} 309 ${TRANSFER_WAIT} 310 grep '^greeting$$' client.out 311 grep '^command$$' server.out 312 grep 'Listening on localhost ' server.err 313 grep 'Connection received on localhost ' server.err 314 grep 'Connection to localhost .* succeeded!' client.err 315 grep 'Subject: .*/OU=server/CN=localhost' client.err 316 grep 'Issuer: .*/OU=ca/CN=root' client.err 317 318REGRESS_TARGETS += run-tls-bad-ca 319run-tls-bad-ca: server.crt fake-ca.crt 320 ${SERVER_NC} -c -C server.crt -K server.key -v -l localhost 0 \ 321 ${SERVER_BG} 322 ${LISTEN_WAIT} 323 ${PORT_GET} 324 # the client uses the wrong root ca to verify the server cert 325 ! ${NC} -c -R fake-ca.crt -v localhost ${PORT} ${CLIENT_LOG} 326 ${CONNECT_WAIT} 327 grep 'Listening on localhost ' server.err 328 grep 'Connection received on localhost ' server.err 329 grep 'certificate verification failed' client.err 330 ! grep 'greeting' client.out 331 ! grep 'command' server.out 332 333REGRESS_TARGETS += run-tls-name 334run-tls-name: server.crt ca.crt 335 ${SERVER_NC} -c -C server.crt -K server.key -n -v -l 127.0.0.1 0 \ 336 ${SERVER_BG} 337 ${LISTEN_WAIT} 338 ${PORT_GET} 339 ${CLIENT_NC} -c -e localhost -R ca.crt -n -v 127.0.0.1 ${PORT} \ 340 ${CLIENT_BG} 341 ${CONNECT_WAIT} 342 ${TLS_WAIT} 343 ${TRANSFER_WAIT} 344 grep '^greeting$$' client.out 345 grep '^command$$' server.out 346 grep 'Listening on 127.0.0.1 ' server.err 347 grep 'Connection received on 127.0.0.1 ' server.err 348 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 349 grep 'Subject: .*/OU=server/CN=localhost' client.err 350 grep 'Issuer: .*/OU=ca/CN=root' client.err 351 352REGRESS_TARGETS += run-tls-bad-name 353run-tls-bad-name: server.crt ca.crt 354 ${SERVER_NC} -c -C server.crt -K server.key -n -v -l 127.0.0.1 0 \ 355 ${SERVER_BG} 356 ${LISTEN_WAIT} 357 ${PORT_GET} 358 # the common name in server.crt is localhost, not 127.0.0.1 359 ! ${NC} -c -e 127.0.0.1 -R ca.crt -n -v 127.0.0.1 ${PORT} ${CLIENT_LOG} 360 ${CONNECT_WAIT} 361 grep 'Listening on 127.0.0.1 ' server.err 362 grep 'Connection received on 127.0.0.1 ' server.err 363 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 364 grep "name \`127.0.0.1\' not present in server certificate" client.err 365 ! grep 'greeting' client.out 366 ! grep 'command' server.out 367 368REGRESS_TARGETS += run-tls-hash 369run-tls-hash: server.crt ca.crt server.hash 370 ${SERVER_NC} -c -C server.crt -K server.key -v -l localhost 0 \ 371 ${SERVER_BG} 372 ${LISTEN_WAIT} 373 ${PORT_GET} 374 # check that the server presents certificate with correct hash 375 ${CLIENT_NC} -c -H `cat server.hash` -R ca.crt -v localhost ${PORT} \ 376 ${CLIENT_BG} 377 ${CONNECT_WAIT} 378 ${TLS_WAIT} 379 ${TRANSFER_WAIT} 380 grep '^greeting$$' client.out 381 grep '^command$$' server.out 382 grep 'Listening on localhost ' server.err 383 grep 'Connection received on localhost ' server.err 384 grep 'Connection to localhost .* succeeded!' client.err 385 grep 'Subject: .*/OU=server/CN=localhost' client.err 386 grep 'Issuer: .*/OU=ca/CN=root' client.err 387 grep 'Cert Hash: SHA256:' client.err 388 389REGRESS_TARGETS += run-tls-bad-hash 390run-tls-bad-hash: server.crt ca.crt ca.hash 391 ${SERVER_NC} -c -C server.crt -K server.key -v -l localhost 0 \ 392 ${SERVER_BG} 393 ${LISTEN_WAIT} 394 ${PORT_GET} 395 # server presents certificate with server.hash, ca.hash is wrong 396 ! ${NC} -c -H `cat ca.hash` -R ca.crt -v localhost ${PORT} \ 397 ${CLIENT_LOG} 398 ${CONNECT_WAIT} 399 ${TLS_WAIT} 400 grep 'Listening on localhost ' server.err 401 grep 'Connection received on localhost ' server.err 402 grep 'Connection to localhost .* succeeded!' client.err 403 grep 'peer certificate is not SHA256:' client.err 404 ! grep 'greeting' client.out 405 ! grep 'command' server.out 406 407# TLS client certificate 408 409REGRESS_TARGETS += run-tls-client 410run-tls-client: client.crt server.crt ca.crt 411 # use client certificate and validate at server 412 ${SERVER_NC} -c -R ca.crt -C server.crt -K server.key -v -l \ 413 localhost 0 ${SERVER_BG} 414 ${LISTEN_WAIT} 415 ${PORT_GET} 416 ${CLIENT_NC} -c -R ca.crt -C client.crt -K client.key -v \ 417 localhost ${PORT} ${CLIENT_BG} 418 ${CONNECT_WAIT} 419 ${TLS_WAIT} 420 ${TRANSFER_WAIT} 421 grep '^greeting$$' client.out 422 grep '^command$$' server.out 423 grep 'Listening on localhost ' server.err 424 grep 'Connection received on localhost ' server.err 425 grep 'Connection to localhost .* succeeded!' client.err 426 grep 'Subject: .*/OU=server/CN=localhost' client.err 427 grep 'Issuer: .*/OU=ca/CN=root' client.err 428 grep 'Subject: .*/OU=client/CN=localhost' server.err 429 grep 'Issuer: .*/OU=ca/CN=root' server.err 430 431REGRESS_TARGETS += run-tls-bad-client 432run-tls-bad-client: client.crt server.crt ca.crt 433 # require client certificate at server 434 ${SERVER_NC} -c -T clientcert -R ca.crt -C server.crt -K server.key \ 435 -v -l localhost 0 ${SERVER_BG} 436 ${LISTEN_WAIT} 437 ${PORT_GET} 438 # client does not provide certificate 439 ${CLIENT_NC} -c -R ca.crt -v localhost ${PORT} ${CLIENT_BG} 440 ${CONNECT_WAIT} 441 ${TLS_WAIT} 442 grep 'Listening on localhost ' server.err 443 grep 'Connection received on localhost ' server.err 444 grep 'Connection to localhost .* succeeded!' client.err 445 grep 'Subject: .*/OU=server/CN=localhost' client.err 446 grep 'Issuer: .*/OU=ca/CN=root' client.err 447 grep 'No client certificate provided' server.err 448 ! grep 'greeting' client.out 449 ! grep 'command' server.out 450 451REGRESS_TARGETS += run-tls-client-bad-ca 452run-tls-client-bad-ca: client.crt server.crt ca.crt fake-ca.crt 453 # the server uses the wrong root ca to verify the client cert 454 ${SERVER_NC} -c -R fake-ca.crt -C server.crt -K server.key -v -l \ 455 localhost 0 ${SERVER_BG} 456 ${LISTEN_WAIT} 457 ${PORT_GET} 458 ! ${NC} -c -R ca.crt -C client.crt -K client.key -v \ 459 localhost ${PORT} ${CLIENT_LOG} 460 ${CONNECT_WAIT} 461 grep 'Listening on localhost ' server.err 462 grep 'Connection received on localhost ' server.err 463 grep 'Connection to localhost .* succeeded!' client.err 464 # XXX no specific error message for bogus ca 465 egrep \ 466 'CRYPTO_internal:(block type is not 01|data too large for modulus)'\ 467 server.err 468 ! grep 'greeting' client.out 469 ! grep 'command' server.out 470 471REGRESS_TARGETS += run-tls-client-name 472run-tls-client-name: client.crt server.crt ca.crt 473 # check client certificate name at server 474 ${SERVER_NC} -c -e localhost -R ca.crt -C server.crt -K server.key \ 475 -n -v -l 127.0.0.1 0 ${SERVER_BG} 476 ${LISTEN_WAIT} 477 ${PORT_GET} 478 ${CLIENT_NC} -4 -c -R ca.crt -C client.crt -K client.key -v \ 479 localhost ${PORT} ${CLIENT_BG} 480 ${CONNECT_WAIT} 481 ${TLS_WAIT} 482 ${TRANSFER_WAIT} 483 grep '^greeting$$' client.out 484 grep '^command$$' server.out 485 grep 'Listening on 127.0.0.1 ' server.err 486 grep 'Connection received on 127.0.0.1 ' server.err 487 grep 'Connection to localhost .* succeeded!' client.err 488 grep 'Subject: .*/OU=server/CN=localhost' client.err 489 grep 'Issuer: .*/OU=ca/CN=root' client.err 490 grep 'Subject: .*/OU=client/CN=localhost' server.err 491 grep 'Issuer: .*/OU=ca/CN=root' server.err 492 493REGRESS_TARGETS += run-tls-client-bad-name 494run-tls-client-bad-name: client.crt server.crt ca.crt 495 # client certificate is for localhost, check with 127.0.0.1 should fail 496 ${SERVER_NC} -c -e 127.0.0.1 -R ca.crt -C server.crt -K server.key \ 497 -n -v -l 127.0.0.1 0 ${SERVER_BG} 498 ${LISTEN_WAIT} 499 ${PORT_GET} 500 # client does not see any problem, TLS handshake works, wait for exit 501 ${CLIENT_NC} -4 -c -R ca.crt -C client.crt -K client.key -v \ 502 localhost ${PORT} ${CLIENT_BG} 503 ${CONNECT_WAIT} 504 ${TLS_WAIT} 505 grep 'Listening on 127.0.0.1 ' server.err 506 grep 'Connection received on 127.0.0.1 ' server.err 507 grep 'Connection to localhost .* succeeded!' client.err 508 grep 'Subject: .*/OU=server/CN=localhost' client.err 509 grep 'Issuer: .*/OU=ca/CN=root' client.err 510 grep 'Subject: .*/OU=client/CN=localhost' server.err 511 grep 'Issuer: .*/OU=ca/CN=root' server.err 512 grep 'name (127.0.0.1) not found in client cert' server.err 513 ! grep 'greeting' client.out 514 ! grep 'command' server.out 515 516REGRESS_TARGETS += run-tls-client-hash 517run-tls-client-hash: client.crt server.crt ca.crt client.hash 518 # check client certificate hash at server 519 ${SERVER_NC} -c -H `cat client.hash` -R ca.crt \ 520 -C server.crt -K server.key -v -l localhost 0 ${SERVER_BG} 521 ${LISTEN_WAIT} 522 ${PORT_GET} 523 ${CLIENT_NC} -c -R ca.crt -C client.crt -K client.key -v \ 524 localhost ${PORT} ${CLIENT_BG} 525 ${CONNECT_WAIT} 526 ${TLS_WAIT} 527 ${TRANSFER_WAIT} 528 grep '^greeting$$' client.out 529 grep '^command$$' server.out 530 grep 'Listening on localhost ' server.err 531 grep 'Connection received on localhost ' server.err 532 grep 'Connection to localhost .* succeeded!' client.err 533 grep 'Subject: .*/OU=server/CN=localhost' client.err 534 grep 'Issuer: .*/OU=ca/CN=root' client.err 535 grep 'Subject: .*/OU=client/CN=localhost' server.err 536 grep 'Issuer: .*/OU=ca/CN=root' server.err 537 538REGRESS_TARGETS += run-tls-client-bad-hash 539run-tls-client-bad-hash: client.crt server.crt ca.crt ca.hash 540 # client presents certificate with client.hash, ca.hash is wrong 541 ${SERVER_NC} -c -H `cat ca.hash` -R ca.crt \ 542 -C server.crt -K server.key -v -l localhost 0 ${SERVER_BG} 543 ${LISTEN_WAIT} 544 ${PORT_GET} 545 # client does not see any problem, TLS handshake works, wait for exit 546 ${CLIENT_NC} -c -R ca.crt -C client.crt -K client.key -v \ 547 localhost ${PORT} ${CLIENT_BG} 548 ${CONNECT_WAIT} 549 ${TLS_WAIT} 550 grep 'Listening on localhost ' server.err 551 grep 'Connection received on localhost ' server.err 552 grep 'Connection to localhost .* succeeded!' client.err 553 grep 'Subject: .*/OU=server/CN=localhost' client.err 554 grep 'Issuer: .*/OU=ca/CN=root' client.err 555 grep 'Subject: .*/OU=client/CN=localhost' server.err 556 grep 'Issuer: .*/OU=ca/CN=root' server.err 557 grep 'peer certificate is not SHA256:' server.err 558 ! grep 'greeting' client.out 559 ! grep 'command' server.out 560 561REGRESS_TARGETS += run-tls-client-no-hash 562run-tls-client-no-hash: client.crt server.crt ca.crt client.hash 563 # check client certificate hash at server if available 564 ${SERVER_NC} -c -H `cat client.hash` -R ca.crt \ 565 -C server.crt -K server.key -v -l localhost 0 ${SERVER_BG} 566 ${LISTEN_WAIT} 567 ${PORT_GET} 568 # client provides no certificate 569 ${CLIENT_NC} -c -R ca.crt -v localhost ${PORT} ${CLIENT_BG} 570 ${CONNECT_WAIT} 571 ${TLS_WAIT} 572 ${TRANSFER_WAIT} 573 # client certificate and hash is optional, transfer is successful 574 grep '^greeting$$' client.out 575 grep '^command$$' server.out 576 grep 'Listening on localhost ' server.err 577 grep 'Connection received on localhost ' server.err 578 grep 'Connection to localhost .* succeeded!' client.err 579 grep 'Subject: .*/OU=server/CN=localhost' client.err 580 grep 'Issuer: .*/OU=ca/CN=root' client.err 581 # non existing hash is not checked 582 ! grep 'Cert Hash: SHA256:' server.err 583 584REGRESS_TARGETS += run-tls-sleep 585run-tls-sleep: 127.0.0.1.crt 586 ${SERVER_NC} -c -C 127.0.0.1.crt -K 127.0.0.1.key -n -v -l 127.0.0.1 0 \ 587 ${SERVER_BG} 588 ${LISTEN_WAIT} 589 ${PORT_GET} 590 ${CLIENT_NC} -c -R 127.0.0.1.crt -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 591 ${CONNECT_WAIT} 592 ${TLS_WAIT} 593 ${TRANSFER_WAIT} 594 grep '^greeting$$' client.out 595 grep '^command$$' server.out 596 grep 'Listening on 127.0.0.1 ' server.err 597 grep 'Connection received on 127.0.0.1 ' server.err 598 # XXX success message should be issued after TLS handshake 599 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 600 grep 'Subject: .*/OU=server/CN=127.0.0.1' client.err 601 grep 'Issuer: .*/OU=server/CN=127.0.0.1' client.err 602 # netcat waits for the other side to terminate, check it is sleeping 603 ${RUNNING_WAIT} 604 ps -xww -o comm,stat,args | grep '^${NC:T} .*S.* -v -l 127' 605 ps -xww -o comm,stat,args | grep '^${NC:T} .*S.* -v 127' 606 607# TLS keep 608 609REGRESS_TARGETS += run-tls-keep 610run-tls-keep: 127.0.0.1.crt 611 ${SERVER_NC} -k -c -C 127.0.0.1.crt -K 127.0.0.1.key -n -v -l \ 612 127.0.0.1 0 ${SERVER_BG} 613 ${LISTEN_WAIT} 614 ${PORT_GET} 615 ${CLIENT_NC} -c -R 127.0.0.1.crt -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 616 ${CONNECT_WAIT} 617 ${TLS_WAIT} 618 ${TRANSFER_WAIT} 619 grep '^greeting$$' client.out 620 grep '^command$$' server.out 621 grep 'Listening on 127.0.0.1 ' server.err 622 grep 'Connection received on 127.0.0.1 ' server.err 623 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 624 grep 'Subject: .*/OU=server/CN=127.0.0.1' client.err 625 grep 'Issuer: .*/OU=server/CN=127.0.0.1' client.err 626 # kill client and reconnect with a new one 627 :> server.err 628 pkill -l -f "^${NC} .* 127.0.0.1 ${PORT}$$" 629 rm -f client.{out,err} 630 :> server.out 631 # server closes the listen socket and binds a new one with new port 632 ${LISTEN_WAIT} 633 ${PORT_GET} 634 ${CLIENT_NC} -c -R 127.0.0.1.crt -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 635 ${CONNECT_WAIT} 636 ${TLS_WAIT} 637 # server sends only one greeting, do not wait for a second one 638 ${TRANSFER_SERVER_WAIT} 639 ! grep 'greeting' client.out 640 # truncation of log results in NUL bytes, do not match ^ 641 grep 'command$$' server.out 642 grep 'Listening on 127.0.0.1 ' server.err 643 grep 'Connection received on 127.0.0.1 ' server.err 644 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 645 grep 'Subject: .*/OU=server/CN=127.0.0.1' client.err 646 grep 'Issuer: .*/OU=server/CN=127.0.0.1' client.err 647 648### UDP #### 649 650REGRESS_TARGETS += run-udp 651run-udp: 652 ${SERVER_NC} -u -n -v -l 127.0.0.1 0 ${SERVER_BG} 653 ${BIND_WAIT} 654 ${PORT_GET} 655 # the -v option would cause udptest() to write additional X 656 ${CLIENT_NC} -u -n 127.0.0.1 ${PORT} ${CLIENT_BG} 657 ${TRANSFER_WAIT} 658 grep '^greeting$$' client.out 659 grep '^command$$' server.out 660 grep 'Bound on 127.0.0.1 ' server.err 661 grep 'Connection received on 127.0.0.1 ' server.err 662 663REGRESS_TARGETS += run-udp6 664run-udp6: 665 ${SERVER_NC} -u -n -v -l ::1 0 ${SERVER_BG} 666 ${BIND_WAIT} 667 ${PORT_GET} 668 # the -v option would cause udptest() to write additional X 669 ${CLIENT_NC} -u -n ::1 ${PORT} ${CLIENT_BG} 670 ${TRANSFER_WAIT} 671 grep '^greeting$$' client.out 672 grep '^command$$' server.out 673 grep 'Bound on ::1 ' server.err 674 grep 'Connection received on ::1 ' server.err 675 676REGRESS_TARGETS += run-udp-probe 677run-udp-probe: 678 ${SERVER_NC} -u -n -v -l 127.0.0.1 0 ${SERVER_BG} 679 ${BIND_WAIT} 680 ${PORT_GET} 681 ${CLIENT_NC} -u -v -n 127.0.0.1 ${PORT} ${CLIENT_BG} 682 ${TRANSFER_WAIT} 683 grep '^greeting$$' client.out 684 # client sends 4 X UDP packets to check connection 685 grep '^XXXXcommand$$' server.out 686 grep 'Bound on 127.0.0.1 ' server.err 687 grep 'Connection received on 127.0.0.1 ' server.err 688 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 689 690# UDP resolver 691 692REGRESS_TARGETS += run-udp-localhost 693run-udp-localhost: 694 ${SERVER_NC} -u -4 -v -l localhost 0 ${SERVER_BG} 695 ${BIND_WAIT} 696 ${PORT_GET} 697 # the -v option would cause udptest() to write additional X 698 ${CLIENT_NC} -u -4 localhost ${PORT} ${CLIENT_BG} 699 ${TRANSFER_WAIT} 700 grep '^greeting$$' client.out 701 grep '^command$$' server.out 702 grep 'Bound on localhost ' server.err 703 grep 'Connection received on localhost ' server.err 704 705REGRESS_TARGETS += run-udp6-localhost 706run-udp6-localhost: 707 ${SERVER_NC} -u -6 -v -l localhost 0 ${SERVER_BG} 708 ${BIND_WAIT} 709 ${PORT_GET} 710 # the -v option would cause udptest() to write additional X 711 ${CLIENT_NC} -u -6 localhost ${PORT} ${CLIENT_BG} 712 ${TRANSFER_WAIT} 713 grep '^greeting$$' client.out 714 grep '^command$$' server.out 715 grep 'Bound on localhost ' server.err 716 grep 'Connection received on localhost ' server.err 717 718# UDP keep 719 720REGRESS_TARGETS += run-udp-keep 721run-udp-keep: 722 ${SERVER_NC} -k -u -n -v -l 127.0.0.1 0 ${SERVER_BG} 723 ${BIND_WAIT} 724 ${PORT_GET} 725 # the -v option causes udptest() to write additional X 726 ${CLIENT_NC} -u -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 727 # server does not connect, nothing reaches the client 728 ${TRANSFER_SERVER_WAIT} 729 ! grep 'greeting' client.out 730 grep '^XXXXcommand$$' server.out 731 grep 'Bound on 127.0.0.1 ' server.err 732 # client does not connect 733 ! grep 'Connection received on ' server.err 734 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 735 # kill client and reconnect with a new one 736 :> server.err 737 pkill -l -f "^${NC} .* 127.0.0.1 ${PORT}$$" 738 rm -f client.{out,err} 739 :> server.out 740 ${CLIENT_NC} -u -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 741 ${TRANSFER_SERVER_WAIT} 742 ! grep 'greeting' client.out 743 # truncation of log results in NUL bytes, do not match ^ 744 grep 'XXXXcommand$$' server.out 745 # server keeps socket and does not bind again 746 ! grep 'Bound on ' server.err 747 # client does not connect 748 ! grep 'Connection received on ' server.err 749 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 750 751REGRESS_TARGETS += run-udp-sleep 752run-udp-sleep: 753 ${SERVER_NC} -u -n -v -l 127.0.0.1 0 ${SERVER_BG} 754 ${BIND_WAIT} 755 ${PORT_GET} 756 # the -v option would cause udptest() to write additional X 757 ${CLIENT_NC} -u -n 127.0.0.1 ${PORT} ${CLIENT_BG} 758 ${TRANSFER_WAIT} 759 grep '^greeting$$' client.out 760 grep '^command$$' server.out 761 grep 'Bound on 127.0.0.1 ' server.err 762 grep 'Connection received on 127.0.0.1 ' server.err 763 # netcat waits for the other side to terminate, check it is sleeping 764 ${RUNNING_WAIT} 765 ps -xww -o comm,stat,args | grep '^${NC:T} .*S.* -v -l 127' 766 ps -xww -o comm,stat,args | grep '^${NC:T} .*S.* -n 127' 767 768### UNIX #### 769 770REGRESS_TARGETS += run-unix 771run-unix: 772 rm -f server.sock 773 ${SERVER_NC} -U -n -v -l server.sock ${SERVER_BG} 774 ${LISTEN_WAIT} 775 ${CLIENT_NC} -U -n -v server.sock ${CLIENT_BG} 776 ${TRANSFER_WAIT} 777 grep '^greeting$$' client.out 778 grep '^command$$' server.out 779 # XXX message Bound and Listening is redundant 780 grep 'Bound on server.sock$$' server.err 781 grep 'Listening on server.sock$$' server.err 782 grep 'Connection received on server.sock$$' server.err 783 # XXX message succeeded is missing 784 ! grep 'Connection to server.sock .* succeeded!' client.err 785 786REGRESS_TARGETS += run-unix-namelookup 787run-unix-namelookup: 788 rm -f server.sock 789 ${SERVER_NC} -U -v -l server.sock ${SERVER_BG} 790 ${LISTEN_WAIT} 791 ${CLIENT_NC} -U -v server.sock ${CLIENT_BG} 792 ${TRANSFER_WAIT} 793 grep '^greeting$$' client.out 794 grep '^command$$' server.out 795 # XXX message Bound and Listening is redundant 796 grep 'Bound on server.sock$$' server.err 797 grep 'Listening on server.sock$$' server.err 798 grep 'Connection received on server.sock$$' server.err 799 # XXX message succeeded is missing 800 ! grep 'Connection to server.sock .* succeeded!' client.err 801 802REGRESS_TARGETS += run-unix-probe 803run-unix-probe: 804 rm -f server.sock 805 ${SERVER_NC} -U -n -v -l server.sock ${SERVER_BG} 806 ${LISTEN_WAIT} 807 # connect and close immediately, check if socket is listening 808 ${NC} -N -U -v server.sock </dev/null ${CLIENT_LOG} 809 # XXX message Bound and Listening is redundant 810 grep 'Bound on server.sock$$' server.err 811 grep 'Listening on server.sock$$' server.err 812 grep 'Connection received on server.sock$$' server.err 813 # XXX message succeeded is missing 814 ! grep 'Connection to server.sock .* succeeded!' client.err 815 # server accepts one connection, second connection should be refused 816 ! ${NC} -N -U -v server.sock </dev/null ${CLIENT_LOG} 817 grep 'server.sock: Connection refused' client.err 818 # connection to non existing socket file should fail 819 rm server.sock 820 ! ${NC} -N -U -v server.sock </dev/null ${CLIENT_LOG} 821 grep 'server.sock: No such file or directory' client.err 822 823# UNIX keep 824 825REGRESS_TARGETS += run-unix-keep 826run-unix-keep: 827 rm -f server.sock 828 ${SERVER_NC} -k -U -n -v -l server.sock ${SERVER_BG} 829 ${LISTEN_WAIT} 830 ${CLIENT_NC} -U -n -v server.sock ${CLIENT_BG} 831 ${TRANSFER_WAIT} 832 grep '^greeting$$' client.out 833 grep '^command$$' server.out 834 # XXX message Bound and Listening is redundant 835 grep 'Bound on server.sock$$' server.err 836 grep 'Listening on server.sock$$' server.err 837 grep 'Connection received on server.sock$$' server.err 838 # XXX message succeeded is missing 839 ! grep 'Connection to server.sock .* succeeded!' client.err 840 # kill client and reconnect with a new one 841 :> server.err 842 pkill -l -f "^${NC} .* -v server.sock$$" 843 rm -f client.{out,err} 844 :> server.out 845 ${CLIENT_NC} -U -n -v server.sock ${CLIENT_BG} 846 # server sends only one greeting, do not wait for a second one 847 ${TRANSFER_SERVER_WAIT} 848 ! grep 'greeting' client.out 849 # truncation of log results in NUL bytes, do not match ^ 850 grep 'command$$' server.out 851 grep 'Connection received on server.sock$$' server.err 852 # XXX message succeeded is missing 853 ! grep 'Connection to server.sock .* succeeded!' client.err 854 855# UNIX dgram 856 857REGRESS_TARGETS += run-unix-dgram 858run-unix-dgram: 859 rm -f {client,server}.sock 860 ${SERVER_NC} -U -u -n -v -l server.sock ${SERVER_BG} 861 ${BIND_WAIT} 862 ${CLIENT_NC} -U -u -n -v server.sock ${CLIENT_BG} 863 ${TRANSFER_WAIT} 864 ${BIND_CLIENT_WAIT} 865 grep '^greeting$$' client.out 866 grep '^command$$' server.out 867 grep 'Bound on server.sock$$' server.err 868 grep 'Connection received on server.sock$$' server.err 869 # XXX message succeeded is missing 870 ! grep 'Connection to server.sock .* succeeded!' client.err 871 872REGRESS_TARGETS += run-unix-dgram-namelookup 873run-unix-dgram-namelookup: 874 rm -f {client,server}.sock 875 ${SERVER_NC} -U -u -v -l server.sock ${SERVER_BG} 876 ${BIND_WAIT} 877 ${CLIENT_NC} -U -u -v server.sock ${CLIENT_BG} 878 ${TRANSFER_WAIT} 879 ${BIND_CLIENT_WAIT} 880 grep '^greeting$$' client.out 881 grep '^command$$' server.out 882 grep 'Bound on server.sock$$' server.err 883 grep 'Connection received on server.sock$$' server.err 884 # XXX message succeeded is missing 885 ! grep 'Connection to server.sock .* succeeded!' client.err 886 887REGRESS_TARGETS += run-unix-dgram-clientsock 888run-unix-dgram-clientsock: 889 rm -f {client,server}.sock 890 ${SERVER_NC} -U -u -n -v -l server.sock ${SERVER_BG} 891 ${BIND_WAIT} 892 ${CLIENT_NC} -U -u -n -v -s client.sock server.sock ${CLIENT_BG} 893 ${TRANSFER_WAIT} 894 grep '^greeting$$' client.out 895 grep '^command$$' server.out 896 grep 'Bound on server.sock$$' server.err 897 grep 'Connection received on server.sock$$' server.err 898 # XXX message succeeded is missing 899 ! grep 'Connection to server.sock .* succeeded!' client.err 900 901# UNIX dgram keep 902 903REGRESS_TARGETS += run-unix-dgram-keep 904run-unix-dgram-keep: 905 rm -f {client,server}.sock 906 ${SERVER_NC} -k -U -u -n -v -l server.sock ${SERVER_BG} 907 ${BIND_WAIT} 908 ${CLIENT_NC} -U -u -n -v server.sock ${CLIENT_BG} 909 # server does not connect, nothing reaches the client 910 ${TRANSFER_SERVER_WAIT} 911 ${BIND_CLIENT_WAIT} 912 ! grep 'greeting' client.out 913 grep '^command$$' server.out 914 grep 'Bound on server.sock$$' server.err 915 # client does not connect 916 ! grep 'Connection received on ' server.err 917 # XXX message succeeded is missing 918 ! grep 'Connection to server.sock .* succeeded!' client.err 919 # kill client and reconnect with a new one 920 :> server.err 921 pkill -l -f "^${NC} .* -v server.sock$$" 922 rm -f client.{out,err} 923 :> server.out 924 ${CLIENT_NC} -U -u -n -v server.sock ${CLIENT_BG} 925 ${TRANSFER_SERVER_WAIT} 926 ${BIND_CLIENT_WAIT} 927 ! grep 'greeting' client.out 928 # truncation of log results in NUL bytes, do not match ^ 929 grep 'command$$' server.out 930 # server keeps socket and does not bind again 931 ! grep 'Bound on ' server.err 932 # client does not connect 933 ! grep 'Connection received on ' server.err 934 # XXX message succeeded is missing 935 ! grep 'Connection to 127.0.0.1 .* succeeded!' client.err 936 937### TCP with test peer 938 939REGRESS_TARGETS += run-tcp-test 940run-tcp-test: server-tcp client-tcp 941 # test the test tools 942 ./server-tcp -s greeting -r command 127.0.0.1 0 >server.port 943 ./client-tcp -r greeting -s command 127.0.0.1 ${PORT} >client.port 944 945REGRESS_TARGETS += run-tcp-test-shutdown 946run-tcp-test-shutdown: server-tcp client-tcp 947 # test the test tools 948 ./server-tcp -s greeting -N -r command -E 127.0.0.1 0 >server.port 949 ./client-tcp -r greeting -E -s command -N 127.0.0.1 ${PORT} >client.port 950 951# TCP netcat server with test client 952 953REGRESS_TARGETS += run-tcp-server 954run-tcp-server: client-tcp 955 ${SERVER_NC} -n -v -l 127.0.0.1 0 ${SERVER_BG} 956 ${LISTEN_WAIT} 957 ${PORT_GET} 958 # test client read from netcat, then send line and exit 959 ./client-tcp -r greeting -s command 127.0.0.1 ${PORT} >client.port 960 ${TRANSFER_SERVER_WAIT} 961 grep '^command$$' server.out 962 grep 'Listening on 127.0.0.1 ' server.err 963 grep 'Connection received on 127.0.0.1 ' server.err 964 965REGRESS_TARGETS += run-tcp-server-eof 966run-tcp-server-eof: client-tcp 967 ${SERVER_NC} -n -v -l 127.0.0.1 0 ${SERVER_BG} 968 ${LISTEN_WAIT} 969 ${PORT_GET} 970 # test client read from netcat, then send line, shutdown, wait for eof 971 ./client-tcp -r greeting -s command -N -E 127.0.0.1 ${PORT} >client.port 972 ${TRANSFER_SERVER_WAIT} 973 grep '^command$$' server.out 974 grep 'Listening on 127.0.0.1 ' server.err 975 grep 'Connection received on 127.0.0.1 ' server.err 976 977REGRESS_TARGETS += run-tcp-server-reverse-eof 978run-tcp-server-reverse-eof: client-tcp 979 ${SERVER_NC} -n -v -l 127.0.0.1 0 ${SERVER_BG} 980 ${LISTEN_WAIT} 981 ${PORT_GET} 982 # test client send to netcat, shutdown, then read line, wait for eof 983 ./client-tcp -s command -N -r greeting -E 127.0.0.1 ${PORT} >client.port 984 ${TRANSFER_SERVER_WAIT} 985 grep '^command$$' server.out 986 grep 'Listening on 127.0.0.1 ' server.err 987 grep 'Connection received on 127.0.0.1 ' server.err 988 989REGRESS_TARGETS += run-tcp-server-shutdown-eof 990run-tcp-server-shutdown-eof: client-tcp 991 # netcat calls shutdown on output after EOF on input 992 ${SERVER_NC} -N -n -v -l 127.0.0.1 0 ${SERVER_BG} 993 ${LISTEN_WAIT} 994 ${PORT_GET} 995 # test client read from netcat, then send line, wait for eof, shutdown 996 ./client-tcp -r greeting -s command -E -N 127.0.0.1 ${PORT} >client.port 997 ${TRANSFER_SERVER_WAIT} 998 grep '^command$$' server.out 999 grep 'Listening on 127.0.0.1 ' server.err 1000 grep 'Connection received on 127.0.0.1 ' server.err 1001 1002REGRESS_TARGETS += run-tcp-server-shutdown-reverse-eof 1003run-tcp-server-shutdown-reverse-eof: client-tcp 1004 # netcat calls shutdown on output after EOF on input 1005 ${SERVER_NC} -N -n -v -l 127.0.0.1 0 ${SERVER_BG} 1006 ${LISTEN_WAIT} 1007 ${PORT_GET} 1008 # test client send to netcat, shutdown, then read line, wait for eof 1009 ./client-tcp -s command -N -r greeting -E 127.0.0.1 ${PORT} >client.port 1010 ${TRANSFER_SERVER_WAIT} 1011 grep '^command$$' server.out 1012 grep 'Listening on 127.0.0.1 ' server.err 1013 grep 'Connection received on 127.0.0.1 ' server.err 1014 1015# TCP netcat client with test server 1016 1017REGRESS_TARGETS += run-tcp-client 1018run-tcp-client: server-tcp 1019 # test server send to netcat, then read line and exit 1020 ./server-tcp -s greeting -r command 127.0.0.1 0 >server.port 1021 ${CLIENT_NC} -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 1022 ${CONNECT_WAIT} 1023 ${TRANSFER_CLIENT_WAIT} 1024 grep '^greeting$$' client.out 1025 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 1026 1027REGRESS_TARGETS += run-tcp-client-eof 1028run-tcp-client-eof: server-tcp 1029 # test server send to netcat, shutdown, then read line, wait for eof 1030 ./server-tcp -s greeting -N -r command -E 127.0.0.1 0 >server.port 1031 ${CLIENT_NC} -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 1032 ${CONNECT_WAIT} 1033 ${TRANSFER_CLIENT_WAIT} 1034 grep '^greeting$$' client.out 1035 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 1036 1037REGRESS_TARGETS += run-tcp-client-reverse-eof 1038run-tcp-client-reverse-eof: server-tcp 1039 # test server read from netcat, then read line, wait for eof, shutdown 1040 ./server-tcp -r command -s greeting -E -N 127.0.0.1 0 >server.port 1041 ${CLIENT_NC} -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 1042 ${CONNECT_WAIT} 1043 ${TRANSFER_CLIENT_WAIT} 1044 grep '^greeting$$' client.out 1045 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 1046 1047REGRESS_TARGETS += run-tcp-client-shutdown-eof 1048run-tcp-client-shutdown-eof: server-tcp 1049 # test server send to netcat, shutdown, then read line, wait for eof 1050 ./server-tcp -s greeting -N -r command -E 127.0.0.1 0 >server.port 1051 # netcat calls shutdown on output after EOF on input 1052 ${CLIENT_NC} -N -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 1053 ${CONNECT_WAIT} 1054 ${TRANSFER_CLIENT_WAIT} 1055 grep '^greeting$$' client.out 1056 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 1057 1058REGRESS_TARGETS += run-tcp-client-shutdown-reverse-eof 1059run-tcp-client-shutdown-reverse-eof: server-tcp 1060 # test server read from netcat, wait for eof, then read line, shutdown 1061 ./server-tcp -r command -E -s greeting -N 127.0.0.1 0 >server.port 1062 # netcat calls shutdown on output after EOF on input 1063 ${CLIENT_NC} -N -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} 1064 ${CONNECT_WAIT} 1065 ${TRANSFER_CLIENT_WAIT} 1066 grep '^greeting$$' client.out 1067 grep 'Connection to 127.0.0.1 .* succeeded!' client.err 1068 1069 1070.PHONY: ${REGRESS_SETUP} ${REGRESS_CLEANUP} ${REGRESS_TARGETS} 1071 1072### create certificates for TLS 1073 1074CLEANFILES += {127.0.0.1,1}.{crt,key} \ 1075 ca.{crt,key,srl,hash} fake-ca.{crt,key,hash} \ 1076 {client,server}.{req,crt,key,hash} 1077 1078127.0.0.1.crt: 1079 openssl req -batch -new \ 1080 -subj /L=OpenBSD/O=netcat-regress/OU=server/CN=${@:R}/ \ 1081 -nodes -newkey rsa -keyout ${@:R}.key -x509 -out $@ 1082 10831.crt: 1084 openssl req -batch -new \ 1085 -subj /L=OpenBSD/O=netcat-regress/OU=server/CN=::1/ \ 1086 -nodes -newkey rsa -keyout 1.key -x509 -out $@ 1087 1088ca.crt fake-ca.crt: 1089 openssl req -batch -new \ 1090 -subj /L=OpenBSD/O=netcat-regress/OU=ca/CN=root/ \ 1091 -nodes -newkey rsa -keyout ${@:R}.key -x509 -out $@ 1092 1093client.req server.req: 1094 openssl req -batch -new \ 1095 -subj /L=OpenBSD/O=netcat-regress/OU=${@:R}/CN=localhost/ \ 1096 -nodes -newkey rsa -keyout ${@:R}.key -out $@ 1097 1098client.crt server.crt: ca.crt ${@:R}.req 1099 openssl x509 -CAcreateserial -CAkey ca.key -CA ca.crt \ 1100 -req -in ${@:R}.req -out $@ 1101 1102client.hash server.hash ca.hash: ${@:R}.crt 1103 openssl x509 -in ${@:R}.crt -outform der | sha256 | sed s/^/SHA256:/ >$@ 1104 1105.include <bsd.regress.mk> 1106