aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelen <jjelen@redhat.com>2019-05-27 17:25:13 +0200
committerAndreas Schneider <asn@cryptomilk.org>2019-06-12 11:15:20 +0200
commit5f01ed027817996d53cdef60b8e145899fd5ec6a (patch)
treeffbc5eb5756bf9f8f86a4d7692153275a9df0f6d
parent196361c1f0a7668708e7f1aff611e0f3c90960c3 (diff)
downloadlibssh-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.c54
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();