>From 56d2d89c9a7ecf12729019bc44d50723eb3bf1e4 Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Mon, 12 Aug 2013 15:06:18 +0000 Subject: [PATCH 3/4] Make LDAP extra attributes available to IPA and AD MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://fedorahosted.org/sssd/ticket/2073 Reviewed-by: Simo Sorce Reviewed-by: Pavel Březina --- src/config/etc/sssd.api.d/sssd-ad.conf | 1 + src/config/etc/sssd.api.d/sssd-ipa.conf | 1 + src/providers/ad/ad_common.c | 11 +++++----- src/providers/ipa/ipa_common.c | 11 +++++----- src/providers/ldap/ldap_common.c | 38 -------------------------------- src/providers/ldap/sdap.c | 39 +++++++++++++++++++++++++++++++++ src/providers/ldap/sdap.h | 8 +++++++ 7 files changed, 61 insertions(+), 48 deletions(-) diff --git a/src/config/etc/sssd.api.d/sssd-ad.conf b/src/config/etc/sssd.api.d/sssd-ad.conf index 303ed840ddb52c5a60c9df80931e3fe6cf852388..5d526326879aae868b1b178e6e339ee2fd4fe96a 100644 --- a/src/config/etc/sssd.api.d/sssd-ad.conf +++ b/src/config/etc/sssd.api.d/sssd-ad.conf @@ -54,6 +54,7 @@ ldap_id_mapping = bool, None, false ldap_user_search_base = str, None, false ldap_user_search_scope = str, None, false ldap_user_search_filter = str, None, false +ldap_user_extra_attrs = str, None, false ldap_user_object_class = str, None, false ldap_user_name = str, None, false ldap_user_uid_number = str, None, false diff --git a/src/config/etc/sssd.api.d/sssd-ipa.conf b/src/config/etc/sssd.api.d/sssd-ipa.conf index f57bfea5002eac30d93e5430855aea6f94a2292a..c1cedf088d9b1795956af67fe9410e7bb2f27413 100644 --- a/src/config/etc/sssd.api.d/sssd-ipa.conf +++ b/src/config/etc/sssd.api.d/sssd-ipa.conf @@ -61,6 +61,7 @@ ldap_id_mapping = bool, None, false ldap_user_search_base = str, None, false ldap_user_search_scope = str, None, false ldap_user_search_filter = str, None, false +ldap_user_extra_attrs = str, None, false ldap_user_object_class = str, None, false ldap_user_name = str, None, false ldap_user_uid_number = str, None, false diff --git a/src/providers/ad/ad_common.c b/src/providers/ad/ad_common.c index af738bc82ba016759dd9a951a4b7b1832b61489d..8523fe5b49a7434c20c4730aae92eebb62b92397 100644 --- a/src/providers/ad/ad_common.c +++ b/src/providers/ad/ad_common.c @@ -201,11 +201,12 @@ ad_create_sdap_options(TALLOC_CTX *mem_ctx, goto done; } - ret = sdap_extend_map(id_opts, - id_opts->user_map, - SDAP_OPTS_USER, NULL, - &id_opts->user_map, - &id_opts->user_map_cnt); + ret = sdap_extend_map_with_list(id_opts, id_opts, + SDAP_USER_EXTRA_ATTRS, + id_opts->user_map, + SDAP_OPTS_USER, + &id_opts->user_map, + &id_opts->user_map_cnt); if (ret != EOK) { goto done; } diff --git a/src/providers/ipa/ipa_common.c b/src/providers/ipa/ipa_common.c index 19de10d8bb92a4b3d0c8353eae128f3b4709a7af..f594de27a65ab1ff702d0c593a57e89bfd469532 100644 --- a/src/providers/ipa/ipa_common.c +++ b/src/providers/ipa/ipa_common.c @@ -547,11 +547,12 @@ int ipa_get_id_options(struct ipa_options *ipa_opts, goto done; } - ret = sdap_extend_map(ipa_opts->id, - ipa_opts->id->user_map, - SDAP_OPTS_USER, NULL, - &ipa_opts->id->user_map, - &ipa_opts->id->user_map_cnt); + ret = sdap_extend_map_with_list(ipa_opts->id, ipa_opts->id, + SDAP_USER_EXTRA_ATTRS, + ipa_opts->id->user_map, + SDAP_OPTS_USER, + &ipa_opts->id->user_map, + &ipa_opts->id->user_map_cnt); if (ret != EOK) { goto done; } diff --git a/src/providers/ldap/ldap_common.c b/src/providers/ldap/ldap_common.c index 49468bf4bb8a0d5cecda9b8eca886293583ef8a9..4bee960b5413e1f5be4dd68383456cc35b854370 100644 --- a/src/providers/ldap/ldap_common.c +++ b/src/providers/ldap/ldap_common.c @@ -215,44 +215,6 @@ sdap_domain_remove(struct sdap_options *opts, DLIST_REMOVE(*(sdom->head), sdom); } -static int sdap_extend_map_with_list(TALLOC_CTX *mem_ctx, - struct sdap_options *opts, - int extra_attr_index, - struct sdap_attr_map *src_map, - size_t num_entries, - struct sdap_attr_map **_map, - size_t *_new_size) -{ - const char *extra_attrs; - char **extra_attrs_list; - errno_t ret; - - extra_attrs = dp_opt_get_string(opts->basic, extra_attr_index); - if (extra_attrs == NULL) { - *_map = src_map; - *_new_size = num_entries; - return EOK; - } - - /* split server parm into a list */ - ret = split_on_separator(mem_ctx, extra_attrs, ',', true, true, - &extra_attrs_list, NULL); - if (ret != EOK) { - DEBUG(SSSDBG_OP_FAILURE, "Failed to parse server list!\n"); - return ret; - } - - ret = sdap_extend_map(mem_ctx, src_map, - num_entries, extra_attrs_list, - _map, _new_size); - talloc_free(extra_attrs_list); - if (ret != EOK) { - return ret; - } - - return EOK; -} - int ldap_get_options(TALLOC_CTX *memctx, struct sss_domain_info *dom, struct confdb_ctx *cdb, diff --git a/src/providers/ldap/sdap.c b/src/providers/ldap/sdap.c index 37a187436a6e17e9e41f981970b9c5ab5e685f46..e8d23c9dc5eac34fc5182305dc4be9180f8be176 100644 --- a/src/providers/ldap/sdap.c +++ b/src/providers/ldap/sdap.c @@ -187,6 +187,45 @@ int sdap_extend_map(TALLOC_CTX *memctx, return EOK; } +int sdap_extend_map_with_list(TALLOC_CTX *mem_ctx, + struct sdap_options *opts, + int extra_attr_index, + struct sdap_attr_map *src_map, + size_t num_entries, + struct sdap_attr_map **_map, + size_t *_new_size) +{ + const char *extra_attrs; + char **extra_attrs_list; + errno_t ret; + + extra_attrs = dp_opt_get_string(opts->basic, extra_attr_index); + if (extra_attrs == NULL) { + *_map = src_map; + *_new_size = num_entries; + return EOK; + } + + /* split server parm into a list */ + ret = split_on_separator(mem_ctx, extra_attrs, ',', true, true, + &extra_attrs_list, NULL); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("Failed to parse server list!\n")); + return ret; + } + + + ret = sdap_extend_map(mem_ctx, src_map, + num_entries, extra_attrs_list, + _map, _new_size); + talloc_free(extra_attrs_list); + if (ret != EOK) { + return ret; + } + + return EOK; +} + int sdap_get_map(TALLOC_CTX *memctx, struct confdb_ctx *cdb, const char *conf_path, diff --git a/src/providers/ldap/sdap.h b/src/providers/ldap/sdap.h index 7f8911744a8a9877ef2e48c66f36505c949349c5..178aecce1bf8b51dc8f1931aa07d989b8f31f11d 100644 --- a/src/providers/ldap/sdap.h +++ b/src/providers/ldap/sdap.h @@ -476,6 +476,14 @@ int sdap_extend_map(TALLOC_CTX *memctx, struct sdap_attr_map **_map, size_t *_new_size); +int sdap_extend_map_with_list(TALLOC_CTX *mem_ctx, + struct sdap_options *opts, + int extra_attr_index, + struct sdap_attr_map *src_map, + size_t num_entries, + struct sdap_attr_map **_map, + size_t *_new_size); + int sdap_get_map(TALLOC_CTX *memctx, struct confdb_ctx *cdb, const char *conf_path, -- 1.9.0