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