summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2010-03-22 15:41:51 +1100
committerAndrew Bartlett <abartlet@samba.org>2010-03-22 20:24:41 +1100
commit639728a29873e4cf59dfa149a231eae353f3753a (patch)
treeb415f8c3cbae1c1d3ce1ebc6c177780ff8b35c21
parent775c5ec1c57b4acf61c1c750c4832f64defcb5b6 (diff)
downloadsamba-639728a29873e4cf59dfa149a231eae353f3753a.tar.gz
samba-639728a29873e4cf59dfa149a231eae353f3753a.tar.bz2
samba-639728a29873e4cf59dfa149a231eae353f3753a.zip
s4:schema Expand the schema structure
We now store the location of the schema in the schema, and provide hooks for a future schema reloading mechanism. Andrew Bartlett
-rw-r--r--source4/dsdb/schema/schema.h9
-rw-r--r--source4/dsdb/schema/schema_init.c2
2 files changed, 11 insertions, 0 deletions
diff --git a/source4/dsdb/schema/schema.h b/source4/dsdb/schema/schema.h
index fb1bd3cf91..b5334c7313 100644
--- a/source4/dsdb/schema/schema.h
+++ b/source4/dsdb/schema/schema.h
@@ -167,6 +167,7 @@ struct dsdb_class {
struct dsdb_schema {
+ struct ldb_dn *base_dn;
struct dsdb_schema_prefixmap *prefixmap;
@@ -180,6 +181,9 @@ struct dsdb_schema {
*/
const char *schema_info;
+ /* We can also tell the schema version from the USN on the partition */
+ uint64_t loaded_usn;
+
struct dsdb_attribute *attributes;
struct dsdb_class *classes;
@@ -204,6 +208,11 @@ struct dsdb_schema {
} fsmo;
struct smb_iconv_convenience *iconv_convenience;
+
+ /* Was this schema loaded from ldb (if so, then we will reload it when we detect a change in ldb) */
+ struct ldb_module *loaded_from_module;
+ struct dsdb_schema *(*refresh_fn)(struct ldb_module *module, struct dsdb_schema *schema, bool is_global_schema);
+ bool refresh_in_progress;
};
enum dsdb_attr_list_query {
diff --git a/source4/dsdb/schema/schema_init.c b/source4/dsdb/schema/schema_init.c
index 949c1ea069..c7fcdaecdc 100644
--- a/source4/dsdb/schema/schema_init.c
+++ b/source4/dsdb/schema/schema_init.c
@@ -725,6 +725,8 @@ int dsdb_schema_from_ldb_results(TALLOC_CTX *mem_ctx, struct ldb_context *ldb,
return LDB_ERR_OPERATIONS_ERROR;
}
+ schema->base_dn = talloc_steal(schema, schema_res->msgs[0]->dn);
+
prefix_val = ldb_msg_find_ldb_val(schema_res->msgs[0], "prefixMap");
if (!prefix_val) {
*error_string = talloc_asprintf(mem_ctx,