aboutsummaryrefslogtreecommitdiff
path: root/tests/client/torture_knownhosts.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/client/torture_knownhosts.c')
-rw-r--r--tests/client/torture_knownhosts.c120
1 files changed, 77 insertions, 43 deletions
diff --git a/tests/client/torture_knownhosts.c b/tests/client/torture_knownhosts.c
index d075998e..c0b3ee18 100644
--- a/tests/client/torture_knownhosts.c
+++ b/tests/client/torture_knownhosts.c
@@ -33,7 +33,7 @@
#include "session.c"
#include "known_hosts.c"
-#define TORTURE_KNOWN_HOSTS_FILE "libssh_torture_knownhosts"
+#define TMP_FILE_TEMPLATE "known_hosts_XXXXXX"
#define BADRSA "AAAAB3NzaC1yc2EAAAADAQABAAABAQChm5" \
"a6Av65O8cKtx5YXOnui3wJnYE6A6J/I4kZSAibbn14Jcl+34VJQwv96f25AxNmo" \
@@ -62,6 +62,7 @@ static int session_setup(void **state)
struct torture_state *s = *state;
int verbosity = torture_libssh_verbosity();
struct passwd *pwd;
+ bool process_config = false;
int rc;
pwd = getpwnam("bob");
@@ -74,8 +75,9 @@ static int session_setup(void **state)
assert_non_null(s->ssh.session);
ssh_options_set(s->ssh.session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
+ ssh_options_set(s->ssh.session, SSH_OPTIONS_PROCESS_CONFIG,
+ &process_config);
ssh_options_set(s->ssh.session, SSH_OPTIONS_HOST, TORTURE_SSH_SERVER);
-
ssh_options_set(s->ssh.session, SSH_OPTIONS_USER, TORTURE_SSH_USER_ALICE);
return 0;
@@ -84,19 +86,10 @@ static int session_setup(void **state)
static int session_teardown(void **state)
{
struct torture_state *s = *state;
- char known_hosts_file[1024];
-
- snprintf(known_hosts_file,
- sizeof(known_hosts_file),
- "%s/%s",
- s->socket_dir,
- TORTURE_KNOWN_HOSTS_FILE);
ssh_disconnect(s->ssh.session);
ssh_free(s->ssh.session);
- unlink(known_hosts_file);
-
return 0;
}
@@ -104,17 +97,21 @@ static int session_teardown(void **state)
static void torture_knownhosts_port(void **state) {
struct torture_state *s = *state;
ssh_session session = s->ssh.session;
- char known_hosts_file[1024];
+ char tmp_file[1024] = {0};
+ char *known_hosts_file = NULL;
char buffer[200];
char *p;
FILE *file;
int rc;
- snprintf(known_hosts_file,
- sizeof(known_hosts_file),
+ snprintf(tmp_file,
+ sizeof(tmp_file),
"%s/%s",
s->socket_dir,
- TORTURE_KNOWN_HOSTS_FILE);
+ TMP_FILE_TEMPLATE);
+
+ known_hosts_file = torture_create_temp_file(tmp_file);
+ assert_non_null(known_hosts_file);
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
assert_ssh_return_code(session, rc);
@@ -142,6 +139,7 @@ static void torture_knownhosts_port(void **state) {
ssh_options_set(session, SSH_OPTIONS_HOST, TORTURE_SSH_SERVER);
ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
+ free(known_hosts_file);
rc = ssh_connect(session);
assert_ssh_return_code(session, rc);
@@ -155,16 +153,20 @@ static void torture_knownhosts_wildcard(void **state)
{
struct torture_state *s = *state;
ssh_session session = s->ssh.session;
- char known_hosts_file[1024];
+ char tmp_file[1024] = {0};
+ char *known_hosts_file = NULL;
const char *key = NULL;
FILE *file;
int rc;
- snprintf(known_hosts_file,
- sizeof(known_hosts_file),
+ snprintf(tmp_file,
+ sizeof(tmp_file),
"%s/%s",
s->socket_dir,
- TORTURE_KNOWN_HOSTS_FILE);
+ TMP_FILE_TEMPLATE);
+
+ known_hosts_file = torture_create_temp_file(tmp_file);
+ assert_non_null(known_hosts_file);
file = fopen(known_hosts_file, "w");
assert_non_null(file);
@@ -176,6 +178,7 @@ static void torture_knownhosts_wildcard(void **state)
assert_ssh_return_code(session, rc);
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
assert_ssh_return_code(session, rc);
+ free(known_hosts_file);
rc = ssh_connect(session);
assert_ssh_return_code(session, rc);
@@ -188,16 +191,20 @@ static void torture_knownhosts_standard_port(void **state)
{
struct torture_state *s = *state;
ssh_session session = s->ssh.session;
- char known_hosts_file[1024];
+ char tmp_file[1024] = {0};
+ char *known_hosts_file = NULL;
const char *key = NULL;
FILE *file;
int rc;
- snprintf(known_hosts_file,
- sizeof(known_hosts_file),
+ snprintf(tmp_file,
+ sizeof(tmp_file),
"%s/%s",
s->socket_dir,
- TORTURE_KNOWN_HOSTS_FILE);
+ TMP_FILE_TEMPLATE);
+
+ known_hosts_file = torture_create_temp_file(tmp_file);
+ assert_non_null(known_hosts_file);
file = fopen(known_hosts_file, "w");
assert_non_null(file);
@@ -209,6 +216,7 @@ static void torture_knownhosts_standard_port(void **state)
assert_ssh_return_code(session, rc);
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
assert_ssh_return_code(session, rc);
+ free(known_hosts_file);
rc = ssh_connect(session);
assert_ssh_return_code(session, rc);
@@ -220,15 +228,19 @@ static void torture_knownhosts_standard_port(void **state)
static void torture_knownhosts_fail(void **state) {
struct torture_state *s = *state;
ssh_session session = s->ssh.session;
- char known_hosts_file[1024];
+ char tmp_file[1024] = {0};
+ char *known_hosts_file = NULL;
FILE *file;
int rc;
- snprintf(known_hosts_file,
- sizeof(known_hosts_file),
+ snprintf(tmp_file,
+ sizeof(tmp_file),
"%s/%s",
s->socket_dir,
- TORTURE_KNOWN_HOSTS_FILE);
+ TMP_FILE_TEMPLATE);
+
+ known_hosts_file = torture_create_temp_file(tmp_file);
+ assert_non_null(known_hosts_file);
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
assert_ssh_return_code(session, rc);
@@ -238,6 +250,7 @@ static void torture_knownhosts_fail(void **state) {
file = fopen(known_hosts_file, "w");
assert_non_null(file);
+ free(known_hosts_file);
fprintf(file, "127.0.0.10 ssh-rsa %s\n", BADRSA);
fclose(file);
@@ -252,15 +265,19 @@ static void torture_knownhosts_fail(void **state) {
static void torture_knownhosts_other(void **state) {
struct torture_state *s = *state;
ssh_session session = s->ssh.session;
- char known_hosts_file[1024];
+ char tmp_file[1024] = {0};
+ char *known_hosts_file = NULL;
FILE *file;
int rc;
- snprintf(known_hosts_file,
- sizeof(known_hosts_file),
+ snprintf(tmp_file,
+ sizeof(tmp_file),
"%s/%s",
s->socket_dir,
- TORTURE_KNOWN_HOSTS_FILE);
+ TMP_FILE_TEMPLATE);
+
+ known_hosts_file = torture_create_temp_file(tmp_file);
+ assert_non_null(known_hosts_file);
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
assert_ssh_return_code(session, rc);
@@ -270,6 +287,8 @@ static void torture_knownhosts_other(void **state) {
file = fopen(known_hosts_file, "w");
assert_non_null(file);
+ free(known_hosts_file);
+
fprintf(file, "127.0.0.10 ssh-rsa %s\n", BADRSA);
fclose(file);
@@ -283,14 +302,18 @@ static void torture_knownhosts_other(void **state) {
static void torture_knownhosts_other_auto(void **state) {
struct torture_state *s = *state;
ssh_session session = s->ssh.session;
- char known_hosts_file[1024];
+ char tmp_file[1024] = {0};
+ char *known_hosts_file = NULL;
int rc;
- snprintf(known_hosts_file,
- sizeof(known_hosts_file),
+ snprintf(tmp_file,
+ sizeof(tmp_file),
"%s/%s",
s->socket_dir,
- TORTURE_KNOWN_HOSTS_FILE);
+ TMP_FILE_TEMPLATE);
+
+ known_hosts_file = torture_create_temp_file(tmp_file);
+ assert_non_null(known_hosts_file);
rc = ssh_options_set(session, SSH_OPTIONS_HOST, TORTURE_SSH_SERVER);
assert_ssh_return_code(session, rc);
@@ -333,20 +356,25 @@ static void torture_knownhosts_other_auto(void **state) {
assert_int_equal(rc, SSH_SERVER_KNOWN_OK);
/* session will be freed by session_teardown() */
+ free(known_hosts_file);
}
static void torture_knownhosts_conflict(void **state) {
struct torture_state *s = *state;
ssh_session session = s->ssh.session;
- char known_hosts_file[1024];
+ char tmp_file[1024] = {0};
+ char *known_hosts_file = NULL;
FILE *file;
int rc;
- snprintf(known_hosts_file,
- sizeof(known_hosts_file),
+ snprintf(tmp_file,
+ sizeof(tmp_file),
"%s/%s",
s->socket_dir,
- TORTURE_KNOWN_HOSTS_FILE);
+ TMP_FILE_TEMPLATE);
+
+ known_hosts_file = torture_create_temp_file(tmp_file);
+ assert_non_null(known_hosts_file);
rc = ssh_options_set(session, SSH_OPTIONS_HOST, TORTURE_SSH_SERVER);
assert_ssh_return_code(session, rc);
@@ -393,6 +421,7 @@ static void torture_knownhosts_conflict(void **state) {
assert_int_equal(rc, SSH_SERVER_KNOWN_OK);
/* session will be freed by session_teardown() */
+ free(known_hosts_file);
}
static void torture_knownhosts_no_hostkeychecking(void **state)
@@ -400,19 +429,24 @@ static void torture_knownhosts_no_hostkeychecking(void **state)
struct torture_state *s = *state;
ssh_session session = s->ssh.session;
- char known_hosts_file[1024] = {0};
+ char tmp_file[1024] = {0};
+ char *known_hosts_file = NULL;
enum ssh_known_hosts_e found;
int strict_host_key_checking = 0;
int rc;
- snprintf(known_hosts_file,
- sizeof(known_hosts_file),
+ snprintf(tmp_file,
+ sizeof(tmp_file),
"%s/%s",
s->socket_dir,
- TORTURE_KNOWN_HOSTS_FILE);
+ TMP_FILE_TEMPLATE);
+
+ known_hosts_file = torture_create_temp_file(tmp_file);
+ assert_non_null(known_hosts_file);
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
assert_ssh_return_code(session, rc);
+ free(known_hosts_file);
rc = ssh_options_set(session, SSH_OPTIONS_HOSTKEYS, "ecdsa-sha2-nistp521");
assert_ssh_return_code(session, rc);