version 1.1.3.1, 1998/08/08 22:43:15
|
version 1.5.2.1, 1998/11/05 20:27:18
|
Line 11
|
Line 11
|
* is provided ``as is'' without express or implied warranty. |
* is provided ``as is'' without express or implied warranty. |
*/ |
*/ |
|
|
|
#include "portable.h" |
|
|
#include <stdio.h> |
#include <stdio.h> |
#ifdef MACOS |
|
#include <stdlib.h> |
#ifdef STDC_HEADERS |
#include <stdarg.h> |
|
#include "macos.h" |
|
#else /* MACOS */ |
|
#if defined(NeXT) || defined(VMS) |
|
#include <stdlib.h> |
#include <stdlib.h> |
#else /* next || vms */ |
#endif |
#include <malloc.h> |
|
#endif /* next || vms */ |
#if defined( HAVE_STDARG_H ) && __STDC__ |
#if defined(BC31) || defined(_WIN32) |
|
#include <stdarg.h> |
#include <stdarg.h> |
#else /* BC31 || _WIN32 */ |
#else |
#include <varargs.h> |
#include <varargs.h> |
#endif /* BC31 || _WIN32 */ |
#endif |
#include <sys/types.h> |
|
#include <sys/socket.h> |
#include <ac/string.h> |
#include <netinet/in.h> |
#include <ac/socket.h> |
#ifdef PCNFS |
|
#include <tklib.h> |
|
#endif /* PCNFS */ |
|
#endif /* MACOS */ |
|
|
|
#if defined( DOS ) || defined( _WIN32 ) |
|
#include "msdos.h" |
|
#endif /* DOS */ |
|
|
|
#include <string.h> |
|
#include "lber.h" |
#include "lber.h" |
|
|
#ifdef LDAP_DEBUG |
#ifdef LDAP_DEBUG |
int lber_debug; |
int lber_debug; |
#endif |
#endif |
|
|
#ifdef NEEDPROTOS |
static int ber_getnint LDAP_P(( BerElement *ber, long *num, int len )); |
static int ber_getnint( BerElement *ber, long *num, int len ); |
|
#endif /* NEEDPROTOS */ |
|
|
|
|
|
/* return the tag - LBER_DEFAULT returned means trouble */ |
/* return the tag - LBER_DEFAULT returned means trouble */ |
unsigned long |
unsigned long |
Line 58 ber_get_tag( BerElement *ber )
|
Line 43 ber_get_tag( BerElement *ber )
|
unsigned char xbyte; |
unsigned char xbyte; |
unsigned long tag; |
unsigned long tag; |
char *tagp; |
char *tagp; |
int i; |
unsigned int i; |
|
|
if ( ber_read( ber, (char *) &xbyte, 1 ) != 1 ) |
if ( ber_read( ber, (char *) &xbyte, 1 ) != 1 ) |
return( LBER_DEFAULT ); |
return( LBER_DEFAULT ); |
Line 129 ber_skip_tag( BerElement *ber, unsigned
|
Line 114 ber_skip_tag( BerElement *ber, unsigned
|
if ( ber_read( ber, (char *) &netlen + diff, noctets ) |
if ( ber_read( ber, (char *) &netlen + diff, noctets ) |
!= noctets ) |
!= noctets ) |
return( LBER_DEFAULT ); |
return( LBER_DEFAULT ); |
*len = LBER_NTOHL( netlen ); |
*len = AC_NTOHL( netlen ); |
} else { |
} else { |
*len = lc; |
*len = lc; |
} |
} |
Line 155 ber_getnint( BerElement *ber, long *num,
|
Line 140 ber_getnint( BerElement *ber, long *num,
|
{ |
{ |
int diff, sign, i; |
int diff, sign, i; |
long netnum; |
long netnum; |
|
char *p; |
|
|
/* |
/* |
* The tag and length have already been stripped off. We should |
* The tag and length have already been stripped off. We should |
Line 172 ber_getnint( BerElement *ber, long *num,
|
Line 158 ber_getnint( BerElement *ber, long *num,
|
if ( ber_read( ber, ((char *) &netnum) + diff, len ) != len ) |
if ( ber_read( ber, ((char *) &netnum) + diff, len ) != len ) |
return( -1 ); |
return( -1 ); |
|
|
/* sign extend if necessary */ |
/* sign extend if necessary */ |
sign = ((0x80 << ((len - 1) * 8)) & netnum); |
p = (char *) &netnum; |
if ( sign && len < sizeof(long) ) { |
sign = (0x80 & *(p+diff) ); |
for ( i = sizeof(long) - 1; i > len - 1; i-- ) { |
if ( sign && len < sizeof(long) ) { |
netnum |= (0xffL << (i * 8)); |
for ( i = 0; i < diff; i++ ) { |
|
*(p+i) = (unsigned char) 0xff; |
} |
} |
} |
} |
*num = LBER_NTOHL( netnum ); |
*num = AC_NTOHL( netnum ); |
|
|
return( len ); |
return( len ); |
} |
} |
Line 192 ber_get_int( BerElement *ber, long *num
|
Line 179 ber_get_int( BerElement *ber, long *num
|
if ( (tag = ber_skip_tag( ber, &len )) == LBER_DEFAULT ) |
if ( (tag = ber_skip_tag( ber, &len )) == LBER_DEFAULT ) |
return( LBER_DEFAULT ); |
return( LBER_DEFAULT ); |
|
|
if ( ber_getnint( ber, num, (int)len ) != len ) |
if ( (unsigned long) ber_getnint( ber, num, (int)len ) != len ) |
return( LBER_DEFAULT ); |
return( LBER_DEFAULT ); |
else |
else |
return( tag ); |
return( tag ); |
Line 211 ber_get_stringb( BerElement *ber, char *
|
Line 198 ber_get_stringb( BerElement *ber, char *
|
if ( datalen > (*len - 1) ) |
if ( datalen > (*len - 1) ) |
return( LBER_DEFAULT ); |
return( LBER_DEFAULT ); |
|
|
if ( ber_read( ber, buf, datalen ) != datalen ) |
if ( (unsigned long) ber_read( ber, buf, datalen ) != datalen ) |
return( LBER_DEFAULT ); |
return( LBER_DEFAULT ); |
|
|
buf[datalen] = '\0'; |
buf[datalen] = '\0'; |
Line 250 ber_get_stringa( BerElement *ber, char *
|
Line 237 ber_get_stringa( BerElement *ber, char *
|
if ( (*buf = (char *) malloc( (size_t)datalen + 1 )) == NULL ) |
if ( (*buf = (char *) malloc( (size_t)datalen + 1 )) == NULL ) |
return( LBER_DEFAULT ); |
return( LBER_DEFAULT ); |
|
|
if ( ber_read( ber, *buf, datalen ) != datalen ) |
if ( (unsigned long) ber_read( ber, *buf, datalen ) != datalen ) |
return( LBER_DEFAULT ); |
return( LBER_DEFAULT ); |
(*buf)[datalen] = '\0'; |
(*buf)[datalen] = '\0'; |
|
|
Line 283 ber_get_stringal( BerElement *ber, struc
|
Line 270 ber_get_stringal( BerElement *ber, struc
|
if ( ((*bv)->bv_val = (char *) malloc( (size_t)len + 1 )) == NULL ) |
if ( ((*bv)->bv_val = (char *) malloc( (size_t)len + 1 )) == NULL ) |
return( LBER_DEFAULT ); |
return( LBER_DEFAULT ); |
|
|
if ( ber_read( ber, (*bv)->bv_val, len ) != len ) |
if ( (unsigned long) ber_read( ber, (*bv)->bv_val, len ) != len ) |
return( LBER_DEFAULT ); |
return( LBER_DEFAULT ); |
((*bv)->bv_val)[len] = '\0'; |
((*bv)->bv_val)[len] = '\0'; |
(*bv)->bv_len = len; |
(*bv)->bv_len = len; |
Line 320 ber_get_bitstringa( BerElement *ber, cha
|
Line 307 ber_get_bitstringa( BerElement *ber, cha
|
if ( ber_read( ber, (char *)&unusedbits, 1 ) != 1 ) |
if ( ber_read( ber, (char *)&unusedbits, 1 ) != 1 ) |
return( LBER_DEFAULT ); |
return( LBER_DEFAULT ); |
|
|
if ( ber_read( ber, *buf, datalen ) != datalen ) |
if ( (unsigned long) ber_read( ber, *buf, datalen ) != datalen ) |
return( LBER_DEFAULT ); |
return( LBER_DEFAULT ); |
|
|
*blen = datalen * 8 - unusedbits; |
*blen = datalen * 8 - unusedbits; |
Line 382 ber_next_element( BerElement *ber, unsig
|
Line 369 ber_next_element( BerElement *ber, unsig
|
|
|
/* VARARGS */ |
/* VARARGS */ |
unsigned long |
unsigned long |
ber_scanf( |
ber_scanf |
#if defined( MACOS ) || defined( BC31 ) || defined( _WIN32 ) |
#if defined( HAVE_STDARG_H ) && __STDC__ |
BerElement *ber, char *fmt, ... ) |
( BerElement *ber, char *fmt, ... ) |
#else |
#else |
va_alist ) |
( va_alist ) |
va_dcl |
va_dcl |
#endif |
#endif |
{ |
{ |
va_list ap; |
va_list ap; |
#if !defined( MACOS ) && !defined( BC31 ) && !defined( _WIN32 ) |
#if !(defined( HAVE_STDARG_H ) && __STDC__) |
BerElement *ber; |
BerElement *ber; |
char *fmt; |
char *fmt; |
#endif |
#endif |
Line 399 va_dcl
|
Line 386 va_dcl
|
char *s, **ss, ***sss; |
char *s, **ss, ***sss; |
struct berval ***bv, **bvp, *bval; |
struct berval ***bv, **bvp, *bval; |
int *i, j; |
int *i, j; |
long *l, rc, tag; |
long *l; |
unsigned long len; |
unsigned long rc, tag, len; |
|
|
#if defined( MACOS ) || defined( BC31 ) || defined( _WIN32 ) |
#if defined( HAVE_STDARG_H ) && __STDC__ |
va_start( ap, fmt ); |
va_start( ap, fmt ); |
#else |
#else |
va_start( ap ); |
va_start( ap ); |
Line 536 va_dcl
|
Line 523 va_dcl
|
break; |
break; |
|
|
default: |
default: |
#ifndef NO_USERINTERFACE |
#ifdef LDAP_LIBUI |
fprintf( stderr, "unknown fmt %c\n", *fmt ); |
fprintf( stderr, "unknown fmt %c\n", *fmt ); |
#endif /* NO_USERINTERFACE */ |
#endif /* LDAP_LIBUI */ |
rc = LBER_DEFAULT; |
rc = LBER_DEFAULT; |
break; |
break; |
} |
} |