]> git.sur5r.net Git - openldap/blob - include/ldap_schema.h
Merge remote-tracking branch 'origin/mdb.master'
[openldap] / include / ldap_schema.h
1 /* $OpenLDAP$ */
2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
3  *
4  * Copyright 1998-2013 The OpenLDAP Foundation.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted only as authorized by the OpenLDAP
9  * Public License.
10  *
11  * A copy of this license is available in file LICENSE in the
12  * top-level directory of the distribution or, alternatively, at
13  * <http://www.OpenLDAP.org/license.html>.
14  */
15
16 /* ldap-schema.h - Header for basic schema handling functions that can be
17  *              used by both clients and servers.
18  * these routines should be renamed ldap_x_...
19  */
20
21 #ifndef _LDAP_SCHEMA_H
22 #define _LDAP_SCHEMA_H 1
23
24 #include <ldap_cdefs.h>
25
26 LDAP_BEGIN_DECL
27
28 /* Codes for parsing errors */
29
30 #define LDAP_SCHERR_OUTOFMEM            1
31 #define LDAP_SCHERR_UNEXPTOKEN          2
32 #define LDAP_SCHERR_NOLEFTPAREN         3
33 #define LDAP_SCHERR_NORIGHTPAREN        4
34 #define LDAP_SCHERR_NODIGIT                     5
35 #define LDAP_SCHERR_BADNAME                     6
36 #define LDAP_SCHERR_BADDESC                     7
37 #define LDAP_SCHERR_BADSUP                      8
38 #define LDAP_SCHERR_DUPOPT                      9
39 #define LDAP_SCHERR_EMPTY                       10
40 #define LDAP_SCHERR_MISSING                     11
41 #define LDAP_SCHERR_OUT_OF_ORDER        12
42
43 typedef struct ldap_schema_extension_item {
44         char *lsei_name;
45         char **lsei_values;
46 } LDAPSchemaExtensionItem;
47
48 typedef struct ldap_syntax {
49         char *syn_oid;          /* REQUIRED */
50         char **syn_names;       /* OPTIONAL */
51         char *syn_desc;         /* OPTIONAL */
52         LDAPSchemaExtensionItem **syn_extensions; /* OPTIONAL */
53 } LDAPSyntax;
54
55 typedef struct ldap_matchingrule {
56         char *mr_oid;           /* REQUIRED */
57         char **mr_names;        /* OPTIONAL */
58         char *mr_desc;          /* OPTIONAL */
59         int  mr_obsolete;       /* OPTIONAL */
60         char *mr_syntax_oid;    /* REQUIRED */
61         LDAPSchemaExtensionItem **mr_extensions; /* OPTIONAL */
62 } LDAPMatchingRule;
63
64 typedef struct ldap_matchingruleuse {
65         char *mru_oid;          /* REQUIRED */
66         char **mru_names;       /* OPTIONAL */
67         char *mru_desc;         /* OPTIONAL */
68         int  mru_obsolete;      /* OPTIONAL */
69         char **mru_applies_oids;        /* REQUIRED */
70         LDAPSchemaExtensionItem **mru_extensions; /* OPTIONAL */
71 } LDAPMatchingRuleUse;
72
73 typedef struct ldap_attributetype {
74         char *at_oid;           /* REQUIRED */
75         char **at_names;        /* OPTIONAL */
76         char *at_desc;          /* OPTIONAL */
77         int  at_obsolete;       /* 0=no, 1=yes */
78         char *at_sup_oid;       /* OPTIONAL */
79         char *at_equality_oid;  /* OPTIONAL */
80         char *at_ordering_oid;  /* OPTIONAL */
81         char *at_substr_oid;    /* OPTIONAL */
82         char *at_syntax_oid;    /* OPTIONAL */
83         int  at_syntax_len;     /* OPTIONAL */
84         int  at_single_value;   /* 0=no, 1=yes */
85         int  at_collective;     /* 0=no, 1=yes */
86         int  at_no_user_mod;    /* 0=no, 1=yes */
87         int  at_usage;          /* 0=userApplications, 1=directoryOperation,
88                                    2=distributedOperation, 3=dSAOperation */
89         LDAPSchemaExtensionItem **at_extensions; /* OPTIONAL */
90 } LDAPAttributeType;
91
92 typedef struct ldap_objectclass {
93         char *oc_oid;           /* REQUIRED */
94         char **oc_names;        /* OPTIONAL */
95         char *oc_desc;          /* OPTIONAL */
96         int  oc_obsolete;       /* 0=no, 1=yes */
97         char **oc_sup_oids;     /* OPTIONAL */
98         int  oc_kind;           /* 0=ABSTRACT, 1=STRUCTURAL, 2=AUXILIARY */
99         char **oc_at_oids_must; /* OPTIONAL */
100         char **oc_at_oids_may;  /* OPTIONAL */
101         LDAPSchemaExtensionItem **oc_extensions; /* OPTIONAL */
102 } LDAPObjectClass;
103
104 typedef struct ldap_contentrule {
105         char *cr_oid;           /* REQUIRED */
106         char **cr_names;        /* OPTIONAL */
107         char *cr_desc;          /* OPTIONAL */
108         char **cr_sup_oids;     /* OPTIONAL */
109         int  cr_obsolete;       /* 0=no, 1=yes */
110         char **cr_oc_oids_aux;  /* OPTIONAL */
111         char **cr_at_oids_must; /* OPTIONAL */
112         char **cr_at_oids_may;  /* OPTIONAL */
113         char **cr_at_oids_not;  /* OPTIONAL */
114         LDAPSchemaExtensionItem **cr_extensions; /* OPTIONAL */
115 } LDAPContentRule;
116
117 typedef struct ldap_nameform {
118         char *nf_oid;           /* REQUIRED */
119         char **nf_names;        /* OPTIONAL */
120         char *nf_desc;          /* OPTIONAL */
121         int  nf_obsolete;       /* 0=no, 1=yes */
122         char *nf_objectclass;   /* REQUIRED */
123         char **nf_at_oids_must; /* REQUIRED */
124         char **nf_at_oids_may;  /* OPTIONAL */
125         LDAPSchemaExtensionItem **nf_extensions; /* OPTIONAL */
126 } LDAPNameForm;
127
128 typedef struct ldap_structurerule {
129         int sr_ruleid;          /* REQUIRED */
130         char **sr_names;        /* OPTIONAL */
131         char *sr_desc;          /* OPTIONAL */
132         int  sr_obsolete;       /* 0=no, 1=yes */
133         char *sr_nameform;      /* REQUIRED */
134         int sr_nsup_ruleids;/* number of sr_sup_ruleids */
135         int *sr_sup_ruleids;/* OPTIONAL */
136         LDAPSchemaExtensionItem **sr_extensions; /* OPTIONAL */
137 } LDAPStructureRule;
138
139 /*
140  * Misc macros
141  */
142 #define LDAP_SCHEMA_NO                          0
143 #define LDAP_SCHEMA_YES                         1
144
145 #define LDAP_SCHEMA_USER_APPLICATIONS           0
146 #define LDAP_SCHEMA_DIRECTORY_OPERATION         1
147 #define LDAP_SCHEMA_DISTRIBUTED_OPERATION       2
148 #define LDAP_SCHEMA_DSA_OPERATION               3
149
150 #define LDAP_SCHEMA_ABSTRACT                    0
151 #define LDAP_SCHEMA_STRUCTURAL                  1
152 #define LDAP_SCHEMA_AUXILIARY                   2
153
154
155 /*
156  * Flags that control how liberal the parsing routines are.
157  */
158 #define LDAP_SCHEMA_ALLOW_NONE          0x00U /* Strict parsing               */
159 #define LDAP_SCHEMA_ALLOW_NO_OID        0x01U /* Allow missing oid            */
160 #define LDAP_SCHEMA_ALLOW_QUOTED        0x02U /* Allow bogus extra quotes     */
161 #define LDAP_SCHEMA_ALLOW_DESCR         0x04U /* Allow descr instead of OID   */
162 #define LDAP_SCHEMA_ALLOW_DESCR_PREFIX  0x08U /* Allow descr as OID prefix    */
163 #define LDAP_SCHEMA_ALLOW_OID_MACRO     0x10U /* Allow OID macros in slapd    */
164 #define LDAP_SCHEMA_ALLOW_OUT_OF_ORDER_FIELDS 0x20U /* Allow fields in most any order */
165 #define LDAP_SCHEMA_ALLOW_ALL           0x3fU /* Be very liberal in parsing   */
166 #define LDAP_SCHEMA_SKIP                        0x80U /* Don't malloc any result      */
167
168
169 LDAP_F( LDAP_CONST char * )
170 ldap_syntax2name LDAP_P((
171         LDAPSyntax * syn ));
172
173 LDAP_F( LDAP_CONST char * )
174 ldap_matchingrule2name LDAP_P((
175         LDAPMatchingRule * mr ));
176
177 LDAP_F( LDAP_CONST char * )
178 ldap_matchingruleuse2name LDAP_P((
179         LDAPMatchingRuleUse * mru ));
180
181 LDAP_F( LDAP_CONST char * )
182 ldap_attributetype2name LDAP_P((
183         LDAPAttributeType * at ));
184
185 LDAP_F( LDAP_CONST char * )
186 ldap_objectclass2name LDAP_P((
187         LDAPObjectClass * oc ));
188
189 LDAP_F( LDAP_CONST char * )
190 ldap_contentrule2name LDAP_P((
191         LDAPContentRule * cr ));
192
193 LDAP_F( LDAP_CONST char * )
194 ldap_nameform2name LDAP_P((
195         LDAPNameForm * nf ));
196
197 LDAP_F( LDAP_CONST char * )
198 ldap_structurerule2name LDAP_P((
199         LDAPStructureRule * sr ));
200
201 LDAP_F( void )
202 ldap_syntax_free LDAP_P((
203         LDAPSyntax * syn ));
204
205 LDAP_F( void )
206 ldap_matchingrule_free LDAP_P((
207         LDAPMatchingRule * mr ));
208
209 LDAP_F( void )
210 ldap_matchingruleuse_free LDAP_P((
211         LDAPMatchingRuleUse * mr ));
212
213 LDAP_F( void )
214 ldap_attributetype_free LDAP_P((
215         LDAPAttributeType * at ));
216
217 LDAP_F( void )
218 ldap_objectclass_free LDAP_P((
219         LDAPObjectClass * oc ));
220
221 LDAP_F( void )
222 ldap_contentrule_free LDAP_P((
223         LDAPContentRule * cr ));
224
225 LDAP_F( void )
226 ldap_nameform_free LDAP_P((
227         LDAPNameForm * nf ));
228
229 LDAP_F( void )
230 ldap_structurerule_free LDAP_P((
231         LDAPStructureRule * sr ));
232
233 LDAP_F( LDAPStructureRule * )
234 ldap_str2structurerule LDAP_P((
235         LDAP_CONST char * s,
236         int * code,
237         LDAP_CONST char ** errp,
238         LDAP_CONST unsigned flags ));
239
240 LDAP_F( LDAPNameForm * )
241 ldap_str2nameform LDAP_P((
242         LDAP_CONST char * s,
243         int * code,
244         LDAP_CONST char ** errp,
245         LDAP_CONST unsigned flags ));
246
247 LDAP_F( LDAPContentRule * )
248 ldap_str2contentrule LDAP_P((
249         LDAP_CONST char * s,
250         int * code,
251         LDAP_CONST char ** errp,
252         LDAP_CONST unsigned flags ));
253
254 LDAP_F( LDAPObjectClass * )
255 ldap_str2objectclass LDAP_P((
256         LDAP_CONST char * s,
257         int * code,
258         LDAP_CONST char ** errp,
259         LDAP_CONST unsigned flags ));
260
261 LDAP_F( LDAPAttributeType * )
262 ldap_str2attributetype LDAP_P((
263         LDAP_CONST char * s,
264         int * code,
265         LDAP_CONST char ** errp,
266         LDAP_CONST unsigned flags ));
267
268 LDAP_F( LDAPSyntax * )
269 ldap_str2syntax LDAP_P((
270         LDAP_CONST char * s,
271         int * code,
272         LDAP_CONST char ** errp,
273         LDAP_CONST unsigned flags ));
274
275 LDAP_F( LDAPMatchingRule * )
276 ldap_str2matchingrule LDAP_P((
277         LDAP_CONST char * s,
278         int * code,
279         LDAP_CONST char ** errp,
280         LDAP_CONST unsigned flags ));
281
282 LDAP_F( LDAPMatchingRuleUse * )
283 ldap_str2matchingruleuse LDAP_P((
284         LDAP_CONST char * s,
285         int * code,
286         LDAP_CONST char ** errp,
287         LDAP_CONST unsigned flags ));
288
289 LDAP_F( char * )
290 ldap_structurerule2str LDAP_P((
291         LDAPStructureRule * sr ));
292
293 LDAP_F( struct berval * )
294 ldap_structurerule2bv LDAP_P((
295         LDAPStructureRule * sr, struct berval *bv ));
296
297 LDAP_F( char * )
298 ldap_nameform2str LDAP_P((
299         LDAPNameForm * nf ));
300
301 LDAP_F( struct berval * )
302 ldap_nameform2bv LDAP_P((
303         LDAPNameForm * nf, struct berval *bv ));
304
305 LDAP_F( char * )
306 ldap_contentrule2str LDAP_P((
307         LDAPContentRule * cr ));
308
309 LDAP_F( struct berval * )
310 ldap_contentrule2bv LDAP_P((
311         LDAPContentRule * cr, struct berval *bv ));
312
313 LDAP_F( char * )
314 ldap_objectclass2str LDAP_P((
315         LDAPObjectClass * oc ));
316
317 LDAP_F( struct berval * )
318 ldap_objectclass2bv LDAP_P((
319         LDAPObjectClass * oc, struct berval *bv ));
320
321 LDAP_F( char * )
322 ldap_attributetype2str LDAP_P((
323         LDAPAttributeType * at ));
324
325 LDAP_F( struct berval * )
326 ldap_attributetype2bv LDAP_P((
327         LDAPAttributeType * at, struct berval *bv ));
328
329 LDAP_F( char * )
330 ldap_syntax2str LDAP_P((
331         LDAPSyntax * syn ));
332
333 LDAP_F( struct berval * )
334 ldap_syntax2bv LDAP_P((
335         LDAPSyntax * syn, struct berval *bv ));
336
337 LDAP_F( char * )
338 ldap_matchingrule2str LDAP_P((
339         LDAPMatchingRule * mr ));
340
341 LDAP_F( struct berval * )
342 ldap_matchingrule2bv LDAP_P((
343         LDAPMatchingRule * mr, struct berval *bv ));
344
345 LDAP_F( char * )
346 ldap_matchingruleuse2str LDAP_P((
347         LDAPMatchingRuleUse * mru ));
348
349 LDAP_F( struct berval * )
350 ldap_matchingruleuse2bv LDAP_P((
351         LDAPMatchingRuleUse * mru, struct berval *bv ));
352
353 LDAP_F( char * )
354 ldap_scherr2str LDAP_P((
355         int code )) LDAP_GCCATTR((const));
356
357 LDAP_END_DECL
358
359 #endif
360