diff options
Diffstat (limited to 'src/back-shr.c')
-rw-r--r-- | src/back-shr.c | 31 |
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. */ |