mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-07-29 13:01:13 +03:00
feat: add gssapi server callbacks tests
Signed-off-by: Gauravsingh Sisodia <xaerru@gmail.com> Reviewed-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Sahana Prasad <sahana@redhat.com>
This commit is contained in:
committed by
Sahana Prasad
parent
965a94b515
commit
3bfa6e8637
@ -31,8 +31,8 @@ free_test_server_state(void **state)
|
||||
SAFE_FREE(tss);
|
||||
}
|
||||
|
||||
static int
|
||||
setup_default_server(void **state)
|
||||
static void
|
||||
setup_config(void **state)
|
||||
{
|
||||
struct torture_state *s = NULL;
|
||||
struct server_state_st *ss = NULL;
|
||||
@ -48,10 +48,6 @@ setup_default_server(void **state)
|
||||
char kdc_env[255] = {0};
|
||||
int rc;
|
||||
|
||||
char pid_str[1024];
|
||||
|
||||
pid_t pid;
|
||||
|
||||
assert_non_null(state);
|
||||
|
||||
tss = (struct test_server_st *)calloc(1, sizeof(struct test_server_st));
|
||||
@ -135,9 +131,6 @@ setup_default_server(void **state)
|
||||
ss->max_tries = 3;
|
||||
ss->error = 0;
|
||||
|
||||
tss->state = s;
|
||||
tss->ss = ss;
|
||||
|
||||
/* Use the default session handling function */
|
||||
ss->handle_session = default_handle_session_cb;
|
||||
assert_non_null(ss->handle_session);
|
||||
@ -145,6 +138,28 @@ setup_default_server(void **state)
|
||||
/* Do not use global configuration */
|
||||
ss->parse_global_config = false;
|
||||
|
||||
tss->state = s;
|
||||
tss->ss = ss;
|
||||
|
||||
*state = tss;
|
||||
}
|
||||
|
||||
static int
|
||||
setup_default_server(void **state)
|
||||
{
|
||||
struct torture_state *s = NULL;
|
||||
struct server_state_st *ss = NULL;
|
||||
struct test_server_st *tss = NULL;
|
||||
char pid_str[1024];
|
||||
pid_t pid;
|
||||
int rc;
|
||||
|
||||
setup_config(state);
|
||||
|
||||
tss = *state;
|
||||
ss = tss->ss;
|
||||
s = tss->state;
|
||||
|
||||
/* Start the server using the default values */
|
||||
pid = fork_run_server(ss, free_test_server_state, &tss);
|
||||
if (pid < 0) {
|
||||
@ -257,9 +272,8 @@ session_teardown(void **state)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
torture_gssapi_server_auth(void **state)
|
||||
torture_gssapi_server_auth_no_client_cred(void **state)
|
||||
{
|
||||
struct test_server_st *tss = *state;
|
||||
struct torture_state *s;
|
||||
@ -290,6 +304,27 @@ torture_gssapi_server_auth(void **state)
|
||||
rc = ssh_userauth_gssapi(session);
|
||||
assert_int_equal(rc, SSH_AUTH_DENIED);
|
||||
torture_teardown_kdc_server((void **)&s);
|
||||
}
|
||||
|
||||
static void
|
||||
torture_gssapi_server_auth_invalid_host(void **state)
|
||||
{
|
||||
struct test_server_st *tss = *state;
|
||||
struct torture_state *s;
|
||||
ssh_session session;
|
||||
int rc;
|
||||
|
||||
assert_non_null(tss);
|
||||
|
||||
s = tss->state;
|
||||
assert_non_null(s);
|
||||
|
||||
session = s->ssh.session;
|
||||
assert_non_null(session);
|
||||
|
||||
rc = ssh_connect(session);
|
||||
assert_int_equal(rc, SSH_OK);
|
||||
|
||||
/* Invalid host principal */
|
||||
torture_setup_kdc_server(
|
||||
(void **)&s,
|
||||
@ -302,6 +337,27 @@ torture_gssapi_server_auth(void **state)
|
||||
rc = ssh_userauth_gssapi(session);
|
||||
assert_int_equal(rc, SSH_AUTH_ERROR);
|
||||
torture_teardown_kdc_server((void **)&s);
|
||||
}
|
||||
|
||||
static void
|
||||
torture_gssapi_server_auth(void **state)
|
||||
{
|
||||
struct test_server_st *tss = *state;
|
||||
struct torture_state *s;
|
||||
ssh_session session;
|
||||
int rc;
|
||||
|
||||
assert_non_null(tss);
|
||||
|
||||
s = tss->state;
|
||||
assert_non_null(s);
|
||||
|
||||
session = s->ssh.session;
|
||||
assert_non_null(session);
|
||||
|
||||
rc = ssh_connect(session);
|
||||
assert_int_equal(rc, SSH_OK);
|
||||
|
||||
/* Valid */
|
||||
torture_setup_kdc_server(
|
||||
(void **)&s,
|
||||
@ -317,11 +373,72 @@ torture_gssapi_server_auth(void **state)
|
||||
torture_teardown_kdc_server((void **)&s);
|
||||
}
|
||||
|
||||
static void
|
||||
torture_gssapi_auth_server_identity(void **state)
|
||||
{
|
||||
struct test_server_st *tss = *state;
|
||||
struct torture_state *s;
|
||||
ssh_session session;
|
||||
int rc;
|
||||
|
||||
assert_non_null(tss);
|
||||
|
||||
s = tss->state;
|
||||
assert_non_null(s);
|
||||
|
||||
session = s->ssh.session;
|
||||
assert_non_null(session);
|
||||
|
||||
rc = ssh_connect(session);
|
||||
assert_ssh_return_code(session, rc);
|
||||
|
||||
/* Invalid server identity option */
|
||||
torture_setup_kdc_server(
|
||||
(void **)&s,
|
||||
"kadmin.local addprinc -randkey host/server.libssh.site \n"
|
||||
"kadmin.local ktadd -k $(dirname $0)/d/ssh.keytab host/server.libssh.site \n"
|
||||
"kadmin.local addprinc -pw bar alice \n"
|
||||
"kadmin.local list_principals",
|
||||
|
||||
"echo bar | kinit alice");
|
||||
ssh_options_set(session,
|
||||
SSH_OPTIONS_GSSAPI_SERVER_IDENTITY,
|
||||
"invalid.libssh.site");
|
||||
rc = ssh_userauth_gssapi(session);
|
||||
assert_int_equal(rc, SSH_AUTH_ERROR);
|
||||
torture_teardown_kdc_server((void **)&s);
|
||||
|
||||
/* Valid server identity option*/
|
||||
torture_setup_kdc_server(
|
||||
(void **)&s,
|
||||
"kadmin.local addprinc -randkey host/server.libssh.site \n"
|
||||
"kadmin.local ktadd -k $(dirname $0)/d/ssh.keytab host/server.libssh.site \n"
|
||||
"kadmin.local addprinc -pw bar alice \n"
|
||||
"kadmin.local list_principals",
|
||||
|
||||
"echo bar | kinit alice");
|
||||
ssh_options_set(session,
|
||||
SSH_OPTIONS_GSSAPI_SERVER_IDENTITY,
|
||||
"server.libssh.site");
|
||||
rc = ssh_userauth_gssapi(session);
|
||||
assert_int_equal(rc, SSH_AUTH_SUCCESS);
|
||||
torture_teardown_kdc_server((void **)&s);
|
||||
}
|
||||
|
||||
int
|
||||
torture_run_tests(void)
|
||||
{
|
||||
int rc;
|
||||
struct CMUnitTest tests[] = {
|
||||
cmocka_unit_test_setup_teardown(torture_gssapi_server_auth_no_client_cred,
|
||||
session_setup,
|
||||
session_teardown),
|
||||
cmocka_unit_test_setup_teardown(torture_gssapi_server_auth_invalid_host,
|
||||
session_setup,
|
||||
session_teardown),
|
||||
cmocka_unit_test_setup_teardown(torture_gssapi_auth_server_identity,
|
||||
session_setup,
|
||||
session_teardown),
|
||||
cmocka_unit_test_setup_teardown(torture_gssapi_server_auth,
|
||||
session_setup,
|
||||
session_teardown),
|
||||
|
Reference in New Issue
Block a user