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