diff options
author | Jakub Jelen <jjelen@redhat.com> | 2019-05-27 17:25:13 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2019-06-12 11:15:20 +0200 |
commit | 5f01ed027817996d53cdef60b8e145899fd5ec6a (patch) | |
tree | ffbc5eb5756bf9f8f86a4d7692153275a9df0f6d | |
parent | 196361c1f0a7668708e7f1aff611e0f3c90960c3 (diff) | |
download | libssh-5f01ed027817996d53cdef60b8e145899fd5ec6a.tar.gz libssh-5f01ed027817996d53cdef60b8e145899fd5ec6a.tar.xz libssh-5f01ed027817996d53cdef60b8e145899fd5ec6a.zip |
tests: Verify duplicate items are removed from knownhosts algorithms
Signed-off-by: Jakub Jelen <jjelen@redhat.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
-rw-r--r-- | tests/client/torture_knownhosts_verify.c | 54 |
1 files changed, 54 insertions, 0 deletions
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(); |