svn commit: samba r20780 - in branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules: .

metze at samba.org metze at samba.org
Sun Jan 14 19:08:15 GMT 2007


Author: metze
Date: 2007-01-14 19:08:14 +0000 (Sun, 14 Jan 2007)
New Revision: 20780

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

Log:
keep a dsdb_schema_fsmo struct as private data
and remember if we're the schema master

metze
Modified:
   branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/schema_fsmo.c


Changeset:
Modified: branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/schema_fsmo.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/schema_fsmo.c	2007-01-14 19:03:59 UTC (rev 20779)
+++ branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/schema_fsmo.c	2007-01-14 19:08:14 UTC (rev 20780)
@@ -32,13 +32,19 @@
 #include "librpc/gen_ndr/ndr_drsblobs.h"
 #include "lib/util/dlinklist.h"
 
+struct dsdb_schema_fsmo {
+	bool we_are_master;
+};
+
 static int schema_fsmo_init(struct ldb_module *module)
 {
 	WERROR status;
 	TALLOC_CTX *mem_ctx;
 	struct ldb_dn *schema_dn;
 	struct dsdb_schema *schema;
+	struct dsdb_schema_fsmo *schema_fsmo;
 	struct ldb_result *schema_res;
+	struct ldb_dn *schema_master_dn;
 	const struct ldb_val *prefix_val;
 	const struct ldb_val *info_val;
 	struct ldb_result *a_res;
@@ -48,6 +54,7 @@
 	static const char *schema_attrs[] = {
 		"prefixMap",
 		"schemaInfo",
+		"fSMORoleOwner",
 		NULL
 	};
 
@@ -64,6 +71,13 @@
 		return LDB_ERR_OPERATIONS_ERROR;
 	}
 
+	schema_fsmo = talloc_zero(mem_ctx, struct dsdb_schema_fsmo);
+	if (!schema_fsmo) {
+		ldb_oom(module->ldb);
+		return LDB_ERR_OPERATIONS_ERROR;
+	}
+	module->private_data = schema_fsmo;
+
 	schema = talloc_zero(mem_ctx, struct dsdb_schema);
 	if (!schema) {
 		ldb_oom(module->ldb);
@@ -210,6 +224,13 @@
 		return ret;
 	}
 
+	schema_master_dn = ldb_msg_find_attr_as_dn(module->ldb, mem_ctx, schema_res->msgs[0], "fSMORoleOwner");
+	if (ldb_dn_compare(samdb_ntds_settings_dn(module->ldb), schema_master_dn) == 0) {
+		schema_fsmo->we_are_master = true;
+	} else {
+		schema_fsmo->we_are_master = false;
+	}
+
 	talloc_free(mem_ctx);
 	return ldb_next_init(module);
 }



More information about the samba-cvs mailing list