Now store the GUID and SID from a DN over DRSUAPI into ldb.
[samba.git] / source4 / dsdb / schema / schema.h
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 */