mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
7585aa6c8f
Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Fri Dec 16 05:43:12 CET 2016 on sn-devel-144
146 lines
3.0 KiB
C
146 lines
3.0 KiB
C
#include <stdarg.h>
|
|
#include <stddef.h>
|
|
#include <setjmp.h>
|
|
#include <cmocka.h>
|
|
|
|
#include <krb5.h>
|
|
|
|
#include "includes.h"
|
|
#include "lib/krb5_wrap/krb5_samba.h"
|
|
|
|
|
|
static int setup_krb5_context(void **state)
|
|
{
|
|
krb5_context context = NULL;
|
|
krb5_error_code code;
|
|
|
|
code = krb5_init_context(&context);
|
|
assert_return_code(code, code);
|
|
|
|
*state = context;
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int teardown_krb5_context(void **state)
|
|
{
|
|
krb5_context context = *state;
|
|
|
|
if (context != NULL) {
|
|
krb5_free_context(context);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static void test_smb_krb5_kt_open(void **state)
|
|
{
|
|
krb5_context context = *state;
|
|
krb5_keytab keytab = NULL;
|
|
krb5_error_code code;
|
|
char keytab_template[] = "/tmp/keytab.XXXXXX";
|
|
int fd;
|
|
|
|
fd = mkstemp(keytab_template);
|
|
assert_return_code(fd, errno);
|
|
unlink(keytab_template);
|
|
|
|
code = smb_krb5_kt_open(context,
|
|
keytab_template,
|
|
false,
|
|
&keytab);
|
|
assert_int_equal(code, 0);
|
|
|
|
krb5_kt_close(context, keytab);
|
|
close(fd);
|
|
}
|
|
|
|
static void test_smb_krb5_kt_open_file(void **state)
|
|
{
|
|
krb5_context context = *state;
|
|
krb5_keytab keytab = NULL;
|
|
krb5_error_code code;
|
|
char keytab_template[] = "/tmp/keytab.XXXXXX";
|
|
char keytab_file[6 + strlen(keytab_template)];
|
|
int fd;
|
|
|
|
fd = mkstemp(keytab_template);
|
|
assert_return_code(fd, errno);
|
|
unlink(keytab_template);
|
|
|
|
snprintf(keytab_file, sizeof(keytab_file), "FILE:%s", keytab_template);
|
|
|
|
code = smb_krb5_kt_open(context,
|
|
keytab_file,
|
|
false,
|
|
&keytab);
|
|
assert_int_equal(code, 0);
|
|
|
|
krb5_kt_close(context, keytab);
|
|
close(fd);
|
|
}
|
|
|
|
static void test_smb_krb5_kt_open_fail(void **state)
|
|
{
|
|
krb5_context context = *state;
|
|
krb5_keytab keytab = NULL;
|
|
krb5_error_code code;
|
|
|
|
code = smb_krb5_kt_open(context,
|
|
NULL,
|
|
false,
|
|
&keytab);
|
|
assert_int_equal(code, KRB5_KT_BADNAME);
|
|
code = smb_krb5_kt_open(context,
|
|
"wurst",
|
|
false,
|
|
&keytab);
|
|
assert_int_equal(code, KRB5_KT_BADNAME);
|
|
|
|
code = smb_krb5_kt_open(context,
|
|
"FILE:wurst",
|
|
false,
|
|
&keytab);
|
|
assert_int_equal(code, KRB5_KT_BADNAME);
|
|
|
|
code = smb_krb5_kt_open(context,
|
|
"WRFILE:wurst",
|
|
false,
|
|
&keytab);
|
|
assert_int_equal(code, KRB5_KT_BADNAME);
|
|
}
|
|
|
|
static void test_smb_krb5_kt_open_relative_memory(void **state)
|
|
{
|
|
krb5_context context = *state;
|
|
krb5_keytab keytab = NULL;
|
|
krb5_error_code code;
|
|
|
|
code = smb_krb5_kt_open_relative(context,
|
|
NULL,
|
|
true,
|
|
&keytab);
|
|
assert_int_equal(code, 0);
|
|
|
|
krb5_kt_close(context, keytab);
|
|
}
|
|
|
|
int main(void) {
|
|
const struct CMUnitTest tests[] = {
|
|
cmocka_unit_test_setup_teardown(test_smb_krb5_kt_open,
|
|
setup_krb5_context,
|
|
teardown_krb5_context),
|
|
cmocka_unit_test_setup_teardown(test_smb_krb5_kt_open_file,
|
|
setup_krb5_context,
|
|
teardown_krb5_context),
|
|
cmocka_unit_test_setup_teardown(test_smb_krb5_kt_open_fail,
|
|
setup_krb5_context,
|
|
teardown_krb5_context),
|
|
cmocka_unit_test_setup_teardown(test_smb_krb5_kt_open_relative_memory,
|
|
setup_krb5_context,
|
|
teardown_krb5_context),
|
|
};
|
|
|
|
cmocka_set_message_output(CM_OUTPUT_SUBUNIT);
|
|
return cmocka_run_group_tests(tests, NULL, NULL);
|
|
}
|