summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/ldap_server/ldap_rootdse.c3
-rw-r--r--source4/nbt_server/wins/winsdb.c37
-rw-r--r--source4/scripting/ejs/smbcalls_ldb.c1
3 files changed, 18 insertions, 23 deletions
diff --git a/source4/ldap_server/ldap_rootdse.c b/source4/ldap_server/ldap_rootdse.c
index 9d19f71fcb..568623f23d 100644
--- a/source4/ldap_server/ldap_rootdse.c
+++ b/source4/ldap_server/ldap_rootdse.c
@@ -294,7 +294,8 @@ static NTSTATUS rootdse_Search(struct ldapsrv_partition *partition, struct ldaps
attrs[j] = NULL;
}
- count = ldb_search(ldb, NULL, 0, "dn=cn=rootDSE", attrs, &res);
+ count = ldb_search(ldb, ldb_dn_explode(local_ctx, "cn=rootDSE"), 0,
+ NULL, attrs, &res);
talloc_steal(local_ctx, res);
if (count == 1) {
diff --git a/source4/nbt_server/wins/winsdb.c b/source4/nbt_server/wins/winsdb.c
index a83c60c3e7..75d08227d9 100644
--- a/source4/nbt_server/wins/winsdb.c
+++ b/source4/nbt_server/wins/winsdb.c
@@ -87,25 +87,21 @@ static void winsdb_remove_version(struct wins_server *winssrv, uint64_t version)
/*
return a DN for a nbt_name
*/
-static char *winsdb_dn(TALLOC_CTX *mem_ctx, struct nbt_name *name)
+static struct ldb_dn *winsdb_dn(TALLOC_CTX *mem_ctx, struct nbt_name *name)
{
- char *ret = talloc_asprintf(mem_ctx, "type=%02x", name->type);
- if (ret == NULL) {
- return ret;
- }
- if (name->name && *name->name) {
- ret = talloc_asprintf_append(ret, ",name=%s", name->name);
- }
- if (ret == NULL) {
- return ret;
+ struct ldb_dn *dn;
+
+ dn = ldb_dn_string_compose(mem_ctx, NULL, "type=%02x", name->type);
+ if (dn == NULL) {
+ return NULL;
}
- if (name->scope && *name->scope) {
- ret = talloc_asprintf_append(ret, ",scope=%s", name->scope);
+ if (dn && name->name && *name->name) {
+ dn = ldb_dn_string_compose(mem_ctx, dn, "name=%s", name->name);
}
- if (ret == NULL) {
- return ret;
+ if (dn && name->scope && *name->scope) {
+ dn = ldb_dn_string_compose(mem_ctx, dn, "scope=%s", name->scope);
}
- return ret;
+ return dn;
}
/*
@@ -119,14 +115,11 @@ struct winsdb_record *winsdb_load(struct wins_server *winssrv,
struct winsdb_record *rec;
struct ldb_message_element *el;
TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx);
- const char *expr;
int i;
- expr = talloc_asprintf(tmp_ctx, "dn=%s", winsdb_dn(tmp_ctx, name));
- if (expr == NULL) goto failed;
-
/* find the record in the WINS database */
- ret = ldb_search(winssrv->wins_db, NULL, LDB_SCOPE_ONELEVEL, expr, NULL, &res);
+ ret = ldb_search(winssrv->wins_db, winsdb_dn(tmp_ctx, name), LDB_SCOPE_BASE,
+ NULL, NULL, &res);
if (res != NULL) {
talloc_steal(tmp_ctx, res);
}
@@ -184,7 +177,7 @@ static struct ldb_message *winsdb_message(struct wins_server *winssrv,
struct ldb_message *msg = ldb_msg_new(mem_ctx);
if (msg == NULL) goto failed;
- msg->dn = ldb_dn_explode(msg, winsdb_dn(msg, rec->name));
+ msg->dn = winsdb_dn(msg, rec->name);
if (msg->dn == NULL) goto failed;
ret |= ldb_msg_add_fmt(ldb, msg, "objectClass", "wins");
ret |= ldb_msg_add_fmt(ldb, msg, "active", "%u", rec->state);
@@ -276,7 +269,7 @@ uint8_t winsdb_delete(struct wins_server *winssrv, struct winsdb_record *rec)
winsdb_remove_version(winssrv, rec->version);
- dn = ldb_dn_explode(tmp_ctx, winsdb_dn(tmp_ctx, rec->name));
+ dn = winsdb_dn(tmp_ctx, rec->name);
if (dn == NULL) goto failed;
ret = ldb_delete(ldb, dn);
diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c
index 8c66bde571..ec2748a426 100644
--- a/source4/scripting/ejs/smbcalls_ldb.c
+++ b/source4/scripting/ejs/smbcalls_ldb.c
@@ -412,6 +412,7 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv)
mprSetVar(ldb, "SCOPE_BASE", mprCreateNumberVar(LDB_SCOPE_BASE));
mprSetVar(ldb, "SCOPE_ONE", mprCreateNumberVar(LDB_SCOPE_ONELEVEL));
mprSetVar(ldb, "SCOPE_SUBTREE", mprCreateNumberVar(LDB_SCOPE_SUBTREE));
+ mprSetVar(ldb, "SCOPE_DEFAULT", mprCreateNumberVar(LDB_SCOPE_DEFAULT));
return 0;
}