r19831: Big ldb_dn optimization and interfaces enhancement patch
[jelmer/samba4-debian.git] / source / ldap_server / ldap_server.c
index d48c0664d7ce15c84880af59be546393ed92a651..82fc1d966011d0c89234e4bde0f69e7aa8b49942 100644 (file)
@@ -25,7 +25,9 @@
 #include "includes.h"
 #include "lib/events/events.h"
 #include "auth/auth.h"
-#include "dlinklist.h"
+#include "auth/credentials/credentials.h"
+#include "librpc/gen_ndr/ndr_samr.h"
+#include "lib/util/dlinklist.h"
 #include "libcli/util/asn_1.h"
 #include "ldap_server/ldap_server.h"
 #include "smbd/service_task.h"
@@ -218,7 +220,6 @@ static int ldapsrv_load_limits(struct ldapsrv_connection *conn)
        TALLOC_CTX *tmp_ctx;
        const char *attrs[] = { "configurationNamingContext", NULL };
        const char *attrs2[] = { "lDAPAdminLimits", NULL };
-       const char *conf_dn_s;
        struct ldb_message_element *el;
        struct ldb_result *res = NULL;
        struct ldb_dn *basedn;
@@ -238,8 +239,8 @@ static int ldapsrv_load_limits(struct ldapsrv_connection *conn)
                return -1;
        }
 
-       basedn = ldb_dn_explode(tmp_ctx, "");
-       if (basedn == NULL) {
+       basedn = ldb_dn_new(tmp_ctx, conn->ldb, NULL);
+       if ( ! ldb_dn_validate(basedn)) {
                goto failed;
        }
 
@@ -249,16 +250,13 @@ static int ldapsrv_load_limits(struct ldapsrv_connection *conn)
                goto failed;
        }
 
-       conf_dn_s = ldb_msg_find_attr_as_string(res->msgs[0], "configurationNamingContext", NULL);
-       if (conf_dn_s == NULL) {
-               goto failed;
-       }
-       conf_dn = ldb_dn_explode(tmp_ctx, conf_dn_s);
+       conf_dn = ldb_msg_find_attr_as_dn(conn->ldb, tmp_ctx, res->msgs[0], "configurationNamingContext");
        if (conf_dn == NULL) {
                goto failed;
        }
 
-       policy_dn = ldb_dn_string_compose(tmp_ctx, conf_dn, "CN=Default Query Policy,CN=Query-Policies,CN=Directory Service,CN=Windows NT,CN=Services");
+       policy_dn = ldb_dn_copy(tmp_ctx, conf_dn);
+       ldb_dn_add_child_fmt(policy_dn, "CN=Default Query Policy,CN=Query-Policies,CN=Directory Service,CN=Windows NT,CN=Services");
        if (policy_dn == NULL) {
                goto failed;
        }