test_ad_common.c revision 30dd3f3e063dded0ec9f58bc2535a94727d8e96d
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek Jakub Hrozek <jhrozek@redhat.com>
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek Copyright (C) 2013 Red Hat
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek SSSD tests: AD access control filter tests
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek This program is free software; you can redistribute it and/or modify
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek it under the terms of the GNU General Public License as published by
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek the Free Software Foundation; either version 3 of the License, or
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek (at your option) any later version.
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek This program is distributed in the hope that it will be useful,
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek but WITHOUT ANY WARRANTY; without even the implied warranty of
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek GNU General Public License for more details.
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek You should have received a copy of the GNU General Public License
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek along with this program. If not, see <http://www.gnu.org/licenses/>.
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek/* In order to access opaque types */
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek#define KEYTAB_TEST_PRINC TEST_AUTHID"@"REALMNAME
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek#define KEYTAB_PATH TEST_DIR"/keytab_test.keytab"
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek#define ONEWAY_KEYTAB_PATH TEST_DIR"/oneway_test.keytab"
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek#define ONEWAY_TEST_PRINC ONEWAY_AUTHID"@"ONEWAY_DOMNAME
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozekkrb5_error_code __wrap_krb5_kt_default(krb5_context context, krb5_keytab *id)
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek return krb5_kt_resolve(context, KEYTAB_PATH, id);
933314e53fac878d1a9b126af216454172cb945aJakub Hrozekstatic void test_ad_create_default_options(void **state)
933314e53fac878d1a9b126af216454172cb945aJakub Hrozek const char *s;
933314e53fac878d1a9b126af216454172cb945aJakub Hrozek ad_options = ad_create_default_options(global_talloc_context);
933314e53fac878d1a9b126af216454172cb945aJakub Hrozek /* Not too much to test here except some defaults */
933314e53fac878d1a9b126af216454172cb945aJakub Hrozek s = dp_opt_get_string(ad_options->basic, AD_DOMAIN);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek test_ctx = talloc_zero(global_talloc_context, struct ad_common_test_ctx);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek test_ctx->dom = talloc_zero(test_ctx, struct sss_domain_info);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek test_ctx->subdom = talloc_zero(test_ctx, struct sss_domain_info);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek test_ctx->subdom->name = discard_const(SUBDOMNAME);
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek test_ctx->ad_ctx = talloc_zero(test_ctx, struct ad_id_ctx);
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozekstatic int test_ad_common_teardown(void **state)
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek struct ad_common_test_ctx *test_ctx = talloc_get_type(*state,
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek assert_true(check_leaks_pop(test_ctx) == true);
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek assert_true(check_leaks_pop(global_talloc_context) == true);
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozekstatic void test_ad_create_1way_trust_options(void **state)
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek struct ad_common_test_ctx *test_ctx = talloc_get_type(*state,
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek const char *s;
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek /* Make sure this is not the keytab that __wrap_krb5_kt_default uses */
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek mock_keytab_with_contents(test_ctx, ONEWAY_KEYTAB_PATH, ONEWAY_TEST_PRINC);
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek test_ctx->ad_ctx->ad_options = ad_create_1way_trust_options(
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek assert_int_equal(test_ctx->ad_ctx->ad_options->id->schema_type,
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->basic,
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->basic,
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->basic,
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->basic,
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->id->basic,
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->id->basic,
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->id->basic,
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->id->basic,
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozekstatic void test_ad_create_2way_trust_options(void **state)
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek struct ad_common_test_ctx *test_ctx = talloc_get_type(*state,
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek const char *s;
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek mock_keytab_with_contents(test_ctx, KEYTAB_PATH, KEYTAB_TEST_PRINC);
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek test_ctx->ad_ctx->ad_options = ad_create_2way_trust_options(
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek assert_int_equal(test_ctx->ad_ctx->ad_options->id->schema_type,
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->basic,
de2bad8ae08f09964834bda0f88db9de39f47c5cJakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->basic,
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->basic,
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->id->basic,
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek assert_null(s); /* This is the system keytab */
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->id->basic,
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->id->basic,
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->id->basic,
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek ret = test_ad_common_setup((void **) &test_ctx);
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek ad_ctx->ad_options = ad_create_2way_trust_options(ad_ctx,
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek ad_ctx->gc_ctx = talloc_zero(ad_ctx, struct sdap_id_conn_ctx);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek ad_ctx->ldap_ctx = talloc_zero(ad_ctx, struct sdap_id_conn_ctx);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek ad_ctx->sdap_id_ctx = talloc_zero(ad_ctx, struct sdap_id_ctx);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek ad_ctx->sdap_id_ctx->opts = talloc_zero(ad_ctx->sdap_id_ctx,
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek ret = sdap_domain_add(ad_ctx->sdap_id_ctx->opts, test_ctx->dom, &sdom);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek subdom_ad_ctx = talloc_zero(test_ctx, struct ad_id_ctx);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek subdom_ldap_ctx = talloc_zero(subdom_ad_ctx, struct sdap_id_conn_ctx);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek ret = sdap_domain_add(ad_ctx->sdap_id_ctx->opts, test_ctx->subdom, &sdom);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek struct ad_common_test_ctx *test_ctx = talloc_get_type(*state,
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek__real_sdap_set_sasl_options(struct sdap_options *id_opts,
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek__wrap_sdap_set_sasl_options(struct sdap_options *id_opts,
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek /* Pretend SASL is fine */
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek struct ad_common_test_ctx *test_ctx = talloc_get_type(*state,
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek conn = ad_get_dom_ldap_conn(test_ctx->ad_ctx, test_ctx->dom);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek assert_true(conn == test_ctx->ad_ctx->ldap_ctx);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek conn = ad_get_dom_ldap_conn(test_ctx->ad_ctx, test_ctx->subdom);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek assert_true(conn == test_ctx->subdom_ad_ctx->ldap_ctx);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek struct ad_common_test_ctx *test_ctx = talloc_get_type(*state,
ba4a81e933deebb416603369b447ead6ebaa040dJakub Hrozek assert_true(dp_opt_get_bool(test_ctx->ad_ctx->ad_options->basic,
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek conn_list = ad_gc_conn_list(test_ctx, test_ctx->ad_ctx, test_ctx->dom);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek assert_true(conn_list[0] == test_ctx->ad_ctx->gc_ctx);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek /* If there is a fallback, we should ignore the offline mode */
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek assert_true(conn_list[0]->ignore_mark_offline);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek assert_true(conn_list[1] == test_ctx->ad_ctx->ldap_ctx);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek assert_false(conn_list[1]->ignore_mark_offline);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek conn_list = ad_gc_conn_list(test_ctx, test_ctx->ad_ctx, test_ctx->subdom);
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek assert_true(conn_list[0] == test_ctx->ad_ctx->gc_ctx);
266110fa0f6eb086f8f88787bb167cea416fe108Jakub Hrozek assert_true(conn_list[0]->ignore_mark_offline);
266110fa0f6eb086f8f88787bb167cea416fe108Jakub Hrozek assert_true(conn_list[1] == test_ctx->subdom_ad_ctx->ldap_ctx);
266110fa0f6eb086f8f88787bb167cea416fe108Jakub Hrozek assert_false(conn_list[1]->ignore_mark_offline);
ba4a81e933deebb416603369b447ead6ebaa040dJakub Hrozek dp_opt_set_bool(test_ctx->ad_ctx->ad_options->basic, AD_ENABLE_GC, false);
ba4a81e933deebb416603369b447ead6ebaa040dJakub Hrozek assert_false(dp_opt_get_bool(test_ctx->ad_ctx->ad_options->basic,
ba4a81e933deebb416603369b447ead6ebaa040dJakub Hrozek conn_list = ad_gc_conn_list(test_ctx, test_ctx->ad_ctx, test_ctx->dom);
ba4a81e933deebb416603369b447ead6ebaa040dJakub Hrozek assert_true(conn_list[0] == test_ctx->ad_ctx->ldap_ctx);
ba4a81e933deebb416603369b447ead6ebaa040dJakub Hrozek assert_false(conn_list[0]->ignore_mark_offline);
ba4a81e933deebb416603369b447ead6ebaa040dJakub Hrozek conn_list = ad_gc_conn_list(test_ctx, test_ctx->ad_ctx, test_ctx->subdom);
266110fa0f6eb086f8f88787bb167cea416fe108Jakub Hrozek assert_true(conn_list[0] == test_ctx->subdom_ad_ctx->ldap_ctx);
933314e53fac878d1a9b126af216454172cb945aJakub Hrozek cmocka_unit_test(test_ad_create_default_options),
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek cmocka_unit_test_setup_teardown(test_ad_create_1way_trust_options,
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek cmocka_unit_test_setup_teardown(test_ad_create_2way_trust_options,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek cmocka_unit_test_setup_teardown(test_ldap_conn_list,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek cmocka_unit_test_setup_teardown(test_conn_list,
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek /* Set debug level to invalid value so we can deside if -d 0 was used. */
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek pc = poptGetContext(argv[0], argc, argv, long_options, 0);