mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-08-05 20:55:46 +03:00
tests: Use temporary file for known_hosts
Previously, the tests were sharing the same file path to create the known_hosts file, which can create a race condition if the tests run in parallel. Such file was deleted between tests. By using different different files for each test, the risk of race conditions is eliminated. Moreover, it makes unnecessary to destroy the file between tests. Signed-off-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
committed by
Andreas Schneider
parent
e9e8292370
commit
d4fe8e1f62
@@ -33,7 +33,7 @@
|
|||||||
#include "session.c"
|
#include "session.c"
|
||||||
#include "known_hosts.c"
|
#include "known_hosts.c"
|
||||||
|
|
||||||
#define TORTURE_KNOWN_HOSTS_FILE "libssh_torture_knownhosts"
|
#define TMP_FILE_TEMPLATE "known_hosts_XXXXXX"
|
||||||
|
|
||||||
#define BADRSA "AAAAB3NzaC1yc2EAAAADAQABAAABAQChm5" \
|
#define BADRSA "AAAAB3NzaC1yc2EAAAADAQABAAABAQChm5" \
|
||||||
"a6Av65O8cKtx5YXOnui3wJnYE6A6J/I4kZSAibbn14Jcl+34VJQwv96f25AxNmo" \
|
"a6Av65O8cKtx5YXOnui3wJnYE6A6J/I4kZSAibbn14Jcl+34VJQwv96f25AxNmo" \
|
||||||
@@ -62,6 +62,7 @@ static int session_setup(void **state)
|
|||||||
struct torture_state *s = *state;
|
struct torture_state *s = *state;
|
||||||
int verbosity = torture_libssh_verbosity();
|
int verbosity = torture_libssh_verbosity();
|
||||||
struct passwd *pwd;
|
struct passwd *pwd;
|
||||||
|
bool process_config = false;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
pwd = getpwnam("bob");
|
pwd = getpwnam("bob");
|
||||||
@@ -74,8 +75,9 @@ static int session_setup(void **state)
|
|||||||
assert_non_null(s->ssh.session);
|
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_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_HOST, TORTURE_SSH_SERVER);
|
||||||
|
|
||||||
ssh_options_set(s->ssh.session, SSH_OPTIONS_USER, TORTURE_SSH_USER_ALICE);
|
ssh_options_set(s->ssh.session, SSH_OPTIONS_USER, TORTURE_SSH_USER_ALICE);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -84,19 +86,10 @@ static int session_setup(void **state)
|
|||||||
static int session_teardown(void **state)
|
static int session_teardown(void **state)
|
||||||
{
|
{
|
||||||
struct torture_state *s = *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_disconnect(s->ssh.session);
|
||||||
ssh_free(s->ssh.session);
|
ssh_free(s->ssh.session);
|
||||||
|
|
||||||
unlink(known_hosts_file);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,17 +97,21 @@ static int session_teardown(void **state)
|
|||||||
static void torture_knownhosts_port(void **state) {
|
static void torture_knownhosts_port(void **state) {
|
||||||
struct torture_state *s = *state;
|
struct torture_state *s = *state;
|
||||||
ssh_session session = s->ssh.session;
|
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 buffer[200];
|
||||||
char *p;
|
char *p;
|
||||||
FILE *file;
|
FILE *file;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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);
|
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
||||||
assert_ssh_return_code(session, rc);
|
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_HOST, TORTURE_SSH_SERVER);
|
||||||
ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
||||||
|
free(known_hosts_file);
|
||||||
|
|
||||||
rc = ssh_connect(session);
|
rc = ssh_connect(session);
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
@@ -155,16 +153,20 @@ static void torture_knownhosts_wildcard(void **state)
|
|||||||
{
|
{
|
||||||
struct torture_state *s = *state;
|
struct torture_state *s = *state;
|
||||||
ssh_session session = s->ssh.session;
|
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;
|
const char *key = NULL;
|
||||||
FILE *file;
|
FILE *file;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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");
|
file = fopen(known_hosts_file, "w");
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
@@ -176,6 +178,7 @@ static void torture_knownhosts_wildcard(void **state)
|
|||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
|
free(known_hosts_file);
|
||||||
|
|
||||||
rc = ssh_connect(session);
|
rc = ssh_connect(session);
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
@@ -188,16 +191,20 @@ static void torture_knownhosts_standard_port(void **state)
|
|||||||
{
|
{
|
||||||
struct torture_state *s = *state;
|
struct torture_state *s = *state;
|
||||||
ssh_session session = s->ssh.session;
|
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;
|
const char *key = NULL;
|
||||||
FILE *file;
|
FILE *file;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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");
|
file = fopen(known_hosts_file, "w");
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
@@ -209,6 +216,7 @@ static void torture_knownhosts_standard_port(void **state)
|
|||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
|
free(known_hosts_file);
|
||||||
|
|
||||||
rc = ssh_connect(session);
|
rc = ssh_connect(session);
|
||||||
assert_ssh_return_code(session, rc);
|
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) {
|
static void torture_knownhosts_fail(void **state) {
|
||||||
struct torture_state *s = *state;
|
struct torture_state *s = *state;
|
||||||
ssh_session session = s->ssh.session;
|
ssh_session session = s->ssh.session;
|
||||||
char known_hosts_file[1024];
|
char tmp_file[1024] = {0};
|
||||||
|
char *known_hosts_file = NULL;
|
||||||
FILE *file;
|
FILE *file;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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);
|
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
@@ -238,6 +250,7 @@ static void torture_knownhosts_fail(void **state) {
|
|||||||
|
|
||||||
file = fopen(known_hosts_file, "w");
|
file = fopen(known_hosts_file, "w");
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
|
free(known_hosts_file);
|
||||||
|
|
||||||
fprintf(file, "127.0.0.10 ssh-rsa %s\n", BADRSA);
|
fprintf(file, "127.0.0.10 ssh-rsa %s\n", BADRSA);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
@@ -252,15 +265,19 @@ static void torture_knownhosts_fail(void **state) {
|
|||||||
static void torture_knownhosts_other(void **state) {
|
static void torture_knownhosts_other(void **state) {
|
||||||
struct torture_state *s = *state;
|
struct torture_state *s = *state;
|
||||||
ssh_session session = s->ssh.session;
|
ssh_session session = s->ssh.session;
|
||||||
char known_hosts_file[1024];
|
char tmp_file[1024] = {0};
|
||||||
|
char *known_hosts_file = NULL;
|
||||||
FILE *file;
|
FILE *file;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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);
|
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
@@ -270,6 +287,8 @@ static void torture_knownhosts_other(void **state) {
|
|||||||
|
|
||||||
file = fopen(known_hosts_file, "w");
|
file = fopen(known_hosts_file, "w");
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
|
free(known_hosts_file);
|
||||||
|
|
||||||
fprintf(file, "127.0.0.10 ssh-rsa %s\n", BADRSA);
|
fprintf(file, "127.0.0.10 ssh-rsa %s\n", BADRSA);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
@@ -283,14 +302,18 @@ static void torture_knownhosts_other(void **state) {
|
|||||||
static void torture_knownhosts_other_auto(void **state) {
|
static void torture_knownhosts_other_auto(void **state) {
|
||||||
struct torture_state *s = *state;
|
struct torture_state *s = *state;
|
||||||
ssh_session session = s->ssh.session;
|
ssh_session session = s->ssh.session;
|
||||||
char known_hosts_file[1024];
|
char tmp_file[1024] = {0};
|
||||||
|
char *known_hosts_file = NULL;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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);
|
rc = ssh_options_set(session, SSH_OPTIONS_HOST, TORTURE_SSH_SERVER);
|
||||||
assert_ssh_return_code(session, rc);
|
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);
|
assert_int_equal(rc, SSH_SERVER_KNOWN_OK);
|
||||||
|
|
||||||
/* session will be freed by session_teardown() */
|
/* session will be freed by session_teardown() */
|
||||||
|
free(known_hosts_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void torture_knownhosts_conflict(void **state) {
|
static void torture_knownhosts_conflict(void **state) {
|
||||||
struct torture_state *s = *state;
|
struct torture_state *s = *state;
|
||||||
ssh_session session = s->ssh.session;
|
ssh_session session = s->ssh.session;
|
||||||
char known_hosts_file[1024];
|
char tmp_file[1024] = {0};
|
||||||
|
char *known_hosts_file = NULL;
|
||||||
FILE *file;
|
FILE *file;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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);
|
rc = ssh_options_set(session, SSH_OPTIONS_HOST, TORTURE_SSH_SERVER);
|
||||||
assert_ssh_return_code(session, rc);
|
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);
|
assert_int_equal(rc, SSH_SERVER_KNOWN_OK);
|
||||||
|
|
||||||
/* session will be freed by session_teardown() */
|
/* session will be freed by session_teardown() */
|
||||||
|
free(known_hosts_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void torture_knownhosts_no_hostkeychecking(void **state)
|
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;
|
struct torture_state *s = *state;
|
||||||
ssh_session session = s->ssh.session;
|
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;
|
enum ssh_known_hosts_e found;
|
||||||
int strict_host_key_checking = 0;
|
int strict_host_key_checking = 0;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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);
|
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
|
free(known_hosts_file);
|
||||||
|
|
||||||
rc = ssh_options_set(session, SSH_OPTIONS_HOSTKEYS, "ecdsa-sha2-nistp521");
|
rc = ssh_options_set(session, SSH_OPTIONS_HOSTKEYS, "ecdsa-sha2-nistp521");
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
|
@@ -31,9 +31,15 @@
|
|||||||
|
|
||||||
#include "knownhosts.c"
|
#include "knownhosts.c"
|
||||||
|
|
||||||
#define TORTURE_KNOWN_HOSTS_FILE "libssh_torture_knownhosts"
|
#define TMP_FILE_TEMPLATE "known_hosts_XXXXXX"
|
||||||
|
|
||||||
#define BAD_RSA "AAAAB3NzaC1yc2EAAAADAQABAAABAQDXvXuawzaArEwkLIXTz/EWywLOCtqQL3P9yKkrhz6AplXP2PhOh5pyxa1VfGKe453jNeYBJ0ROto3BshXgZXbo86oLXTkbe0gO5xi3r5WjXxjOFvRRTLot5fPLNDOv9+TnsPmkNn0iIeyPnfrcPIyjWt5zSWUfkNC8oNHxsiSshjpbJvTXSDipukpUy41d7jg4uWGuonMTF7yu7HfuHqq7lhb0WlwSpfbqAbfYARBddcdcARyhix4RMWZZqVY20H3Vsjq8bjKC+NJXFce1PRg+qcOWQdlXEei4dkzAvHvfQRx1TjzkrBZ6B6thmZtyeb9IsiB0tg2g0JN2VTAGkxqp"
|
#define BAD_RSA "AAAAB3NzaC1yc2EAAAADAQABAAABAQDXvXuawzaArEwkLIXTz/EWywLOC" \
|
||||||
|
"tqQL3P9yKkrhz6AplXP2PhOh5pyxa1VfGKe453jNeYBJ0ROto3BshXgZX" \
|
||||||
|
"bo86oLXTkbe0gO5xi3r5WjXxjOFvRRTLot5fPLNDOv9+TnsPmkNn0iIey" \
|
||||||
|
"PnfrcPIyjWt5zSWUfkNC8oNHxsiSshjpbJvTXSDipukpUy41d7jg4uWGu" \
|
||||||
|
"onMTF7yu7HfuHqq7lhb0WlwSpfbqAbfYARBddcdcARyhix4RMWZZqVY20" \
|
||||||
|
"H3Vsjq8bjKC+NJXFce1PRg+qcOWQdlXEei4dkzAvHvfQRx1TjzkrBZ6B6" \
|
||||||
|
"thmZtyeb9IsiB0tg2g0JN2VTAGkxqp"
|
||||||
|
|
||||||
const char template[] = "temp_dir_XXXXXX";
|
const char template[] = "temp_dir_XXXXXX";
|
||||||
|
|
||||||
@@ -57,6 +63,8 @@ static int session_setup(void **state)
|
|||||||
struct passwd *pwd;
|
struct passwd *pwd;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
bool process_config = false;
|
||||||
|
|
||||||
pwd = getpwnam("bob");
|
pwd = getpwnam("bob");
|
||||||
assert_non_null(pwd);
|
assert_non_null(pwd);
|
||||||
|
|
||||||
@@ -69,6 +77,10 @@ static int session_setup(void **state)
|
|||||||
rc = ssh_options_set(s->ssh.session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
|
rc = ssh_options_set(s->ssh.session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
|
||||||
assert_ssh_return_code(s->ssh.session, rc);
|
assert_ssh_return_code(s->ssh.session, rc);
|
||||||
|
|
||||||
|
rc = ssh_options_set(s->ssh.session, SSH_OPTIONS_PROCESS_CONFIG,
|
||||||
|
&process_config);
|
||||||
|
assert_ssh_return_code(s->ssh.session, rc);
|
||||||
|
|
||||||
rc = ssh_options_set(s->ssh.session, SSH_OPTIONS_HOST, TORTURE_SSH_SERVER);
|
rc = ssh_options_set(s->ssh.session, SSH_OPTIONS_HOST, TORTURE_SSH_SERVER);
|
||||||
assert_ssh_return_code(s->ssh.session, rc);
|
assert_ssh_return_code(s->ssh.session, rc);
|
||||||
|
|
||||||
@@ -83,19 +95,9 @@ static int session_setup(void **state)
|
|||||||
static int session_teardown(void **state)
|
static int session_teardown(void **state)
|
||||||
{
|
{
|
||||||
struct torture_state *s = *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_disconnect(s->ssh.session);
|
||||||
ssh_free(s->ssh.session);
|
ssh_free(s->ssh.session);
|
||||||
|
|
||||||
unlink(known_hosts_file);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,15 +151,19 @@ static void torture_knownhosts_precheck(void **state)
|
|||||||
struct ssh_iterator *it = NULL;
|
struct ssh_iterator *it = NULL;
|
||||||
size_t algo_count;
|
size_t algo_count;
|
||||||
const char *algo = NULL;
|
const char *algo = NULL;
|
||||||
char known_hosts_file[1024] = {0};
|
char tmp_file[1024] = {0};
|
||||||
|
char *known_hosts_file = NULL;
|
||||||
FILE *file;
|
FILE *file;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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");
|
file = fopen(known_hosts_file, "w");
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
@@ -177,6 +183,7 @@ static void torture_knownhosts_precheck(void **state)
|
|||||||
|
|
||||||
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
|
free(known_hosts_file);
|
||||||
|
|
||||||
algo_list = ssh_known_hosts_get_algorithms(session);
|
algo_list = ssh_known_hosts_get_algorithms(session);
|
||||||
assert_non_null(algo_list);
|
assert_non_null(algo_list);
|
||||||
@@ -214,15 +221,19 @@ static void torture_knownhosts_duplicate(void **state)
|
|||||||
struct ssh_iterator *it = NULL;
|
struct ssh_iterator *it = NULL;
|
||||||
size_t algo_count;
|
size_t algo_count;
|
||||||
const char *algo = NULL;
|
const char *algo = NULL;
|
||||||
char known_hosts_file[1024] = {0};
|
char tmp_file[1024] = {0};
|
||||||
|
char *known_hosts_file = NULL;
|
||||||
FILE *file;
|
FILE *file;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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");
|
file = fopen(known_hosts_file, "w");
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
@@ -242,6 +253,7 @@ static void torture_knownhosts_duplicate(void **state)
|
|||||||
|
|
||||||
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
|
free(known_hosts_file);
|
||||||
|
|
||||||
algo_list = ssh_known_hosts_get_algorithms(session);
|
algo_list = ssh_known_hosts_get_algorithms(session);
|
||||||
assert_non_null(algo_list);
|
assert_non_null(algo_list);
|
||||||
@@ -261,16 +273,20 @@ static void torture_knownhosts_other(void **state)
|
|||||||
{
|
{
|
||||||
struct torture_state *s = *state;
|
struct torture_state *s = *state;
|
||||||
ssh_session session = s->ssh.session;
|
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;
|
enum ssh_known_hosts_e found;
|
||||||
FILE *file = NULL;
|
FILE *file = NULL;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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);
|
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
@@ -284,6 +300,7 @@ static void torture_knownhosts_other(void **state)
|
|||||||
"127.0.0.10 %s\n",
|
"127.0.0.10 %s\n",
|
||||||
torture_get_testkey_pub(SSH_KEYTYPE_RSA));
|
torture_get_testkey_pub(SSH_KEYTYPE_RSA));
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
free(known_hosts_file);
|
||||||
|
|
||||||
rc = ssh_connect(session);
|
rc = ssh_connect(session);
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
@@ -296,15 +313,19 @@ static void torture_knownhosts_unknown(void **state)
|
|||||||
{
|
{
|
||||||
struct torture_state *s = *state;
|
struct torture_state *s = *state;
|
||||||
ssh_session session = s->ssh.session;
|
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;
|
enum ssh_known_hosts_e found;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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);
|
rc = ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, known_hosts_file);
|
||||||
assert_ssh_return_code(session, rc);
|
assert_ssh_return_code(session, rc);
|
||||||
@@ -349,22 +370,27 @@ static void torture_knownhosts_unknown(void **state)
|
|||||||
assert_int_equal(found, SSH_KNOWN_HOSTS_OK);
|
assert_int_equal(found, SSH_KNOWN_HOSTS_OK);
|
||||||
|
|
||||||
/* session will be freed by session_teardown() */
|
/* session will be freed by session_teardown() */
|
||||||
|
free(known_hosts_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void torture_knownhosts_conflict(void **state)
|
static void torture_knownhosts_conflict(void **state)
|
||||||
{
|
{
|
||||||
struct torture_state *s = *state;
|
struct torture_state *s = *state;
|
||||||
ssh_session session = s->ssh.session;
|
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;
|
enum ssh_known_hosts_e found;
|
||||||
FILE *file = NULL;
|
FILE *file = NULL;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
snprintf(known_hosts_file,
|
snprintf(tmp_file,
|
||||||
sizeof(known_hosts_file),
|
sizeof(tmp_file),
|
||||||
"%s/%s",
|
"%s/%s",
|
||||||
s->socket_dir,
|
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");
|
file = fopen(known_hosts_file, "w");
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
@@ -414,6 +440,7 @@ static void torture_knownhosts_conflict(void **state)
|
|||||||
assert_int_equal(found, SSH_KNOWN_HOSTS_OK);
|
assert_int_equal(found, SSH_KNOWN_HOSTS_OK);
|
||||||
|
|
||||||
/* session will be freed by session_teardown() */
|
/* session will be freed by session_teardown() */
|
||||||
|
free(known_hosts_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void torture_knownhosts_new_file(void **state)
|
static void torture_knownhosts_new_file(void **state)
|
||||||
|
Reference in New Issue
Block a user