1*549b59edSchristos /* $NetBSD: lber.h,v 1.3 2021/08/14 16:14:55 christos Exp $ */ 24e6df137Slukem 3d11b170bStron /* $OpenLDAP$ */ 42de962bdSlukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>. 52de962bdSlukem * 6*549b59edSchristos * Copyright 1998-2021 The OpenLDAP Foundation. 72de962bdSlukem * All rights reserved. 82de962bdSlukem * 92de962bdSlukem * Redistribution and use in source and binary forms, with or without 102de962bdSlukem * modification, are permitted only as authorized by the OpenLDAP 112de962bdSlukem * Public License. 122de962bdSlukem * 132de962bdSlukem * A copy of this license is available in file LICENSE in the 142de962bdSlukem * top-level directory of the distribution or, alternatively, at 152de962bdSlukem * <http://www.OpenLDAP.org/license.html>. 162de962bdSlukem */ 172de962bdSlukem /* Portions Copyright (c) 1990 Regents of the University of Michigan. 182de962bdSlukem * All rights reserved. 192de962bdSlukem * 202de962bdSlukem * Redistribution and use in source and binary forms are permitted 212de962bdSlukem * provided that this notice is preserved and that due credit is given 222de962bdSlukem * to the University of Michigan at Ann Arbor. The name of the University 232de962bdSlukem * may not be used to endorse or promote products derived from this 242de962bdSlukem * software without specific prior written permission. This software 252de962bdSlukem * is provided ``as is'' without express or implied warranty. 262de962bdSlukem */ 272de962bdSlukem 282de962bdSlukem #ifndef _LBER_H 292de962bdSlukem #define _LBER_H 302de962bdSlukem 312de962bdSlukem #include <lber_types.h> 322de962bdSlukem #include <string.h> 332de962bdSlukem 342de962bdSlukem LDAP_BEGIN_DECL 352de962bdSlukem 364e6df137Slukem /* 374e6df137Slukem * ber_tag_t represents the identifier octets at the beginning of BER 384e6df137Slukem * elements. OpenLDAP treats them as mere big-endian unsigned integers. 392de962bdSlukem * 404e6df137Slukem * Actually the BER identifier octets look like this: 414e6df137Slukem * 424e6df137Slukem * Bits of 1st octet: 432de962bdSlukem * ______ 442de962bdSlukem * 8 7 | CLASS 452de962bdSlukem * 0 0 = UNIVERSAL 462de962bdSlukem * 0 1 = APPLICATION 472de962bdSlukem * 1 0 = CONTEXT-SPECIFIC 482de962bdSlukem * 1 1 = PRIVATE 492de962bdSlukem * _____ 502de962bdSlukem * | 6 | DATA-TYPE 512de962bdSlukem * 0 = PRIMITIVE 522de962bdSlukem * 1 = CONSTRUCTED 532de962bdSlukem * ___________ 542de962bdSlukem * | 5 ... 1 | TAG-NUMBER 554e6df137Slukem * 564e6df137Slukem * For ASN.1 tag numbers >= 0x1F, TAG-NUMBER above is 0x1F and the next 574e6df137Slukem * BER octets contain the actual ASN.1 tag number: Big-endian, base 584e6df137Slukem * 128, 8.bit = 1 in all but the last octet, minimum number of octets. 592de962bdSlukem */ 602de962bdSlukem 614e6df137Slukem /* BER classes and mask (in 1st identifier octet) */ 622de962bdSlukem #define LBER_CLASS_UNIVERSAL ((ber_tag_t) 0x00U) 632de962bdSlukem #define LBER_CLASS_APPLICATION ((ber_tag_t) 0x40U) 642de962bdSlukem #define LBER_CLASS_CONTEXT ((ber_tag_t) 0x80U) 652de962bdSlukem #define LBER_CLASS_PRIVATE ((ber_tag_t) 0xc0U) 662de962bdSlukem #define LBER_CLASS_MASK ((ber_tag_t) 0xc0U) 672de962bdSlukem 684e6df137Slukem /* BER encoding type and mask (in 1st identifier octet) */ 692de962bdSlukem #define LBER_PRIMITIVE ((ber_tag_t) 0x00U) 702de962bdSlukem #define LBER_CONSTRUCTED ((ber_tag_t) 0x20U) 712de962bdSlukem #define LBER_ENCODING_MASK ((ber_tag_t) 0x20U) 722de962bdSlukem 732de962bdSlukem #define LBER_BIG_TAG_MASK ((ber_tag_t) 0x1fU) 742de962bdSlukem #define LBER_MORE_TAG_MASK ((ber_tag_t) 0x80U) 752de962bdSlukem 762de962bdSlukem /* 774e6df137Slukem * LBER_ERROR and LBER_DEFAULT are values that can never appear 784e6df137Slukem * as valid BER tags, so it is safe to use them to report errors. 794e6df137Slukem * Valid tags have (tag & (ber_tag_t) 0xFF) != 0xFF. 802de962bdSlukem */ 812de962bdSlukem #define LBER_ERROR ((ber_tag_t) -1) 822de962bdSlukem #define LBER_DEFAULT ((ber_tag_t) -1) 832de962bdSlukem 842de962bdSlukem /* general BER types we know about */ 852de962bdSlukem #define LBER_BOOLEAN ((ber_tag_t) 0x01UL) 862de962bdSlukem #define LBER_INTEGER ((ber_tag_t) 0x02UL) 872de962bdSlukem #define LBER_BITSTRING ((ber_tag_t) 0x03UL) 882de962bdSlukem #define LBER_OCTETSTRING ((ber_tag_t) 0x04UL) 892de962bdSlukem #define LBER_NULL ((ber_tag_t) 0x05UL) 902de962bdSlukem #define LBER_ENUMERATED ((ber_tag_t) 0x0aUL) 912de962bdSlukem #define LBER_SEQUENCE ((ber_tag_t) 0x30UL) /* constructed */ 922de962bdSlukem #define LBER_SET ((ber_tag_t) 0x31UL) /* constructed */ 932de962bdSlukem 942de962bdSlukem /* LBER BerElement options */ 952de962bdSlukem #define LBER_USE_DER 0x01 962de962bdSlukem 972de962bdSlukem /* get/set options for BerElement */ 982de962bdSlukem #define LBER_OPT_BER_OPTIONS 0x01 992de962bdSlukem #define LBER_OPT_BER_DEBUG 0x02 1002de962bdSlukem #define LBER_OPT_BER_REMAINING_BYTES 0x03 1012de962bdSlukem #define LBER_OPT_BER_TOTAL_BYTES 0x04 1022de962bdSlukem #define LBER_OPT_BER_BYTES_TO_WRITE 0x05 1032de962bdSlukem #define LBER_OPT_BER_MEMCTX 0x06 1042de962bdSlukem 1052de962bdSlukem #define LBER_OPT_DEBUG_LEVEL LBER_OPT_BER_DEBUG 1062de962bdSlukem #define LBER_OPT_REMAINING_BYTES LBER_OPT_BER_REMAINING_BYTES 1072de962bdSlukem #define LBER_OPT_TOTAL_BYTES LBER_OPT_BER_TOTAL_BYTES 1082de962bdSlukem #define LBER_OPT_BYTES_TO_WRITE LBER_OPT_BER_BYTES_TO_WRITE 1092de962bdSlukem 1102de962bdSlukem #define LBER_OPT_LOG_PRINT_FN 0x8001 1112de962bdSlukem #define LBER_OPT_MEMORY_FNS 0x8002 1122de962bdSlukem #define LBER_OPT_ERROR_FN 0x8003 1132de962bdSlukem #define LBER_OPT_LOG_PRINT_FILE 0x8004 1142de962bdSlukem 1152de962bdSlukem /* get/set Memory Debug options */ 1162de962bdSlukem #define LBER_OPT_MEMORY_INUSE 0x8005 /* for memory debugging */ 1172de962bdSlukem #define LBER_OPT_LOG_PROC 0x8006 /* for external logging function */ 1182de962bdSlukem 1192de962bdSlukem typedef int* (*BER_ERRNO_FN) LDAP_P(( void )); 1202de962bdSlukem 1212de962bdSlukem typedef void (*BER_LOG_PRINT_FN) LDAP_P(( LDAP_CONST char *buf )); 1222de962bdSlukem 1232de962bdSlukem typedef void* (BER_MEMALLOC_FN) LDAP_P(( ber_len_t size, void *ctx )); 1242de962bdSlukem typedef void* (BER_MEMCALLOC_FN) LDAP_P(( ber_len_t n, ber_len_t size, void *ctx )); 1252de962bdSlukem typedef void* (BER_MEMREALLOC_FN) LDAP_P(( void *p, ber_len_t size, void *ctx )); 1262de962bdSlukem typedef void (BER_MEMFREE_FN) LDAP_P(( void *p, void *ctx )); 1272de962bdSlukem 1282de962bdSlukem typedef struct lber_memory_fns { 1292de962bdSlukem BER_MEMALLOC_FN *bmf_malloc; 1302de962bdSlukem BER_MEMCALLOC_FN *bmf_calloc; 1312de962bdSlukem BER_MEMREALLOC_FN *bmf_realloc; 1322de962bdSlukem BER_MEMFREE_FN *bmf_free; 1332de962bdSlukem } BerMemoryFunctions; 1342de962bdSlukem 1352de962bdSlukem /* LBER Sockbuf_IO options */ 1362de962bdSlukem #define LBER_SB_OPT_GET_FD 1 1372de962bdSlukem #define LBER_SB_OPT_SET_FD 2 1382de962bdSlukem #define LBER_SB_OPT_HAS_IO 3 1392de962bdSlukem #define LBER_SB_OPT_SET_NONBLOCK 4 1402de962bdSlukem #define LBER_SB_OPT_GET_SSL 7 1412de962bdSlukem #define LBER_SB_OPT_DATA_READY 8 1422de962bdSlukem #define LBER_SB_OPT_SET_READAHEAD 9 1432de962bdSlukem #define LBER_SB_OPT_DRAIN 10 1442de962bdSlukem #define LBER_SB_OPT_NEEDS_READ 11 1452de962bdSlukem #define LBER_SB_OPT_NEEDS_WRITE 12 1462de962bdSlukem #define LBER_SB_OPT_GET_MAX_INCOMING 13 1472de962bdSlukem #define LBER_SB_OPT_SET_MAX_INCOMING 14 1482de962bdSlukem 1492de962bdSlukem /* Only meaningful ifdef LDAP_PF_LOCAL_SENDMSG */ 1502de962bdSlukem #define LBER_SB_OPT_UNGET_BUF 15 1512de962bdSlukem 1522de962bdSlukem /* Largest option used by the library */ 1532de962bdSlukem #define LBER_SB_OPT_OPT_MAX 15 1542de962bdSlukem 1552de962bdSlukem /* LBER IO operations stacking levels */ 1562de962bdSlukem #define LBER_SBIOD_LEVEL_PROVIDER 10 1572de962bdSlukem #define LBER_SBIOD_LEVEL_TRANSPORT 20 1582de962bdSlukem #define LBER_SBIOD_LEVEL_APPLICATION 30 1592de962bdSlukem 1602de962bdSlukem /* get/set options for Sockbuf */ 1612de962bdSlukem #define LBER_OPT_SOCKBUF_DESC 0x1000 1622de962bdSlukem #define LBER_OPT_SOCKBUF_OPTIONS 0x1001 1632de962bdSlukem #define LBER_OPT_SOCKBUF_DEBUG 0x1002 1642de962bdSlukem 1652de962bdSlukem /* on/off values */ 1662de962bdSlukem LBER_V( char ) ber_pvt_opt_on; 1672de962bdSlukem #define LBER_OPT_ON ((void *) &ber_pvt_opt_on) 1682de962bdSlukem #define LBER_OPT_OFF ((void *) 0) 1692de962bdSlukem 1702de962bdSlukem #define LBER_OPT_SUCCESS (0) 1712de962bdSlukem #define LBER_OPT_ERROR (-1) 1722de962bdSlukem 1732de962bdSlukem typedef struct berelement BerElement; 1742de962bdSlukem typedef struct sockbuf Sockbuf; 1752de962bdSlukem 1762de962bdSlukem typedef struct sockbuf_io Sockbuf_IO; 1772de962bdSlukem 178648e71e5Schristos /* Structure for LBER IO operation descriptor */ 1792de962bdSlukem typedef struct sockbuf_io_desc { 1802de962bdSlukem int sbiod_level; 1812de962bdSlukem Sockbuf *sbiod_sb; 1822de962bdSlukem Sockbuf_IO *sbiod_io; 1832de962bdSlukem void *sbiod_pvt; 1842de962bdSlukem struct sockbuf_io_desc *sbiod_next; 1852de962bdSlukem } Sockbuf_IO_Desc; 1862de962bdSlukem 1872de962bdSlukem /* Structure for LBER IO operation functions */ 1882de962bdSlukem struct sockbuf_io { 1892de962bdSlukem int (*sbi_setup)( Sockbuf_IO_Desc *sbiod, void *arg ); 1902de962bdSlukem int (*sbi_remove)( Sockbuf_IO_Desc *sbiod ); 1912de962bdSlukem int (*sbi_ctrl)( Sockbuf_IO_Desc *sbiod, int opt, void *arg); 1922de962bdSlukem 1932de962bdSlukem ber_slen_t (*sbi_read)( Sockbuf_IO_Desc *sbiod, void *buf, 1942de962bdSlukem ber_len_t len ); 1952de962bdSlukem ber_slen_t (*sbi_write)( Sockbuf_IO_Desc *sbiod, void *buf, 1962de962bdSlukem ber_len_t len ); 1972de962bdSlukem 1982de962bdSlukem int (*sbi_close)( Sockbuf_IO_Desc *sbiod ); 1992de962bdSlukem }; 2002de962bdSlukem 2012de962bdSlukem /* Helper macros for LBER IO functions */ 2022de962bdSlukem #define LBER_SBIOD_READ_NEXT( sbiod, buf, len ) \ 2032de962bdSlukem ( (sbiod)->sbiod_next->sbiod_io->sbi_read( (sbiod)->sbiod_next, \ 2042de962bdSlukem buf, len ) ) 2052de962bdSlukem #define LBER_SBIOD_WRITE_NEXT( sbiod, buf, len ) \ 2062de962bdSlukem ( (sbiod)->sbiod_next->sbiod_io->sbi_write( (sbiod)->sbiod_next, \ 2072de962bdSlukem buf, len ) ) 2082de962bdSlukem #define LBER_SBIOD_CTRL_NEXT( sbiod, opt, arg ) \ 2092de962bdSlukem ( (sbiod)->sbiod_next ? \ 2102de962bdSlukem ( (sbiod)->sbiod_next->sbiod_io->sbi_ctrl( \ 2112de962bdSlukem (sbiod)->sbiod_next, opt, arg ) ) : 0 ) 2122de962bdSlukem 2132de962bdSlukem /* structure for returning a sequence of octet strings + length */ 2142de962bdSlukem typedef struct berval { 2152de962bdSlukem ber_len_t bv_len; 2162de962bdSlukem char *bv_val; 2172de962bdSlukem } BerValue; 2182de962bdSlukem 2192de962bdSlukem typedef BerValue *BerVarray; /* To distinguish from a single bv */ 2202de962bdSlukem 2212de962bdSlukem /* this should be moved to lber-int.h */ 2222de962bdSlukem 2232de962bdSlukem /* 2242de962bdSlukem * in bprint.c: 2252de962bdSlukem */ 2262de962bdSlukem LBER_F( void ) 2272de962bdSlukem ber_error_print LDAP_P(( 2282de962bdSlukem LDAP_CONST char *data )); 2292de962bdSlukem 2302de962bdSlukem LBER_F( void ) 2312de962bdSlukem ber_bprint LDAP_P(( 2322de962bdSlukem LDAP_CONST char *data, ber_len_t len )); 2332de962bdSlukem 2342de962bdSlukem LBER_F( void ) 2352de962bdSlukem ber_dump LDAP_P(( 2362de962bdSlukem BerElement *ber, int inout )); 2372de962bdSlukem 2382de962bdSlukem /* 2392de962bdSlukem * in decode.c: 2402de962bdSlukem */ 2412de962bdSlukem typedef int (*BERDecodeCallback) LDAP_P(( 2422de962bdSlukem BerElement *ber, 2432de962bdSlukem void *data, 2442de962bdSlukem int mode )); 2452de962bdSlukem 2462de962bdSlukem LBER_F( ber_tag_t ) 2472de962bdSlukem ber_get_tag LDAP_P(( 2482de962bdSlukem BerElement *ber )); 2492de962bdSlukem 2502de962bdSlukem LBER_F( ber_tag_t ) 2512de962bdSlukem ber_skip_tag LDAP_P(( 2522de962bdSlukem BerElement *ber, 2532de962bdSlukem ber_len_t *len )); 2542de962bdSlukem 2552de962bdSlukem LBER_F( ber_tag_t ) 2562de962bdSlukem ber_peek_tag LDAP_P(( 2572de962bdSlukem BerElement *ber, 2582de962bdSlukem ber_len_t *len )); 2592de962bdSlukem 2602de962bdSlukem LBER_F( ber_tag_t ) 261*549b59edSchristos ber_skip_raw LDAP_P(( 262*549b59edSchristos BerElement *ber, 263*549b59edSchristos struct berval *bv )); 264*549b59edSchristos 265*549b59edSchristos LBER_F( ber_tag_t ) 2664e6df137Slukem ber_skip_element LDAP_P(( 2674e6df137Slukem BerElement *ber, 2684e6df137Slukem struct berval *bv )); 2694e6df137Slukem 2704e6df137Slukem LBER_F( ber_tag_t ) 2714e6df137Slukem ber_peek_element LDAP_P(( 2724e6df137Slukem LDAP_CONST BerElement *ber, 2734e6df137Slukem struct berval *bv )); 2744e6df137Slukem 2754e6df137Slukem LBER_F( ber_tag_t ) 2762de962bdSlukem ber_get_int LDAP_P(( 2772de962bdSlukem BerElement *ber, 2782de962bdSlukem ber_int_t *num )); 2792de962bdSlukem 2802de962bdSlukem LBER_F( ber_tag_t ) 2812de962bdSlukem ber_get_enum LDAP_P(( 2822de962bdSlukem BerElement *ber, 2832de962bdSlukem ber_int_t *num )); 2842de962bdSlukem 285*549b59edSchristos LBER_F( int ) 286*549b59edSchristos ber_decode_int LDAP_P(( 287*549b59edSchristos const struct berval *bv, 288*549b59edSchristos ber_int_t *num )); 289*549b59edSchristos 2902de962bdSlukem LBER_F( ber_tag_t ) 2912de962bdSlukem ber_get_stringb LDAP_P(( 2922de962bdSlukem BerElement *ber, 2932de962bdSlukem char *buf, 2942de962bdSlukem ber_len_t *len )); 2952de962bdSlukem 2962de962bdSlukem #define LBER_BV_ALLOC 0x01 /* allocate/copy result, otherwise in-place */ 2972de962bdSlukem #define LBER_BV_NOTERM 0x02 /* omit NUL-terminator if parsing in-place */ 2984e6df137Slukem #define LBER_BV_STRING 0x04 /* fail if berval contains embedded \0 */ 2994e6df137Slukem /* LBER_BV_STRING currently accepts a terminating \0 in the berval, because 3004e6df137Slukem * Active Directory sends that in at least the diagonsticMessage field. 3014e6df137Slukem */ 3022de962bdSlukem 3032de962bdSlukem LBER_F( ber_tag_t ) 3042de962bdSlukem ber_get_stringbv LDAP_P(( 3052de962bdSlukem BerElement *ber, 3062de962bdSlukem struct berval *bv, 3072de962bdSlukem int options )); 3082de962bdSlukem 3092de962bdSlukem LBER_F( ber_tag_t ) 3102de962bdSlukem ber_get_stringa LDAP_P(( 3112de962bdSlukem BerElement *ber, 3122de962bdSlukem char **buf )); 3132de962bdSlukem 3142de962bdSlukem LBER_F( ber_tag_t ) 3152de962bdSlukem ber_get_stringal LDAP_P(( 3162de962bdSlukem BerElement *ber, 3172de962bdSlukem struct berval **bv )); 3182de962bdSlukem 3192de962bdSlukem LBER_F( ber_tag_t ) 3202de962bdSlukem ber_get_bitstringa LDAP_P(( 3212de962bdSlukem BerElement *ber, 3222de962bdSlukem char **buf, 3232de962bdSlukem ber_len_t *len )); 3242de962bdSlukem 3252de962bdSlukem LBER_F( ber_tag_t ) 3262de962bdSlukem ber_get_null LDAP_P(( 3272de962bdSlukem BerElement *ber )); 3282de962bdSlukem 3292de962bdSlukem LBER_F( ber_tag_t ) 3302de962bdSlukem ber_get_boolean LDAP_P(( 3312de962bdSlukem BerElement *ber, 3322de962bdSlukem ber_int_t *boolval )); 3332de962bdSlukem 3342de962bdSlukem LBER_F( ber_tag_t ) 3352de962bdSlukem ber_first_element LDAP_P(( 3362de962bdSlukem BerElement *ber, 3372de962bdSlukem ber_len_t *len, 3382de962bdSlukem char **last )); 3392de962bdSlukem 3402de962bdSlukem LBER_F( ber_tag_t ) 3412de962bdSlukem ber_next_element LDAP_P(( 3422de962bdSlukem BerElement *ber, 3432de962bdSlukem ber_len_t *len, 3442de962bdSlukem LDAP_CONST char *last )); 3452de962bdSlukem 3462de962bdSlukem LBER_F( ber_tag_t ) 3472de962bdSlukem ber_scanf LDAP_P(( 3482de962bdSlukem BerElement *ber, 3492de962bdSlukem LDAP_CONST char *fmt, 3502de962bdSlukem ... )); 3512de962bdSlukem 3522de962bdSlukem LBER_F( int ) 3532de962bdSlukem ber_decode_oid LDAP_P(( 3542de962bdSlukem struct berval *in, 3552de962bdSlukem struct berval *out )); 3562de962bdSlukem 3572de962bdSlukem /* 3582de962bdSlukem * in encode.c 3592de962bdSlukem */ 3602de962bdSlukem LBER_F( int ) 3612de962bdSlukem ber_encode_oid LDAP_P(( 3622de962bdSlukem struct berval *in, 3632de962bdSlukem struct berval *out )); 3642de962bdSlukem 3652de962bdSlukem typedef int (*BEREncodeCallback) LDAP_P(( 3662de962bdSlukem BerElement *ber, 3672de962bdSlukem void *data )); 3682de962bdSlukem 3692de962bdSlukem LBER_F( int ) 3702de962bdSlukem ber_put_enum LDAP_P(( 3712de962bdSlukem BerElement *ber, 3722de962bdSlukem ber_int_t num, 3732de962bdSlukem ber_tag_t tag )); 3742de962bdSlukem 3752de962bdSlukem LBER_F( int ) 3762de962bdSlukem ber_put_int LDAP_P(( 3772de962bdSlukem BerElement *ber, 3782de962bdSlukem ber_int_t num, 3792de962bdSlukem ber_tag_t tag )); 3802de962bdSlukem 3812de962bdSlukem LBER_F( int ) 3822de962bdSlukem ber_put_ostring LDAP_P(( 3832de962bdSlukem BerElement *ber, 3842de962bdSlukem LDAP_CONST char *str, 3852de962bdSlukem ber_len_t len, 3862de962bdSlukem ber_tag_t tag )); 3872de962bdSlukem 3882de962bdSlukem LBER_F( int ) 3892de962bdSlukem ber_put_berval LDAP_P(( 3902de962bdSlukem BerElement *ber, 3912de962bdSlukem struct berval *bv, 3922de962bdSlukem ber_tag_t tag )); 3932de962bdSlukem 3942de962bdSlukem LBER_F( int ) 3952de962bdSlukem ber_put_string LDAP_P(( 3962de962bdSlukem BerElement *ber, 3972de962bdSlukem LDAP_CONST char *str, 3982de962bdSlukem ber_tag_t tag )); 3992de962bdSlukem 4002de962bdSlukem LBER_F( int ) 4012de962bdSlukem ber_put_bitstring LDAP_P(( 4022de962bdSlukem BerElement *ber, 4032de962bdSlukem LDAP_CONST char *str, 4042de962bdSlukem ber_len_t bitlen, 4052de962bdSlukem ber_tag_t tag )); 4062de962bdSlukem 4072de962bdSlukem LBER_F( int ) 4082de962bdSlukem ber_put_null LDAP_P(( 4092de962bdSlukem BerElement *ber, 4102de962bdSlukem ber_tag_t tag )); 4112de962bdSlukem 4122de962bdSlukem LBER_F( int ) 4132de962bdSlukem ber_put_boolean LDAP_P(( 4142de962bdSlukem BerElement *ber, 4152de962bdSlukem ber_int_t boolval, 4162de962bdSlukem ber_tag_t tag )); 4172de962bdSlukem 4182de962bdSlukem LBER_F( int ) 4192de962bdSlukem ber_start_seq LDAP_P(( 4202de962bdSlukem BerElement *ber, 4212de962bdSlukem ber_tag_t tag )); 4222de962bdSlukem 4232de962bdSlukem LBER_F( int ) 4242de962bdSlukem ber_start_set LDAP_P(( 4252de962bdSlukem BerElement *ber, 4262de962bdSlukem ber_tag_t tag )); 4272de962bdSlukem 4282de962bdSlukem LBER_F( int ) 4292de962bdSlukem ber_put_seq LDAP_P(( 4302de962bdSlukem BerElement *ber )); 4312de962bdSlukem 4322de962bdSlukem LBER_F( int ) 4332de962bdSlukem ber_put_set LDAP_P(( 4342de962bdSlukem BerElement *ber )); 4352de962bdSlukem 4362de962bdSlukem LBER_F( int ) 4372de962bdSlukem ber_printf LDAP_P(( 4382de962bdSlukem BerElement *ber, 4392de962bdSlukem LDAP_CONST char *fmt, 4402de962bdSlukem ... )); 4412de962bdSlukem 4422de962bdSlukem 4432de962bdSlukem /* 4442de962bdSlukem * in io.c: 4452de962bdSlukem */ 4462de962bdSlukem 4472de962bdSlukem LBER_F( ber_slen_t ) 4482de962bdSlukem ber_skip_data LDAP_P(( 4492de962bdSlukem BerElement *ber, 4502de962bdSlukem ber_len_t len )); 4512de962bdSlukem 4522de962bdSlukem LBER_F( ber_slen_t ) 4532de962bdSlukem ber_read LDAP_P(( 4542de962bdSlukem BerElement *ber, 4552de962bdSlukem char *buf, 4562de962bdSlukem ber_len_t len )); 4572de962bdSlukem 4582de962bdSlukem LBER_F( ber_slen_t ) 4592de962bdSlukem ber_write LDAP_P(( 4602de962bdSlukem BerElement *ber, 4612de962bdSlukem LDAP_CONST char *buf, 4622de962bdSlukem ber_len_t len, 4634e6df137Slukem int zero )); /* nonzero is unsupported from OpenLDAP 2.4.18 */ 4642de962bdSlukem 4652de962bdSlukem LBER_F( void ) 4662de962bdSlukem ber_free LDAP_P(( 4672de962bdSlukem BerElement *ber, 4682de962bdSlukem int freebuf )); 4692de962bdSlukem 4702de962bdSlukem LBER_F( void ) 4712de962bdSlukem ber_free_buf LDAP_P(( BerElement *ber )); 4722de962bdSlukem 4732de962bdSlukem LBER_F( int ) 4742de962bdSlukem ber_flush2 LDAP_P(( 4752de962bdSlukem Sockbuf *sb, 4762de962bdSlukem BerElement *ber, 4772de962bdSlukem int freeit )); 4782de962bdSlukem #define LBER_FLUSH_FREE_NEVER (0x0) /* traditional behavior */ 4792de962bdSlukem #define LBER_FLUSH_FREE_ON_SUCCESS (0x1) /* traditional behavior */ 4802de962bdSlukem #define LBER_FLUSH_FREE_ON_ERROR (0x2) 4812de962bdSlukem #define LBER_FLUSH_FREE_ALWAYS (LBER_FLUSH_FREE_ON_SUCCESS|LBER_FLUSH_FREE_ON_ERROR) 4822de962bdSlukem 4832de962bdSlukem LBER_F( int ) 4842de962bdSlukem ber_flush LDAP_P(( 4852de962bdSlukem Sockbuf *sb, 4862de962bdSlukem BerElement *ber, 4872de962bdSlukem int freeit )); /* DEPRECATED */ 4882de962bdSlukem 4892de962bdSlukem LBER_F( BerElement * ) 4902de962bdSlukem ber_alloc LDAP_P(( void )); /* DEPRECATED */ 4912de962bdSlukem 4922de962bdSlukem LBER_F( BerElement * ) 4932de962bdSlukem der_alloc LDAP_P(( void )); /* DEPRECATED */ 4942de962bdSlukem 4952de962bdSlukem LBER_F( BerElement * ) 4962de962bdSlukem ber_alloc_t LDAP_P(( 4972de962bdSlukem int beroptions )); 4982de962bdSlukem 4992de962bdSlukem LBER_F( BerElement * ) 5002de962bdSlukem ber_dup LDAP_P(( 5012de962bdSlukem BerElement *ber )); 5022de962bdSlukem 5032de962bdSlukem LBER_F( ber_tag_t ) 5042de962bdSlukem ber_get_next LDAP_P(( 5052de962bdSlukem Sockbuf *sb, 5062de962bdSlukem ber_len_t *len, 5072de962bdSlukem BerElement *ber )); 5082de962bdSlukem 5092de962bdSlukem LBER_F( void ) 5102de962bdSlukem ber_init2 LDAP_P(( 5112de962bdSlukem BerElement *ber, 5122de962bdSlukem struct berval *bv, 5132de962bdSlukem int options )); 5142de962bdSlukem 5152de962bdSlukem LBER_F( void ) 5162de962bdSlukem ber_init_w_nullc LDAP_P(( /* DEPRECATED */ 5172de962bdSlukem BerElement *ber, 5182de962bdSlukem int options )); 5192de962bdSlukem 5202de962bdSlukem LBER_F( void ) 5212de962bdSlukem ber_reset LDAP_P(( 5222de962bdSlukem BerElement *ber, 5232de962bdSlukem int was_writing )); 5242de962bdSlukem 5252de962bdSlukem LBER_F( BerElement * ) 5262de962bdSlukem ber_init LDAP_P(( 5272de962bdSlukem struct berval *bv )); 5282de962bdSlukem 5292de962bdSlukem LBER_F( int ) 5302de962bdSlukem ber_flatten LDAP_P(( 5312de962bdSlukem BerElement *ber, 5322de962bdSlukem struct berval **bvPtr )); 5332de962bdSlukem 5342de962bdSlukem LBER_F( int ) 5352de962bdSlukem ber_flatten2 LDAP_P(( 5362de962bdSlukem BerElement *ber, 5372de962bdSlukem struct berval *bv, 5382de962bdSlukem int alloc )); 5392de962bdSlukem 5402de962bdSlukem LBER_F( int ) 5412de962bdSlukem ber_remaining LDAP_P(( 5422de962bdSlukem BerElement *ber )); 5432de962bdSlukem 5442de962bdSlukem /* 5452de962bdSlukem * LBER ber accessor functions 5462de962bdSlukem */ 5472de962bdSlukem 5482de962bdSlukem LBER_F( int ) 5492de962bdSlukem ber_get_option LDAP_P(( 5502de962bdSlukem void *item, 5512de962bdSlukem int option, 5522de962bdSlukem void *outvalue)); 5532de962bdSlukem 5542de962bdSlukem LBER_F( int ) 5552de962bdSlukem ber_set_option LDAP_P(( 5562de962bdSlukem void *item, 5572de962bdSlukem int option, 5582de962bdSlukem LDAP_CONST void *invalue)); 5592de962bdSlukem 5602de962bdSlukem /* 5612de962bdSlukem * LBER sockbuf.c 5622de962bdSlukem */ 5632de962bdSlukem 5642de962bdSlukem LBER_F( Sockbuf * ) 5652de962bdSlukem ber_sockbuf_alloc LDAP_P(( 5662de962bdSlukem void )); 5672de962bdSlukem 5682de962bdSlukem LBER_F( void ) 5692de962bdSlukem ber_sockbuf_free LDAP_P(( 5702de962bdSlukem Sockbuf *sb )); 5712de962bdSlukem 5722de962bdSlukem LBER_F( int ) 5732de962bdSlukem ber_sockbuf_add_io LDAP_P(( 5742de962bdSlukem Sockbuf *sb, 5752de962bdSlukem Sockbuf_IO *sbio, 5762de962bdSlukem int layer, 5772de962bdSlukem void *arg )); 5782de962bdSlukem 5792de962bdSlukem LBER_F( int ) 5802de962bdSlukem ber_sockbuf_remove_io LDAP_P(( 5812de962bdSlukem Sockbuf *sb, 5822de962bdSlukem Sockbuf_IO *sbio, 5832de962bdSlukem int layer )); 5842de962bdSlukem 5852de962bdSlukem LBER_F( int ) 5862de962bdSlukem ber_sockbuf_ctrl LDAP_P(( 5872de962bdSlukem Sockbuf *sb, 5882de962bdSlukem int opt, 5892de962bdSlukem void *arg )); 5902de962bdSlukem 5912de962bdSlukem LBER_V( Sockbuf_IO ) ber_sockbuf_io_tcp; 5922de962bdSlukem LBER_V( Sockbuf_IO ) ber_sockbuf_io_readahead; 5932de962bdSlukem LBER_V( Sockbuf_IO ) ber_sockbuf_io_fd; 5942de962bdSlukem LBER_V( Sockbuf_IO ) ber_sockbuf_io_debug; 5952de962bdSlukem LBER_V( Sockbuf_IO ) ber_sockbuf_io_udp; 5962de962bdSlukem 5972de962bdSlukem /* 5982de962bdSlukem * LBER memory.c 5992de962bdSlukem */ 6002de962bdSlukem LBER_F( void * ) 6012de962bdSlukem ber_memalloc LDAP_P(( 6022de962bdSlukem ber_len_t s )); 6032de962bdSlukem 6042de962bdSlukem LBER_F( void * ) 6052de962bdSlukem ber_memrealloc LDAP_P(( 6062de962bdSlukem void* p, 6072de962bdSlukem ber_len_t s )); 6082de962bdSlukem 6092de962bdSlukem LBER_F( void * ) 6102de962bdSlukem ber_memcalloc LDAP_P(( 6112de962bdSlukem ber_len_t n, 6122de962bdSlukem ber_len_t s )); 6132de962bdSlukem 6142de962bdSlukem LBER_F( void ) 6152de962bdSlukem ber_memfree LDAP_P(( 6162de962bdSlukem void* p )); 6172de962bdSlukem 6182de962bdSlukem LBER_F( void ) 6192de962bdSlukem ber_memvfree LDAP_P(( 6202de962bdSlukem void** vector )); 6212de962bdSlukem 6222de962bdSlukem LBER_F( void ) 6232de962bdSlukem ber_bvfree LDAP_P(( 6242de962bdSlukem struct berval *bv )); 6252de962bdSlukem 6262de962bdSlukem LBER_F( void ) 6272de962bdSlukem ber_bvecfree LDAP_P(( 6282de962bdSlukem struct berval **bv )); 6292de962bdSlukem 6302de962bdSlukem LBER_F( int ) 6312de962bdSlukem ber_bvecadd LDAP_P(( 6322de962bdSlukem struct berval ***bvec, 6332de962bdSlukem struct berval *bv )); 6342de962bdSlukem 6352de962bdSlukem LBER_F( struct berval * ) 6362de962bdSlukem ber_dupbv LDAP_P(( 6372de962bdSlukem struct berval *dst, struct berval *src )); 6382de962bdSlukem 6392de962bdSlukem LBER_F( struct berval * ) 6402de962bdSlukem ber_bvdup LDAP_P(( 6412de962bdSlukem struct berval *src )); 6422de962bdSlukem 6432de962bdSlukem LBER_F( struct berval * ) 6442de962bdSlukem ber_mem2bv LDAP_P(( 6452de962bdSlukem LDAP_CONST char *, ber_len_t len, int duplicate, struct berval *bv)); 6462de962bdSlukem 6472de962bdSlukem LBER_F( struct berval * ) 6482de962bdSlukem ber_str2bv LDAP_P(( 6492de962bdSlukem LDAP_CONST char *, ber_len_t len, int duplicate, struct berval *bv)); 6502de962bdSlukem 6512de962bdSlukem #define ber_bvstr(a) ((ber_str2bv)((a), 0, 0, NULL)) 6522de962bdSlukem #define ber_bvstrdup(a) ((ber_str2bv)((a), 0, 1, NULL)) 6532de962bdSlukem 6542de962bdSlukem LBER_F( char * ) 6552de962bdSlukem ber_strdup LDAP_P(( 6562de962bdSlukem LDAP_CONST char * )); 6572de962bdSlukem 6584e6df137Slukem LBER_F( ber_len_t ) 6594e6df137Slukem ber_strnlen LDAP_P(( 6604e6df137Slukem LDAP_CONST char *s, ber_len_t len )); 6614e6df137Slukem 6624e6df137Slukem LBER_F( char * ) 6634e6df137Slukem ber_strndup LDAP_P(( 6644e6df137Slukem LDAP_CONST char *s, ber_len_t l )); 6654e6df137Slukem 6662de962bdSlukem LBER_F( struct berval * ) 6672de962bdSlukem ber_bvreplace LDAP_P(( 6682de962bdSlukem struct berval *dst, LDAP_CONST struct berval *src )); 6692de962bdSlukem 6702de962bdSlukem LBER_F( void ) 6712de962bdSlukem ber_bvarray_free LDAP_P(( BerVarray p )); 6722de962bdSlukem 6732de962bdSlukem LBER_F( int ) 6742de962bdSlukem ber_bvarray_add LDAP_P(( BerVarray *p, BerValue *bv )); 6752de962bdSlukem 6762de962bdSlukem #define ber_bvcmp(v1,v2) \ 6772de962bdSlukem ((v1)->bv_len < (v2)->bv_len \ 6782de962bdSlukem ? -1 : ((v1)->bv_len > (v2)->bv_len \ 6792de962bdSlukem ? 1 : memcmp((v1)->bv_val, (v2)->bv_val, (v1)->bv_len) )) 6802de962bdSlukem 6812de962bdSlukem /* 6822de962bdSlukem * error.c 6832de962bdSlukem */ 6842de962bdSlukem LBER_F( int * ) ber_errno_addr LDAP_P((void)); 6852de962bdSlukem #define ber_errno (*(ber_errno_addr)()) 6862de962bdSlukem 6872de962bdSlukem #define LBER_ERROR_NONE 0 6882de962bdSlukem #define LBER_ERROR_PARAM 0x1 6892de962bdSlukem #define LBER_ERROR_MEMORY 0x2 6902de962bdSlukem 6912de962bdSlukem LDAP_END_DECL 6922de962bdSlukem 6932de962bdSlukem #endif /* _LBER_H */ 694