diff options
-rw-r--r-- | src/format.c | 16 | ||||
-rw-r--r-- | src/format.h | 2 |
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; |