diff options
-rw-r--r-- | src/providers/ldap/ldap_init.c | 54 |
1 files changed, 41 insertions, 13 deletions
diff --git a/src/providers/ldap/ldap_init.c b/src/providers/ldap/ldap_init.c index a14e6ceae..9960fd3ab 100644 --- a/src/providers/ldap/ldap_init.c +++ b/src/providers/ldap/ldap_init.c @@ -85,9 +85,9 @@ errno_t check_order_list_for_duplicates(char **list, return EOK; } -int sssm_ldap_id_init(struct be_ctx *bectx, - struct bet_ops **ops, - void **pvt_data) +static int ldap_id_init_internal(struct be_ctx *bectx, + struct bet_ops **ops, + void **pvt_data) { struct sdap_id_ctx *ctx = NULL; const char *urls; @@ -163,11 +163,6 @@ int sssm_ldap_id_init(struct be_ctx *bectx, ret = sdap_idmap_init(ctx, ctx, &ctx->opts->idmap_ctx); if (ret != EOK) goto done; - ret = ldap_id_setup_tasks(ctx); - if (ret != EOK) { - goto done; - } - ret = sdap_setup_child(); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "setup_child failed [%d][%s].\n", @@ -205,6 +200,39 @@ done: return ret; } +int sssm_ldap_id_init(struct be_ctx *bectx, + struct bet_ops **ops, + void **pvt_data) +{ + int ret; + struct sdap_id_ctx *ctx = NULL; + + ret = ldap_id_init_internal(bectx, ops, (void **) &ctx); + if (ret != EOK) { + DEBUG(SSSDBG_MINOR_FAILURE, + "ldap_id_init_internal failed [%d][%s].\n", + ret, strerror(ret)); + goto done; + } + + ret = ldap_id_setup_tasks(ctx); + if (ret != EOK) { + DEBUG(SSSDBG_MINOR_FAILURE, + "sdap_id_setup_tasks failed [%d][%s].\n", + ret, strerror(ret)); + goto done; + } + + *pvt_data = ctx; + ret = EOK; + +done: + if (ret != EOK) { + talloc_free(ctx); + } + return ret; +} + int sssm_ldap_auth_init(struct be_ctx *bectx, struct bet_ops **ops, void **pvt_data) @@ -214,7 +242,7 @@ int sssm_ldap_auth_init(struct be_ctx *bectx, struct sdap_auth_ctx *ctx; int ret; - ret = sssm_ldap_id_init(bectx, ops, &data); + ret = ldap_id_init_internal(bectx, ops, &data); if (ret == EOK) { id_ctx = talloc_get_type(data, struct sdap_id_ctx); @@ -308,9 +336,9 @@ int sssm_ldap_access_init(struct be_ctx *bectx, goto done; } - ret = sssm_ldap_id_init(bectx, ops, (void **)&access_ctx->id_ctx); + ret = ldap_id_init_internal(bectx, ops, (void **)&access_ctx->id_ctx); if (ret != EOK) { - DEBUG(SSSDBG_CRIT_FAILURE, "sssm_ldap_id_init failed.\n"); + DEBUG(SSSDBG_CRIT_FAILURE, "ldap_id_init_internal failed.\n"); goto done; } @@ -428,7 +456,7 @@ int sssm_ldap_sudo_init(struct be_ctx *be_ctx, void *data; int ret; - ret = sssm_ldap_id_init(be_ctx, ops, &data); + ret = ldap_id_init_internal(be_ctx, ops, &data); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Cannot init LDAP ID provider [%d]: %s\n", ret, strerror(ret)); @@ -458,7 +486,7 @@ int sssm_ldap_autofs_init(struct be_ctx *be_ctx, void *data; int ret; - ret = sssm_ldap_id_init(be_ctx, ops, &data); + ret = ldap_id_init_internal(be_ctx, ops, &data); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Cannot init LDAP ID provider [%d]: %s\n", ret, strerror(ret)); |