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