#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;
const char *path, const char *add)
{
struct ldb_dn *ret;
- char *mypath = talloc_strdup(mem_ctx, path);
+ char *mypath;
char *begin;
struct ldb_key_data *kd = talloc_get_type(from, struct ldb_key_data);
struct ldb_context *ldb = kd->ldb;
+ mypath = talloc_strdup(mem_ctx, path);
+ if (mypath == NULL) {
+ return NULL;
+ }
+
ret = ldb_dn_new(mem_ctx, ldb, add);
if (!ldb_dn_validate(ret)) {
talloc_free(ret);
return NULL;
}
- while (mypath) {
- char *keyname;
-
- begin = strrchr(mypath, '\\');
+ if (!ldb_dn_add_base(ret, kd->dn)) {
+ talloc_free(ret);
+ return NULL;
+ }
- if (begin) keyname = begin + 1;
- else keyname = mypath;
+ while (mypath[0] != '\0') {
+ begin = strchr(mypath, '\\');
+ if (begin != NULL) {
+ *begin = '\0';
+ }
- if (keyname[0] != '\0') {
- if (!ldb_dn_add_base_fmt(ret, "key=%s",
- reg_ldb_escape(mem_ctx,
- keyname)))
- {
- talloc_free(ret);
- return NULL;
- }
+ if (!ldb_dn_add_child_fmt(ret, "key=%s",
+ reg_ldb_escape(mem_ctx, mypath))) {
+ talloc_free(ret);
+ return NULL;
}
- if(begin) {
- *begin = '\0';
+ if (begin != NULL) {
+ mypath = begin + 1;
} else {
break;
}
}
- ldb_dn_add_base(ret, kd->dn);
-
return ret;
}
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)
- return WERR_BADFILE;
+ if (res->count == 0 || res->msgs[0]->num_elements == 0) {
+ talloc_free(res);
+ return WERR_FILE_NOT_FOUND;
+ }
if ((data_type != NULL) && (data != NULL)) {
reg_ldb_unpack_value(mem_ctx, res->msgs[0], name, data_type,
const char *res_name;
uint32_t idx;
- if (name == NULL) {
- return WERR_INVALID_PARAM;
- }
-
/* the default value was requested, give it back */
if (name[0] == '\0') {
return ldb_get_default_value(mem_ctx, k, NULL, data_type, data);
}
}
- return WERR_BADFILE;
+ return WERR_FILE_NOT_FOUND;
}
static WERROR ldb_open_key(TALLOC_CTX *mem_ctx, const struct hive_key *h,
struct ldb_key_data *kd = talloc_get_type(h, struct ldb_key_data);
struct ldb_context *c = kd->ldb;
- if (name == NULL) {
- return WERR_INVALID_PARAM;
- }
-
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",
DEBUG(3, ("Key '%s' not found\n",
ldb_dn_get_linearized(ldb_path)));
talloc_free(res);
- return WERR_BADFILE;
+ return WERR_FILE_NOT_FOUND;
}
newkd = talloc_zero(mem_ctx, struct ldb_key_data);
struct ldb_message *attrs_msg;
if (location == NULL)
- return WERR_INVALID_PARAM;
+ return WERR_INVALID_PARAMETER;
wrap = ldb_wrap_connect(parent_ctx, ev_ctx, lp_ctx,
location, session_info, credentials, 0);
struct ldb_key_data *newkd;
int ret;
- if (name == NULL) {
- return WERR_INVALID_PARAM;
- }
-
ldb_path = reg_path_to_ldb(mem_ctx, parent, name, NULL);
W_ERROR_HAVE_NO_MEMORY(ldb_path);
struct ldb_message *msg;
struct ldb_dn *childdn;
- if (child == NULL) {
- return WERR_INVALID_PARAM;
- }
-
if (child[0] == '\0') {
/* default value */
msg = talloc_zero(mem_ctx, struct ldb_message);
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_FILE_NOT_FOUND;
+ } else if (ret != LDB_SUCCESS) {
DEBUG(1, ("ldb_del_value: %s\n", ldb_errstring(kd->ldb)));
return WERR_FOOBAR;
}
talloc_free(childdn);
if (ret == LDB_ERR_NO_SUCH_OBJECT) {
- return WERR_BADFILE;
+ return WERR_FILE_NOT_FOUND;
} else if (ret != LDB_SUCCESS) {
DEBUG(1, ("ldb_del_value: %s\n", ldb_errstring(kd->ldb)));
return WERR_FOOBAR;
WERROR werr;
struct hive_key *hk;
- if (name == NULL) {
- return WERR_INVALID_PARAM;
- }
-
/* Verify key exists by opening it */
werr = ldb_open_key(mem_ctx, key, name, &hk);
if (!W_ERROR_IS_OK(werr)) {
}
}
}
+ talloc_free(res_keys);
+ talloc_free(res_vals);
/* Delete the key itself */
ret = ldb_delete(c, ldb_path);
int ret;
TALLOC_CTX *mem_ctx = talloc_init("ldb_set_value");
- if (name == NULL) {
- return WERR_INVALID_PARAM;
- }
-
msg = reg_ldb_pack_value(kd->ldb, mem_ctx, name, type, data);
W_ERROR_HAVE_NO_MEMORY(msg);
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);
* remain { NULL, 0 }. */
werr = ldb_get_default_value(mem_ctx, key, NULL, &default_value_type,
&default_value);
- if ((!W_ERROR_IS_OK(werr)) && (!W_ERROR_EQUAL(werr, WERR_BADFILE))) {
+ if ((!W_ERROR_IS_OK(werr)) && (!W_ERROR_EQUAL(werr, WERR_FILE_NOT_FOUND))) {
return werr;
}