summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/back-shr.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/back-shr.c b/src/back-shr.c
index 14d3d23..f8c7331 100644
--- a/src/back-shr.c
+++ b/src/back-shr.c
@@ -252,6 +252,7 @@ backend_shr_entry_matches(Slapi_PBlock *pb, Slapi_Entry *e,
{
Slapi_DN *entry_sdn, *containing_sdn;
Slapi_Filter *filter;
+ char *filterstr;
bool_t ret;
/* First, just do the scope test. The item should be a somewhere
@@ -260,7 +261,7 @@ backend_shr_entry_matches(Slapi_PBlock *pb, Slapi_Entry *e,
if (entry_sdn == NULL) {
return FALSE;
} else {
- containing_sdn = slapi_sdn_new_ndn_byval(containing_ndn);
+ containing_sdn = slapi_sdn_new_dn_byval(containing_ndn);
if (containing_sdn == NULL) {
slapi_sdn_free(&entry_sdn);
return FALSE;
@@ -277,12 +278,19 @@ backend_shr_entry_matches(Slapi_PBlock *pb, Slapi_Entry *e,
/* If it's actually in our configuration tree, check if it's a valid
* entry. */
if (ret) {
- filter = slapi_str2filter((char *) check_filter);
- if (filter != NULL) {
- if (slapi_vattr_filter_test(pb, e, filter, 0) != 0) {
- ret = FALSE;
+ /* N.B.: slapi_str2filter isn't kidding -- it really wants a
+ * writable string. */
+ filterstr = strdup(check_filter);
+ if (filterstr != NULL) {
+ filter = slapi_str2filter(filterstr);
+ if (filter != NULL) {
+ if (slapi_vattr_filter_test(pb, e,
+ filter, 0) != 0) {
+ ret = FALSE;
+ }
+ slapi_filter_free(filter, 1);
}
- slapi_filter_free(filter, 1);
+ free(filterstr);
}
}
return ret;