summaryrefslogtreecommitdiffstats
path: root/src/back-shr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/back-shr.c')
-rw-r--r--src/back-shr.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/back-shr.c b/src/back-shr.c
index cabd01c..00ca097 100644
--- a/src/back-shr.c
+++ b/src/back-shr.c
@@ -317,7 +317,7 @@ backend_shr_free_sdnlist(const Slapi_DN **sdnlist)
{
int i;
for (i = 0; (sdnlist != NULL) && (sdnlist[i] != NULL); i++) {
- slapi_sdn_free(&sdnlist[i]);
+ slapi_sdn_free((Slapi_DN **) &sdnlist[i]);
sdnlist[i] = NULL;
}
free(sdnlist);
@@ -791,11 +791,12 @@ static bool_t
backend_shr_entry_matches_set(struct backend_shr_set_data *set_data,
Slapi_PBlock *pb, Slapi_Entry *e)
{
- const Slapi_DN **ignore_subtrees;
+ const Slapi_DN **relevant_subtrees, **ignore_subtrees;
char **set_bases;
char *set_filter;
int i;
+ relevant_subtrees = set_data->relevant_subtrees;
ignore_subtrees = set_data->ignore_subtrees;
set_bases = set_data->bases;
set_filter = set_data->entry_filter;
@@ -809,6 +810,19 @@ backend_shr_entry_matches_set(struct backend_shr_set_data *set_data,
}
}
}
+ if (relevant_subtrees != NULL) {
+ for (i = 0; relevant_subtrees[i] != NULL; i++) {
+ if (slapi_sdn_scope_test(slapi_entry_get_sdn_const(e),
+ relevant_subtrees[i],
+ LDAP_SCOPE_SUBTREE) != 0) {
+ break;
+ }
+ }
+ if (relevant_subtrees[i] == NULL) {
+ /* Non-empty list, but no match. */
+ return FALSE;
+ }
+ }
if (set_bases != NULL) {
for (i = 0; set_bases[i] != NULL; i++) {
@@ -1013,6 +1027,19 @@ backend_shr_update_references_cb(const char *group, const char *set,
}
}
}
+ if (set_data->relevant_subtrees != NULL) {
+ for (i = 0; set_data->relevant_subtrees[i] != NULL; i++) {
+ if (slapi_sdn_scope_test(slapi_entry_get_sdn_const(cbdata->e),
+ set_data->relevant_subtrees[i],
+ LDAP_SCOPE_SUBTREE) != 0) {
+ break;
+ }
+ }
+ if (set_data->relevant_subtrees[i] == NULL) {
+ /* Non-empty list, but no match. */
+ return TRUE;
+ }
+ }
/* If the entry didn't change any attributes which are at all relevant
* to this map, then we don't need to recompute anything. */