diff options
Diffstat (limited to 'source4/dsdb/schema/schema.h')
-rw-r--r-- | source4/dsdb/schema/schema.h | 67 |
1 files changed, 52 insertions, 15 deletions
diff --git a/source4/dsdb/schema/schema.h b/source4/dsdb/schema/schema.h index 4e7e503931..5ba2254a50 100644 --- a/source4/dsdb/schema/schema.h +++ b/source4/dsdb/schema/schema.h @@ -22,9 +22,24 @@ #ifndef _DSDB_SCHEMA_H #define _DSDB_SCHEMA_H +#include "prefixmap.h" + struct dsdb_attribute; struct dsdb_class; struct dsdb_schema; +struct dsdb_dn; + +struct dsdb_syntax_ctx { + struct ldb_context *ldb; + const struct dsdb_schema *schema; + + /* set when converting objects under Schema NC */ + bool is_schema_nc; + + /* remote prefixMap to be used for drsuapi_to_ldb conversions */ + const struct dsdb_schema_prefixmap *pfm_remote; +}; + struct dsdb_syntax { const char *name; @@ -37,18 +52,19 @@ struct dsdb_syntax { const char *comment; const char *ldb_syntax; - WERROR (*drsuapi_to_ldb)(struct ldb_context *ldb, - const struct dsdb_schema *schema, + WERROR (*drsuapi_to_ldb)(const struct dsdb_syntax_ctx *ctx, const struct dsdb_attribute *attr, const struct drsuapi_DsReplicaAttribute *in, TALLOC_CTX *mem_ctx, struct ldb_message_element *out); - WERROR (*ldb_to_drsuapi)(struct ldb_context *ldb, - const struct dsdb_schema *schema, + WERROR (*ldb_to_drsuapi)(const struct dsdb_syntax_ctx *ctx, const struct dsdb_attribute *attr, const struct ldb_message_element *in, TALLOC_CTX *mem_ctx, struct drsuapi_DsReplicaAttribute *out); + WERROR (*validate_ldb)(const struct dsdb_syntax_ctx *ctx, + const struct dsdb_attribute *attr, + const struct ldb_message_element *in); }; struct dsdb_attribute { @@ -60,8 +76,10 @@ struct dsdb_attribute { uint32_t attributeID_id; struct GUID schemaIDGUID; uint32_t mAPIID; + uint32_t msDS_IntId; struct GUID attributeSecurityGUID; + struct GUID objectGUID; uint32_t searchFlags; uint32_t systemFlags; @@ -102,6 +120,7 @@ struct dsdb_class { const char *governsID_oid; uint32_t governsID_id; struct GUID schemaIDGUID; + struct GUID objectGUID; uint32_t objectClassCategory; const char *rDNAttID; @@ -119,6 +138,7 @@ struct dsdb_class { const char **mustContain; const char **mayContain; const char **possibleInferiors; + const char **systemPossibleInferiors; const char *defaultSecurityDescriptor; @@ -133,10 +153,10 @@ struct dsdb_class { bool isDefunct; bool systemOnly; - char **supclasses; - char **subclasses; - char **subclasses_direct; - char **posssuperiors; + const char **supclasses; + const char **subclasses; + const char **subclasses_direct; + const char **posssuperiors; uint32_t subClassOf_id; uint32_t *systemAuxiliaryClass_ids; uint32_t *auxiliaryClass_ids; @@ -155,15 +175,19 @@ struct dsdb_class { uint32_t subClass_order; }; -struct dsdb_schema_oid_prefix { - uint32_t id; - const char *oid; - size_t oid_len; +/** + * data stored in schemaInfo attribute + */ +struct dsdb_schema_info { + uint32_t revision; + struct GUID invocation_id; }; + struct dsdb_schema { - uint32_t num_prefixes; - struct dsdb_schema_oid_prefix *prefixes; + struct ldb_dn *base_dn; + + struct dsdb_schema_prefixmap *prefixmap; /* * the last element of the prefix mapping table isn't a oid, @@ -175,6 +199,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; @@ -192,13 +219,23 @@ struct dsdb_schema { struct dsdb_attribute **attributes_by_attributeID_id; struct dsdb_attribute **attributes_by_attributeID_oid; struct dsdb_attribute **attributes_by_linkID; + uint32_t num_int_id_attr; + struct dsdb_attribute **attributes_by_msDS_IntId; struct { bool we_are_master; struct ldb_dn *master_dn; } 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; + /* an 'opaque' sequence number that the reload function may also wish to use */ + uint64_t reload_seq_number; + + /* Should the syntax handlers in this case handle all incoming OIDs automatically, assigning them as an OID if no text name is known? */ + bool relax_OID_conversions; }; enum dsdb_attr_list_query { |