xref: /netbsd-src/external/bsd/openldap/dist/include/ldap_schema.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1*549b59edSchristos /*	$NetBSD: ldap_schema.h,v 1.3 2021/08/14 16:14:55 christos Exp $	*/
24e6df137Slukem 
3d11b170bStron /* $OpenLDAP$ */
42de962bdSlukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
52de962bdSlukem  *
6*549b59edSchristos  * Copyright 1998-2021 The OpenLDAP Foundation.
72de962bdSlukem  * All rights reserved.
82de962bdSlukem  *
92de962bdSlukem  * Redistribution and use in source and binary forms, with or without
102de962bdSlukem  * modification, are permitted only as authorized by the OpenLDAP
112de962bdSlukem  * Public License.
122de962bdSlukem  *
132de962bdSlukem  * A copy of this license is available in file LICENSE in the
142de962bdSlukem  * top-level directory of the distribution or, alternatively, at
152de962bdSlukem  * <http://www.OpenLDAP.org/license.html>.
162de962bdSlukem  */
172de962bdSlukem 
182de962bdSlukem /* ldap-schema.h - Header for basic schema handling functions that can be
192de962bdSlukem  *		used by both clients and servers.
202de962bdSlukem  * these routines should be renamed ldap_x_...
212de962bdSlukem  */
222de962bdSlukem 
232de962bdSlukem #ifndef _LDAP_SCHEMA_H
242de962bdSlukem #define _LDAP_SCHEMA_H 1
252de962bdSlukem 
262de962bdSlukem #include <ldap_cdefs.h>
272de962bdSlukem 
282de962bdSlukem LDAP_BEGIN_DECL
292de962bdSlukem 
302de962bdSlukem /* Codes for parsing errors */
312de962bdSlukem 
322de962bdSlukem #define LDAP_SCHERR_OUTOFMEM		1
332de962bdSlukem #define LDAP_SCHERR_UNEXPTOKEN		2
342de962bdSlukem #define LDAP_SCHERR_NOLEFTPAREN		3
352de962bdSlukem #define LDAP_SCHERR_NORIGHTPAREN	4
362de962bdSlukem #define LDAP_SCHERR_NODIGIT			5
372de962bdSlukem #define LDAP_SCHERR_BADNAME			6
382de962bdSlukem #define LDAP_SCHERR_BADDESC			7
392de962bdSlukem #define LDAP_SCHERR_BADSUP			8
402de962bdSlukem #define LDAP_SCHERR_DUPOPT			9
412de962bdSlukem #define LDAP_SCHERR_EMPTY			10
422de962bdSlukem #define LDAP_SCHERR_MISSING			11
432de962bdSlukem #define LDAP_SCHERR_OUT_OF_ORDER	12
442de962bdSlukem 
452de962bdSlukem typedef struct ldap_schema_extension_item {
462de962bdSlukem 	char *lsei_name;
472de962bdSlukem 	char **lsei_values;
482de962bdSlukem } LDAPSchemaExtensionItem;
492de962bdSlukem 
502de962bdSlukem typedef struct ldap_syntax {
512de962bdSlukem 	char *syn_oid;		/* REQUIRED */
522de962bdSlukem 	char **syn_names;	/* OPTIONAL */
532de962bdSlukem 	char *syn_desc;		/* OPTIONAL */
542de962bdSlukem 	LDAPSchemaExtensionItem **syn_extensions; /* OPTIONAL */
552de962bdSlukem } LDAPSyntax;
562de962bdSlukem 
572de962bdSlukem typedef struct ldap_matchingrule {
582de962bdSlukem 	char *mr_oid;		/* REQUIRED */
592de962bdSlukem 	char **mr_names;	/* OPTIONAL */
602de962bdSlukem 	char *mr_desc;		/* OPTIONAL */
612de962bdSlukem 	int  mr_obsolete;	/* OPTIONAL */
622de962bdSlukem 	char *mr_syntax_oid;	/* REQUIRED */
632de962bdSlukem 	LDAPSchemaExtensionItem **mr_extensions; /* OPTIONAL */
642de962bdSlukem } LDAPMatchingRule;
652de962bdSlukem 
662de962bdSlukem typedef struct ldap_matchingruleuse {
672de962bdSlukem 	char *mru_oid;		/* REQUIRED */
682de962bdSlukem 	char **mru_names;	/* OPTIONAL */
692de962bdSlukem 	char *mru_desc;		/* OPTIONAL */
702de962bdSlukem 	int  mru_obsolete;	/* OPTIONAL */
712de962bdSlukem 	char **mru_applies_oids;	/* REQUIRED */
722de962bdSlukem 	LDAPSchemaExtensionItem **mru_extensions; /* OPTIONAL */
732de962bdSlukem } LDAPMatchingRuleUse;
742de962bdSlukem 
752de962bdSlukem typedef struct ldap_attributetype {
762de962bdSlukem 	char *at_oid;		/* REQUIRED */
772de962bdSlukem 	char **at_names;	/* OPTIONAL */
782de962bdSlukem 	char *at_desc;		/* OPTIONAL */
792de962bdSlukem 	int  at_obsolete;	/* 0=no, 1=yes */
802de962bdSlukem 	char *at_sup_oid;	/* OPTIONAL */
812de962bdSlukem 	char *at_equality_oid;	/* OPTIONAL */
822de962bdSlukem 	char *at_ordering_oid;	/* OPTIONAL */
832de962bdSlukem 	char *at_substr_oid;	/* OPTIONAL */
842de962bdSlukem 	char *at_syntax_oid;	/* OPTIONAL */
852de962bdSlukem 	int  at_syntax_len;	/* OPTIONAL */
862de962bdSlukem 	int  at_single_value;	/* 0=no, 1=yes */
872de962bdSlukem 	int  at_collective;	/* 0=no, 1=yes */
882de962bdSlukem 	int  at_no_user_mod;	/* 0=no, 1=yes */
892de962bdSlukem 	int  at_usage;		/* 0=userApplications, 1=directoryOperation,
902de962bdSlukem 				   2=distributedOperation, 3=dSAOperation */
912de962bdSlukem 	LDAPSchemaExtensionItem **at_extensions; /* OPTIONAL */
922de962bdSlukem } LDAPAttributeType;
932de962bdSlukem 
942de962bdSlukem typedef struct ldap_objectclass {
952de962bdSlukem 	char *oc_oid;		/* REQUIRED */
962de962bdSlukem 	char **oc_names;	/* OPTIONAL */
972de962bdSlukem 	char *oc_desc;		/* OPTIONAL */
982de962bdSlukem 	int  oc_obsolete;	/* 0=no, 1=yes */
992de962bdSlukem 	char **oc_sup_oids;	/* OPTIONAL */
1002de962bdSlukem 	int  oc_kind;		/* 0=ABSTRACT, 1=STRUCTURAL, 2=AUXILIARY */
1012de962bdSlukem 	char **oc_at_oids_must;	/* OPTIONAL */
1022de962bdSlukem 	char **oc_at_oids_may;	/* OPTIONAL */
1032de962bdSlukem 	LDAPSchemaExtensionItem **oc_extensions; /* OPTIONAL */
1042de962bdSlukem } LDAPObjectClass;
1052de962bdSlukem 
1062de962bdSlukem typedef struct ldap_contentrule {
1072de962bdSlukem 	char *cr_oid;		/* REQUIRED */
1082de962bdSlukem 	char **cr_names;	/* OPTIONAL */
1092de962bdSlukem 	char *cr_desc;		/* OPTIONAL */
1102de962bdSlukem 	char **cr_sup_oids;	/* OPTIONAL */
1112de962bdSlukem 	int  cr_obsolete;	/* 0=no, 1=yes */
1122de962bdSlukem 	char **cr_oc_oids_aux;	/* OPTIONAL */
1132de962bdSlukem 	char **cr_at_oids_must;	/* OPTIONAL */
1142de962bdSlukem 	char **cr_at_oids_may;	/* OPTIONAL */
1152de962bdSlukem 	char **cr_at_oids_not;	/* OPTIONAL */
1162de962bdSlukem 	LDAPSchemaExtensionItem **cr_extensions; /* OPTIONAL */
1172de962bdSlukem } LDAPContentRule;
1182de962bdSlukem 
1192de962bdSlukem typedef struct ldap_nameform {
1202de962bdSlukem 	char *nf_oid;		/* REQUIRED */
1212de962bdSlukem 	char **nf_names;	/* OPTIONAL */
1222de962bdSlukem 	char *nf_desc;		/* OPTIONAL */
1232de962bdSlukem 	int  nf_obsolete;	/* 0=no, 1=yes */
1242de962bdSlukem 	char *nf_objectclass;	/* REQUIRED */
1252de962bdSlukem 	char **nf_at_oids_must;	/* REQUIRED */
1262de962bdSlukem 	char **nf_at_oids_may;	/* OPTIONAL */
1272de962bdSlukem 	LDAPSchemaExtensionItem **nf_extensions; /* OPTIONAL */
1282de962bdSlukem } LDAPNameForm;
1292de962bdSlukem 
1302de962bdSlukem typedef struct ldap_structurerule {
1312de962bdSlukem 	int sr_ruleid;		/* REQUIRED */
1322de962bdSlukem 	char **sr_names;	/* OPTIONAL */
1332de962bdSlukem 	char *sr_desc;		/* OPTIONAL */
1342de962bdSlukem 	int  sr_obsolete;	/* 0=no, 1=yes */
1352de962bdSlukem 	char *sr_nameform;	/* REQUIRED */
1362de962bdSlukem 	int sr_nsup_ruleids;/* number of sr_sup_ruleids */
1372de962bdSlukem 	int *sr_sup_ruleids;/* OPTIONAL */
1382de962bdSlukem 	LDAPSchemaExtensionItem **sr_extensions; /* OPTIONAL */
1392de962bdSlukem } LDAPStructureRule;
1402de962bdSlukem 
1412de962bdSlukem /*
1422de962bdSlukem  * Misc macros
1432de962bdSlukem  */
1442de962bdSlukem #define LDAP_SCHEMA_NO				0
1452de962bdSlukem #define LDAP_SCHEMA_YES				1
1462de962bdSlukem 
1472de962bdSlukem #define LDAP_SCHEMA_USER_APPLICATIONS		0
1482de962bdSlukem #define LDAP_SCHEMA_DIRECTORY_OPERATION		1
1492de962bdSlukem #define LDAP_SCHEMA_DISTRIBUTED_OPERATION	2
1502de962bdSlukem #define LDAP_SCHEMA_DSA_OPERATION		3
1512de962bdSlukem 
1522de962bdSlukem #define LDAP_SCHEMA_ABSTRACT			0
1532de962bdSlukem #define LDAP_SCHEMA_STRUCTURAL			1
1542de962bdSlukem #define LDAP_SCHEMA_AUXILIARY			2
1552de962bdSlukem 
1562de962bdSlukem 
1572de962bdSlukem /*
1582de962bdSlukem  * Flags that control how liberal the parsing routines are.
1592de962bdSlukem  */
1602de962bdSlukem #define LDAP_SCHEMA_ALLOW_NONE		0x00U /* Strict parsing               */
1612de962bdSlukem #define LDAP_SCHEMA_ALLOW_NO_OID	0x01U /* Allow missing oid            */
1622de962bdSlukem #define LDAP_SCHEMA_ALLOW_QUOTED	0x02U /* Allow bogus extra quotes     */
1632de962bdSlukem #define LDAP_SCHEMA_ALLOW_DESCR		0x04U /* Allow descr instead of OID   */
1642de962bdSlukem #define LDAP_SCHEMA_ALLOW_DESCR_PREFIX	0x08U /* Allow descr as OID prefix    */
1652de962bdSlukem #define LDAP_SCHEMA_ALLOW_OID_MACRO	0x10U /* Allow OID macros in slapd    */
1662de962bdSlukem #define LDAP_SCHEMA_ALLOW_OUT_OF_ORDER_FIELDS 0x20U /* Allow fields in most any order */
1672de962bdSlukem #define LDAP_SCHEMA_ALLOW_ALL		0x3fU /* Be very liberal in parsing   */
1682de962bdSlukem #define	LDAP_SCHEMA_SKIP			0x80U /* Don't malloc any result      */
1692de962bdSlukem 
1702de962bdSlukem 
1712de962bdSlukem LDAP_F( LDAP_CONST char * )
1722de962bdSlukem ldap_syntax2name LDAP_P((
1732de962bdSlukem 	LDAPSyntax * syn ));
1742de962bdSlukem 
1752de962bdSlukem LDAP_F( LDAP_CONST char * )
1762de962bdSlukem ldap_matchingrule2name LDAP_P((
1772de962bdSlukem 	LDAPMatchingRule * mr ));
1782de962bdSlukem 
1792de962bdSlukem LDAP_F( LDAP_CONST char * )
1802de962bdSlukem ldap_matchingruleuse2name LDAP_P((
1812de962bdSlukem 	LDAPMatchingRuleUse * mru ));
1822de962bdSlukem 
1832de962bdSlukem LDAP_F( LDAP_CONST char * )
1842de962bdSlukem ldap_attributetype2name LDAP_P((
1852de962bdSlukem 	LDAPAttributeType * at ));
1862de962bdSlukem 
1872de962bdSlukem LDAP_F( LDAP_CONST char * )
1882de962bdSlukem ldap_objectclass2name LDAP_P((
1892de962bdSlukem 	LDAPObjectClass * oc ));
1902de962bdSlukem 
1912de962bdSlukem LDAP_F( LDAP_CONST char * )
1922de962bdSlukem ldap_contentrule2name LDAP_P((
1932de962bdSlukem 	LDAPContentRule * cr ));
1942de962bdSlukem 
1952de962bdSlukem LDAP_F( LDAP_CONST char * )
1962de962bdSlukem ldap_nameform2name LDAP_P((
1972de962bdSlukem 	LDAPNameForm * nf ));
1982de962bdSlukem 
1992de962bdSlukem LDAP_F( LDAP_CONST char * )
2002de962bdSlukem ldap_structurerule2name LDAP_P((
2012de962bdSlukem 	LDAPStructureRule * sr ));
2022de962bdSlukem 
2032de962bdSlukem LDAP_F( void )
2042de962bdSlukem ldap_syntax_free LDAP_P((
2052de962bdSlukem 	LDAPSyntax * syn ));
2062de962bdSlukem 
2072de962bdSlukem LDAP_F( void )
2082de962bdSlukem ldap_matchingrule_free LDAP_P((
2092de962bdSlukem 	LDAPMatchingRule * mr ));
2102de962bdSlukem 
2112de962bdSlukem LDAP_F( void )
2122de962bdSlukem ldap_matchingruleuse_free LDAP_P((
2132de962bdSlukem 	LDAPMatchingRuleUse * mr ));
2142de962bdSlukem 
2152de962bdSlukem LDAP_F( void )
2162de962bdSlukem ldap_attributetype_free LDAP_P((
2172de962bdSlukem 	LDAPAttributeType * at ));
2182de962bdSlukem 
2192de962bdSlukem LDAP_F( void )
2202de962bdSlukem ldap_objectclass_free LDAP_P((
2212de962bdSlukem 	LDAPObjectClass * oc ));
2222de962bdSlukem 
2232de962bdSlukem LDAP_F( void )
2242de962bdSlukem ldap_contentrule_free LDAP_P((
2252de962bdSlukem 	LDAPContentRule * cr ));
2262de962bdSlukem 
2272de962bdSlukem LDAP_F( void )
2282de962bdSlukem ldap_nameform_free LDAP_P((
2292de962bdSlukem 	LDAPNameForm * nf ));
2302de962bdSlukem 
2312de962bdSlukem LDAP_F( void )
2322de962bdSlukem ldap_structurerule_free LDAP_P((
2332de962bdSlukem 	LDAPStructureRule * sr ));
2342de962bdSlukem 
2352de962bdSlukem LDAP_F( LDAPStructureRule * )
2362de962bdSlukem ldap_str2structurerule LDAP_P((
2372de962bdSlukem 	LDAP_CONST char * s,
2382de962bdSlukem 	int * code,
2392de962bdSlukem 	LDAP_CONST char ** errp,
2402de962bdSlukem 	LDAP_CONST unsigned flags ));
2412de962bdSlukem 
2422de962bdSlukem LDAP_F( LDAPNameForm * )
2432de962bdSlukem ldap_str2nameform LDAP_P((
2442de962bdSlukem 	LDAP_CONST char * s,
2452de962bdSlukem 	int * code,
2462de962bdSlukem 	LDAP_CONST char ** errp,
2472de962bdSlukem 	LDAP_CONST unsigned flags ));
2482de962bdSlukem 
2492de962bdSlukem LDAP_F( LDAPContentRule * )
2502de962bdSlukem ldap_str2contentrule LDAP_P((
2512de962bdSlukem 	LDAP_CONST char * s,
2522de962bdSlukem 	int * code,
2532de962bdSlukem 	LDAP_CONST char ** errp,
2542de962bdSlukem 	LDAP_CONST unsigned flags ));
2552de962bdSlukem 
2562de962bdSlukem LDAP_F( LDAPObjectClass * )
2572de962bdSlukem ldap_str2objectclass LDAP_P((
2582de962bdSlukem 	LDAP_CONST char * s,
2592de962bdSlukem 	int * code,
2602de962bdSlukem 	LDAP_CONST char ** errp,
2612de962bdSlukem 	LDAP_CONST unsigned flags ));
2622de962bdSlukem 
2632de962bdSlukem LDAP_F( LDAPAttributeType * )
2642de962bdSlukem ldap_str2attributetype LDAP_P((
2652de962bdSlukem 	LDAP_CONST char * s,
2662de962bdSlukem 	int * code,
2672de962bdSlukem 	LDAP_CONST char ** errp,
2682de962bdSlukem 	LDAP_CONST unsigned flags ));
2692de962bdSlukem 
2702de962bdSlukem LDAP_F( LDAPSyntax * )
2712de962bdSlukem ldap_str2syntax LDAP_P((
2722de962bdSlukem 	LDAP_CONST char * s,
2732de962bdSlukem 	int * code,
2742de962bdSlukem 	LDAP_CONST char ** errp,
2752de962bdSlukem 	LDAP_CONST unsigned flags ));
2762de962bdSlukem 
2772de962bdSlukem LDAP_F( LDAPMatchingRule * )
2782de962bdSlukem ldap_str2matchingrule LDAP_P((
2792de962bdSlukem 	LDAP_CONST char * s,
2802de962bdSlukem 	int * code,
2812de962bdSlukem 	LDAP_CONST char ** errp,
2822de962bdSlukem 	LDAP_CONST unsigned flags ));
2832de962bdSlukem 
2842de962bdSlukem LDAP_F( LDAPMatchingRuleUse * )
2852de962bdSlukem ldap_str2matchingruleuse LDAP_P((
2862de962bdSlukem 	LDAP_CONST char * s,
2872de962bdSlukem 	int * code,
2882de962bdSlukem 	LDAP_CONST char ** errp,
2892de962bdSlukem 	LDAP_CONST unsigned flags ));
2902de962bdSlukem 
2912de962bdSlukem LDAP_F( char * )
2922de962bdSlukem ldap_structurerule2str LDAP_P((
2932de962bdSlukem 	LDAPStructureRule * sr ));
2942de962bdSlukem 
2952de962bdSlukem LDAP_F( struct berval * )
2962de962bdSlukem ldap_structurerule2bv LDAP_P((
2972de962bdSlukem 	LDAPStructureRule * sr, struct berval *bv ));
2982de962bdSlukem 
2992de962bdSlukem LDAP_F( char * )
3002de962bdSlukem ldap_nameform2str LDAP_P((
3012de962bdSlukem 	LDAPNameForm * nf ));
3022de962bdSlukem 
3032de962bdSlukem LDAP_F( struct berval * )
3042de962bdSlukem ldap_nameform2bv LDAP_P((
3052de962bdSlukem 	LDAPNameForm * nf, struct berval *bv ));
3062de962bdSlukem 
3072de962bdSlukem LDAP_F( char * )
3082de962bdSlukem ldap_contentrule2str LDAP_P((
3092de962bdSlukem 	LDAPContentRule * cr ));
3102de962bdSlukem 
3112de962bdSlukem LDAP_F( struct berval * )
3122de962bdSlukem ldap_contentrule2bv LDAP_P((
3132de962bdSlukem 	LDAPContentRule * cr, struct berval *bv ));
3142de962bdSlukem 
3152de962bdSlukem LDAP_F( char * )
3162de962bdSlukem ldap_objectclass2str LDAP_P((
3172de962bdSlukem 	LDAPObjectClass * oc ));
3182de962bdSlukem 
3192de962bdSlukem LDAP_F( struct berval * )
3202de962bdSlukem ldap_objectclass2bv LDAP_P((
3212de962bdSlukem 	LDAPObjectClass * oc, struct berval *bv ));
3222de962bdSlukem 
3232de962bdSlukem LDAP_F( char * )
3242de962bdSlukem ldap_attributetype2str LDAP_P((
3252de962bdSlukem 	LDAPAttributeType * at ));
3262de962bdSlukem 
3272de962bdSlukem LDAP_F( struct berval * )
3282de962bdSlukem ldap_attributetype2bv LDAP_P((
3292de962bdSlukem 	LDAPAttributeType * at, struct berval *bv ));
3302de962bdSlukem 
3312de962bdSlukem LDAP_F( char * )
3322de962bdSlukem ldap_syntax2str LDAP_P((
3332de962bdSlukem 	LDAPSyntax * syn ));
3342de962bdSlukem 
3352de962bdSlukem LDAP_F( struct berval * )
3362de962bdSlukem ldap_syntax2bv LDAP_P((
3372de962bdSlukem 	LDAPSyntax * syn, struct berval *bv ));
3382de962bdSlukem 
3392de962bdSlukem LDAP_F( char * )
3402de962bdSlukem ldap_matchingrule2str LDAP_P((
3412de962bdSlukem 	LDAPMatchingRule * mr ));
3422de962bdSlukem 
3432de962bdSlukem LDAP_F( struct berval * )
3442de962bdSlukem ldap_matchingrule2bv LDAP_P((
3452de962bdSlukem 	LDAPMatchingRule * mr, struct berval *bv ));
3462de962bdSlukem 
3472de962bdSlukem LDAP_F( char * )
3482de962bdSlukem ldap_matchingruleuse2str LDAP_P((
3492de962bdSlukem 	LDAPMatchingRuleUse * mru ));
3502de962bdSlukem 
3512de962bdSlukem LDAP_F( struct berval * )
3522de962bdSlukem ldap_matchingruleuse2bv LDAP_P((
3532de962bdSlukem 	LDAPMatchingRuleUse * mru, struct berval *bv ));
3542de962bdSlukem 
3552de962bdSlukem LDAP_F( char * )
3562de962bdSlukem ldap_scherr2str LDAP_P((
3572de962bdSlukem 	int code )) LDAP_GCCATTR((const));
3582de962bdSlukem 
3592de962bdSlukem LDAP_END_DECL
3602de962bdSlukem 
3612de962bdSlukem #endif
3622de962bdSlukem 
363