2 * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA
5 * Redistribution and use in source and binary forms are permitted only
6 * as authorized by the OpenLDAP Public License. A copy of this
7 * license is available at http://www.OpenLDAP.org/license.html or
8 * in file LICENSE in the top-level directory of the distribution.
11 * Copyright (c) 1990 Regents of the University of Michigan.
12 * All rights reserved.
14 * Redistribution and use in source and binary forms are permitted
15 * provided that this notice is preserved and that due credit is given
16 * to the University of Michigan at Ann Arbor. The name of the University
17 * may not be used to endorse or promote products derived from this
18 * software without specific prior written permission. This software
19 * is provided ``as is'' without express or implied warranty.
25 #include <ldap_cdefs.h>
26 #include <lber_types.h>
30 /* boolean, enumerations, and integers */
31 typedef LBER_INT_T ber_int_t;
33 /* signed and unsigned versions */
34 typedef signed LBER_INT_T ber_sint_t;
35 typedef unsigned LBER_INT_T ber_uint_t;
38 typedef LBER_TAG_T ber_tag_t;
40 /* "socket" descriptors */
41 typedef LBER_SOCKET_T ber_socket_t;
44 typedef unsigned LBER_LEN_T ber_len_t;
47 typedef LBER_LEN_T ber_slen_t;
50 /* Overview of LBER tag construction
57 * 1 0 = CONTEXT-SPECIFIC
64 * | 5 ... 1 | TAG-NUMBER
67 /* BER classes and mask */
68 #define LBER_CLASS_UNIVERSAL (ber_tag_t) 0x00U
69 #define LBER_CLASS_APPLICATION (ber_tag_t) 0x40U
70 #define LBER_CLASS_CONTEXT (ber_tag_t) 0x80U
71 #define LBER_CLASS_PRIVATE (ber_tag_t) 0xc0U
72 #define LBER_CLASS_MASK (ber_tag_t) 0xc0U
74 /* BER encoding type and mask */
75 #define LBER_PRIMITIVE (ber_tag_t) 0x00U
76 #define LBER_CONSTRUCTED (ber_tag_t) 0x20U
77 #define LBER_ENCODING_MASK (ber_tag_t) 0x20U
79 #define LBER_BIG_TAG_MASK (ber_tag_t) 0x1fU
80 #define LBER_MORE_TAG_MASK (ber_tag_t) 0x80U
83 * Note that LBER_ERROR and LBER_DEFAULT are values that can never appear
84 * as valid BER tags, and so it is safe to use them to report errors. In
85 * fact, any tag for which the following is true is invalid:
87 #define LBER_INVALID(t) (((t) & 0x080) && (((t) & (ber_tag_t) ~ 0x0FF))
88 #define LBER_ERROR ((ber_tag_t) ~ 0x0)
89 #define LBER_DEFAULT ((ber_tag_t) ~ 0x0)
91 /* general BER types we know about */
92 #define LBER_BOOLEAN (ber_tag_t) 0x01UL
93 #define LBER_INTEGER (ber_tag_t) 0x02UL
94 #define LBER_BITSTRING (ber_tag_t) 0x03UL
95 #define LBER_OCTETSTRING (ber_tag_t) 0x04UL
96 #define LBER_NULL (ber_tag_t) 0x05UL
97 #define LBER_ENUMERATED (ber_tag_t) 0x0aUL
98 #define LBER_SEQUENCE (ber_tag_t) 0x30UL /* constructed */
99 #define LBER_SET (ber_tag_t) 0x31UL /* constructed */
101 #define OLD_LBER_SEQUENCE (ber_tag_t) 0x10UL /* w/o constructed bit - broken */
102 #define OLD_LBER_SET (ber_tag_t) 0x11UL /* w/o constructed bit - broken */
104 typedef int (*BERTranslateProc) LDAP_P((
109 /* LBER BerElement options */
110 #define LBER_USE_DER 0x01
111 #define LBER_USE_INDEFINITE_LEN 0x02
112 #define LBER_TRANSLATE_STRINGS 0x04
114 /* get/set options for BerElement */
115 #define LBER_OPT_BER_OPTIONS 0x01
116 #define LBER_OPT_BER_DEBUG 0x02
118 #define LBER_OPT_DEBUG_LEVEL LBER_OPT_BER_DEBUG
120 #define LBER_OPT_LOG_PRINT_FN 0x8001
121 #define LBER_OPT_MEMORY_FNS 0x8002
123 typedef void (*BER_LOG_PRINT_FN) LDAP_P(( char *buf ));
125 typedef void* (*BER_MEMALLOC_FN) LDAP_P(( ber_len_t size ));
126 typedef void* (*BER_MEMCALLOC_FN) LDAP_P(( ber_len_t n, ber_len_t size ));
127 typedef void* (*BER_MEMREALLOC_FN) LDAP_P(( void *p, ber_len_t size ));
128 typedef void (*BER_MEMFREE_FN) LDAP_P(( void *p ));
130 typedef struct lber_memory_fns {
131 BER_MEMALLOC_FN bmf_malloc;
132 BER_MEMCALLOC_FN bmf_calloc;
133 BER_MEMREALLOC_FN bmf_realloc;
134 BER_MEMFREE_FN bmf_free;
135 } BerMemoryFunctions;
137 /* LBER Sockbuf options */
138 #define LBER_TO_FILE 0x01 /* to a file referenced by sb_fd */
139 #define LBER_TO_FILE_ONLY 0x02 /* only write to file, not network */
140 #define LBER_MAX_INCOMING_SIZE 0x04 /* impose limit on incoming stuff */
141 #define LBER_NO_READ_AHEAD 0x08 /* read only as much as requested */
143 /* get/set options for Sockbuf */
144 #define LBER_OPT_SOCKBUF_DESC 0x1000
145 #define LBER_OPT_SOCKBUF_OPTIONS 0x1001
146 #define LBER_OPT_SOCKBUF_DEBUG 0x1002
149 #define LBER_OPT_ON ((void *) 1)
150 #define LBER_OPT_OFF ((void *) 0)
152 #define LBER_OPT_SUCCESS 0
153 #define LBER_OPT_ERROR (-1)
155 typedef struct berelement BerElement;
156 typedef struct sockbuf Sockbuf;
157 typedef struct seqorset Seqorset;
159 /* structure for returning a sequence of octet strings + length */
160 typedef struct berval {
169 ber_print_error LDAP_P((
170 LDAP_CONST char *data ));
174 LDAP_CONST char *data, ber_len_t len ));
178 LDAP_CONST BerElement *ber, int inout ));
181 ber_sos_dump LDAP_P((
182 LDAP_CONST Seqorset *sos ));
188 typedef int (*BERDecodeCallback) LDAP_P((
198 ber_skip_tag LDAP_P((
203 ber_peek_tag LDAP_P((
204 LDAP_CONST BerElement *ber,
213 ber_get_stringb LDAP_P((
219 ber_get_stringa LDAP_P((
224 ber_get_stringal LDAP_P((
226 struct berval **bv ));
229 ber_get_bitstringa LDAP_P((
235 ber_get_null LDAP_P((
239 ber_get_boolean LDAP_P((
241 ber_int_t *boolval ));
244 ber_first_element LDAP_P((
250 ber_next_element LDAP_P((
258 LDAP_CONST char *fmt,
262 ber_set_string_translators LDAP_P((
264 BERTranslateProc encode_proc,
265 BERTranslateProc decode_proc ));
270 typedef int (*BEREncodeCallback) LDAP_P((
275 ber_put_enum LDAP_P((
287 ber_put_ostring LDAP_P((
289 LDAP_CONST char *str,
294 ber_put_berval LDAP_P((
296 LDAP_CONST struct berval *bv,
300 ber_put_string LDAP_P((
302 LDAP_CONST char *str,
306 ber_put_bitstring LDAP_P((
308 LDAP_CONST char *str,
313 ber_put_null LDAP_P((
318 ber_put_boolean LDAP_P((
324 ber_start_seq LDAP_P((
329 ber_start_set LDAP_P((
344 LDAP_CONST char *fmt,
361 LDAP_CONST char *buf,
376 LDAP_F( BerElement * )
377 ber_alloc LDAP_P(( void )); /* DEPRECATED */
379 LDAP_F( BerElement * )
380 der_alloc LDAP_P(( void )); /* DEPRECATED */
382 LDAP_F( BerElement * )
386 LDAP_F( BerElement * )
388 LDAP_CONST BerElement *ber ));
391 ber_get_next LDAP_P((
397 ber_init_w_nullc LDAP_P((
406 LDAP_F( BerElement * )
408 struct berval *bv ));
412 LDAP_CONST BerElement *ber,
413 struct berval **bvPtr ));
416 * LBER ber accessor functions
420 ber_get_option LDAP_P((
421 LDAP_CONST void *item,
426 ber_set_option LDAP_P((
429 LDAP_CONST void *invalue));
436 ber_sockbuf_alloc( void );
439 ber_sockbuf_alloc_fd(
450 ber_memalloc LDAP_P((
454 ber_memrealloc LDAP_P((
459 ber_memcalloc LDAP_P((
468 ber_memvfree LDAP_P((
473 struct berval *bv ));
476 ber_bvecfree LDAP_P((
477 struct berval **bv ));
479 LDAP_F( struct berval * )
481 LDAP_CONST struct berval *bv ));
485 LDAP_CONST char * ));