175115Sfenner/*	$NetBSD: ldap_schema.h,v 1.3 2021/08/14 16:14:55 christos Exp $	*/
275115Sfenner
375115Sfenner/* $OpenLDAP$ */
475115Sfenner/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
575115Sfenner *
675115Sfenner * Copyright 1998-2021 The OpenLDAP Foundation.
775115Sfenner * All rights reserved.
875115Sfenner *
975115Sfenner * Redistribution and use in source and binary forms, with or without
1075115Sfenner * modification, are permitted only as authorized by the OpenLDAP
1175115Sfenner * Public License.
1275115Sfenner *
1375115Sfenner * A copy of this license is available in file LICENSE in the
1475115Sfenner * top-level directory of the distribution or, alternatively, at
1575115Sfenner * <http://www.OpenLDAP.org/license.html>.
1675115Sfenner */
1775115Sfenner
1875115Sfenner/* ldap-schema.h - Header for basic schema handling functions that can be
1975115Sfenner *		used by both clients and servers.
2075115Sfenner * these routines should be renamed ldap_x_...
2175115Sfenner */
2275115Sfenner
2375115Sfenner#ifndef _LDAP_SCHEMA_H
2475115Sfenner#define _LDAP_SCHEMA_H 1
2575115Sfenner
2675115Sfenner#include <ldap_cdefs.h>
2775115Sfenner
28127668SbmsLDAP_BEGIN_DECL
29190207Srpaulo
3075115Sfenner/* Codes for parsing errors */
3175115Sfenner
3275115Sfenner#define LDAP_SCHERR_OUTOFMEM		1
3375115Sfenner#define LDAP_SCHERR_UNEXPTOKEN		2
3475115Sfenner#define LDAP_SCHERR_NOLEFTPAREN		3
3575115Sfenner#define LDAP_SCHERR_NORIGHTPAREN	4
36127668Sbms#define LDAP_SCHERR_NODIGIT			5
3775115Sfenner#define LDAP_SCHERR_BADNAME			6
3875115Sfenner#define LDAP_SCHERR_BADDESC			7
3975115Sfenner#define LDAP_SCHERR_BADSUP			8
4075115Sfenner#define LDAP_SCHERR_DUPOPT			9
4175115Sfenner#define LDAP_SCHERR_EMPTY			10
4275115Sfenner#define LDAP_SCHERR_MISSING			11
4375115Sfenner#define LDAP_SCHERR_OUT_OF_ORDER	12
44146773Ssam
4575115Sfennertypedef struct ldap_schema_extension_item {
46127668Sbms	char *lsei_name;
47127668Sbms	char **lsei_values;
48127668Sbms} LDAPSchemaExtensionItem;
49127668Sbms
50127668Sbmstypedef struct ldap_syntax {
51127668Sbms	char *syn_oid;		/* REQUIRED */
52127668Sbms	char **syn_names;	/* OPTIONAL */
53127668Sbms	char *syn_desc;		/* OPTIONAL */
54127668Sbms	LDAPSchemaExtensionItem **syn_extensions; /* OPTIONAL */
55127668Sbms} LDAPSyntax;
56127668Sbms
57127668Sbmstypedef struct ldap_matchingrule {
58127668Sbms	char *mr_oid;		/* REQUIRED */
59127668Sbms	char **mr_names;	/* OPTIONAL */
60127668Sbms	char *mr_desc;		/* OPTIONAL */
61127668Sbms	int  mr_obsolete;	/* OPTIONAL */
62127668Sbms	char *mr_syntax_oid;	/* REQUIRED */
63127668Sbms	LDAPSchemaExtensionItem **mr_extensions; /* OPTIONAL */
64127668Sbms} LDAPMatchingRule;
65127668Sbms
66127668Sbmstypedef struct ldap_matchingruleuse {
67127668Sbms	char *mru_oid;		/* REQUIRED */
68127668Sbms	char **mru_names;	/* OPTIONAL */
69127668Sbms	char *mru_desc;		/* OPTIONAL */
70127668Sbms	int  mru_obsolete;	/* OPTIONAL */
71127668Sbms	char **mru_applies_oids;	/* REQUIRED */
72127668Sbms	LDAPSchemaExtensionItem **mru_extensions; /* OPTIONAL */
73127668Sbms} LDAPMatchingRuleUse;
74127668Sbms
75127668Sbmstypedef struct ldap_attributetype {
76127668Sbms	char *at_oid;		/* REQUIRED */
77127668Sbms	char **at_names;	/* OPTIONAL */
78127668Sbms	char *at_desc;		/* OPTIONAL */
79127668Sbms	int  at_obsolete;	/* 0=no, 1=yes */
80127668Sbms	char *at_sup_oid;	/* OPTIONAL */
81127668Sbms	char *at_equality_oid;	/* OPTIONAL */
82127668Sbms	char *at_ordering_oid;	/* OPTIONAL */
83127668Sbms	char *at_substr_oid;	/* OPTIONAL */
8498524Sfenner	char *at_syntax_oid;	/* OPTIONAL */
8598524Sfenner	int  at_syntax_len;	/* OPTIONAL */
86127668Sbms	int  at_single_value;	/* 0=no, 1=yes */
8775115Sfenner	int  at_collective;	/* 0=no, 1=yes */
8875115Sfenner	int  at_no_user_mod;	/* 0=no, 1=yes */
89127668Sbms	int  at_usage;		/* 0=userApplications, 1=directoryOperation,
9075115Sfenner				   2=distributedOperation, 3=dSAOperation */
91127668Sbms	LDAPSchemaExtensionItem **at_extensions; /* OPTIONAL */
92127668Sbms} LDAPAttributeType;
9375115Sfenner
94127668Sbmstypedef struct ldap_objectclass {
9575115Sfenner	char *oc_oid;		/* REQUIRED */
9675115Sfenner	char **oc_names;	/* OPTIONAL */
9775115Sfenner	char *oc_desc;		/* OPTIONAL */
9875115Sfenner	int  oc_obsolete;	/* 0=no, 1=yes */
99127668Sbms	char **oc_sup_oids;	/* OPTIONAL */
10075115Sfenner	int  oc_kind;		/* 0=ABSTRACT, 1=STRUCTURAL, 2=AUXILIARY */
101127668Sbms	char **oc_at_oids_must;	/* OPTIONAL */
102127668Sbms	char **oc_at_oids_may;	/* OPTIONAL */
103127668Sbms	LDAPSchemaExtensionItem **oc_extensions; /* OPTIONAL */
104127668Sbms} LDAPObjectClass;
105127668Sbms
106127668Sbmstypedef struct ldap_contentrule {
10775115Sfenner	char *cr_oid;		/* REQUIRED */
108127668Sbms	char **cr_names;	/* OPTIONAL */
10975115Sfenner	char *cr_desc;		/* OPTIONAL */
110127668Sbms	char **cr_sup_oids;	/* OPTIONAL */
111127668Sbms	int  cr_obsolete;	/* 0=no, 1=yes */
112127668Sbms	char **cr_oc_oids_aux;	/* OPTIONAL */
113127668Sbms	char **cr_at_oids_must;	/* OPTIONAL */
114127668Sbms	char **cr_at_oids_may;	/* OPTIONAL */
115127668Sbms	char **cr_at_oids_not;	/* OPTIONAL */
11675115Sfenner	LDAPSchemaExtensionItem **cr_extensions; /* OPTIONAL */
117127668Sbms} LDAPContentRule;
11898524Sfenner
11975115Sfennertypedef struct ldap_nameform {
120127668Sbms	char *nf_oid;		/* REQUIRED */
121127668Sbms	char **nf_names;	/* OPTIONAL */
122127668Sbms	char *nf_desc;		/* OPTIONAL */
123127668Sbms	int  nf_obsolete;	/* 0=no, 1=yes */
124127668Sbms	char *nf_objectclass;	/* REQUIRED */
125127668Sbms	char **nf_at_oids_must;	/* REQUIRED */
126127668Sbms	char **nf_at_oids_may;	/* OPTIONAL */
127127668Sbms	LDAPSchemaExtensionItem **nf_extensions; /* OPTIONAL */
128127668Sbms} LDAPNameForm;
129127668Sbms
130127668Sbmstypedef struct ldap_structurerule {
131127668Sbms	int sr_ruleid;		/* REQUIRED */
132127668Sbms	char **sr_names;	/* OPTIONAL */
133214478Srpaulo	char *sr_desc;		/* OPTIONAL */
134214478Srpaulo	int  sr_obsolete;	/* 0=no, 1=yes */
135214478Srpaulo	char *sr_nameform;	/* REQUIRED */
136214478Srpaulo	int sr_nsup_ruleids;/* number of sr_sup_ruleids */
13798524Sfenner	int *sr_sup_ruleids;/* OPTIONAL */
138127668Sbms	LDAPSchemaExtensionItem **sr_extensions; /* OPTIONAL */
139127668Sbms} LDAPStructureRule;
140127668Sbms
14198524Sfenner/*
142127668Sbms * Misc macros
143214478Srpaulo */
144214478Srpaulo#define LDAP_SCHEMA_NO				0
145214478Srpaulo#define LDAP_SCHEMA_YES				1
14698524Sfenner
147127668Sbms#define LDAP_SCHEMA_USER_APPLICATIONS		0
148127668Sbms#define LDAP_SCHEMA_DIRECTORY_OPERATION		1
149127668Sbms#define LDAP_SCHEMA_DISTRIBUTED_OPERATION	2
150127668Sbms#define LDAP_SCHEMA_DSA_OPERATION		3
15198524Sfenner
152127668Sbms#define LDAP_SCHEMA_ABSTRACT			0
153127668Sbms#define LDAP_SCHEMA_STRUCTURAL			1
154127668Sbms#define LDAP_SCHEMA_AUXILIARY			2
155127668Sbms
156127668Sbms
157127668Sbms/*
158127668Sbms * Flags that control how liberal the parsing routines are.
159127668Sbms */
16098524Sfenner#define LDAP_SCHEMA_ALLOW_NONE		0x00U /* Strict parsing               */
161127668Sbms#define LDAP_SCHEMA_ALLOW_NO_OID	0x01U /* Allow missing oid            */
162214478Srpaulo#define LDAP_SCHEMA_ALLOW_QUOTED	0x02U /* Allow bogus extra quotes     */
163214478Srpaulo#define LDAP_SCHEMA_ALLOW_DESCR		0x04U /* Allow descr instead of OID   */
164214478Srpaulo#define LDAP_SCHEMA_ALLOW_DESCR_PREFIX	0x08U /* Allow descr as OID prefix    */
16598524Sfenner#define LDAP_SCHEMA_ALLOW_OID_MACRO	0x10U /* Allow OID macros in slapd    */
166127668Sbms#define LDAP_SCHEMA_ALLOW_OUT_OF_ORDER_FIELDS 0x20U /* Allow fields in most any order */
167127668Sbms#define LDAP_SCHEMA_ALLOW_ALL		0x3fU /* Be very liberal in parsing   */
168127668Sbms#define	LDAP_SCHEMA_SKIP			0x80U /* Don't malloc any result      */
16998524Sfenner
170127668Sbms
17198524SfennerLDAP_F( LDAP_CONST char * )
172127668Sbmsldap_syntax2name LDAP_P((
173214478Srpaulo	LDAPSyntax * syn ));
174214478Srpaulo
175214478SrpauloLDAP_F( LDAP_CONST char * )
17698524Sfennerldap_matchingrule2name LDAP_P((
177127668Sbms	LDAPMatchingRule * mr ));
178127668Sbms
17998524SfennerLDAP_F( LDAP_CONST char * )
180127668Sbmsldap_matchingruleuse2name LDAP_P((
181127668Sbms	LDAPMatchingRuleUse * mru ));
18298524Sfenner
183127668SbmsLDAP_F( LDAP_CONST char * )
184127668Sbmsldap_attributetype2name LDAP_P((
185127668Sbms	LDAPAttributeType * at ));
186127668Sbms
187127668SbmsLDAP_F( LDAP_CONST char * )
188127668Sbmsldap_objectclass2name LDAP_P((
189127668Sbms	LDAPObjectClass * oc ));
19098524Sfenner
191127668SbmsLDAP_F( LDAP_CONST char * )
192127668Sbmsldap_contentrule2name LDAP_P((
193127668Sbms	LDAPContentRule * cr ));
194127668Sbms
195127668SbmsLDAP_F( LDAP_CONST char * )
196127668Sbmsldap_nameform2name LDAP_P((
197127668Sbms	LDAPNameForm * nf ));
198127668Sbms
199127668SbmsLDAP_F( LDAP_CONST char * )
200127668Sbmsldap_structurerule2name LDAP_P((
201127668Sbms	LDAPStructureRule * sr ));
202127668Sbms
203127668SbmsLDAP_F( void )
204127668Sbmsldap_syntax_free LDAP_P((
205214478Srpaulo	LDAPSyntax * syn ));
206214478Srpaulo
207214478SrpauloLDAP_F( void )
208127668Sbmsldap_matchingrule_free LDAP_P((
209127668Sbms	LDAPMatchingRule * mr ));
210127668Sbms
211127668SbmsLDAP_F( void )
212127668Sbmsldap_matchingruleuse_free LDAP_P((
213127668Sbms	LDAPMatchingRuleUse * mr ));
214214478Srpaulo
215214478SrpauloLDAP_F( void )
216214478Srpauloldap_attributetype_free LDAP_P((
217214478Srpaulo	LDAPAttributeType * at ));
218214478Srpaulo
219127668SbmsLDAP_F( void )
220127668Sbmsldap_objectclass_free LDAP_P((
221127668Sbms	LDAPObjectClass * oc ));
222127668Sbms
223127668SbmsLDAP_F( void )
224127668Sbmsldap_contentrule_free LDAP_P((
22598524Sfenner	LDAPContentRule * cr ));
22698524Sfenner
22798524SfennerLDAP_F( void )
228127668Sbmsldap_nameform_free LDAP_P((
22975115Sfenner	LDAPNameForm * nf ));
230127668Sbms
231127668SbmsLDAP_F( void )
23298524Sfennerldap_structurerule_free LDAP_P((
23398524Sfenner	LDAPStructureRule * sr ));
23498524Sfenner
23598524SfennerLDAP_F( LDAPStructureRule * )
23675115Sfennerldap_str2structurerule LDAP_P((
23775115Sfenner	LDAP_CONST char * s,
23898524Sfenner	int * code,
23998524Sfenner	LDAP_CONST char ** errp,
24098524Sfenner	LDAP_CONST unsigned flags ));
24198524Sfenner
24298524SfennerLDAP_F( LDAPNameForm * )
24398524Sfennerldap_str2nameform LDAP_P((
24498524Sfenner	LDAP_CONST char * s,
24598524Sfenner	int * code,
24698524Sfenner	LDAP_CONST char ** errp,
24798524Sfenner	LDAP_CONST unsigned flags ));
24898524Sfenner
24998524SfennerLDAP_F( LDAPContentRule * )
25098524Sfennerldap_str2contentrule LDAP_P((
25175115Sfenner	LDAP_CONST char * s,
25298524Sfenner	int * code,
25398524Sfenner	LDAP_CONST char ** errp,
25498524Sfenner	LDAP_CONST unsigned flags ));
25598524Sfenner
25698524SfennerLDAP_F( LDAPObjectClass * )
25798524Sfennerldap_str2objectclass LDAP_P((
25898524Sfenner	LDAP_CONST char * s,
25975115Sfenner	int * code,
260127668Sbms	LDAP_CONST char ** errp,
26198524Sfenner	LDAP_CONST unsigned flags ));
26298524Sfenner
26375115SfennerLDAP_F( LDAPAttributeType * )
26498524Sfennerldap_str2attributetype LDAP_P((
265127668Sbms	LDAP_CONST char * s,
26698524Sfenner	int * code,
26798524Sfenner	LDAP_CONST char ** errp,
26898524Sfenner	LDAP_CONST unsigned flags ));
26998524Sfenner
27098524SfennerLDAP_F( LDAPSyntax * )
27175115Sfennerldap_str2syntax LDAP_P((
272127668Sbms	LDAP_CONST char * s,
27398524Sfenner	int * code,
27498524Sfenner	LDAP_CONST char ** errp,
27598524Sfenner	LDAP_CONST unsigned flags ));
27675115Sfenner
277146773SsamLDAP_F( LDAPMatchingRule * )
27898524Sfennerldap_str2matchingrule LDAP_P((
27998524Sfenner	LDAP_CONST char * s,
28098524Sfenner	int * code,
28198524Sfenner	LDAP_CONST char ** errp,
28298524Sfenner	LDAP_CONST unsigned flags ));
28398524Sfenner
28498524SfennerLDAP_F( LDAPMatchingRuleUse * )
285127668Sbmsldap_str2matchingruleuse LDAP_P((
28698524Sfenner	LDAP_CONST char * s,
28798524Sfenner	int * code,
288127668Sbms	LDAP_CONST char ** errp,
289127668Sbms	LDAP_CONST unsigned flags ));
290127668Sbms
29198524SfennerLDAP_F( char * )
29275115Sfennerldap_structurerule2str LDAP_P((
29398524Sfenner	LDAPStructureRule * sr ));
29498524Sfenner
29598524SfennerLDAP_F( struct berval * )
29698524Sfennerldap_structurerule2bv LDAP_P((
29798524Sfenner	LDAPStructureRule * sr, struct berval *bv ));
29898524Sfenner
29998524SfennerLDAP_F( char * )
30098524Sfennerldap_nameform2str LDAP_P((
30198524Sfenner	LDAPNameForm * nf ));
302127668Sbms
303127668SbmsLDAP_F( struct berval * )
30498524Sfennerldap_nameform2bv LDAP_P((
30598524Sfenner	LDAPNameForm * nf, struct berval *bv ));
30698524Sfenner
307127668SbmsLDAP_F( char * )
308127668Sbmsldap_contentrule2str LDAP_P((
309127668Sbms	LDAPContentRule * cr ));
31098524Sfenner
31198524SfennerLDAP_F( struct berval * )
31298524Sfennerldap_contentrule2bv LDAP_P((
31398524Sfenner	LDAPContentRule * cr, struct berval *bv ));
31498524Sfenner
31598524SfennerLDAP_F( char * )
31698524Sfennerldap_objectclass2str LDAP_P((
317127668Sbms	LDAPObjectClass * oc ));
31898524Sfenner
31998524SfennerLDAP_F( struct berval * )
32098524Sfennerldap_objectclass2bv LDAP_P((
32198524Sfenner	LDAPObjectClass * oc, struct berval *bv ));
32298524Sfenner
323127668SbmsLDAP_F( char * )
32498524Sfennerldap_attributetype2str LDAP_P((
32598524Sfenner	LDAPAttributeType * at ));
32698524Sfenner
32798524SfennerLDAP_F( struct berval * )
32898524Sfennerldap_attributetype2bv LDAP_P((
329127668Sbms	LDAPAttributeType * at, struct berval *bv ));
33098524Sfenner
33198524SfennerLDAP_F( char * )
33298524Sfennerldap_syntax2str LDAP_P((
33398524Sfenner	LDAPSyntax * syn ));
33498524Sfenner
33575115SfennerLDAP_F( struct berval * )
33698524Sfennerldap_syntax2bv LDAP_P((
33798524Sfenner	LDAPSyntax * syn, struct berval *bv ));
33875115Sfenner
33998524SfennerLDAP_F( char * )
34098524Sfennerldap_matchingrule2str LDAP_P((
34198524Sfenner	LDAPMatchingRule * mr ));
34298524Sfenner
34398524SfennerLDAP_F( struct berval * )
34475115Sfennerldap_matchingrule2bv LDAP_P((
34575115Sfenner	LDAPMatchingRule * mr, struct berval *bv ));
34675115Sfenner
34798524SfennerLDAP_F( char * )
34898524Sfennerldap_matchingruleuse2str LDAP_P((
34975115Sfenner	LDAPMatchingRuleUse * mru ));
35098524Sfenner
35198524SfennerLDAP_F( struct berval * )
35275115Sfennerldap_matchingruleuse2bv LDAP_P((
35398524Sfenner	LDAPMatchingRuleUse * mru, struct berval *bv ));
35498524Sfenner
35598524SfennerLDAP_F( char * )
35698524Sfennerldap_scherr2str LDAP_P((
35798524Sfenner	int code )) LDAP_GCCATTR((const));
35898524Sfenner
35998524SfennerLDAP_END_DECL
36098524Sfenner
36198524Sfenner#endif
36298524Sfenner
36398524Sfenner