3 * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA
6 * Redistribution and use in source and binary forms are permitted only
7 * as authorized by the OpenLDAP Public License. A copy of this
8 * license is available at http://www.OpenLDAP.org/license.html or
9 * in file LICENSE in the top-level directory of the distribution.
12 * Copyright (c) 1990 Regents of the University of Michigan.
13 * All rights reserved.
15 * Redistribution and use in source and binary forms are permitted
16 * provided that this notice is preserved and that due credit is given
17 * to the University of Michigan at Ann Arbor. The name of the University
18 * may not be used to endorse or promote products derived from this
19 * software without specific prior written permission. This software
20 * is provided ``as is'' without express or implied warranty.
26 #include <ldap_cdefs.h>
27 #include <lber_types.h>
31 /* booleans, enumerations, and integers */
32 typedef LBER_INT_T ber_int_t;
34 /* signed and unsigned versions */
35 typedef signed LBER_INT_T ber_sint_t;
36 typedef unsigned LBER_INT_T ber_uint_t;
39 typedef unsigned LBER_TAG_T ber_tag_t;
41 /* "socket" descriptors */
42 typedef LBER_SOCKET_T ber_socket_t;
45 typedef unsigned LBER_LEN_T ber_len_t;
48 typedef signed LBER_LEN_T ber_slen_t;
51 /* Overview of LBER tag construction
58 * 1 0 = CONTEXT-SPECIFIC
65 * | 5 ... 1 | TAG-NUMBER
68 /* BER classes and mask */
69 #define LBER_CLASS_UNIVERSAL (ber_tag_t) 0x00U
70 #define LBER_CLASS_APPLICATION (ber_tag_t) 0x40U
71 #define LBER_CLASS_CONTEXT (ber_tag_t) 0x80U
72 #define LBER_CLASS_PRIVATE (ber_tag_t) 0xc0U
73 #define LBER_CLASS_MASK (ber_tag_t) 0xc0U
75 /* BER encoding type and mask */
76 #define LBER_PRIMITIVE (ber_tag_t) 0x00U
77 #define LBER_CONSTRUCTED (ber_tag_t) 0x20U
78 #define LBER_ENCODING_MASK (ber_tag_t) 0x20U
80 #define LBER_BIG_TAG_MASK (ber_tag_t) 0x1fU
81 #define LBER_MORE_TAG_MASK (ber_tag_t) 0x80U
84 * Note that LBER_ERROR and LBER_DEFAULT are values that can never appear
85 * as valid BER tags, and so it is safe to use them to report errors. In
86 * fact, any tag for which the following is true is invalid:
88 #define LBER_INVALID(t) (((t) & 0x080) && (((t) & (ber_tag_t) ~ 0x0FF))
89 #define LBER_ERROR ((ber_tag_t) ~ 0x0)
90 #define LBER_DEFAULT ((ber_tag_t) ~ 0x0)
92 /* general BER types we know about */
93 #define LBER_BOOLEAN (ber_tag_t) 0x01UL
94 #define LBER_INTEGER (ber_tag_t) 0x02UL
95 #define LBER_BITSTRING (ber_tag_t) 0x03UL
96 #define LBER_OCTETSTRING (ber_tag_t) 0x04UL
97 #define LBER_NULL (ber_tag_t) 0x05UL
98 #define LBER_ENUMERATED (ber_tag_t) 0x0aUL
99 #define LBER_SEQUENCE (ber_tag_t) 0x30UL /* constructed */
100 #define LBER_SET (ber_tag_t) 0x31UL /* constructed */
102 #define OLD_LBER_SEQUENCE (ber_tag_t) 0x10UL /* w/o constructed bit - broken */
103 #define OLD_LBER_SET (ber_tag_t) 0x11UL /* w/o constructed bit - broken */
105 typedef int (*BERTranslateProc) LDAP_P((
110 /* LBER BerElement options */
111 #define LBER_USE_DER 0x01
112 #define LBER_USE_INDEFINITE_LEN 0x02
113 #define LBER_TRANSLATE_STRINGS 0x04
115 /* get/set options for BerElement */
116 #define LBER_OPT_BER_OPTIONS 0x01
117 #define LBER_OPT_BER_DEBUG 0x02
119 #define LBER_OPT_DEBUG_LEVEL LBER_OPT_BER_DEBUG
121 #define LBER_OPT_LOG_PRINT_FN 0x8001
122 #define LBER_OPT_MEMORY_FNS 0x8002
124 typedef void (*BER_LOG_PRINT_FN) LDAP_P(( char *buf ));
126 typedef void* (*BER_MEMALLOC_FN) LDAP_P(( ber_len_t size ));
127 typedef void* (*BER_MEMCALLOC_FN) LDAP_P(( ber_len_t n, ber_len_t size ));
128 typedef void* (*BER_MEMREALLOC_FN) LDAP_P(( void *p, ber_len_t size ));
129 typedef void (*BER_MEMFREE_FN) LDAP_P(( void *p ));
131 typedef struct lber_memory_fns {
132 BER_MEMALLOC_FN bmf_malloc;
133 BER_MEMCALLOC_FN bmf_calloc;
134 BER_MEMREALLOC_FN bmf_realloc;
135 BER_MEMFREE_FN bmf_free;
136 } BerMemoryFunctions;
138 /* LBER Sockbuf options */
139 #define LBER_TO_FILE 0x01 /* to a file referenced by sb_fd */
140 #define LBER_TO_FILE_ONLY 0x02 /* only write to file, not network */
141 #define LBER_MAX_INCOMING_SIZE 0x04 /* impose limit on incoming stuff */
142 #define LBER_NO_READ_AHEAD 0x08 /* read only as much as requested */
144 /* get/set options for Sockbuf */
145 #define LBER_OPT_SOCKBUF_DESC 0x1000
146 #define LBER_OPT_SOCKBUF_OPTIONS 0x1001
147 #define LBER_OPT_SOCKBUF_DEBUG 0x1002
150 #define LBER_OPT_ON ((void *) 1)
151 #define LBER_OPT_OFF ((void *) 0)
153 #define LBER_OPT_SUCCESS 0
154 #define LBER_OPT_ERROR (-1)
156 typedef struct berelement BerElement;
157 typedef struct sockbuf Sockbuf;
158 typedef struct seqorset Seqorset;
160 /* structure for returning a sequence of octet strings + length */
161 typedef struct berval {
169 # define LDAP_F_PRE extern __declspec(LIBLBER_DECL)
171 # define LDAP_F_PRE extern
179 ber_print_error LDAP_P((
180 LDAP_CONST char *data ));
184 LDAP_CONST char *data, ber_len_t len ));
188 BerElement *ber, int inout ));
191 ber_sos_dump LDAP_P((
198 typedef int (*BERDecodeCallback) LDAP_P((
208 ber_skip_tag LDAP_P((
213 ber_peek_tag LDAP_P((
223 ber_get_stringb LDAP_P((
229 ber_get_stringa LDAP_P((
234 ber_get_stringal LDAP_P((
236 struct berval **bv ));
239 ber_get_bitstringa LDAP_P((
245 ber_get_null LDAP_P((
249 ber_get_boolean LDAP_P((
251 ber_int_t *boolval ));
254 ber_first_element LDAP_P((
260 ber_next_element LDAP_P((
268 LDAP_CONST char *fmt,
272 ber_set_string_translators LDAP_P((
274 BERTranslateProc encode_proc,
275 BERTranslateProc decode_proc ));
280 typedef int (*BEREncodeCallback) LDAP_P((
285 ber_put_enum LDAP_P((
297 ber_put_ostring LDAP_P((
299 LDAP_CONST char *str,
304 ber_put_berval LDAP_P((
306 LDAP_CONST struct berval *bv,
310 ber_put_string LDAP_P((
312 LDAP_CONST char *str,
316 ber_put_bitstring LDAP_P((
318 LDAP_CONST char *str,
323 ber_put_null LDAP_P((
328 ber_put_boolean LDAP_P((
334 ber_start_seq LDAP_P((
339 ber_start_set LDAP_P((
354 LDAP_CONST char *fmt,
371 LDAP_CONST char *buf,
386 LDAP_F( BerElement * )
387 ber_alloc LDAP_P(( void )); /* DEPRECATED */
389 LDAP_F( BerElement * )
390 der_alloc LDAP_P(( void )); /* DEPRECATED */
392 LDAP_F( BerElement * )
396 LDAP_F( BerElement * )
401 ber_get_next LDAP_P((
407 ber_init_w_nullc LDAP_P((
416 LDAP_F( BerElement * )
418 struct berval *bv ));
423 struct berval **bvPtr ));
426 * LBER ber accessor functions
430 ber_get_option LDAP_P((
436 ber_set_option LDAP_P((
439 LDAP_CONST void *invalue));
446 ber_sockbuf_alloc( void );
449 ber_sockbuf_alloc_fd(
460 ber_memalloc LDAP_P((
464 ber_memrealloc LDAP_P((
469 ber_memcalloc LDAP_P((
478 ber_memvfree LDAP_P((
483 struct berval *bv ));
486 ber_bvecfree LDAP_P((
487 struct berval **bv ));
489 LDAP_F( struct berval * )
491 LDAP_CONST struct berval *bv ));
495 LDAP_CONST char * ));