diff options
author | Nalin Dahyabhai <nalin@redhat.com> | 2010-11-18 13:22:50 -0500 |
---|---|---|
committer | Nalin Dahyabhai <nalin@redhat.com> | 2010-11-18 13:22:50 -0500 |
commit | 104d4eccfc2ea36d9066e70a4c9cdf56ef0fbcb8 (patch) | |
tree | 1780ea48142a827c28cf56fc1d8bce0fcc70b500 | |
parent | 6f1e6643a7afe4ee553a211a15a91cb363ec4356 (diff) | |
download | slapi-nis-104d4eccfc2ea36d9066e70a4c9cdf56ef0fbcb8.tar.gz slapi-nis-104d4eccfc2ea36d9066e70a4c9cdf56ef0fbcb8.tar.xz slapi-nis-104d4eccfc2ea36d9066e70a4c9cdf56ef0fbcb8.zip |
- use actual slapi_filter structures to avoid reparsing
-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; |