s4:dsdb add systemPossibleInferiors to schema code
[ira/wip.git] / source4 / dsdb / schema / schema.h
index ca1ebb038841174850ac301e8aa21f1909b72f77..ddd9b375f6d686e8f0cea9813d4c439421478355 100644 (file)
@@ -32,13 +32,19 @@ struct dsdb_syntax {
        uint32_t oMSyntax;
        struct ldb_val oMObjectClass;
        const char *attributeSyntax_oid;
+       const char *equality;
+       const char *substring;
+       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,
@@ -59,7 +65,7 @@ struct dsdb_attribute {
 
        uint32_t searchFlags;
        uint32_t systemFlags;
-       BOOL isMemberOfPartialAttributeSet;
+       bool isMemberOfPartialAttributeSet;
        uint32_t linkID;
 
        const char *attributeSyntax_oid;
@@ -67,24 +73,25 @@ struct dsdb_attribute {
        uint32_t oMSyntax;
        struct ldb_val oMObjectClass;
 
-       BOOL isSingleValued;
-       uint32_t rangeLower;
-       uint32_t rangeUpper;
-       BOOL extendedCharsAllowed;
+       bool isSingleValued;
+       uint32_t *rangeLower;
+       uint32_t *rangeUpper;
+       bool extendedCharsAllowed;
 
        uint32_t schemaFlagsEx;
        struct ldb_val msDs_Schema_Extensions;
 
-       BOOL showInAdvancedViewOnly;
+       bool showInAdvancedViewOnly;
        const char *adminDisplayName;
        const char *adminDescription;
        const char *classDisplayName;
-       BOOL isEphemeral;
-       BOOL isDefunct;
-       BOOL systemOnly;
+       bool isEphemeral;
+       bool isDefunct;
+       bool systemOnly;
 
        /* internal stuff */
        const struct dsdb_syntax *syntax;
+       const struct ldb_schema_attribute *ldb_schema_attribute;
 };
 
 struct dsdb_class {
@@ -111,19 +118,42 @@ struct dsdb_class {
        const char **possSuperiors;
        const char **mustContain;
        const char **mayContain;
+       const char **possibleInferiors;
+       const char **systemPossibleInferiors;
 
        const char *defaultSecurityDescriptor;
 
        uint32_t schemaFlagsEx;
        struct ldb_val msDs_Schema_Extensions;
 
-       BOOL showInAdvancedViewOnly;
+       bool showInAdvancedViewOnly;
        const char *adminDisplayName;
        const char *adminDescription;
        const char *classDisplayName;
-       BOOL defaultHidingValue;
-       BOOL isDefunct;
-       BOOL systemOnly;
+       bool defaultHidingValue;
+       bool isDefunct;
+       bool systemOnly;
+
+       char **supclasses;
+       char **subclasses;
+       char **subclasses_direct;
+       char **posssuperiors;
+       uint32_t subClassOf_id;
+       uint32_t *systemAuxiliaryClass_ids;
+       uint32_t *auxiliaryClass_ids;
+       uint32_t *systemMayContain_ids;
+       uint32_t *systemMustContain_ids;
+       uint32_t *possSuperiors_ids;
+       uint32_t *mustContain_ids;
+       uint32_t *mayContain_ids;
+       uint32_t *systemPossSuperiors_ids;
+
+       /* An ordered index showing how this subClass fits into the
+        * subClass tree.  that is, an objectclass that is not
+        * subClassOf anything is 0 (just in case), and top is 1, and
+        * subClasses of top are 2, subclasses of those classes are
+        * 3 */ 
+       uint32_t subClass_order;
 };
 
 struct dsdb_schema_oid_prefix {
@@ -148,6 +178,46 @@ 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;
+       } fsmo;
+
+       struct smb_iconv_convenience *iconv_convenience;
+};
+
+enum dsdb_attr_list_query {
+       DSDB_SCHEMA_ALL_MAY,
+       DSDB_SCHEMA_ALL_MUST,
+       DSDB_SCHEMA_SYS_MAY,
+       DSDB_SCHEMA_SYS_MUST,
+       DSDB_SCHEMA_MAY,
+       DSDB_SCHEMA_MUST,
+       DSDB_SCHEMA_ALL
 };
 
+enum dsdb_schema_convert_target {
+       TARGET_OPENLDAP,
+       TARGET_FEDORA_DS,
+       TARGET_AD_SCHEMA_SUBENTRY
+};
+
+#include "dsdb/schema/proto.h"
+
 #endif /* _DSDB_SCHEMA_H */