Home | History | Annotate | Line # | Download | only in comp_match
      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 (at) 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