>From a7aace841c3c554f881de945c301ca9de9abf628 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Fri, 15 May 2015 13:35:22 +0200 Subject: [PATCH 26/29] IPA/AD: Set up AD domain in ad_create_2way_trust_options Related: https://fedorahosted.org/sssd/ticket/2638 Removed code duplication. Amends unit test to make sure we don't regress. --- src/providers/ad/ad_common.c | 8 ++++++++ src/providers/ad/ad_common.h | 1 + src/providers/ad/ad_subdomains.c | 14 ++++---------- src/providers/ipa/ipa_subdomains_server.c | 15 +++++---------- src/tests/cmocka/test_ad_common.c | 7 +++++++ 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/providers/ad/ad_common.c b/src/providers/ad/ad_common.c index 60b234dc22aa8f2975b45ffccc2c97f44d322b0b..22af7cbd2689f8a12a712d78f617f56420daab10 100644 --- a/src/providers/ad/ad_common.c +++ b/src/providers/ad/ad_common.c @@ -138,6 +138,7 @@ ad_create_default_options(TALLOC_CTX *mem_ctx) struct ad_options * ad_create_2way_trust_options(TALLOC_CTX *mem_ctx, const char *realm, + const char *ad_domain, const char *hostname) { struct ad_options *ad_options; @@ -153,6 +154,13 @@ ad_create_2way_trust_options(TALLOC_CTX *mem_ctx, return NULL; } + ret = dp_opt_set_string(ad_options->basic, AD_DOMAIN, ad_domain); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, "Cannot set AD domain\n"); + talloc_free(ad_options); + return NULL; + } + ret = dp_opt_set_string(ad_options->basic, AD_HOSTNAME, hostname); if (ret != EOK) { DEBUG(SSSDBG_OP_FAILURE, "Cannot set AD domain\n"); diff --git a/src/providers/ad/ad_common.h b/src/providers/ad/ad_common.h index 07b9d734f44636f3219ebfc95bd4792e96bee255..0766b4dc93dbbebd934daaa5e3d3bf4c13a0a518 100644 --- a/src/providers/ad/ad_common.h +++ b/src/providers/ad/ad_common.h @@ -107,6 +107,7 @@ struct ad_options *ad_create_default_options(TALLOC_CTX *mem_ctx); struct ad_options *ad_create_2way_trust_options(TALLOC_CTX *mem_ctx, const char *realm, + const char *ad_domain, const char *hostname); errno_t diff --git a/src/providers/ad/ad_subdomains.c b/src/providers/ad/ad_subdomains.c index 40eb9aa43a49893efcaf861ef04f65bb4a02f8b5..f7f448b35fa61ef99504b5e1762fa125086bb865 100644 --- a/src/providers/ad/ad_subdomains.c +++ b/src/providers/ad/ad_subdomains.c @@ -110,28 +110,22 @@ ad_subdom_ad_ctx_new(struct be_ctx *be_ctx, realm = dp_opt_get_cstring(id_ctx->ad_options->basic, AD_KRB5_REALM); hostname = dp_opt_get_cstring(id_ctx->ad_options->basic, AD_HOSTNAME); - if (realm == NULL || hostname == NULL) { + ad_domain = subdom->name; + if (realm == NULL || hostname == NULL || ad_domain == NULL) { DEBUG(SSSDBG_CONF_SETTINGS, "Missing realm or hostname.\n"); return EINVAL; } - ad_options = ad_create_2way_trust_options(id_ctx, realm, hostname); + ad_options = ad_create_2way_trust_options(id_ctx, realm, + ad_domain, hostname); if (ad_options == NULL) { DEBUG(SSSDBG_OP_FAILURE, "Cannot initialize AD options\n"); talloc_free(ad_options); return ENOMEM; } - ad_domain = subdom->name; ad_site_override = dp_opt_get_string(ad_options->basic, AD_SITE); - ret = dp_opt_set_string(ad_options->basic, AD_DOMAIN, ad_domain); - if (ret != EOK) { - DEBUG(SSSDBG_OP_FAILURE, "Cannot set AD domain\n"); - talloc_free(ad_options); - return ret; - } - gc_service_name = talloc_asprintf(ad_options, "%s%s", "gc_", subdom->name); if (gc_service_name == NULL) { talloc_free(ad_options); diff --git a/src/providers/ipa/ipa_subdomains_server.c b/src/providers/ipa/ipa_subdomains_server.c index 791565edf25cc73db1f840f48b7051762adf8bde..7a2ece8ab2172615e44721537ea1b3512569dc5a 100644 --- a/src/providers/ipa/ipa_subdomains_server.c +++ b/src/providers/ipa/ipa_subdomains_server.c @@ -175,13 +175,17 @@ ipa_ad_ctx_new(struct be_ctx *be_ctx, struct ad_id_ctx *ad_id_ctx; const char *gc_service_name; struct ad_srv_plugin_ctx *srv_ctx; - char *ad_domain; + const char *ad_domain; const char *ad_site_override; struct sdap_domain *sdom; errno_t ret; const char *extra_attrs; + ad_domain = subdom->name; + DEBUG(SSSDBG_TRACE_LIBS, "Setting up AD subdomain %s\n", subdom->name); + ad_options = ad_create_2way_trust_options(id_ctx, id_ctx->server_mode->realm, + ad_domain, id_ctx->server_mode->hostname); if (ad_options == NULL) { DEBUG(SSSDBG_OP_FAILURE, "Cannot initialize AD options\n"); @@ -189,15 +193,6 @@ ipa_ad_ctx_new(struct be_ctx *be_ctx, return ENOMEM; } - ad_domain = subdom->name; - - ret = dp_opt_set_string(ad_options->basic, AD_DOMAIN, ad_domain); - if (ret != EOK) { - DEBUG(SSSDBG_OP_FAILURE, "Cannot set AD domain\n"); - talloc_free(ad_options); - return ret; - } - ret = dp_opt_set_string(ad_options->basic, AD_KRB5_REALM, id_ctx->server_mode->realm); if (ret != EOK) { diff --git a/src/tests/cmocka/test_ad_common.c b/src/tests/cmocka/test_ad_common.c index de00e53f9c66224abee670b04656e38218d4f3e2..c541b87db8e6de4a010383859f0335d78c675201 100644 --- a/src/tests/cmocka/test_ad_common.c +++ b/src/tests/cmocka/test_ad_common.c @@ -128,6 +128,7 @@ static void test_ad_create_2way_trust_options(void **state) test_ctx->ad_ctx->ad_options = ad_create_2way_trust_options( test_ctx->ad_ctx, REALMNAME, + DOMNAME, HOST_NAME); assert_non_null(test_ctx->ad_ctx->ad_options); @@ -140,6 +141,11 @@ static void test_ad_create_2way_trust_options(void **state) assert_string_equal(s, REALMNAME); s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->basic, + AD_DOMAIN); + assert_non_null(s); + assert_string_equal(s, DOMNAME); + + s = dp_opt_get_string(test_ctx->ad_ctx->ad_options->basic, AD_HOSTNAME); assert_non_null(s); assert_string_equal(s, HOST_NAME); @@ -183,6 +189,7 @@ test_ldap_conn_setup(void **state) ad_ctx->ad_options = ad_create_2way_trust_options(ad_ctx, REALMNAME, + DOMNAME, HOST_NAME); assert_non_null(ad_ctx->ad_options); -- 2.1.0