diff options
author | Stefan Metzmacher <metze@samba.org> | 2007-01-14 19:08:14 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:40:53 -0500 |
commit | b15f4878e194bc47ec08ab54e74ebeb5fa9aae6c (patch) | |
tree | c38216ebec2bbc3c04e131e03b73a354adfbbbec | |
parent | 3b956f0779a5b6994020d716ba042f3ace0d4a8a (diff) | |
download | samba-b15f4878e194bc47ec08ab54e74ebeb5fa9aae6c.tar.gz samba-b15f4878e194bc47ec08ab54e74ebeb5fa9aae6c.tar.bz2 samba-b15f4878e194bc47ec08ab54e74ebeb5fa9aae6c.zip |
r20780: keep a dsdb_schema_fsmo struct as private data
and remember if we're the schema master
metze
(This used to be commit c42dab21fb275ca36a517f97922af21447671785)
-rw-r--r-- | source4/dsdb/samdb/ldb_modules/schema_fsmo.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/schema_fsmo.c b/source4/dsdb/samdb/ldb_modules/schema_fsmo.c index 9faed9a5ac..33a7539b39 100644 --- a/source4/dsdb/samdb/ldb_modules/schema_fsmo.c +++ b/source4/dsdb/samdb/ldb_modules/schema_fsmo.c @@ -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 int schema_fsmo_init(struct ldb_module *module) static const char *schema_attrs[] = { "prefixMap", "schemaInfo", + "fSMORoleOwner", NULL }; @@ -64,6 +71,13 @@ static int schema_fsmo_init(struct ldb_module *module) 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 @@ static int schema_fsmo_init(struct ldb_module *module) 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); } |