source: vendor/current/source4/dsdb/schema/schema.h

Last change on this file was 988, checked in by Silvan Scherrer, 9 years ago

Samba Server: update vendor to version 4.4.3

File size: 7.5 KB
Line 
1/*
2 Unix SMB/CIFS mplementation.
3 DSDB schema header
4
5 Copyright (C) Stefan Metzmacher <metze@samba.org> 2006
6
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.
11
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.
16
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/>.
19
20*/
21
22#ifndef _DSDB_SCHEMA_H
23#define _DSDB_SCHEMA_H
24
25#include "prefixmap.h"
26
27enum dsdb_dn_format {
28 DSDB_NORMAL_DN,
29 DSDB_BINARY_DN,
30 DSDB_STRING_DN,
31 DSDB_INVALID_DN
32};
33
34
35struct dsdb_attribute;
36struct dsdb_class;
37struct dsdb_schema;
38struct dsdb_dn;
39
40struct dsdb_syntax_ctx {
41 struct ldb_context *ldb;
42 const struct dsdb_schema *schema;
43
44 /* set when converting objects under Schema NC */
45 bool is_schema_nc;
46
47 /* remote prefixMap to be used for drsuapi_to_ldb conversions */
48 const struct dsdb_schema_prefixmap *pfm_remote;
49};
50
51
52struct dsdb_syntax {
53 const char *name;
54 const char *ldap_oid;
55 uint32_t oMSyntax;
56 struct ldb_val oMObjectClass;
57 const char *attributeSyntax_oid;
58 const char *equality;
59 const char *substring;
60 const char *comment;
61 const char *ldb_syntax;
62
63 WERROR (*drsuapi_to_ldb)(const struct dsdb_syntax_ctx *ctx,
64 const struct dsdb_attribute *attr,
65 const struct drsuapi_DsReplicaAttribute *in,
66 TALLOC_CTX *mem_ctx,
67 struct ldb_message_element *out);
68 WERROR (*ldb_to_drsuapi)(const struct dsdb_syntax_ctx *ctx,
69 const struct dsdb_attribute *attr,
70 const struct ldb_message_element *in,
71 TALLOC_CTX *mem_ctx,
72 struct drsuapi_DsReplicaAttribute *out);
73 WERROR (*validate_ldb)(const struct dsdb_syntax_ctx *ctx,
74 const struct dsdb_attribute *attr,
75 const struct ldb_message_element *in);
76 bool auto_normalise;
77 bool userParameters; /* Indicates the syntax userParameters should be forced to */
78};
79
80struct dsdb_attribute {
81 struct dsdb_attribute *prev, *next;
82
83 const char *cn;
84 const char *lDAPDisplayName;
85 const char *attributeID_oid;
86 uint32_t attributeID_id;
87 struct GUID schemaIDGUID;
88 uint32_t mAPIID;
89 uint32_t msDS_IntId;
90
91 struct GUID attributeSecurityGUID;
92 struct GUID objectGUID;
93
94 uint32_t searchFlags;
95 uint32_t systemFlags;
96 bool isMemberOfPartialAttributeSet;
97 uint32_t linkID;
98
99 const char *attributeSyntax_oid;
100 uint32_t attributeSyntax_id;
101 uint32_t oMSyntax;
102 struct ldb_val oMObjectClass;
103
104 bool isSingleValued;
105 uint32_t *rangeLower;
106 uint32_t *rangeUpper;
107 bool extendedCharsAllowed;
108
109 uint32_t schemaFlagsEx;
110 struct ldb_val msDs_Schema_Extensions;
111
112 bool showInAdvancedViewOnly;
113 const char *adminDisplayName;
114 const char *adminDescription;
115 const char *classDisplayName;
116 bool isEphemeral;
117 bool isDefunct;
118 bool systemOnly;
119
120 bool one_way_link;
121 enum dsdb_dn_format dn_format;
122
123 /* internal stuff */
124 const struct dsdb_syntax *syntax;
125 const struct ldb_schema_attribute *ldb_schema_attribute;
126};
127
128struct dsdb_class {
129 struct dsdb_class *prev, *next;
130
131 const char *cn;
132 const char *lDAPDisplayName;
133 const char *governsID_oid;
134 uint32_t governsID_id;
135 struct GUID schemaIDGUID;
136 struct GUID objectGUID;
137
138 uint32_t objectClassCategory;
139 const char *rDNAttID;
140 const char *defaultObjectCategory;
141
142 const char *subClassOf;
143
144 const char **systemAuxiliaryClass;
145 const char **systemPossSuperiors;
146 const char **systemMustContain;
147 const char **systemMayContain;
148
149 const char **auxiliaryClass;
150 const char **possSuperiors;
151 const char **mustContain;
152 const char **mayContain;
153 const char **possibleInferiors;
154 const char **systemPossibleInferiors;
155
156 const char *defaultSecurityDescriptor;
157
158 uint32_t schemaFlagsEx;
159 uint32_t systemFlags;
160 struct ldb_val msDs_Schema_Extensions;
161
162 bool showInAdvancedViewOnly;
163 const char *adminDisplayName;
164 const char *adminDescription;
165 const char *classDisplayName;
166 bool defaultHidingValue;
167 bool isDefunct;
168 bool systemOnly;
169
170 uint32_t subClassOf_id;
171 uint32_t *systemAuxiliaryClass_ids;
172 uint32_t *auxiliaryClass_ids;
173 uint32_t *systemMayContain_ids;
174 uint32_t *systemMustContain_ids;
175 uint32_t *possSuperiors_ids;
176 uint32_t *mustContain_ids;
177 uint32_t *mayContain_ids;
178 uint32_t *systemPossSuperiors_ids;
179
180 /* An ordered index showing how this subClass fits into the
181 * subClass tree. that is, an objectclass that is not
182 * subClassOf anything is 0 (just in case), and top is 1, and
183 * subClasses of top are 2, subclasses of those classes are
184 * 3 */
185 uint32_t subClass_order;
186
187 struct {
188 const char **supclasses;
189 const char **subclasses;
190 const char **subclasses_direct;
191 const char **posssuperiors;
192 } tmp;
193};
194
195/**
196 * data stored in schemaInfo attribute
197 */
198struct dsdb_schema_info {
199 uint32_t revision;
200 struct GUID invocation_id;
201};
202
203
204struct dsdb_schema {
205 struct dsdb_schema_prefixmap *prefixmap;
206
207 /*
208 * the last element of the prefix mapping table isn't a oid,
209 * it starts with 0xFF and has 21 bytes and is maybe a schema
210 * version number
211 *
212 * this is the content of the schemaInfo attribute of the
213 * Schema-Partition head object.
214 */
215 const char *schema_info;
216
217 /* We can also tell the schema version from the USN on the partition */
218 uint64_t loaded_usn;
219
220 struct dsdb_attribute *attributes;
221 struct dsdb_class *classes;
222
223 struct dsdb_attribute **attributes_to_remove;
224 uint32_t attributes_to_remove_size;
225 struct dsdb_class **classes_to_remove;
226 uint32_t classes_to_remove_size;
227
228 /* lists of classes sorted by various attributes, for faster
229 access */
230 uint32_t num_classes;
231 struct dsdb_class **classes_by_lDAPDisplayName;
232 struct dsdb_class **classes_by_governsID_id;
233 struct dsdb_class **classes_by_governsID_oid;
234 struct dsdb_class **classes_by_cn;
235
236 /* lists of attributes sorted by various fields */
237 uint32_t num_attributes;
238 struct dsdb_attribute **attributes_by_lDAPDisplayName;
239 struct dsdb_attribute **attributes_by_attributeID_id;
240 struct dsdb_attribute **attributes_by_attributeID_oid;
241 struct dsdb_attribute **attributes_by_linkID;
242 uint32_t num_int_id_attr;
243 struct dsdb_attribute **attributes_by_msDS_IntId;
244
245 struct {
246 bool we_are_master;
247 bool update_allowed;
248 struct ldb_dn *master_dn;
249 } fsmo;
250
251 /* Was this schema loaded from ldb (if so, then we will reload it when we detect a change in ldb) */
252 bool refresh_in_progress;
253 time_t ts_last_change;
254 time_t last_refresh;
255 time_t refresh_interval;
256 /* This 'opaque' is stored in the metadata and is used to check if the currently
257 * loaded schema needs a reload because another process has signaled that it has been
258 * requested to reload the schema (either due through DRS or via the schemaUpdateNow).
259 */
260 uint64_t metadata_usn;
261
262 /* Should the syntax handlers in this case handle all incoming OIDs automatically, assigning them as an OID if no text name is known? */
263 bool relax_OID_conversions;
264};
265
266enum dsdb_attr_list_query {
267 DSDB_SCHEMA_ALL_MAY,
268 DSDB_SCHEMA_ALL_MUST,
269 DSDB_SCHEMA_SYS_MAY,
270 DSDB_SCHEMA_SYS_MUST,
271 DSDB_SCHEMA_MAY,
272 DSDB_SCHEMA_MUST,
273 DSDB_SCHEMA_ALL
274};
275
276enum dsdb_schema_convert_target {
277 TARGET_OPENLDAP,
278 TARGET_FEDORA_DS,
279 TARGET_AD_SCHEMA_SUBENTRY
280};
281
282struct ldb_module;
283
284typedef struct dsdb_schema *(*dsdb_schema_refresh_fn)(struct ldb_module *module,
285 struct tevent_context *ev,
286 struct dsdb_schema *schema, bool is_global_schema);
287#include "dsdb/schema/proto.h"
288
289#endif /* _DSDB_SCHEMA_H */
Note: See TracBrowser for help on using the repository browser.