1/* $NetBSD: componentlib.h,v 1.2 2021/08/14 16:14:51 christos Exp $ */ 2 3/* Copyright 2004 IBM Corporation 4 * All rights reserved. 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted only as authorized by the OpenLDAP 7 * Public License. 8 */ 9/* ACKNOWLEDGEMENTS 10 * This work originally developed by Sang Seok Lim 11 * 2004/06/18 03:20:00 slim@OpenLDAP.org 12 */ 13 14#ifndef _H_COMPONENT_MODULE 15#define _H_COMPONENT_MODULE 16 17#include <sys/cdefs.h> 18__RCSID("$NetBSD: componentlib.h,v 1.2 2021/08/14 16:14:51 christos Exp $"); 19 20#include "portable.h" 21#include <ac/string.h> 22#include <ac/socket.h> 23#include <ldap_pvt.h> 24#include "lutil.h" 25#include <ldap.h> 26#include <slap.h> 27#include <component.h> 28 29#include <asn-incl.h> 30#include "asn.h" 31#include <asn-gser.h> 32#include <string.h> 33 34#define MAX_IDENTIFIER_LEN 32 35#define COMPONENTNOT_NULL(ptr) ((ptr) != NULL) 36 37typedef struct slap_component_type { 38 /* 39 * Don't change the order of following fields 40 * They are identical the first 9 fields of 41 * AttributeType 42 */ 43 LDAPAttributeType ct_atype; 44 struct berval ct_cname; 45 struct slap_attribute_type *ct_sup; 46 struct slap_attribute_type **ct_subtypes; 47 MatchingRule *ct_equality; 48 MatchingRule *ct_approx; 49 MatchingRule *ct_ordering; 50 MatchingRule *ct_substr; 51 Syntax *ct_syntax; 52} ComponentType; 53 54 55/* 56 * BIT STRING 57 */ 58typedef struct ComponentBits { 59 void* syntax; 60 ComponentDesc* comp_desc; 61 struct berval identifier; 62 char id_buf[MAX_IDENTIFIER_LEN]; 63 AsnBits value; 64} ComponentBits; 65 66#define GASNBITS_PRESENT(abits) ((abits)->value.bits != NULL) 67#define COMPONENTBITS_PRESENT(abits) ((abits)->value.bits != NULL) 68int GEncComponentBits (GenBuf *b, ComponentBits* bits); 69int GDecComponentBits (void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 70int BDecComponentBits (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 71int MatchingComponentBits (char* oid, ComponentSyntaxInfo *bits1 , ComponentSyntaxInfo* bits2); 72#define ExtractingComponentBits( mem_op, cr,data ) NULL 73 74/* 75 * BMP String 76 */ 77typedef struct ComponentBMPString { 78 void* syntax; 79 ComponentDesc* comp_desc; 80 struct berval identifier; 81 char id_buf[MAX_IDENTIFIER_LEN]; 82 BMPString value; 83} ComponentBMPString; 84 85int GEncComponentBMPString (GenBuf *b, ComponentBMPString* bmp); 86int GDecComponentBMPString (void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 87int BDecComponentBMPString (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 88#define MatchingComponentBMPString MatchingComponentOcts 89#define ExtractingComponentBMPString( mem_op, cr, data ) NULL 90#define FreeComponentBMPString FreeComponentOcts 91 92/* 93 * BOOLEAN 94 */ 95typedef struct ComponentBool { 96 void* syntax; 97 ComponentDesc* comp_desc; 98 struct berval identifier; 99 char id_buf[MAX_IDENTIFIER_LEN]; 100 AsnBool value; 101} ComponentBool; 102 103int GEncComponentBool (GenBuf *b, ComponentBool * bool ); 104int GDecComponentBool ( void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 105int BDecComponentBool ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 106int MatchingComponentBool (char* oid, ComponentSyntaxInfo *a, ComponentSyntaxInfo *b); 107#define ExtractingComponentBool( mem_op, cr, data ) NULL 108#define FreeComponentBool(v) NULL 109 110/* 111 * ENUMERATED 112 */ 113typedef struct ComponentEnum { 114 void* syntax; 115 ComponentDesc* comp_desc; 116 struct berval identifier; 117 char id_buf[MAX_IDENTIFIER_LEN]; 118 AsnEnum value; 119 struct berval value_identifier;/*Why this value is defined here?*/ 120} ComponentEnum; 121 122int GEncComponentEnum (GenBuf *b, ComponentEnum* comp_enum); 123int GDecComponentEnum ( void* mem_op, GenBuf *a, void *result, AsnLen *bytesDecoded,int mode); 124int BDecComponentEnum ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 125int MatchingComponentEnum (char *oid, ComponentSyntaxInfo *a, ComponentSyntaxInfo * b); 126#define ExtractingComponentEnum( mem_op, cr, data ) NULL 127#define FreeComponentEnum FreeComponentInt 128 129/* 130 * IA5 String 131 */ 132typedef struct ComponentIA5String { 133 void* syntax; 134 ComponentDesc* comp_desc; 135 struct berval identifier; 136 char id_buf[MAX_IDENTIFIER_LEN]; 137 IA5String value; 138} ComponentIA5String; 139 140#define GEncComponentIA5String GEncComponentUTF8String 141#define GDecComponentIA5String GDecComponentUTF8String 142int 143BDecComponentIA5StringTag ( void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ); 144int BDecComponentIA5String ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 145#define MatchingComponentIA5String MatchingComponentOcts 146#define ExtractingComponentIA5String(mem_op, cr,data) NULL 147#define FreeComponentIA5String FreeComponentOcts 148 149 150/* 151 * INTEGER 152 */ 153typedef struct ComponentInt { 154 void* syntax; 155 ComponentDesc* comp_desc; 156 struct berval identifier; 157 char id_buf[MAX_IDENTIFIER_LEN]; 158 int value; 159} ComponentInt; 160 161#define GNOT_NULL(ptr) ((ptr) != NULL) 162int GEncComponentInt (GenBuf *b, ComponentInt *comp_int); 163int GDecComponentInt ( void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode ); 164int BDecComponentInt ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 165int MatchingComponentInt (char* oid, ComponentSyntaxInfo *a, ComponentSyntaxInfo *b); 166#define ExtractingComponentInt(mem_op, cr,data) NULL 167#define FreeComponentInt(v) NULL 168 169/* 170 * LIST Data Structure for C_LIST 171 */ 172typedef struct ComponentList { 173 void* syntax; 174 ComponentDesc* comp_desc; 175 struct berval identifier; 176 char id_buf[MAX_IDENTIFIER_LEN]; 177 AsnList comp_list; 178} ComponentList; 179 180/* 181 * NULL 182 */ 183typedef struct ComponentNull { 184 void* syntax; 185 ComponentDesc* comp_desc; 186 struct berval identifier; 187 char id_buf[MAX_IDENTIFIER_LEN]; 188 AsnNull value; 189} ComponentNull; 190 191int GEncComponentNull (GenBuf *b, ComponentNull* comp_null); 192int GDecComponentNull ( void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 193int BDecComponentNull ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 194int BDecComponentNullTag ( void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ); 195int MatchingComponentNull (char* oid, ComponentSyntaxInfo *a, ComponentSyntaxInfo *b); 196#define ExtractingComponentNull(mem_op, cr, data) NULL 197#define FreeComponentNull NULL 198 199/* 200 * Numeric String 201 */ 202typedef struct ComponentNumericString { 203 void* syntax; 204 ComponentDesc* comp_desc; 205 struct berval identifier; 206 char id_buf[MAX_IDENTIFIER_LEN]; 207 NumericString value; 208} ComponentNumericString; 209 210#define GEncComponentNumericString GEncComponentUTF8String 211#define GDecComponentNumericString GDecComponentUTF8String 212int BDecComponentNumericString ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 213#define MatchingComponentNumericString MatchingComponentOcts 214#define ExtractingComponentNumericString(mem_op, cr,data) NULL 215#define FreeComponentNumericString FreeComponentOcts 216 217/* 218 * OCTETS STRING 219 */ 220typedef struct ComponentOcts { 221 void* syntax; 222 ComponentDesc* comp_desc; 223 struct berval identifier; 224 char id_buf[MAX_IDENTIFIER_LEN]; 225 AsnOcts value; 226} ComponentOcts; 227 228#define GASNOCTS_PRESENT(aocts) ((aocts)->value.octs != NULL) 229int GEncComponentOcts (GenBuf *b, ComponentOcts *octs); 230int GDecComponentOcts (void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 231int BDecComponentOctsTag ( void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ); 232int BDecComponentOcts (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 233int MatchingComponentOcts (char* oid, ComponentSyntaxInfo *a, ComponentSyntaxInfo *b); 234#define ExtractingComponentOcts(mem_op,cr,data) NULL 235void FreeComponentOcts( ComponentOcts* octs ); 236 237/* 238 * OID (Object Identifier) 239 */ 240typedef struct ComponentOid { 241 void* syntax; 242 ComponentDesc* comp_desc; 243 struct berval identifier; 244 char id_buf[MAX_IDENTIFIER_LEN]; 245 AsnOid value; 246} ComponentOid; 247 248#define GASNOID_PRESENT(aoid) ASNOCTS_PRESENT(aoid) 249int GEncComponentOid (GenBuf *b, ComponentOid *oid); 250int GDecComponentOid (void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 251int BDecComponentOid (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 252int MatchingComponentOid (char* oid, ComponentSyntaxInfo *a, ComponentSyntaxInfo *b); 253#define ExtractingComponentOid(mem_op, cr, data) NULL 254#define FreeComponentOid FreeComponentOcts 255 256/* 257 * Printable String 258 */ 259typedef struct ComponentPrintableString{ 260 void* syntax; 261 ComponentDesc* comp_desc; 262 struct berval identifier; 263 char id_buf[MAX_IDENTIFIER_LEN]; 264 PrintableString value; 265} ComponentPrintableString; 266#define GEncComponentPrintableString GEncComponentUTF8String 267#define GDecComponentPrintableString GDecComponentUTF8String 268int BDecComponentPrintableString (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 269int BDecComponentPrintableStringTag (void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ); 270#define MatchingComponentPrintableString MatchingComponentOcts 271#define ExtractingComponentPrintableString(mem_op, cr, data) NULL 272#define FreeComponentPrintableString FreeComponentOcts 273 274/* 275 * REAL 276 */ 277typedef struct ComponentReal{ 278 void* syntax; 279 ComponentDesc* comp_desc; 280 struct berval identifier; 281 char id_buf[MAX_IDENTIFIER_LEN]; 282 AsnReal value; 283} ComponentReal; 284 285int GEncComponentReal (GenBuf *b, ComponentReal* comp_real); 286int GDecComponentReal (void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 287int BDecComponentReal (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 288int MatchingComponentReal (char* oid, ComponentSyntaxInfo *a, ComponentSyntaxInfo *b); 289#define ExtractingComponentReal( mem_op, cr, data ) NULL 290#define FreeComponentReal(v) NULL 291 292/* 293 * Relative OID 294 */ 295 296typedef struct ComponentRelativeOid { 297 void* syntax; 298 ComponentDesc* comp_desc; 299 struct berval identifier; 300 char id_buf[MAX_IDENTIFIER_LEN]; 301 AsnRelativeOid value; 302} ComponentRelativeOid; 303 304int GEncComponentRelativeOid (GenBuf *b, ComponentRelativeOid *r_oid); 305int GDecComponentRelativeOid ( void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 306int BDecComponentRelativeOid ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 307int MatchingComponentRelativeOid (char* oid, ComponentSyntaxInfo *a, ComponentSyntaxInfo *b); 308#define ExtractingComponentRelativeOid( mem_op, cr, data ) NULL 309#define FreeComponentRelativeOid FreeComponentOid 310 311/* 312 * Teletex String 313 */ 314typedef struct ComponentTeletexString { 315 void* syntax; 316 ComponentDesc* comp_desc; 317 struct berval identifier; 318 char id_buf[MAX_IDENTIFIER_LEN]; 319 TeletexString value; 320} ComponentTeletexString; 321 322int GEncComponentTeletexString (GenBuf *b, ComponentTeletexString * tel_str); 323int GDecComponentTeletexString ( void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode ); 324int BDecComponentTeletexStringTag (void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ); 325int BDecComponentTeletexString( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *v, AsnLen *bytesDecoded, int mode ); 326#define MatchingComponentTeletexString MatchingComponentOcts 327#define ExtractingComponentTeletexString(mem_op,cr,data) 328#define FreeComponentTeletexString FreeComponentOcts 329 330 331/* 332 * Universal String 333 */ 334typedef struct ComponentUniversalString{ 335 void* syntax; 336 ComponentDesc* comp_desc; 337 struct berval identifier; 338 char id_buf[MAX_IDENTIFIER_LEN]; 339 UniversalString value; 340} ComponentUniversalString; 341 342int GEncComponentUniversalString (GenBuf *b, ComponentUniversalString* uni_str); 343int GDecComponentUniversalString ( void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 344int BDecComponentUniversalString ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 345#define MatchingComponentUniversalString MatchingComponentOcts 346#define ExtractingComponentUniversalString(mem_op,cr,data) 347#define FreeComponentUniversalString FreeComponentOcts 348 349/* 350 * UTF8 String 351 */ 352typedef struct ComponentUTF8String{ 353 void* syntax; 354 ComponentDesc* comp_desc; 355 struct berval identifier; 356 char id_buf[MAX_IDENTIFIER_LEN]; 357 UTF8String value; 358} ComponentUTF8String; 359 360int GEncComponentUTF8String (GenBuf *b, ComponentUTF8String * utf_str); 361int GDecComponentUTF8String (void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 362int BDecComponentUTF8String (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 363#define MatchingComponentUTF8String MatchingComponentOcts 364#define ExtractingComponentUTF8String(mem_op,cr,data) 365#define FreeComponentUTF8String FreeComponentOcts 366 367/* 368 * Visible String 369 */ 370typedef struct ComponentVisibleString{ 371 void* syntax; 372 ComponentDesc* comp_desc; 373 struct berval identifier; 374 char id_buf[MAX_IDENTIFIER_LEN]; 375 VisibleString value; 376} ComponentVisibleString; 377 378#define GEncComponentVisibleString GEncComponentUTF8String 379#define GDecComponentVisibleString GDecComponentUTF8String 380int BDecComponentVisibleString (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 381#define MatchingComponentVisibleString MatchingComponentOcts 382#define ExtractingComponentVisibleString(mem_op,cr,data) 383#define FreeComponentVisibleString FreeComponentOcts 384 385/* 386 * ANY and ANY DEFINED BY 387 */ 388 389typedef int (*MatchFcn) (char*, void*, void*); 390typedef void* (*ExtractFcn) (void*, ComponentReference*, void * ); 391 392typedef struct ComponentAnyInfo 393{ 394 int anyId; 395 AsnOid oid; 396 ComponentInt intId; 397 unsigned int size; 398 EncodeFcn Encode; 399 gser_decoder_func* GSER_Decode; 400 ber_tag_decoder_func* BER_Decode; 401 ExtractFcn Extract; 402 MatchFcn Match; 403 FreeFcn Free; 404 PrintFcn Print; 405} ComponentAnyInfo; 406 407typedef struct ComponentAnyInfo OidDecoderMapping ; 408 409typedef struct ComponentAny{ 410 void* syntax; 411 ComponentDesc *comp_desc; 412 struct berval identifier; 413 char id_buf[MAX_IDENTIFIER_LEN]; 414 ComponentAnyInfo *cai; 415 void *value; 416} ComponentAny; 417 418typedef ComponentAny ComponentAnyDefinedBy; 419 420#define BDecComponentAnyDefinedBy BDecComponentAny 421#define GDecComponentAnyDefinedBy GDecComponentAny 422#define MatchingComponentAnyDefinedBy MatchingComponentAny 423#define FreeComponentAnyDefinedBy FreeComponentAny 424 425int GEncComponentAny (GenBuf *b, ComponentAny *comp_any); 426int BDecComponentAny ( void* mem_op, GenBuf *b, ComponentAny *result, AsnLen *bytesDecoded, int mode); 427int GDecComponentAny ( void* mem_op, GenBuf *b, ComponentAny *result, AsnLen *bytesDecoded, int mode); 428int MatchingComponentAny (char* oid, ComponentAny *a, ComponentAny *b); 429void FreeComponentAny ( ComponentAny*); 430 431void InstallAnyByComponentInt (int anyId, ComponentInt intId, unsigned int size, EncodeFcn encode, gser_decoder_func* G_decode, ber_tag_decoder_func B_decode, ExtractFcn extract, MatchFcn match, FreeFcn free, PrintFcn print); 432 433void InstallAnyByComponentOid (int anyId, AsnOid *oid, unsigned int size, EncodeFcn encode, gser_decoder_func* G_decode, ber_tag_decoder_func* B_decode, ExtractFcn extract, MatchFcn match, FreeFcn free, PrintFcn print); 434 435int CheckSelectTypeCorrect ( void* mem_op, ComponentAnyInfo *v, struct berval* select ); 436 437OidDecoderMapping* RetrieveOidDecoderMappingbyBV( struct berval* in ); 438OidDecoderMapping* RetrieveOidDecoderMappingbyOid( char* ch_oid, int oid_len ); 439OidDecoderMapping* RetrieveOidDecoderMappingbyDesc( char* desc, int desc_len ); 440/* 441 * UTCTime 442 */ 443typedef ComponentVisibleString ComponentUTCTime; 444#define GEncComponentUTCTime GEncComponentUTF8String 445#define GDecComponentUTCTime GDecComponentVisibleString 446#define BDecComponentUTCTime BDecComponentOcts 447#define MatchingComponentUTCTime MatchingComponentOcts 448#define ExtractingComponentUTCTime(mem_op,cr,data) NULL 449#define FreeComponentUTCTime FreeComponentOcts 450 451/* 452 * GeneralizedTime 453 */ 454typedef ComponentVisibleString ComponentGeneralizedTime; 455int GEncComponentGeneralizedTime (GenBuf *b, ComponentGeneralizedTime *gen_time); 456#define GDecComponentGeneralizedTime GDecComponentVisibleString 457#define BDecComponentGeneralizedTime BDecComponentOcts 458#define MatchingComponentGeneralizedTime MatchingComponentOcts 459#define ExtractingComponentGeneralizedTime(mem_op,cr,data) NULL 460#define FreeComponentGeneralizedTime FreeComponentOcts 461 462typedef int converter_func LDAP_P (( 463 struct berval* in )); 464 465typedef struct asntype_to_syntax { 466 AsnTypeId ats_typeId; 467 /* Syntax Descriptor */ 468 char *ats_syn_name; 469 /* Syntax OID */ 470 char *ats_syn_oid; 471 Syntax *ats_syn; 472} AsnTypetoSyntax; 473 474typedef struct asntype_to_comp_matchingrule { 475 AsnTypeId atc_typeId; 476 char* atc_equality; 477 char* atc_approx; 478 char* atc_ordering; 479 char* atc_substr; 480} AsnTypetoCompMatchingRule; 481 482typedef struct asntype_to_comp_desc { 483 AsnTypeId atcd_typeId; 484 ComponentDesc atcd_cd; 485} AsnTypetoCompDesc; 486 487typedef struct asntype_to_comp_type { 488 AsnTypeId ac_asn_id; 489 ComponentType ac_comp_type; 490} AsnTypetoCompType; 491 492/* refined matching purpose */ 493typedef struct asntype_to_matchingrule { 494 AsnTypeId atmr_typeId; 495 char* atmr_mr_name; 496 /*Implicitly corresponding LDAP syntax OID*/ 497 char* atmr_syn_oid; 498 MatchingRule *atmr_mr; 499} AsnTypetoMatchingRule; 500 501typedef struct asntype_to_matchingrule_table { 502 char* atmr_oid; 503 struct asntype_to_matchingrule atmr_table[ASNTYPE_END]; 504 struct asntype_to_matchingrule_table* atmr_table_next; 505} AsnTypetoMatchingRuleTable; 506 507#define MAX_OID_LEN 256 508#define MAX_OD_ENTRY 8 509 510/* 511 * Object Identifier and corresponding Syntax Decoder Table 512 */ 513typedef struct OID_Decoder_entry { 514 char oe_oid[MAX_OID_LEN]; 515 gser_decoder_func* oe_gser_decoder; 516 ber_decoder_func* oe_ber_decoder; 517 converter_func* oe_converter; 518 struct OID_Decoder_entry* oe_next; 519 struct OID_Decoder_entry* oe_prev; 520} OD_entry; 521 522void 523m_convert_asn_to_ldap ( ComponentSyntaxInfo* csi, struct berval* bv); 524int 525m_convert_assert_to_comp ( gser_decoder_func* decoder, struct berval* bv, 526 ComponentSyntaxInfo** csi, int len, int mode ); 527void* 528m_convert_attr_to_comp ( Attribute* a, struct berval* bv ); 529 530/* 531 * Decoder Modes 532 * Different operation is required to handle Decoding(2), Extracted Component 533 * decoding(0), ANY DEFINED TYPe(2) 534 * b0 : Component Alloc(yes) 535 * Constructed type : Component Alloc (Yes) 536 * Primitive type : Component Alloc (Yes) 537 * set to mode 2 in inner decoders 538 * b1 : Component Alloc (No) 539 * Constructed type : Component Alloc (No) 540 * Primitive type : Component Alloc (No) 541 * set to mode 2 in inner decoders 542 * b2 : Default Mode 543 * Constructed type : Component Alloc (Yes) 544 * Primitive type : Component Alloc (No) 545 * in addition to above modes, the 4th bit has special meaning, 546 * b4 : if the 4th bit is clear, DecxxxContent is called 547 * b4 : if the 4th bit is set, Decxxx is called, then it is cleared. 548 */ 549#define DEC_ALLOC_MODE_0 0x01 550#define DEC_ALLOC_MODE_1 0x02 551#define DEC_ALLOC_MODE_2 0x04 552#define CALL_TAG_DECODER 0x08 553#define CALL_CONTENT_DECODER ~0x08 554 555#define OID_ALL_COMP_MATCH "1.2.36.79672281.1.13.6" 556#define OID_COMP_FILTER_MATCH "1.2.36.79672281.1.13.2" 557#define MAX_LDAP_STR_LEN 128 558 559MatchingRule* 560retrieve_matching_rule( char* mr_oid, AsnTypeId type ); 561 562#define INITIAL_DN_SIZE 128 563#define INITIAL_ATTR_SIZE 256 564#define INCREMENT_SIZE 32 565/* 566 * The following are for conversion from ASN.1 RDN and DN to 567 * LDAP encodings 568 */ 569#define MAX_ALIASING_ENTRY 128 570int increment_bv_mem ( struct berval* in ); 571int intToAscii ( int value, char* buf ); 572typedef ComponentList irRDNSequence; 573typedef ComponentList irRelativeDistinguishedName; 574typedef ComponentOid irAttributeType; 575typedef struct comp_irAttributeTypeAndValue /* SEQUENCE */ 576{ 577 Syntax* syntax; 578 ComponentDesc* comp_desc; 579 struct berval identifier; 580 char id_buf[MAX_IDENTIFIER_LEN]; 581 irAttributeType type; /* AttributeType */ 582 ComponentAnyDefinedBy value; /* ANY DEFINED BY type */ 583} irAttributeTypeAndValue; 584#define RDN_MATCH_OID "1.2.36.79672281.1.13.3" 585#define DN_MATCH_OID "2.5.13.1" 586 587extern AsnTypetoSyntax asn_to_syntax_mapping_tbl[]; 588extern AsnTypetoCompMatchingRule asntype_to_compMR_mapping_tbl[]; 589extern AsnTypetoCompType asntype_to_compType_mapping_tbl[]; 590extern AsnTypetoCompDesc asntype_to_compdesc_mapping_tbl[]; 591 592int ConvertRDN2RFC2253 ( irRelativeDistinguishedName* in, struct berval *out ); 593int ConvertRDNSequence2RFC2253( irRDNSequence *in, struct berval* out ); 594 595void* comp_nibble_memory_allocator ( int init_mem, int inc_mem ); 596 597ComponentDesc* get_ComponentDesc( int id ); 598#endif 599