source: trunk/server/source4/dsdb/schema/schema.h

Last change on this file was 745, checked in by Silvan Scherrer, 13 years ago

Samba Server: updated trunk to 3.6.0

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