2 Unix SMB/CIFS mplementation.
5 Copyright (C) Stefan Metzmacher <metze@samba.org> 2006
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 #ifndef _DSDB_SCHEMA_H
23 #define _DSDB_SCHEMA_H
25 struct dsdb_attribute;
33 struct ldb_val oMObjectClass;
34 const char *attributeSyntax_oid;
36 const char *substring;
38 const char *ldb_syntax;
40 WERROR (*drsuapi_to_ldb)(struct ldb_context *ldb,
41 const struct dsdb_schema *schema,
42 const struct dsdb_attribute *attr,
43 const struct drsuapi_DsReplicaAttribute *in,
45 struct ldb_message_element *out);
46 WERROR (*ldb_to_drsuapi)(struct ldb_context *ldb,
47 const struct dsdb_schema *schema,
48 const struct dsdb_attribute *attr,
49 const struct ldb_message_element *in,
51 struct drsuapi_DsReplicaAttribute *out);
54 struct dsdb_attribute {
55 struct dsdb_attribute *prev, *next;
58 const char *lDAPDisplayName;
59 const char *attributeID_oid;
60 uint32_t attributeID_id;
61 struct GUID schemaIDGUID;
64 struct GUID attributeSecurityGUID;
68 bool isMemberOfPartialAttributeSet;
71 const char *attributeSyntax_oid;
72 uint32_t attributeSyntax_id;
74 struct ldb_val oMObjectClass;
79 bool extendedCharsAllowed;
81 uint32_t schemaFlagsEx;
82 struct ldb_val msDs_Schema_Extensions;
84 bool showInAdvancedViewOnly;
85 const char *adminDisplayName;
86 const char *adminDescription;
87 const char *classDisplayName;
93 const struct dsdb_syntax *syntax;
94 const struct ldb_schema_attribute *ldb_schema_attribute;
98 struct dsdb_class *prev, *next;
101 const char *lDAPDisplayName;
102 const char *governsID_oid;
103 uint32_t governsID_id;
104 struct GUID schemaIDGUID;
106 uint32_t objectClassCategory;
107 const char *rDNAttID;
108 const char *defaultObjectCategory;
110 const char *subClassOf;
112 const char **systemAuxiliaryClass;
113 const char **systemPossSuperiors;
114 const char **systemMustContain;
115 const char **systemMayContain;
117 const char **auxiliaryClass;
118 const char **possSuperiors;
119 const char **mustContain;
120 const char **mayContain;
121 const char **possibleInferiors;
122 const char **systemPossibleInferiors;
124 const char *defaultSecurityDescriptor;
126 uint32_t schemaFlagsEx;
127 struct ldb_val msDs_Schema_Extensions;
129 bool showInAdvancedViewOnly;
130 const char *adminDisplayName;
131 const char *adminDescription;
132 const char *classDisplayName;
133 bool defaultHidingValue;
139 char **subclasses_direct;
140 char **posssuperiors;
141 uint32_t subClassOf_id;
142 uint32_t *systemAuxiliaryClass_ids;
143 uint32_t *auxiliaryClass_ids;
144 uint32_t *systemMayContain_ids;
145 uint32_t *systemMustContain_ids;
146 uint32_t *possSuperiors_ids;
147 uint32_t *mustContain_ids;
148 uint32_t *mayContain_ids;
149 uint32_t *systemPossSuperiors_ids;
151 /* An ordered index showing how this subClass fits into the
152 * subClass tree. that is, an objectclass that is not
153 * subClassOf anything is 0 (just in case), and top is 1, and
154 * subClasses of top are 2, subclasses of those classes are
156 uint32_t subClass_order;
159 struct dsdb_schema_oid_prefix {
166 uint32_t num_prefixes;
167 struct dsdb_schema_oid_prefix *prefixes;
170 * the last element of the prefix mapping table isn't a oid,
171 * it starts with 0xFF and has 21 bytes and is maybe a schema
174 * this is the content of the schemaInfo attribute of the
175 * Schema-Partition head object.
177 const char *schema_info;
179 struct dsdb_attribute *attributes;
180 struct dsdb_class *classes;
182 /* lists of classes sorted by various attributes, for faster
184 uint32_t num_classes;
185 struct dsdb_class **classes_by_lDAPDisplayName;
186 struct dsdb_class **classes_by_governsID_id;
187 struct dsdb_class **classes_by_governsID_oid;
188 struct dsdb_class **classes_by_cn;
190 /* lists of attributes sorted by various fields */
191 uint32_t num_attributes;
192 struct dsdb_attribute **attributes_by_lDAPDisplayName;
193 struct dsdb_attribute **attributes_by_attributeID_id;
194 struct dsdb_attribute **attributes_by_attributeID_oid;
195 struct dsdb_attribute **attributes_by_linkID;
199 struct ldb_dn *master_dn;
202 struct smb_iconv_convenience *iconv_convenience;
205 enum dsdb_attr_list_query {
207 DSDB_SCHEMA_ALL_MUST,
209 DSDB_SCHEMA_SYS_MUST,
215 enum dsdb_schema_convert_target {
218 TARGET_AD_SCHEMA_SUBENTRY
221 #include "dsdb/schema/proto.h"
223 #endif /* _DSDB_SCHEMA_H */