test_ad_common.c revision 51b5e1475b3e0b7acac34ed382cfaca8411883a4
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen/*
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen Authors:
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen Jakub Hrozek <jhrozek@redhat.com>
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen Copyright (C) 2013 Red Hat
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen SSSD tests: AD access control filter tests
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen This program is free software; you can redistribute it and/or modify
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen it under the terms of the GNU General Public License as published by
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen the Free Software Foundation; either version 3 of the License, or
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen (at your option) any later version.
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen This program is distributed in the hope that it will be useful,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen but WITHOUT ANY WARRANTY; without even the implied warranty of
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen GNU General Public License for more details.
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen You should have received a copy of the GNU General Public License
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen along with this program. If not, see <http://www.gnu.org/licenses/>.
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen*/
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#include <talloc.h>
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#include <tevent.h>
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#include <errno.h>
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#include <popt.h>
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#include <unistd.h>
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#include <sys/types.h>
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#include <ifaddrs.h>
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#include <arpa/inet.h>
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen/* In order to access opaque types */
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#include "providers/ad/ad_common.c"
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#include "tests/cmocka/common_mock.h"
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#include "tests/cmocka/common_mock_krb5.h"
01f54478a7c69b88ab13840c99bbab19a0d7d754Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#define DOMNAME "domname"
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#define SUBDOMNAME "sub."DOMNAME
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#define REALMNAME DOMNAME
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#define HOST_NAME "ad."REALMNAME
a94936bafd127680184da114c6a177b37ff656e5Timo Sirainen
a94936bafd127680184da114c6a177b37ff656e5Timo Sirainen#define TEST_AUTHID "host/"HOST_NAME
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#define KEYTAB_TEST_PRINC TEST_AUTHID"@"REALMNAME
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen#define KEYTAB_PATH TEST_DIR"/keytab_test.keytab"
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainenstatic bool call_real_sasl_options;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainenkrb5_error_code __wrap_krb5_kt_default(krb5_context context, krb5_keytab *id)
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen{
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen return krb5_kt_resolve(context, KEYTAB_PATH, id);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen}
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainenstruct ad_common_test_ctx {
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_id_ctx *ad_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_id_ctx *subdom_ad_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct sss_domain_info *dom;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct sss_domain_info *subdom;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen};
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainenstatic int test_ad_common_setup(void **state)
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen{
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_common_test_ctx *test_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_true(leak_check_setup());
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen check_leaks_push(global_talloc_context);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen test_ctx = talloc_zero(global_talloc_context, struct ad_common_test_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(test_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen test_ctx->dom = talloc_zero(test_ctx, struct sss_domain_info);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(test_ctx->dom);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen test_ctx->dom->name = discard_const(DOMNAME);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen test_ctx->subdom = talloc_zero(test_ctx, struct sss_domain_info);
01f54478a7c69b88ab13840c99bbab19a0d7d754Timo Sirainen assert_non_null(test_ctx->subdom);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen test_ctx->subdom->name = discard_const(SUBDOMNAME);
01f54478a7c69b88ab13840c99bbab19a0d7d754Timo Sirainen test_ctx->subdom->parent = test_ctx->dom;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
01f54478a7c69b88ab13840c99bbab19a0d7d754Timo Sirainen test_ctx->ad_ctx = talloc_zero(test_ctx, struct ad_id_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(test_ctx->ad_ctx);
c59ce1887df061441a31f8243c730d4ec6a62a07Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen check_leaks_push(test_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen *state = test_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen return 0;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen}
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainenstatic int test_ad_common_teardown(void **state)
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen{
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_common_test_ctx *test_ctx = talloc_get_type(*state,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_common_test_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(test_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_true(check_leaks_pop(test_ctx) == true);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen talloc_free(test_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_true(check_leaks_pop(global_talloc_context) == true);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_true(leak_check_teardown());
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen return 0;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen}
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainenstatic void test_ad_create_2way_trust_options(void **state)
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen{
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_common_test_ctx *test_ctx = talloc_get_type(*state,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_common_test_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen const char *s;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen call_real_sasl_options = true;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen mock_keytab_with_contents(test_ctx, KEYTAB_PATH, KEYTAB_TEST_PRINC);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen test_ctx->ad_ctx->ad_options = ad_create_2way_trust_options(
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen test_ctx->ad_ctx,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen REALMNAME,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen HOST_NAME);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(test_ctx->ad_ctx->ad_options);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_int_equal(test_ctx->ad_ctx->ad_options->id->schema_type,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen SDAP_SCHEMA_AD);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->basic,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen AD_KRB5_REALM);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(s);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_string_equal(s, REALMNAME);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->basic,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen AD_HOSTNAME);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(s);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_string_equal(s, HOST_NAME);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->id->basic,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen SDAP_KRB5_KEYTAB);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_null(s); /* This is the system keytab */
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->id->basic,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen SDAP_SASL_REALM);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(s);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_string_equal(s, REALMNAME);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->id->basic,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen SDAP_KRB5_REALM);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(s);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_string_equal(s, REALMNAME);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->id->basic,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen SDAP_SASL_AUTHID);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(s);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_string_equal(s, TEST_AUTHID);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen talloc_free(test_ctx->ad_ctx->ad_options);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen}
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainenstatic int
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainentest_ldap_conn_setup(void **state)
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen{
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_common_test_ctx *test_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen errno_t ret;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct sdap_domain *sdom;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_id_ctx *ad_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_id_ctx *subdom_ad_ctx;
01f54478a7c69b88ab13840c99bbab19a0d7d754Timo Sirainen struct sdap_id_conn_ctx *subdom_ldap_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen ret = test_ad_common_setup((void **) &test_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_int_equal(ret, EOK);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen ad_ctx = test_ctx->ad_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen ad_ctx->ad_options = ad_create_2way_trust_options(ad_ctx,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen REALMNAME,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen HOST_NAME);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(ad_ctx->ad_options);
01f54478a7c69b88ab13840c99bbab19a0d7d754Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen ad_ctx->gc_ctx = talloc_zero(ad_ctx, struct sdap_id_conn_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(ad_ctx->gc_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen ad_ctx->ldap_ctx = talloc_zero(ad_ctx, struct sdap_id_conn_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(ad_ctx->ldap_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen ad_ctx->sdap_id_ctx = talloc_zero(ad_ctx, struct sdap_id_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(ad_ctx->sdap_id_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen ad_ctx->sdap_id_ctx->opts = talloc_zero(ad_ctx->sdap_id_ctx,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct sdap_options);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(ad_ctx->sdap_id_ctx->opts);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen ret = sdap_domain_add(ad_ctx->sdap_id_ctx->opts, test_ctx->dom, &sdom);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_int_equal(ret, EOK);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen sdom->pvt = ad_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen subdom_ad_ctx = talloc_zero(test_ctx, struct ad_id_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(subdom_ad_ctx);
c59ce1887df061441a31f8243c730d4ec6a62a07Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen subdom_ldap_ctx = talloc_zero(subdom_ad_ctx, struct sdap_id_conn_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(subdom_ldap_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen subdom_ad_ctx->ldap_ctx = subdom_ldap_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen ret = sdap_domain_add(ad_ctx->sdap_id_ctx->opts, test_ctx->subdom, &sdom);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_int_equal(ret, EOK);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen sdom->pvt = subdom_ad_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen test_ctx->subdom_ad_ctx = subdom_ad_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen *state = test_ctx;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen return 0;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen}
77a8c99da71844aaf0fa3036960473024d19f471Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainenstatic int
77a8c99da71844aaf0fa3036960473024d19f471Timo Sirainentest_ldap_conn_teardown(void **state)
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen{
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_common_test_ctx *test_ctx = talloc_get_type(*state,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_common_test_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(test_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen talloc_free(test_ctx->subdom_ad_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen talloc_free(test_ctx->ad_ctx->ad_options);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen talloc_free(test_ctx->ad_ctx->gc_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen talloc_free(test_ctx->ad_ctx->ldap_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen talloc_free(test_ctx->ad_ctx->sdap_id_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen test_ad_common_teardown((void **) &test_ctx);
77a8c99da71844aaf0fa3036960473024d19f471Timo Sirainen return 0;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen}
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainenerrno_t
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen__real_sdap_set_sasl_options(struct sdap_options *id_opts,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen char *default_primary,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen char *default_realm,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen const char *keytab_path);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainenerrno_t
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen__wrap_sdap_set_sasl_options(struct sdap_options *id_opts,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen char *default_primary,
01f54478a7c69b88ab13840c99bbab19a0d7d754Timo Sirainen char *default_realm,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen const char *keytab_path)
01f54478a7c69b88ab13840c99bbab19a0d7d754Timo Sirainen{
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen /* Pretend SASL is fine */
01f54478a7c69b88ab13840c99bbab19a0d7d754Timo Sirainen if (call_real_sasl_options == true) {
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen return __real_sdap_set_sasl_options(id_opts,
c59ce1887df061441a31f8243c730d4ec6a62a07Timo Sirainen default_primary,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen default_realm,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen keytab_path);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen }
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen return EOK;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen}
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainenvoid test_ldap_conn_list(void **state)
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen{
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct sdap_id_conn_ctx *conn;
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_common_test_ctx *test_ctx = talloc_get_type(*state,
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct ad_common_test_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_non_null(test_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen conn = ad_get_dom_ldap_conn(test_ctx->ad_ctx, test_ctx->dom);
01f54478a7c69b88ab13840c99bbab19a0d7d754Timo Sirainen assert_true(conn == test_ctx->ad_ctx->ldap_ctx);
01f54478a7c69b88ab13840c99bbab19a0d7d754Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen conn = ad_get_dom_ldap_conn(test_ctx->ad_ctx, test_ctx->subdom);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen assert_true(conn == test_ctx->subdom_ad_ctx->ldap_ctx);
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen}
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainenvoid test_conn_list(void **state)
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen{
c1252a5812eb11fcb81508b9ed37597a5bc84100Timo Sirainen struct sdap_id_conn_ctx **conn_list;
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen struct ad_common_test_ctx *test_ctx = talloc_get_type(*state,
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen struct ad_common_test_ctx);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen assert_non_null(test_ctx);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen assert_true(dp_opt_get_bool(test_ctx->ad_ctx->ad_options->basic,
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen AD_ENABLE_GC));
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen conn_list = ad_gc_conn_list(test_ctx, test_ctx->ad_ctx, test_ctx->dom);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen assert_non_null(conn_list);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen assert_true(conn_list[0] == test_ctx->ad_ctx->gc_ctx);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen /* If there is a fallback, we should ignore the offline mode */
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen assert_true(conn_list[0]->ignore_mark_offline);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen assert_true(conn_list[1] == test_ctx->ad_ctx->ldap_ctx);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen assert_false(conn_list[1]->ignore_mark_offline);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen assert_null(conn_list[2]);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen talloc_free(conn_list);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen conn_list = ad_gc_conn_list(test_ctx, test_ctx->ad_ctx, test_ctx->subdom);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen assert_non_null(conn_list);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen assert_true(conn_list[0] == test_ctx->ad_ctx->gc_ctx);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen assert_true(conn_list[0]->ignore_mark_offline);
74ae32512357bdd4872bf160dc697ff7b54b54c5Timo Sirainen assert_true(conn_list[1] == test_ctx->subdom_ad_ctx->ldap_ctx);
assert_false(conn_list[1]->ignore_mark_offline);
talloc_free(conn_list);
dp_opt_set_bool(test_ctx->ad_ctx->ad_options->basic, AD_ENABLE_GC, false);
assert_false(dp_opt_get_bool(test_ctx->ad_ctx->ad_options->basic,
AD_ENABLE_GC));
conn_list = ad_gc_conn_list(test_ctx, test_ctx->ad_ctx, test_ctx->dom);
assert_non_null(conn_list);
assert_true(conn_list[0] == test_ctx->ad_ctx->ldap_ctx);
assert_false(conn_list[0]->ignore_mark_offline);
assert_null(conn_list[1]);
talloc_free(conn_list);
conn_list = ad_gc_conn_list(test_ctx, test_ctx->ad_ctx, test_ctx->subdom);
assert_non_null(conn_list);
assert_true(conn_list[0] == test_ctx->subdom_ad_ctx->ldap_ctx);
talloc_free(conn_list);
}
int main(int argc, const char *argv[])
{
poptContext pc;
int opt;
struct poptOption long_options[] = {
POPT_AUTOHELP
SSSD_DEBUG_OPTS
POPT_TABLEEND
};
const struct CMUnitTest tests[] = {
cmocka_unit_test_setup_teardown(test_ad_create_2way_trust_options,
test_ad_common_setup,
test_ad_common_teardown),
cmocka_unit_test_setup_teardown(test_ldap_conn_list,
test_ldap_conn_setup,
test_ldap_conn_teardown),
cmocka_unit_test_setup_teardown(test_conn_list,
test_ldap_conn_setup,
test_ldap_conn_teardown),
};
/* Set debug level to invalid value so we can deside if -d 0 was used. */
debug_level = SSSDBG_INVALID;
pc = poptGetContext(argv[0], argc, argv, long_options, 0);
while((opt = poptGetNextOpt(pc)) != -1) {
switch(opt) {
default:
fprintf(stderr, "\nInvalid option %s: %s\n\n",
poptBadOption(pc, 0), poptStrerror(opt));
poptPrintUsage(pc, stderr, 0);
return 1;
}
}
poptFreeContext(pc);
DEBUG_CLI_INIT(debug_level);
tests_set_cwd();
return cmocka_run_group_tests(tests, NULL, NULL);
}