svn commit: samba r20317 - in branches/SAMBA_4_0/source/lib/ldb/common: .

metze at samba.org metze at samba.org
Fri Dec 22 16:59:07 GMT 2006


Author: metze
Date: 2006-12-22 16:59:07 +0000 (Fri, 22 Dec 2006)
New Revision: 20317

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=20317

Log:
store references to all important naming contexts.

add ldb_get_config_basedn(), ldb_get_schema_basedn()
and ldb_get_root_basedn()

metze
Modified:
   branches/SAMBA_4_0/source/lib/ldb/common/ldb.c


Changeset:
Modified: branches/SAMBA_4_0/source/lib/ldb/common/ldb.c
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/common/ldb.c	2006-12-22 16:53:12 UTC (rev 20316)
+++ branches/SAMBA_4_0/source/lib/ldb/common/ldb.c	2006-12-22 16:59:07 UTC (rev 20317)
@@ -153,37 +153,69 @@
   pet hates about ldapsearch, which is that you have to get a long,
   complex basedn right to make any use of it.
 */
-static struct ldb_dn *ldb_set_default_basedn(struct ldb_context *ldb)
+static void ldb_set_default_dns(struct ldb_context *ldb)
 {
 	TALLOC_CTX *tmp_ctx;
 	int ret;
-	static const char *attrs[] = { "defaultNamingContext", NULL };
 	struct ldb_result *res;
-	struct ldb_dn *basedn=NULL;
+	struct ldb_dn *tmp_dn=NULL;
+	static const char *attrs[] = {
+		"rootDomainNamingContext",
+		"configurationNamingContext",
+		"schemaNamingContext",
+		"defaultNamingContext",
+		NULL
+	};
 
-	basedn = (struct ldb_dn *)ldb_get_opaque(ldb, "default_baseDN");
-	if (basedn) {
-		return basedn;
-	}
-
 	tmp_ctx = talloc_new(ldb);
 	ret = ldb_search(ldb, ldb_dn_new(tmp_ctx, ldb, NULL), LDB_SCOPE_BASE, 
 			 "(objectClass=*)", attrs, &res);
 	if (ret == LDB_SUCCESS) {
 		if (res->count == 1) {
-			basedn = ldb_msg_find_attr_as_dn(ldb, ldb, res->msgs[0], "defaultNamingContext");
-			ldb_set_opaque(ldb, "default_baseDN", basedn);
+			if (!ldb_get_opaque(ldb, "rootDomainNamingContext")) {
+				tmp_dn = ldb_msg_find_attr_as_dn(ldb, ldb, res->msgs[0], "rootDomainNamingContext");
+				ldb_set_opaque(ldb, "rootDomainNamingContext", tmp_dn);
+			}
+
+			if (!ldb_get_opaque(ldb, "configurationNamingContext")) {
+				tmp_dn = ldb_msg_find_attr_as_dn(ldb, ldb, res->msgs[0], "configurationNamingContext");
+				ldb_set_opaque(ldb, "configurationNamingContext", tmp_dn);
+			}
+
+			if (!ldb_get_opaque(ldb, "schemaNamingContext")) {
+				tmp_dn = ldb_msg_find_attr_as_dn(ldb, ldb, res->msgs[0], "schemaNamingContext");
+				ldb_set_opaque(ldb, "schemaNamingContext", tmp_dn);
+			}
+
+			if (!ldb_get_opaque(ldb, "defaultNamingContext")) {
+				tmp_dn = ldb_msg_find_attr_as_dn(ldb, ldb, res->msgs[0], "defaultNamingContext");
+				ldb_set_opaque(ldb, "defaultNamingContext", tmp_dn);
+			}
 		}
 		talloc_free(res);
 	}
 
 	talloc_free(tmp_ctx);
-	return basedn;
 }
 
+struct ldb_dn *ldb_get_root_basedn(struct ldb_context *ldb)
+{
+	return talloc_get_type(ldb_get_opaque(ldb, "rootDomainNamingContext"), struct ldb_dn);
+}
+
+struct ldb_dn *ldb_get_config_basedn(struct ldb_context *ldb)
+{
+	return talloc_get_type(ldb_get_opaque(ldb, "configurationNamingContext"), struct ldb_dn);
+}
+
+struct ldb_dn *ldb_get_schema_basedn(struct ldb_context *ldb)
+{
+	return talloc_get_type(ldb_get_opaque(ldb, "schemaNamingContext"), struct ldb_dn);
+}
+
 struct ldb_dn *ldb_get_default_basedn(struct ldb_context *ldb)
 {
-	return (struct ldb_dn *)ldb_get_opaque(ldb, "default_baseDN");
+	return talloc_get_type(ldb_get_opaque(ldb, "defaultNamingContext"), struct ldb_dn);
 }
 
 /* 
@@ -217,7 +249,7 @@
 	ldb->default_timeout = 300; /* set default to 5 minutes */
 
 	/* set the default base dn */
-	ldb_set_default_basedn(ldb);
+	ldb_set_default_dns(ldb);
 
 	return LDB_SUCCESS;
 }



More information about the samba-cvs mailing list