#endif
#include "lber-int.h"
+#include "ldap_log.h"
ber_slen_t
ber_read(
total = ber_pvt_ber_total( ber );
-#define LBER_EXBUFSIZ 1000 /* a few words less than 2^N for binary buddy */
+#define LBER_EXBUFSIZ 4060 /* a few words less than 2^N for binary buddy */
#if defined( LBER_EXBUFSIZ ) && LBER_EXBUFSIZ > 0
# ifndef notdef
/* don't realloc by small amounts */
int
ber_flush( Sockbuf *sb, BerElement *ber, int freeit )
{
- ber_len_t nwritten, towrite;
+ ber_len_t towrite;
ber_slen_t rc;
assert( sb != NULL );
if ( sb->sb_debug ) {
#ifdef NEW_LOGGING
- LDAP_LOG(( "liblber", LDAP_LEVEL_DETAIL1,
+ LDAP_LOG( BER, DETAIL1,
"ber_flush: %ld bytes to sd %ld%s\n",
towrite, (long)sb->sb_fd,
- ber->ber_rwptr != ber->ber_buf ? " (re-flush)" : "" ));
- BER_DUMP(( "liblber", LDAP_LEVEL_DETAIL2, ber, 1 ));
+ ber->ber_rwptr != ber->ber_buf ? " (re-flush)" : "" );
+
+ if(LDAP_LOGS_TEST(BER, DETAIL2))
+ BER_DUMP(( "liblber", LDAP_LEVEL_DETAIL2, ber, 1 ));
+
#else
ber_log_printf( LDAP_DEBUG_ANY, sb->sb_debug,
"ber_flush: %ld bytes to sd %ld%s\n",
#endif
}
- nwritten = 0;
- do {
+ while ( towrite > 0 ) {
rc = ber_int_sb_write( sb, ber->ber_rwptr, towrite );
if (rc<=0) {
return -1;
}
towrite -= rc;
- nwritten += rc;
ber->ber_rwptr += rc;
- } while ( towrite > 0 );
+ }
if ( freeit )
ber_free( ber, 1 );
}
-/* OLD U-Mich ber_init() */
void
-ber_init_w_nullc( BerElement *ber, int options )
+ber_init2( BerElement *ber, struct berval *bv, int options )
{
assert( ber != NULL );
- ber_int_options.lbo_valid = LBER_INITIALIZED;
+ ber_int_options.lbo_valid = LBER_INITIALIZED;
(void) memset( (char *)ber, '\0', sizeof( BerElement ));
ber->ber_valid = LBER_VALID_BERELEMENT;
ber->ber_options = (char) options;
ber->ber_debug = ber_int_debug;
+ if ( bv != NULL ) {
+ ber->ber_buf = bv->bv_val;
+ ber->ber_ptr = ber->ber_buf;
+ ber->ber_end = ber->ber_buf + bv->bv_len;
+ }
+
assert( LBER_VALID( ber ) );
}
+/* OLD U-Mich ber_init() */
+void
+ber_init_w_nullc( BerElement *ber, int options )
+{
+ ber_init2( ber, NULL, options );
+}
+
/* New C-API ber_init() */
/* This function constructs a BerElement containing a copy
** of the data in the bv argument.
assert( LBER_VALID( ber ) );
#ifdef NEW_LOGGING
- LDAP_LOG(( "liblber", LDAP_LEVEL_ENTRY, "ber_get_next: enter\n" ));
+ LDAP_LOG( BER, ENTRY, "ber_get_next: enter\n", 0, 0, 0 );
#else
ber_log_printf( LDAP_DEBUG_TRACE, ber->ber_debug,
"ber_get_next\n" );
ber->ber_ptr = (char *)p;
}
+ if (i == 1) continue;
+
/* Now look for the length */
if (*ber->ber_ptr & 0x80) { /* multi-byte */
int llen = *(unsigned char *)ber->ber_ptr++ & 0x7f;
- if (llen > sizeof(ber_len_t)) {
+ if (llen > (int)sizeof(ber_len_t)) {
errno = ERANGE;
return LBER_DEFAULT;
}
}
/* Are there leftover data bytes inside ber->ber_len? */
if (ber->ber_ptr < (char *)&ber->ber_usertag) {
- i = (char *)&ber->ber_usertag - ber->ber_ptr;
+ if (ber->ber_rwptr < (char *)&ber->ber_usertag)
+ i = ber->ber_rwptr - ber->ber_ptr;
+ else
+ i = (char *)&ber->ber_usertag - ber->ber_ptr;
AC_MEMCPY(buf, ber->ber_ptr, i);
ber->ber_ptr += i;
} else {
return LBER_DEFAULT;
} else if ( sb->sb_max_incoming && ber->ber_len > sb->sb_max_incoming ) {
#ifdef NEW_LOGGING
- LDAP_LOG(( "liblber", LDAP_LEVEL_ERR,
+ LDAP_LOG( BER, ERR,
"ber_get_next: sockbuf_max_incoming limit hit "
- "(%d > %d)\n", ber->ber_len, sb->sb_max_incoming ));
+ "(%d > %d)\n", ber->ber_len, sb->sb_max_incoming, 0 );
#else
ber_log_printf( LDAP_DEBUG_CONNS, ber->ber_debug,
"ber_get_next: sockbuf_max_incoming limit hit "
*len = ber->ber_len;
if ( ber->ber_debug ) {
#ifdef NEW_LOGGING
- LDAP_LOG(( "liblber", LDAP_LEVEL_DETAIL1,
- "ber_get_next: tag 0x%lx len %ld\n",
- ber->ber_tag, ber->ber_len ));
- BER_DUMP(( "liblber", LDAP_LEVEL_DETAIL2, ber, 1 ));
+ LDAP_LOG( BER, DETAIL1,
+ "ber_get_next: tag 0x%lx len %ld\n",
+ ber->ber_tag, ber->ber_len, 0 );
+ if(LDAP_LOGS_TEST(BER, DETAIL2))
+ BER_DUMP(( "liblber", LDAP_LEVEL_DETAIL2, ber, 1 ));
#else
ber_log_printf( LDAP_DEBUG_TRACE, ber->ber_debug,
"ber_get_next: tag 0x%lx len %ld contents:\n",