From 5f01ed027817996d53cdef60b8e145899fd5ec6a Mon Sep 17 00:00:00 2001 From: Jakub Jelen Date: Mon, 27 May 2019 17:25:13 +0200 Subject: [PATCH] tests: Verify duplicate items are removed from knownhosts algorithms Signed-off-by: Jakub Jelen Reviewed-by: Andreas Schneider --- tests/client/torture_knownhosts_verify.c | 54 ++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/tests/client/torture_knownhosts_verify.c b/tests/client/torture_knownhosts_verify.c index c9f4f633..43425668 100644 --- a/tests/client/torture_knownhosts_verify.c +++ b/tests/client/torture_knownhosts_verify.c @@ -204,6 +204,57 @@ static void torture_knownhosts_precheck(void **state) ssh_list_free(algo_list); } +static void torture_knownhosts_duplicate(void **state) +{ + struct torture_state *s = *state; + ssh_session session = s->ssh.session; + struct ssh_list *algo_list = NULL; + struct ssh_iterator *it = NULL; + size_t algo_count; + const char *algo = NULL; + char known_hosts_file[1024] = {0}; + FILE *file; + int rc; + + snprintf(known_hosts_file, + sizeof(known_hosts_file), + "%s/%s", + s->socket_dir, + TORTURE_KNOWN_HOSTS_FILE); + + file = fopen(known_hosts_file, "w"); + assert_non_null(file); + fprintf(file, + "127.0.0.10 %s\n", + torture_get_testkey_pub(SSH_KEYTYPE_RSA)); + + fprintf(file, + "127.0.0.10 %s\n", + torture_get_testkey_pub(SSH_KEYTYPE_RSA)); + + fprintf(file, + "127.0.0.10 %s\n", + torture_get_testkey_pub(SSH_KEYTYPE_RSA)); + + fclose(file); + + rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file); + assert_ssh_return_code(session, rc); + + algo_list = ssh_known_hosts_get_algorithms(session); + assert_non_null(algo_list); + + algo_count = ssh_list_count(algo_list); + assert_int_equal(algo_count, 1); + + it = ssh_list_get_iterator(algo_list); + assert_non_null(it); + algo = ssh_iterator_value(const char *, it); + assert_string_equal(algo, "ssh-rsa"); + + ssh_list_free(algo_list); +} + static void torture_knownhosts_other(void **state) { struct torture_state *s = *state; @@ -384,6 +435,9 @@ int torture_run_tests(void) { cmocka_unit_test_setup_teardown(torture_knownhosts_conflict, session_setup, session_teardown), + cmocka_unit_test_setup_teardown(torture_knownhosts_duplicate, + session_setup, + session_teardown), }; ssh_init();