f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke/*
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke Authors:
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke Sumit Bose <sbose@redhat.com>
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke Jakub Hrozek <jhrozek@redhat.com>
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke Copyright (C) 2015 Red Hat
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke
b72a390042c19e630cf221494b60c9df2a60d187Dominik Luecke SSSD tests: Tests keytab utilities
b72a390042c19e630cf221494b60c9df2a60d187Dominik Luecke
b72a390042c19e630cf221494b60c9df2a60d187Dominik Luecke This program is free software; you can redistribute it and/or modify
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke it under the terms of the GNU General Public License as published by
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke the Free Software Foundation; either version 3 of the License, or
cf04ba46b9eb495d334466e24e082e391055ca7bDominik Luecke (at your option) any later version.
cf04ba46b9eb495d334466e24e082e391055ca7bDominik Luecke
cf04ba46b9eb495d334466e24e082e391055ca7bDominik Luecke This program is distributed in the hope that it will be useful,
cf04ba46b9eb495d334466e24e082e391055ca7bDominik Luecke but WITHOUT ANY WARRANTY; without even the implied warranty of
cf04ba46b9eb495d334466e24e082e391055ca7bDominik Luecke MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cf04ba46b9eb495d334466e24e082e391055ca7bDominik Luecke GNU General Public License for more details.
cf04ba46b9eb495d334466e24e082e391055ca7bDominik Luecke
cf04ba46b9eb495d334466e24e082e391055ca7bDominik Luecke You should have received a copy of the GNU General Public License
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke along with this program. If not, see <http://www.gnu.org/licenses/>.
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke*/
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke#include "util/sss_krb5.h"
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke#include "tests/cmocka/common_mock.h"
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke#include "tests/cmocka/common_mock_krb5.h"
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke
f90884915ff10ae83f59e709c68824de834e64f5Dominik Lueckeint mock_keytab(krb5_context kctx,
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke const char *kt_path,
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke krb5_keytab_entry *kt_keys,
cf04ba46b9eb495d334466e24e082e391055ca7bDominik Luecke size_t nkeys)
cf04ba46b9eb495d334466e24e082e391055ca7bDominik Luecke{
cf04ba46b9eb495d334466e24e082e391055ca7bDominik Luecke krb5_error_code kerr;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke krb5_keytab keytab;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke size_t n;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke kerr = krb5_kt_resolve(kctx, kt_path, &keytab);
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke assert_int_equal(kerr, 0);
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke for (n = 0; n < nkeys; n++) {
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke kerr = krb5_kt_add_entry(kctx, keytab, &kt_keys[n]);
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke assert_int_equal(kerr, 0);
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke }
f90884915ff10ae83f59e709c68824de834e64f5Dominik Luecke
b72a390042c19e630cf221494b60c9df2a60d187Dominik Luecke kerr = krb5_kt_close(kctx, keytab);
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke assert_int_equal(kerr, 0);
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke
b72a390042c19e630cf221494b60c9df2a60d187Dominik Luecke return EOK;
b72a390042c19e630cf221494b60c9df2a60d187Dominik Luecke}
b72a390042c19e630cf221494b60c9df2a60d187Dominik Luecke
b72a390042c19e630cf221494b60c9df2a60d187Dominik Lueckevoid mock_krb5_keytab_entry(krb5_keytab_entry *kent,
b72a390042c19e630cf221494b60c9df2a60d187Dominik Luecke krb5_principal principal,
b72a390042c19e630cf221494b60c9df2a60d187Dominik Luecke krb5_timestamp timestamp,
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke krb5_kvno vno,
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke krb5_enctype enctype,
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke const char *key)
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke{
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke memset(kent, 0, sizeof(krb5_keytab_entry));
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke kent->magic = KV5M_KEYTAB_ENTRY;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke kent->principal = principal;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke kent->timestamp = timestamp;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke kent->vno = vno;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke kent->key.magic = KV5M_KEYBLOCK;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke kent->key.enctype = enctype;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke kent->key.length = strlen(key) - 1;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke kent->key.contents = (krb5_octet *) discard_const(key);
b72a390042c19e630cf221494b60c9df2a60d187Dominik Luecke}
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke
08056875f5f633ef432598d5245ea41c112d2178Dominik Lueckeint mock_keytab_with_contents(TALLOC_CTX *mem_ctx,
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke const char *keytab_path,
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke const char *keytab_princ)
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke{
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke krb5_context kctx;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke krb5_principal principal;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke krb5_error_code kerr;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke size_t nkeys = 2;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke krb5_keytab_entry keys[nkeys];
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke char *keytab_file_name;
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke kerr = krb5_init_context(&kctx);
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke assert_int_equal(kerr, 0);
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke keytab_file_name = talloc_asprintf(mem_ctx, "FILE:%s", keytab_path);
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke assert_non_null(keytab_file_name);
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke kerr = krb5_parse_name(kctx, keytab_princ, &principal);
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke assert_int_equal(kerr, 0);
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke memset(&keys, nkeys, nkeys * sizeof(krb5_keytab_entry));
08056875f5f633ef432598d5245ea41c112d2178Dominik Luecke
mock_krb5_keytab_entry(&keys[0], principal, 12345, 1, 1, "11");
mock_krb5_keytab_entry(&keys[1], principal, 12345, 1, 2, "12");
kerr = mock_keytab(kctx, keytab_file_name, keys, nkeys);
assert_int_equal(kerr, 0);
krb5_free_principal(kctx, principal);
krb5_free_context(kctx);
talloc_free(keytab_file_name);
return 0;
}