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