Merge branch 'wspp-schema'
[samba.git] / source4 / dsdb / schema / schema.h
index e8fefb5246b0b62b66b18c4b756ff75e631823af..e15f65a0a13ce0405ead8f5e999b25b01d459cb4 100644 (file)
@@ -37,12 +37,14 @@ struct dsdb_syntax {
        const char *comment;
        const char *ldb_syntax;
 
-       WERROR (*drsuapi_to_ldb)(const struct dsdb_schema *schema,
+       WERROR (*drsuapi_to_ldb)(struct ldb_context *ldb, 
+                                const struct dsdb_schema *schema,
                                 const struct dsdb_attribute *attr,
                                 const struct drsuapi_DsReplicaAttribute *in,
                                 TALLOC_CTX *mem_ctx,
                                 struct ldb_message_element *out);
-       WERROR (*ldb_to_drsuapi)(const struct dsdb_schema *schema,
+       WERROR (*ldb_to_drsuapi)(struct ldb_context *ldb, 
+                                const struct dsdb_schema *schema,
                                 const struct dsdb_attribute *attr,
                                 const struct ldb_message_element *in,
                                 TALLOC_CTX *mem_ctx,
@@ -89,6 +91,7 @@ struct dsdb_attribute {
 
        /* internal stuff */
        const struct dsdb_syntax *syntax;
+       const struct ldb_schema_attribute *ldb_schema_attribute;
 };
 
 struct dsdb_class {
@@ -129,6 +132,11 @@ struct dsdb_class {
        bool defaultHidingValue;
        bool isDefunct;
        bool systemOnly;
+
+       char **supclasses;
+       char **subclasses;
+       char **subclasses_direct;
+       char **posssuperiors;
 };
 
 struct dsdb_schema_oid_prefix {
@@ -154,6 +162,21 @@ struct dsdb_schema {
        struct dsdb_attribute *attributes;
        struct dsdb_class *classes;
 
+       /* lists of classes sorted by various attributes, for faster
+          access */
+       uint32_t num_classes;
+       struct dsdb_class **classes_by_lDAPDisplayName;
+       struct dsdb_class **classes_by_governsID_id;
+       struct dsdb_class **classes_by_governsID_oid;
+       struct dsdb_class **classes_by_cn;
+
+       /* lists of attributes sorted by various fields */
+       uint32_t num_attributes;
+       struct dsdb_attribute **attributes_by_lDAPDisplayName;
+       struct dsdb_attribute **attributes_by_attributeID_id;
+       struct dsdb_attribute **attributes_by_attributeID_oid;
+       struct dsdb_attribute **attributes_by_linkID;
+
        struct {
                bool we_are_master;
                struct ldb_dn *master_dn;