/* [<][>][^][v][top][bottom][index][help] */
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 struct dsdb_attribute;
26 struct dsdb_class;
27 struct dsdb_schema;
28
29 struct dsdb_syntax {
30 const char *name;
31 const char *ldap_oid;
32 uint32_t oMSyntax;
33 struct ldb_val oMObjectClass;
34 const char *attributeSyntax_oid;
35 const char *equality;
36 const char *substring;
37 const char *comment;
38 const char *ldb_syntax;
39
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,
44 TALLOC_CTX *mem_ctx,
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,
50 TALLOC_CTX *mem_ctx,
51 struct drsuapi_DsReplicaAttribute *out);
52 };
53
54 struct dsdb_attribute {
55 struct dsdb_attribute *prev, *next;
56
57 const char *cn;
58 const char *lDAPDisplayName;
59 const char *attributeID_oid;
60 uint32_t attributeID_id;
61 struct GUID schemaIDGUID;
62 uint32_t mAPIID;
63
64 struct GUID attributeSecurityGUID;
65
66 uint32_t searchFlags;
67 uint32_t systemFlags;
68 bool isMemberOfPartialAttributeSet;
69 uint32_t linkID;
70
71 const char *attributeSyntax_oid;
72 uint32_t attributeSyntax_id;
73 uint32_t oMSyntax;
74 struct ldb_val oMObjectClass;
75
76 bool isSingleValued;
77 uint32_t *rangeLower;
78 uint32_t *rangeUpper;
79 bool extendedCharsAllowed;
80
81 uint32_t schemaFlagsEx;
82 struct ldb_val msDs_Schema_Extensions;
83
84 bool showInAdvancedViewOnly;
85 const char *adminDisplayName;
86 const char *adminDescription;
87 const char *classDisplayName;
88 bool isEphemeral;
89 bool isDefunct;
90 bool systemOnly;
91
92 /* internal stuff */
93 const struct dsdb_syntax *syntax;
94 };
95
96 struct dsdb_class {
97 struct dsdb_class *prev, *next;
98
99 const char *cn;
100 const char *lDAPDisplayName;
101 const char *governsID_oid;
102 uint32_t governsID_id;
103 struct GUID schemaIDGUID;
104
105 uint32_t objectClassCategory;
106 const char *rDNAttID;
107 const char *defaultObjectCategory;
108
109 const char *subClassOf;
110
111 const char **systemAuxiliaryClass;
112 const char **systemPossSuperiors;
113 const char **systemMustContain;
114 const char **systemMayContain;
115
116 const char **auxiliaryClass;
117 const char **possSuperiors;
118 const char **mustContain;
119 const char **mayContain;
120 const char **possibleInferiors;
121
122 const char *defaultSecurityDescriptor;
123
124 uint32_t schemaFlagsEx;
125 struct ldb_val msDs_Schema_Extensions;
126
127 bool showInAdvancedViewOnly;
128 const char *adminDisplayName;
129 const char *adminDescription;
130 const char *classDisplayName;
131 bool defaultHidingValue;
132 bool isDefunct;
133 bool systemOnly;
134 };
135
136 struct dsdb_schema_oid_prefix {
137 uint32_t id;
138 const char *oid;
139 size_t oid_len;
140 };
141
142 struct dsdb_schema {
143 uint32_t num_prefixes;
144 struct dsdb_schema_oid_prefix *prefixes;
145
146 /*
147 * the last element of the prefix mapping table isn't a oid,
148 * it starts with 0xFF and has 21 bytes and is maybe a schema
149 * version number
150 *
151 * this is the content of the schemaInfo attribute of the
152 * Schema-Partition head object.
153 */
154 const char *schema_info;
155
156 struct dsdb_attribute *attributes;
157 struct dsdb_class *classes;
158
159 struct {
160 bool we_are_master;
161 struct ldb_dn *master_dn;
162 } fsmo;
163
164 struct smb_iconv_convenience *iconv_convenience;
165 };
166
167 enum dsdb_attr_list_query {
168 DSDB_SCHEMA_ALL_MAY,
169 DSDB_SCHEMA_ALL_MUST,
170 DSDB_SCHEMA_SYS_MAY,
171 DSDB_SCHEMA_SYS_MUST,
172 DSDB_SCHEMA_MAY,
173 DSDB_SCHEMA_MUST,
174 DSDB_SCHEMA_ALL
175 };
176
177 enum dsdb_schema_convert_target {
178 TARGET_OPENLDAP,
179 TARGET_FEDORA_DS,
180 TARGET_AD_SCHEMA_SUBENTRY
181 };
182
183 #include "dsdb/schema/proto.h"
184
185 #endif /* _DSDB_SCHEMA_H */