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;
31 struct dsdb_syntax_ctx {
32 struct ldb_context *ldb;
33 const struct dsdb_schema *schema;
41 struct ldb_val oMObjectClass;
42 const char *attributeSyntax_oid;
44 const char *substring;
46 const char *ldb_syntax;
48 WERROR (*drsuapi_to_ldb)(struct ldb_context *ldb,
49 const struct dsdb_schema *schema,
50 const struct dsdb_attribute *attr,
51 const struct drsuapi_DsReplicaAttribute *in,
53 struct ldb_message_element *out);
54 WERROR (*ldb_to_drsuapi)(struct ldb_context *ldb,
55 const struct dsdb_schema *schema,
56 const struct dsdb_attribute *attr,
57 const struct ldb_message_element *in,
59 struct drsuapi_DsReplicaAttribute *out);
60 WERROR (*validate_ldb)(const struct dsdb_syntax_ctx *ctx,
61 const struct dsdb_attribute *attr,
62 const struct ldb_message_element *in);
65 struct dsdb_attribute {
66 struct dsdb_attribute *prev, *next;
69 const char *lDAPDisplayName;
70 const char *attributeID_oid;
71 uint32_t attributeID_id;
72 struct GUID schemaIDGUID;
76 struct GUID attributeSecurityGUID;
77 struct GUID objectGUID;
81 bool isMemberOfPartialAttributeSet;
84 const char *attributeSyntax_oid;
85 uint32_t attributeSyntax_id;
87 struct ldb_val oMObjectClass;
92 bool extendedCharsAllowed;
94 uint32_t schemaFlagsEx;
95 struct ldb_val msDs_Schema_Extensions;
97 bool showInAdvancedViewOnly;
98 const char *adminDisplayName;
99 const char *adminDescription;
100 const char *classDisplayName;
106 const struct dsdb_syntax *syntax;
107 const struct ldb_schema_attribute *ldb_schema_attribute;
111 struct dsdb_class *prev, *next;
114 const char *lDAPDisplayName;
115 const char *governsID_oid;
116 uint32_t governsID_id;
117 struct GUID schemaIDGUID;
118 struct GUID objectGUID;
120 uint32_t objectClassCategory;
121 const char *rDNAttID;
122 const char *defaultObjectCategory;
124 const char *subClassOf;
126 const char **systemAuxiliaryClass;
127 const char **systemPossSuperiors;
128 const char **systemMustContain;
129 const char **systemMayContain;
131 const char **auxiliaryClass;
132 const char **possSuperiors;
133 const char **mustContain;
134 const char **mayContain;
135 const char **possibleInferiors;
136 const char **systemPossibleInferiors;
138 const char *defaultSecurityDescriptor;
140 uint32_t schemaFlagsEx;
141 struct ldb_val msDs_Schema_Extensions;
143 bool showInAdvancedViewOnly;
144 const char *adminDisplayName;
145 const char *adminDescription;
146 const char *classDisplayName;
147 bool defaultHidingValue;
151 const char **supclasses;
152 const char **subclasses;
153 const char **subclasses_direct;
154 const char **posssuperiors;
155 uint32_t subClassOf_id;
156 uint32_t *systemAuxiliaryClass_ids;
157 uint32_t *auxiliaryClass_ids;
158 uint32_t *systemMayContain_ids;
159 uint32_t *systemMustContain_ids;
160 uint32_t *possSuperiors_ids;
161 uint32_t *mustContain_ids;
162 uint32_t *mayContain_ids;
163 uint32_t *systemPossSuperiors_ids;
165 /* An ordered index showing how this subClass fits into the
166 * subClass tree. that is, an objectclass that is not
167 * subClassOf anything is 0 (just in case), and top is 1, and
168 * subClasses of top are 2, subclasses of those classes are
170 uint32_t subClass_order;
174 * data stored in schemaInfo attribute
176 struct dsdb_schema_info {
178 struct GUID invocation_id;
183 struct ldb_dn *base_dn;
185 struct dsdb_schema_prefixmap *prefixmap;
188 * the last element of the prefix mapping table isn't a oid,
189 * it starts with 0xFF and has 21 bytes and is maybe a schema
192 * this is the content of the schemaInfo attribute of the
193 * Schema-Partition head object.
195 const char *schema_info;
197 /* We can also tell the schema version from the USN on the partition */
200 struct dsdb_attribute *attributes;
201 struct dsdb_class *classes;
203 /* lists of classes sorted by various attributes, for faster
205 uint32_t num_classes;
206 struct dsdb_class **classes_by_lDAPDisplayName;
207 struct dsdb_class **classes_by_governsID_id;
208 struct dsdb_class **classes_by_governsID_oid;
209 struct dsdb_class **classes_by_cn;
211 /* lists of attributes sorted by various fields */
212 uint32_t num_attributes;
213 struct dsdb_attribute **attributes_by_lDAPDisplayName;
214 struct dsdb_attribute **attributes_by_attributeID_id;
215 struct dsdb_attribute **attributes_by_attributeID_oid;
216 struct dsdb_attribute **attributes_by_linkID;
217 uint32_t num_int_id_attr;
218 struct dsdb_attribute **attributes_by_msDS_IntId;
222 struct ldb_dn *master_dn;
225 /* Was this schema loaded from ldb (if so, then we will reload it when we detect a change in ldb) */
226 struct ldb_module *loaded_from_module;
227 struct dsdb_schema *(*refresh_fn)(struct ldb_module *module, struct dsdb_schema *schema, bool is_global_schema);
228 bool refresh_in_progress;
229 /* an 'opaque' sequence number that the reload function may also wish to use */
230 uint64_t reload_seq_number;
232 /* Should the syntax handlers in this case handle all incoming OIDs automatically, assigning them as an OID if no text name is known? */
233 bool relax_OID_conversions;
236 enum dsdb_attr_list_query {
238 DSDB_SCHEMA_ALL_MUST,
240 DSDB_SCHEMA_SYS_MUST,
246 enum dsdb_schema_convert_target {
249 TARGET_AD_SCHEMA_SUBENTRY
252 #include "dsdb/schema/proto.h"
254 #endif /* _DSDB_SCHEMA_H */