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 37 typedef 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 */ 58 typedef 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) 68 int GEncComponentBits (GenBuf *b, ComponentBits* bits); 69 int GDecComponentBits (void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 70 int BDecComponentBits (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 71 int MatchingComponentBits (char* oid, ComponentSyntaxInfo *bits1 , ComponentSyntaxInfo* bits2); 72 #define ExtractingComponentBits( mem_op, cr,data ) NULL 73 74 /* 75 * BMP String 76 */ 77 typedef 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 85 int GEncComponentBMPString (GenBuf *b, ComponentBMPString* bmp); 86 int GDecComponentBMPString (void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 87 int 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 */ 95 typedef 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 103 int GEncComponentBool (GenBuf *b, ComponentBool * bool ); 104 int GDecComponentBool ( void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 105 int BDecComponentBool ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 106 int 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 */ 113 typedef 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 122 int GEncComponentEnum (GenBuf *b, ComponentEnum* comp_enum); 123 int GDecComponentEnum ( void* mem_op, GenBuf *a, void *result, AsnLen *bytesDecoded,int mode); 124 int BDecComponentEnum ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 125 int 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 */ 132 typedef 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 142 int 143 BDecComponentIA5StringTag ( void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ); 144 int 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 */ 153 typedef 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) 162 int GEncComponentInt (GenBuf *b, ComponentInt *comp_int); 163 int GDecComponentInt ( void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode ); 164 int BDecComponentInt ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 165 int 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 */ 172 typedef 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 */ 183 typedef 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 191 int GEncComponentNull (GenBuf *b, ComponentNull* comp_null); 192 int GDecComponentNull ( void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 193 int BDecComponentNull ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 194 int BDecComponentNullTag ( void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ); 195 int 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 */ 202 typedef 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 212 int 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 */ 220 typedef 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) 229 int GEncComponentOcts (GenBuf *b, ComponentOcts *octs); 230 int GDecComponentOcts (void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 231 int BDecComponentOctsTag ( void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ); 232 int BDecComponentOcts (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 233 int MatchingComponentOcts (char* oid, ComponentSyntaxInfo *a, ComponentSyntaxInfo *b); 234 #define ExtractingComponentOcts(mem_op,cr,data) NULL 235 void FreeComponentOcts( ComponentOcts* octs ); 236 237 /* 238 * OID (Object Identifier) 239 */ 240 typedef 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) 249 int GEncComponentOid (GenBuf *b, ComponentOid *oid); 250 int GDecComponentOid (void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 251 int BDecComponentOid (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 252 int 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 */ 259 typedef 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 268 int BDecComponentPrintableString (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 269 int 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 */ 277 typedef 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 285 int GEncComponentReal (GenBuf *b, ComponentReal* comp_real); 286 int GDecComponentReal (void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 287 int BDecComponentReal (void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 288 int 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 296 typedef 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 304 int GEncComponentRelativeOid (GenBuf *b, ComponentRelativeOid *r_oid); 305 int GDecComponentRelativeOid ( void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 306 int BDecComponentRelativeOid ( void* mem_op, GenBuf *b, AsnTag tagId, AsnLen len, void *result, AsnLen *bytesDecoded, int mode); 307 int 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 */ 314 typedef 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 322 int GEncComponentTeletexString (GenBuf *b, ComponentTeletexString * tel_str); 323 int GDecComponentTeletexString ( void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode ); 324 int BDecComponentTeletexStringTag (void* mem_op, GenBuf *b, void *v, AsnLen *bytesDecoded, int mode ); 325 int 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 */ 334 typedef 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 342 int GEncComponentUniversalString (GenBuf *b, ComponentUniversalString* uni_str); 343 int GDecComponentUniversalString ( void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 344 int 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 */ 352 typedef 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 360 int GEncComponentUTF8String (GenBuf *b, ComponentUTF8String * utf_str); 361 int GDecComponentUTF8String (void* mem_op, GenBuf *b, void *result, AsnLen *bytesDecoded, int mode); 362 int 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 */ 370 typedef 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 380 int 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 389 typedef int (*MatchFcn) (char*, void*, void*); 390 typedef void* (*ExtractFcn) (void*, ComponentReference*, void * ); 391 392 typedef 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 407 typedef struct ComponentAnyInfo OidDecoderMapping ; 408 409 typedef 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 418 typedef ComponentAny ComponentAnyDefinedBy; 419 420 #define BDecComponentAnyDefinedBy BDecComponentAny 421 #define GDecComponentAnyDefinedBy GDecComponentAny 422 #define MatchingComponentAnyDefinedBy MatchingComponentAny 423 #define FreeComponentAnyDefinedBy FreeComponentAny 424 425 int GEncComponentAny (GenBuf *b, ComponentAny *comp_any); 426 int BDecComponentAny ( void* mem_op, GenBuf *b, ComponentAny *result, AsnLen *bytesDecoded, int mode); 427 int GDecComponentAny ( void* mem_op, GenBuf *b, ComponentAny *result, AsnLen *bytesDecoded, int mode); 428 int MatchingComponentAny (char* oid, ComponentAny *a, ComponentAny *b); 429 void FreeComponentAny ( ComponentAny*); 430 431 void 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 433 void 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 435 int CheckSelectTypeCorrect ( void* mem_op, ComponentAnyInfo *v, struct berval* select ); 436 437 OidDecoderMapping* RetrieveOidDecoderMappingbyBV( struct berval* in ); 438 OidDecoderMapping* RetrieveOidDecoderMappingbyOid( char* ch_oid, int oid_len ); 439 OidDecoderMapping* RetrieveOidDecoderMappingbyDesc( char* desc, int desc_len ); 440 /* 441 * UTCTime 442 */ 443 typedef 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 */ 454 typedef ComponentVisibleString ComponentGeneralizedTime; 455 int 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 462 typedef int converter_func LDAP_P (( 463 struct berval* in )); 464 465 typedef 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 474 typedef 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 482 typedef struct asntype_to_comp_desc { 483 AsnTypeId atcd_typeId; 484 ComponentDesc atcd_cd; 485 } AsnTypetoCompDesc; 486 487 typedef struct asntype_to_comp_type { 488 AsnTypeId ac_asn_id; 489 ComponentType ac_comp_type; 490 } AsnTypetoCompType; 491 492 /* refined matching purpose */ 493 typedef 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 501 typedef 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 */ 513 typedef 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 522 void 523 m_convert_asn_to_ldap ( ComponentSyntaxInfo* csi, struct berval* bv); 524 int 525 m_convert_assert_to_comp ( gser_decoder_func* decoder, struct berval* bv, 526 ComponentSyntaxInfo** csi, int len, int mode ); 527 void* 528 m_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 559 MatchingRule* 560 retrieve_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 570 int increment_bv_mem ( struct berval* in ); 571 int intToAscii ( int value, char* buf ); 572 typedef ComponentList irRDNSequence; 573 typedef ComponentList irRelativeDistinguishedName; 574 typedef ComponentOid irAttributeType; 575 typedef 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 587 extern AsnTypetoSyntax asn_to_syntax_mapping_tbl[]; 588 extern AsnTypetoCompMatchingRule asntype_to_compMR_mapping_tbl[]; 589 extern AsnTypetoCompType asntype_to_compType_mapping_tbl[]; 590 extern AsnTypetoCompDesc asntype_to_compdesc_mapping_tbl[]; 591 592 int ConvertRDN2RFC2253 ( irRelativeDistinguishedName* in, struct berval *out ); 593 int ConvertRDNSequence2RFC2253( irRDNSequence *in, struct berval* out ); 594 595 void* comp_nibble_memory_allocator ( int init_mem, int inc_mem ); 596 597 ComponentDesc* get_ComponentDesc( int id ); 598 #endif 599