r10252: a recent checkin from simo changed the handling of BASE and SUBTREE
authorAndrew Tridgell <tridge@samba.org>
Fri, 16 Sep 2005 03:18:49 +0000 (03:18 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:38:11 +0000 (13:38 -0500)
searches in ldb to be more ldap compliant, but broke the wins server
and the ejs ldb code. This fixes those up so 'make test' passes again.
(This used to be commit dff660c23c97114d0c1be705f4d6a9c114b60456)

source4/ldap_server/ldap_rootdse.c
source4/nbt_server/wins/winsdb.c
source4/scripting/ejs/smbcalls_ldb.c

index 9d19f71fcbfea70ee1bc67575a039a3731115310..568623f23dcb86029c2ca460bf3541e7e9b1e134 100644 (file)
@@ -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) {
index a83c60c3e7a6e881b00aee834f57ae5d73140546..75d08227d96b046615e3f9b36a35e8b71cc28e6d 100644 (file)
@@ -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);
index 8c66bde571953acd8c74bf6ae5adcae11aa4dd53..ec2748a426e3b5342aa7e408d0712c88f2cef831 100644 (file)
@@ -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;
 }