diff options
author | Alexander Bokovoy <abokovoy@redhat.com> | 2015-11-03 14:42:05 +0200 |
---|---|---|
committer | Alexander Bokovoy <abokovoy@redhat.com> | 2015-11-19 17:04:50 +0200 |
commit | da26d9595e6449009575e8d2a4c888176829a97f (patch) | |
tree | d8f946b23d8c7ea44e83e6f5d120de9b9ff4d25a | |
parent | 0081b76f0de495c2b0aa1248a0ac9f5d85cc9421 (diff) | |
download | slapi-nis-da26d9595e6449009575e8d2a4c888176829a97f.tar.gz slapi-nis-da26d9595e6449009575e8d2a4c888176829a97f.tar.xz slapi-nis-da26d9595e6449009575e8d2a4c888176829a97f.zip |
slapi-nis: fix processing of ID views
- ID View processing should only happen if ID view is defined
- When finding attribute with slapi_entry_attr_find() use correct return
code (slapi_entry_attr_exists() returns 1, _find() returns 0)
- cn=<view>,cn=views,cn=compat,$SUFFIX lookup is fixed
Resolves: rhbz#1277576, rhbz#1265465
https://bugzilla.redhat.com/show_bug.cgi?id=1277576
https://bugzilla.redhat.com/show_bug.cgi?id=1265465
-rw-r--r-- | src/back-sch-idview.c | 2 | ||||
-rw-r--r-- | src/back-sch.c | 32 |
2 files changed, 25 insertions, 9 deletions
diff --git a/src/back-sch-idview.c b/src/back-sch-idview.c index 93fbab5..8ffab91 100644 --- a/src/back-sch-idview.c +++ b/src/back-sch-idview.c @@ -175,7 +175,7 @@ idview_process_overrides(struct backend_search_cbdata *cbdata, /* Replace the attribute's value with the override or * add an override value if the attribute didn't exist */ result = slapi_entry_attr_find(entry, override_type, &sattr); - if (result == 1) { + if (result == 0) { result = slapi_entry_attr_delete(entry, override_type); } result = slapi_attr_get_valueset(override_attr, &override_valueset); diff --git a/src/back-sch.c b/src/back-sch.c index b2362d0..98542c5 100644 --- a/src/back-sch.c +++ b/src/back-sch.c @@ -1043,17 +1043,21 @@ backend_search_entry_cb(const char *domain, const char *map, bool_t secure, slapi_sdn_get_ndn(sdn)); entry = entry_data->e; #ifdef USE_IPA_IDVIEWS - entry = slapi_entry_dup(entry_data->e); if (cbdata->idview != NULL) { - idview_process_overrides(cbdata, key, map, domain, entry); - } + entry = slapi_entry_dup(entry_data->e); + if (entry != NULL) { + idview_process_overrides(cbdata, key, map, domain, entry); - /* slapi_entry_attr_exists() was introduced only in https://fedorahosted.org/389/ticket/47710 */ - is_attr_exists = slapi_entry_attr_find(entry, IPA_IDVIEWS_ATTR_ANCHORUUID, &attr) == 0; + /* slapi_entry_attr_exists() was introduced only in https://fedorahosted.org/389/ticket/47710 */ + is_attr_exists = slapi_entry_attr_find(entry, IPA_IDVIEWS_ATTR_ANCHORUUID, &attr) == 0; - if (is_attr_exists == TRUE) { - slapi_entry_attr_delete(entry, IPA_IDVIEWS_ATTR_ANCHORUUID); - slapi_entry_delete_string(entry, "objectClass", "ipaOverrideTarget"); + if (is_attr_exists == TRUE) { + slapi_entry_attr_delete(entry, IPA_IDVIEWS_ATTR_ANCHORUUID); + slapi_entry_delete_string(entry, "objectClass", "ipaOverrideTarget"); + } + } else { + entry = entry_data->e; + } } #endif backend_entries_to_return_push(cbdata, entry); @@ -1203,10 +1207,22 @@ static bool_t backend_search_find_set_dn_cb(const char *group, void *cb_data) { struct backend_search_cbdata *cbdata; + Slapi_DN *group_dn; cbdata = cb_data; + + /* Check the group itself. */ + group_dn = slapi_sdn_new_dn_byval(group); + if (slapi_sdn_scope_test(group_dn, cbdata->target_dn, + cbdata->scope) == 1) { + cbdata->answer = TRUE; + slapi_sdn_free(&group_dn); + return TRUE; + } + map_data_foreach_map(cbdata->state, group, backend_search_find_set_dn_in_group_cb, cb_data); + slapi_sdn_free(&group_dn); return TRUE; } |