--- libraries/liblber/decode.c 2008/02/11 23:24:11 1.101.2.6 +++ libraries/liblber/decode.c 2005/01/01 19:49:43 1.102 @@ -1,8 +1,8 @@ /* decode.c - ber input decoding routines */ -/* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.101.2.5 2007/08/27 10:11:31 hyc Exp $ */ +/* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.101 2004/09/04 02:54:28 kurt Exp $ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2008 The OpenLDAP Foundation. + * Copyright 1998-2005 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -373,7 +373,7 @@ ber_get_stringbvl( bgbvr *b, ber_len_t * case BvOff: *b->res.ba = ber_memalloc_x( (n+1) * b->siz, b->ber->ber_memctx ); if ( *b->res.ba == NULL ) return LBER_DEFAULT; - ((struct berval *)((char *)(*b->res.ba) + n*b->siz + + ((struct berval *)((long)(*b->res.ba) + n*b->siz + b->off))->bv_val = NULL; break; } @@ -406,7 +406,7 @@ ber_get_stringbvl( bgbvr *b, ber_len_t * *bvp = bv; break; case BvOff: - *(BerVarray)((char *)(*b->res.ba)+n*b->siz+b->off) = bv; + *(BerVarray)((long)(*b->res.ba)+n*b->siz+b->off) = bv; break; } } @@ -479,57 +479,6 @@ ber_get_stringbv( BerElement *ber, struc return tag; } -#ifdef LDAP_NULL_IS_NULL -ber_tag_t -ber_get_stringbv_null( BerElement *ber, struct berval *bv, int alloc ) -{ - ber_tag_t tag; - - assert( ber != NULL ); - assert( bv != NULL ); - - assert( LBER_VALID( ber ) ); - - if ( (tag = ber_skip_tag( ber, &bv->bv_len )) == LBER_DEFAULT ) { - bv->bv_val = NULL; - return LBER_DEFAULT; - } - - if ( (ber_len_t) ber_pvt_ber_remaining( ber ) < bv->bv_len ) { - return LBER_DEFAULT; - } - - if ( bv->bv_len == 0 ) { - bv->bv_val = NULL; - ber->ber_tag = *(unsigned char *)ber->ber_ptr; - return tag; - } - - if ( alloc ) { - bv->bv_val = (char *) ber_memalloc_x( bv->bv_len + 1, - ber->ber_memctx ); - if ( bv->bv_val == NULL ) { - return LBER_DEFAULT; - } - - if ( bv->bv_len > 0 && (ber_len_t) ber_read( ber, bv->bv_val, - bv->bv_len ) != bv->bv_len ) - { - LBER_FREE( bv->bv_val ); - bv->bv_val = NULL; - return LBER_DEFAULT; - } - } else { - bv->bv_val = ber->ber_ptr; - ber->ber_ptr += bv->bv_len; - } - ber->ber_tag = *(unsigned char *)ber->ber_ptr; - bv->bv_val[bv->bv_len] = '\0'; - - return tag; -} -#endif /* LDAP_NULL_IS_NULL */ - ber_tag_t ber_get_stringa( BerElement *ber, char **buf ) { @@ -544,22 +493,6 @@ ber_get_stringa( BerElement *ber, char * return tag; } -#ifdef LDAP_NULL_IS_NULL -ber_tag_t -ber_get_stringa_null( BerElement *ber, char **buf ) -{ - BerValue bv; - ber_tag_t tag; - - assert( buf != NULL ); - - tag = ber_get_stringbv_null( ber, &bv, 1 ); - *buf = bv.bv_val; - - return tag; -} -#endif /* LDAP_NULL_IS_NULL */ - ber_tag_t ber_get_stringal( BerElement *ber, struct berval **bv ) { @@ -759,25 +692,11 @@ ber_scanf ( BerElement *ber, rc = ber_get_stringa( ber, ss ); break; -#ifdef LDAP_NULL_IS_NULL - case 'A': /* octet string - allocate storage as needed, - * but return NULL if len == 0 */ - ss = va_arg( ap, char ** ); - rc = ber_get_stringa_null( ber, ss ); - break; -#endif /* LDAP_NULL_IS_NULL */ - case 'b': /* boolean */ i = va_arg( ap, ber_int_t * ); rc = ber_get_boolean( ber, i ); break; - case 'B': /* bit string - allocate storage as needed */ - ss = va_arg( ap, char ** ); - l = va_arg( ap, ber_len_t * ); /* for length, in bits */ - rc = ber_get_bitstringa( ber, ss, l ); - break; - case 'e': /* enumerated */ case 'i': /* int */ i = va_arg( ap, ber_int_t * ); @@ -789,30 +708,19 @@ ber_scanf ( BerElement *ber, rc = ber_peek_tag( ber, l ); break; - case 'm': /* octet string in berval, in-place */ - bval = va_arg( ap, struct berval * ); - rc = ber_get_stringbv( ber, bval, 0 ); + case 'n': /* null */ + rc = ber_get_null( ber ); break; - case 'M': /* bvoffarray - must include address of - * a record len, and record offset. - * number of records will be returned thru - * len ptr on finish. parsed in-place. - */ - { - bgbvr cookie = { BvOff }; - cookie.ber = ber; - cookie.res.ba = va_arg( ap, struct berval ** ); - cookie.alloc = 0; + case 's': /* octet string - in a buffer */ + s = va_arg( ap, char * ); l = va_arg( ap, ber_len_t * ); - cookie.siz = *l; - cookie.off = va_arg( ap, ber_len_t ); - rc = ber_get_stringbvl( &cookie, l ); + rc = ber_get_stringb( ber, s, l ); break; - } - case 'n': /* null */ - rc = ber_get_null( ber ); + case 'm': /* octet string in berval, in-place */ + bval = va_arg( ap, struct berval * ); + rc = ber_get_stringbv( ber, bval, 0 ); break; case 'o': /* octet string in a supplied berval */ @@ -825,10 +733,10 @@ ber_scanf ( BerElement *ber, rc = ber_get_stringal( ber, bvp ); break; - case 's': /* octet string - in a buffer */ - s = va_arg( ap, char * ); - l = va_arg( ap, ber_len_t * ); - rc = ber_get_stringb( ber, s, l ); + case 'B': /* bit string - allocate storage as needed */ + ss = va_arg( ap, char ** ); + l = va_arg( ap, ber_len_t * ); /* for length, in bits */ + rc = ber_get_bitstringa( ber, ss, l ); break; case 't': /* tag of next item */ @@ -871,6 +779,23 @@ ber_scanf ( BerElement *ber, break; } + case 'M': /* bvoffarray - must include address of + * a record len, and record offset. + * number of records will be returned thru + * len ptr on finish. parsed in-place. + */ + { + bgbvr cookie = { BvOff }; + cookie.ber = ber; + cookie.res.ba = va_arg( ap, struct berval ** ); + cookie.alloc = 0; + l = va_arg( ap, ber_len_t * ); + cookie.siz = *l; + cookie.off = va_arg( ap, ber_len_t ); + rc = ber_get_stringbvl( &cookie, l ); + break; + } + case 'x': /* skip the next element - whatever it is */ if ( (rc = ber_skip_tag( ber, &len )) == LBER_DEFAULT ) break; @@ -920,9 +845,6 @@ ber_scanf ( BerElement *ber, } break; case 'a': /* octet string - allocate storage as needed */ -#ifdef LDAP_NULL_IS_NULL - case 'A': -#endif /* LDAP_NULL_IS_NULL */ ss = va_arg( ap, char ** ); if ( *ss ) { LBER_FREE( *ss ); @@ -936,10 +858,20 @@ ber_scanf ( BerElement *ber, (void) va_arg( ap, int * ); break; + case 's': /* octet string - in a buffer */ + (void) va_arg( ap, char * ); + (void) va_arg( ap, ber_len_t * ); + break; + case 'l': /* length of next item */ (void) va_arg( ap, ber_len_t * ); break; + case 't': /* tag of next item */ + case 'T': /* skip tag of next item */ + (void) va_arg( ap, ber_tag_t * ); + break; + case 'o': /* octet string in a supplied berval */ bval = va_arg( ap, struct berval * ); if ( bval->bv_val != NULL ) { @@ -957,16 +889,6 @@ ber_scanf ( BerElement *ber, } break; - case 's': /* octet string - in a buffer */ - (void) va_arg( ap, char * ); - (void) va_arg( ap, ber_len_t * ); - break; - - case 't': /* tag of next item */ - case 'T': /* skip tag of next item */ - (void) va_arg( ap, ber_tag_t * ); - break; - case 'B': /* bit string - allocate storage as needed */ ss = va_arg( ap, char ** ); if ( *ss ) { @@ -976,12 +898,12 @@ ber_scanf ( BerElement *ber, *(va_arg( ap, ber_len_t * )) = 0; /* for length, in bits */ break; - case 'm': /* berval in-place */ - case 'M': /* BVoff array in-place */ - case 'n': /* null */ case 'v': /* sequence of strings */ case 'V': /* sequence of strings + lengths */ case 'W': /* BerVarray */ + case 'm': /* berval in-place */ + case 'M': /* BVoff array in-place */ + case 'n': /* null */ case 'x': /* skip the next element - whatever it is */ case '{': /* begin sequence */ case '[': /* begin set */