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 #include "prefixmap.h"
27 struct dsdb_attribute
;
32 struct dsdb_syntax_ctx
{
33 struct ldb_context
*ldb
;
34 const struct dsdb_schema
*schema
;
36 /* set when converting objects under Schema NC */
39 /* remote prefixMap to be used for drsuapi_to_ldb conversions */
40 const struct dsdb_schema_prefixmap
*pfm_remote
;
48 struct ldb_val oMObjectClass
;
49 const char *attributeSyntax_oid
;
51 const char *substring
;
53 const char *ldb_syntax
;
55 WERROR (*drsuapi_to_ldb
)(const struct dsdb_syntax_ctx
*ctx
,
56 const struct dsdb_attribute
*attr
,
57 const struct drsuapi_DsReplicaAttribute
*in
,
59 struct ldb_message_element
*out
);
60 WERROR (*ldb_to_drsuapi
)(const struct dsdb_syntax_ctx
*ctx
,
61 const struct dsdb_attribute
*attr
,
62 const struct ldb_message_element
*in
,
64 struct drsuapi_DsReplicaAttribute
*out
);
65 WERROR (*validate_ldb
)(const struct dsdb_syntax_ctx
*ctx
,
66 const struct dsdb_attribute
*attr
,
67 const struct ldb_message_element
*in
);
70 struct dsdb_attribute
{
71 struct dsdb_attribute
*prev
, *next
;
74 const char *lDAPDisplayName
;
75 const char *attributeID_oid
;
76 uint32_t attributeID_id
;
77 struct GUID schemaIDGUID
;
81 struct GUID attributeSecurityGUID
;
82 struct GUID objectGUID
;
86 bool isMemberOfPartialAttributeSet
;
89 const char *attributeSyntax_oid
;
90 uint32_t attributeSyntax_id
;
92 struct ldb_val oMObjectClass
;
97 bool extendedCharsAllowed
;
99 uint32_t schemaFlagsEx
;
100 struct ldb_val msDs_Schema_Extensions
;
102 bool showInAdvancedViewOnly
;
103 const char *adminDisplayName
;
104 const char *adminDescription
;
105 const char *classDisplayName
;
111 const struct dsdb_syntax
*syntax
;
112 const struct ldb_schema_attribute
*ldb_schema_attribute
;
116 struct dsdb_class
*prev
, *next
;
119 const char *lDAPDisplayName
;
120 const char *governsID_oid
;
121 uint32_t governsID_id
;
122 struct GUID schemaIDGUID
;
123 struct GUID objectGUID
;
125 uint32_t objectClassCategory
;
126 const char *rDNAttID
;
127 const char *defaultObjectCategory
;
129 const char *subClassOf
;
131 const char **systemAuxiliaryClass
;
132 const char **systemPossSuperiors
;
133 const char **systemMustContain
;
134 const char **systemMayContain
;
136 const char **auxiliaryClass
;
137 const char **possSuperiors
;
138 const char **mustContain
;
139 const char **mayContain
;
140 const char **possibleInferiors
;
141 const char **systemPossibleInferiors
;
143 const char *defaultSecurityDescriptor
;
145 uint32_t schemaFlagsEx
;
146 uint32_t systemFlags
;
147 struct ldb_val msDs_Schema_Extensions
;
149 bool showInAdvancedViewOnly
;
150 const char *adminDisplayName
;
151 const char *adminDescription
;
152 const char *classDisplayName
;
153 bool defaultHidingValue
;
157 const char **supclasses
;
158 const char **subclasses
;
159 const char **subclasses_direct
;
160 const char **posssuperiors
;
161 uint32_t subClassOf_id
;
162 uint32_t *systemAuxiliaryClass_ids
;
163 uint32_t *auxiliaryClass_ids
;
164 uint32_t *systemMayContain_ids
;
165 uint32_t *systemMustContain_ids
;
166 uint32_t *possSuperiors_ids
;
167 uint32_t *mustContain_ids
;
168 uint32_t *mayContain_ids
;
169 uint32_t *systemPossSuperiors_ids
;
171 /* An ordered index showing how this subClass fits into the
172 * subClass tree. that is, an objectclass that is not
173 * subClassOf anything is 0 (just in case), and top is 1, and
174 * subClasses of top are 2, subclasses of those classes are
176 uint32_t subClass_order
;
180 * data stored in schemaInfo attribute
182 struct dsdb_schema_info
{
184 struct GUID invocation_id
;
189 struct ldb_dn
*base_dn
;
191 struct dsdb_schema_prefixmap
*prefixmap
;
194 * the last element of the prefix mapping table isn't a oid,
195 * it starts with 0xFF and has 21 bytes and is maybe a schema
198 * this is the content of the schemaInfo attribute of the
199 * Schema-Partition head object.
201 const char *schema_info
;
203 /* We can also tell the schema version from the USN on the partition */
206 struct dsdb_attribute
*attributes
;
207 struct dsdb_class
*classes
;
209 /* lists of classes sorted by various attributes, for faster
211 uint32_t num_classes
;
212 struct dsdb_class
**classes_by_lDAPDisplayName
;
213 struct dsdb_class
**classes_by_governsID_id
;
214 struct dsdb_class
**classes_by_governsID_oid
;
215 struct dsdb_class
**classes_by_cn
;
217 /* lists of attributes sorted by various fields */
218 uint32_t num_attributes
;
219 struct dsdb_attribute
**attributes_by_lDAPDisplayName
;
220 struct dsdb_attribute
**attributes_by_attributeID_id
;
221 struct dsdb_attribute
**attributes_by_attributeID_oid
;
222 struct dsdb_attribute
**attributes_by_linkID
;
223 uint32_t num_int_id_attr
;
224 struct dsdb_attribute
**attributes_by_msDS_IntId
;
228 struct ldb_dn
*master_dn
;
231 /* Was this schema loaded from ldb (if so, then we will reload it when we detect a change in ldb) */
232 struct ldb_module
*loaded_from_module
;
233 struct dsdb_schema
*(*refresh_fn
)(struct ldb_module
*module
, struct dsdb_schema
*schema
, bool is_global_schema
);
234 bool refresh_in_progress
;
235 /* an 'opaque' sequence number that the reload function may also wish to use */
236 uint64_t reload_seq_number
;
238 /* Should the syntax handlers in this case handle all incoming OIDs automatically, assigning them as an OID if no text name is known? */
239 bool relax_OID_conversions
;
242 enum dsdb_attr_list_query
{
244 DSDB_SCHEMA_ALL_MUST
,
246 DSDB_SCHEMA_SYS_MUST
,
252 enum dsdb_schema_convert_target
{
255 TARGET_AD_SCHEMA_SUBENTRY
258 #include "dsdb/schema/proto.h"
260 #endif /* _DSDB_SCHEMA_H */