#include "includes.h"
#include "registry.h"
-#include "lib/ldb/include/ldb.h"
-#include "lib/ldb/include/ldb_errors.h"
+#include <ldb.h>
+#include <ldb_errors.h>
#include "ldb_wrap.h"
#include "librpc/gen_ndr/winreg.h"
#include "param/param.h"
/* The data should be provided as UTF16 string */
convert_string_talloc(mem_ctx, CH_UTF8, CH_UTF16,
val->data, val->length,
- (void **)&data->data, &data->length, false);
+ (void **)&data->data, &data->length);
} else {
data->data = NULL;
data->length = 0;
/* The data is provided as UTF16 string */
ret2 = convert_string_talloc(mem_ctx, CH_UTF16, CH_UTF8,
(void *)data.data, data.length,
- (void **)&val->data, &val->length,
- false);
+ (void **)&val->data, &val->length);
if (ret2) {
ret = ldb_msg_add_value(msg, "data", val, NULL);
} else {
char *conv_str;
conv_str = talloc_asprintf(msg, "0x%16.16llx",
- BVAL(data.data, 0));
+ (unsigned long long)BVAL(data.data, 0));
if (conv_str == NULL) {
talloc_free(msg);
return NULL;
struct ldb_result *res;
int ret;
- ret = ldb_search(c, mem_ctx, &res, kd->dn, LDB_SCOPE_BASE, attrs, "(dn=*)");
+ ret = ldb_search(c, mem_ctx, &res, kd->dn, LDB_SCOPE_BASE, attrs,
+ NULL);
if (ret != LDB_SUCCESS) {
DEBUG(0, ("Error getting default value for '%s': %s\n",
return WERR_FOOBAR;
}
- if (res->count == 0 || res->msgs[0]->num_elements == 0)
+ if (res->count == 0 || res->msgs[0]->num_elements == 0) {
+ talloc_free(res);
return WERR_BADFILE;
+ }
if ((data_type != NULL) && (data != NULL)) {
reg_ldb_unpack_value(mem_ctx, res->msgs[0], name, data_type,
ldb_path = reg_path_to_ldb(mem_ctx, h, name, NULL);
W_ERROR_HAVE_NO_MEMORY(ldb_path);
- ret = ldb_search(c, mem_ctx, &res, ldb_path, LDB_SCOPE_BASE, NULL, "(key=*)");
+ ret = ldb_search(c, mem_ctx, &res, ldb_path, LDB_SCOPE_BASE, NULL,
+ NULL);
if (ret != LDB_SUCCESS) {
DEBUG(3, ("Error opening key '%s': %s\n",
W_ERROR_HAVE_NO_MEMORY(msg);
msg->dn = ldb_dn_copy(msg, kd->dn);
W_ERROR_HAVE_NO_MEMORY(msg->dn);
- ldb_msg_add_empty(msg, "data", LDB_FLAG_MOD_DELETE, NULL);
- ldb_msg_add_empty(msg, "type", LDB_FLAG_MOD_DELETE, NULL);
+ ret = ldb_msg_add_empty(msg, "data", LDB_FLAG_MOD_DELETE, NULL);
+ if (ret != LDB_SUCCESS) {
+ return WERR_FOOBAR;
+ }
+ ret = ldb_msg_add_empty(msg, "type", LDB_FLAG_MOD_DELETE,
+ NULL);
+ if (ret != LDB_SUCCESS) {
+ return WERR_FOOBAR;
+ }
ret = ldb_modify(kd->ldb, msg);
- if (ret != LDB_SUCCESS) {
+
+ talloc_free(msg);
+
+ if (ret == LDB_ERR_NO_SUCH_ATTRIBUTE) {
+ return WERR_BADFILE;
+ } else if (ret != LDB_SUCCESS) {
DEBUG(1, ("ldb_del_value: %s\n", ldb_errstring(kd->ldb)));
return WERR_FOOBAR;
}
}
}
}
+ talloc_free(res_keys);
+ talloc_free(res_vals);
/* Delete the key itself */
ret = ldb_delete(c, ldb_path);
if (ret == LDB_ERR_NO_SUCH_OBJECT) {
i = 0;
while (i < msg->num_elements) {
- if (msg->elements[i].flags == LDB_FLAG_MOD_DELETE) {
+ if (LDB_FLAG_MOD_TYPE(msg->elements[i].flags) == LDB_FLAG_MOD_DELETE) {
ldb_msg_remove_element(msg, &msg->elements[i]);
} else {
++i;
ret = LDB_SUCCESS;
}
+ talloc_free(msg);
+
if (ret != LDB_SUCCESS) {
DEBUG(1, ("ldb_set_value: %s\n", ldb_errstring(kd->ldb)));
talloc_free(mem_ctx);