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