summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/format.c16
-rw-r--r--src/format.h2
2 files changed, 14 insertions, 4 deletions
diff --git a/src/format.c b/src/format.c
index a877e35..5b5b650 100644
--- a/src/format.c
+++ b/src/format.c
@@ -193,7 +193,9 @@ format_free_ref_attr_list(struct format_ref_attr_list **list)
for (i = 0; list[i] != NULL; i++) {
for (j = 0; j < list[i]->n_links; j++) {
free(list[i]->links[j].attribute);
- free(list[i]->links[j].filter);
+ if (list[i]->links[j].filter != NULL) {
+ slapi_filter_free(list[i]->links[j].filter, TRUE);
+ }
sdn_list = list[i]->links[j].base_sdn_list;
format_free_sdn_list(sdn_list);
}
@@ -243,7 +245,7 @@ format_dup_ref_attr_list(struct format_ref_attr_list **list)
}
if (list[i]->links[j].filter != NULL) {
ret[i]->links[j].filter =
- strdup(list[i]->links[j].filter);
+ slapi_filter_dup(list[i]->links[j].filter);
if (ret[i]->links[j].filter == NULL) {
format_free_ref_attr_list(ret);
return NULL;
@@ -292,6 +294,7 @@ format_add_ref_attr_list(struct format_ref_attr_list ***list,
const char **names, const char **filters)
{
struct format_ref_attr_list **ret;
+ char *ftmp;
unsigned int i;
int j;
if (format_find_ref_attr_list(*list, group, set, names) != NULL) {
@@ -330,11 +333,18 @@ format_add_ref_attr_list(struct format_ref_attr_list ***list,
return NULL;
}
if ((filters != NULL) && (filters[j] != NULL)) {
- ret[i]->links[j].filter = strdup(names[j]);
+ ftmp = strdup(filters[j]);
+ if (ftmp == NULL) {
+ format_free_ref_attr_list(ret);
+ return NULL;
+ }
+ ret[i]->links[j].filter = slapi_str2filter(ftmp);
if (ret[i]->links[j].filter == NULL) {
+ free(ftmp);
format_free_ref_attr_list(ret);
return NULL;
}
+ free(ftmp);
}
ret[i]->links[j].base_sdn_list = NULL;
}
diff --git a/src/format.h b/src/format.h
index 1a30965..e84a10c 100644
--- a/src/format.h
+++ b/src/format.h
@@ -33,7 +33,7 @@ struct format_ref_attr_list {
char *group, *set;
struct format_ref_attr_list_link {
char *attribute;
- char *filter;
+ Slapi_Filter *filter;
struct slapi_dn **base_sdn_list;
} *links;
int n_links;