1
1

tests: Unsupported and unknown configuration options do not crash

Signed-off-by: Jakub Jelen <jjelen@redhat.com>
Этот коммит содержится в:
Jakub Jelen 2018-08-16 10:32:11 +02:00 коммит произвёл Andreas Schneider
родитель 6848c23d84
Коммит c004b43fde

Просмотреть файл

@ -16,6 +16,7 @@ extern LIBSSH_THREAD int ssh_log_level;
#define LIBSSH_TESTCONFIG6 "libssh_testconfig6.tmp" #define LIBSSH_TESTCONFIG6 "libssh_testconfig6.tmp"
#define LIBSSH_TESTCONFIG7 "libssh_testconfig7.tmp" #define LIBSSH_TESTCONFIG7 "libssh_testconfig7.tmp"
#define LIBSSH_TESTCONFIG8 "libssh_testconfig8.tmp" #define LIBSSH_TESTCONFIG8 "libssh_testconfig8.tmp"
#define LIBSSH_TESTCONFIG9 "libssh_testconfig9.tmp"
#define LIBSSH_TESTCONFIGGLOB "libssh_testc*[36].tmp" #define LIBSSH_TESTCONFIGGLOB "libssh_testc*[36].tmp"
#define USERNAME "testuser" #define USERNAME "testuser"
@ -90,6 +91,17 @@ static int setup_config_files(void **state)
"Host nopubkey\n" "Host nopubkey\n"
"\tPubkeyAuthentication no\n"); "\tPubkeyAuthentication no\n");
/* unsupported options and corner cases */
torture_write_file(LIBSSH_TESTCONFIG9,
"\n" /* empty line */
"# comment line\n"
" # comment line not starting with hash\n"
"UnknownConfigurationOption yes\n"
"GSSAPIKexAlgorithms yes\n"
"ControlMaster auto\n" /* SOC_NA */
"VisualHostkey yes\n" /* SOC_UNSUPPORTED */
"");
session = ssh_new(); session = ssh_new();
*state = session; *state = session;
@ -106,6 +118,7 @@ static int teardown(void **state)
unlink(LIBSSH_TESTCONFIG6); unlink(LIBSSH_TESTCONFIG6);
unlink(LIBSSH_TESTCONFIG7); unlink(LIBSSH_TESTCONFIG7);
unlink(LIBSSH_TESTCONFIG8); unlink(LIBSSH_TESTCONFIG8);
unlink(LIBSSH_TESTCONFIG9);
ssh_free(*state); ssh_free(*state);
@ -269,6 +282,21 @@ static void torture_config_auth_methods(void **state) {
assert_true(session->opts.flags & SSH_OPT_FLAG_PUBKEY_AUTH); assert_true(session->opts.flags & SSH_OPT_FLAG_PUBKEY_AUTH);
} }
/**
* @brief Verify the configuration parser does not choke on unknown
* or unsupported configuration options
*/
static void torture_config_unknown(void **state) {
ssh_session session = *state;
int ret = 0;
/* test corner cases */
ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG9);
assert_true(ret == 0);
ret = ssh_config_parse_file(session, "/etc/ssh/ssh_config");
assert_true(ret == 0);
}
int torture_run_tests(void) { int torture_run_tests(void) {
int rc; int rc;
struct CMUnitTest tests[] = { struct CMUnitTest tests[] = {
@ -287,6 +315,9 @@ int torture_run_tests(void) {
cmocka_unit_test_setup_teardown(torture_config_auth_methods, cmocka_unit_test_setup_teardown(torture_config_auth_methods,
setup_config_files, setup_config_files,
teardown), teardown),
cmocka_unit_test_setup_teardown(torture_config_unknown,
setup_config_files,
teardown),
}; };