From c4a00ee430a32b0f695c0f25302be93a6fa5dea2 Mon Sep 17 00:00:00 2001 From: Norbert Pocs Date: Wed, 19 Apr 2023 13:50:20 +0200 Subject: [PATCH] torture_connect: Test bad IPv6 connection trying IPv4 If IPv6 address fail to connect IPv4 should be tried in non-blocking mode. Signed-off-by: Norbert Pocs Reviewed-by: Jakub Jelen --- tests/client/CMakeLists.txt | 5 ++++- tests/client/torture_connect.c | 24 ++++++++++++++++++++++++ tests/etc/hosts.in | 3 +++ tests/torture.c | 2 ++ tests/torture.h | 1 + 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/tests/client/CMakeLists.txt b/tests/client/CMakeLists.txt index ecaff8fb..6bb1762a 100644 --- a/tests/client/CMakeLists.txt +++ b/tests/client/CMakeLists.txt @@ -55,6 +55,9 @@ if (WITH_SFTP) ${SFTP_BENCHMARK_TESTS}) endif (WITH_SFTP) +set(TORTURE_CLIENT_ENVIRONMENT ${TORTURE_ENVIRONMENT}) +list(APPEND TORTURE_CLIENT_ENVIRONMENT NSS_WRAPPER_HOSTS=${CMAKE_BINARY_DIR}/tests/etc/hosts) + foreach(_CLI_TEST ${LIBSSH_CLIENT_TESTS}) add_cmocka_test(${_CLI_TEST} SOURCES ${_CLI_TEST}.c @@ -73,6 +76,6 @@ foreach(_CLI_TEST ${LIBSSH_CLIENT_TESTS}) TEST ${_CLI_TEST} PROPERTY - ENVIRONMENT ${TORTURE_ENVIRONMENT}) + ENVIRONMENT ${TORTURE_CLIENT_ENVIRONMENT}) endif() endforeach() diff --git a/tests/client/torture_connect.c b/tests/client/torture_connect.c index a4e4a3bf..f086488d 100644 --- a/tests/client/torture_connect.c +++ b/tests/client/torture_connect.c @@ -120,6 +120,29 @@ static void torture_connect_nonblocking(void **state) { assert_ssh_return_code(session, rc); } +static void torture_connect_ipv6(void **state) { + struct torture_state *s = *state; + ssh_session session = s->ssh.session; + int rc; + + rc = ssh_options_set(session, SSH_OPTIONS_HOST, "testing"); + assert_ssh_return_code(session, rc); + /* set non-blocking mode */ + ssh_set_blocking(session, 0); + + do { + rc = ssh_connect(session); + } while (rc == SSH_AGAIN); + + assert_ssh_return_code(session, rc); + + /* should work for blocking mode too */ + ssh_disconnect(session); + ssh_set_blocking(session, 1); + rc = ssh_connect(session); + assert_ssh_return_code(session, rc); +} + #if 0 /* This does not work with socket_wrapper */ static void torture_connect_timeout(void **state) { struct torture_state *s = *state; @@ -240,6 +263,7 @@ int torture_run_tests(void) { struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(torture_connect_peer_discon_msg, session_setup, session_teardown), cmocka_unit_test_setup_teardown(torture_connect_nonblocking, session_setup, session_teardown), + cmocka_unit_test_setup_teardown(torture_connect_ipv6, session_setup, session_teardown), cmocka_unit_test_setup_teardown(torture_connect_double, session_setup, session_teardown), cmocka_unit_test_setup_teardown(torture_connect_failure, session_setup, session_teardown), #if 0 diff --git a/tests/etc/hosts.in b/tests/etc/hosts.in index 2ab69799..8891125d 100644 --- a/tests/etc/hosts.in +++ b/tests/etc/hosts.in @@ -1,2 +1,5 @@ 127.0.0.10 server.libssh.site 127.0.0.21 client.libssh.site + +123.0.0.11 testing +fd00::5357:5f0a testing diff --git a/tests/torture.c b/tests/torture.c index e4d2ed2f..820fd108 100644 --- a/tests/torture.c +++ b/tests/torture.c @@ -730,6 +730,7 @@ static void torture_setup_create_sshd_config(void **state, bool pam) const char config_string[]= "Port 22\n" "ListenAddress 127.0.0.10\n" + "ListenAddress fd00::5357:5f0a\n" "%s %s\n" /* ed25519 HostKey */ "%s %s\n" /* RSA HostKey */ "%s %s\n" /* ECDSA HostKey */ @@ -765,6 +766,7 @@ static void torture_setup_create_sshd_config(void **state, bool pam) const char fips_config_string[]= "Port 22\n" "ListenAddress 127.0.0.10\n" + "ListenAddress fd00::5357:5f0a\n" "%s %s\n" /* RSA HostKey */ "%s %s\n" /* ECDSA HostKey */ "\n" diff --git a/tests/torture.h b/tests/torture.h index ee17a8b8..eb2765da 100644 --- a/tests/torture.h +++ b/tests/torture.h @@ -46,6 +46,7 @@ #endif /* assert_return_code */ #define TORTURE_SSH_SERVER "127.0.0.10" +#define TORTURE_SSH_SERVER_IP6 "fd00::5357:5f0a" #define TORTURE_SSH_USER_BOB "bob" #define TORTURE_SSH_USER_BOB_PASSWORD "secret"