/*
rename the specified attribute in a search result
*/
-void ldb_msg_rename_attr(struct ldb_message *msg, const char *attr, const char *replace)
+int ldb_msg_rename_attr(struct ldb_message *msg, const char *attr, const char *replace)
{
struct ldb_message_element *el = ldb_msg_find_element(msg, attr);
- if (el != NULL) {
- el->name = replace;
+ if (el == NULL) {
+ return 0;
+ }
+ el->name = talloc_strdup(msg->elements, replace);
+ if (el->name == NULL) {
+ return -1;
}
+ return 0;
}
if (ldb_msg_add(msg, el, 0) != 0) {
return -1;
}
- ldb_msg_rename_attr(msg, attr, replace);
- return 0;
+ return ldb_msg_rename_attr(msg, attr, replace);
}
const char *attr,
const char *replace);
-void ldb_msg_rename_attr(struct ldb_message *msg, const char *attr, const char *replace);
+int ldb_msg_rename_attr(struct ldb_message *msg, const char *attr, const char *replace);
int ldb_msg_copy_attr(struct ldb_message *msg, const char *attr, const char *replace);
char *ldb_timestring(TALLOC_CTX *mem_ctx, time_t t);
int ret;
const char **search_attrs = NULL;
+ (*res) = NULL;
+
/* replace any attributes in the parse tree that are
searchable, but are stored using a different name in the
backend */
goto oom;
}
} else {
- ldb_msg_rename_attr((*res)[r],
- search_sub[i].replace,
- search_sub[i].attr);
+ if (ldb_msg_rename_attr((*res)[r],
+ search_sub[i].replace,
+ search_sub[i].attr) != 0) {
+ goto oom;
+ }
}
}
}
oom:
talloc_free(search_attrs);
+ talloc_free(*res);
ldb_oom(module->ldb);
return -1;
}