version 1.80, 2002/01/06 04:36:07
|
version 1.83, 2002/01/12 01:23:04
|
Line 1
|
Line 1
|
/* decode.c - ber input decoding routines */ |
/* decode.c - ber input decoding routines */ |
/* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.78 2002/01/06 01:23:36 hyc Exp $ */ |
/* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.82 2002/01/07 20:48:17 kurt Exp $ */ |
/* |
/* |
* Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. |
* Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. |
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file |
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file |
Line 299 enum bgbvc { ChArray, BvArray, BvVec, Bv
|
Line 299 enum bgbvc { ChArray, BvArray, BvVec, Bv
|
* stack use to the absolute minimum. |
* stack use to the absolute minimum. |
*/ |
*/ |
typedef struct bgbvr { |
typedef struct bgbvr { |
BerElement *ber; |
|
enum bgbvc choice; |
enum bgbvc choice; |
|
BerElement *ber; |
ber_tag_t tag; |
ber_tag_t tag; |
ber_len_t len; |
ber_len_t len; |
char *last; |
char *last; |
Line 422 ber_get_stringbv( BerElement *ber, struc
|
Line 422 ber_get_stringbv( BerElement *ber, struc
|
return LBER_DEFAULT; |
return LBER_DEFAULT; |
} |
} |
|
|
if ( ber_pvt_ber_remaining( ber ) < bv->bv_len ) { |
if ( (ber_len_t) ber_pvt_ber_remaining( ber ) < bv->bv_len ) { |
return LBER_DEFAULT; |
return LBER_DEFAULT; |
} |
} |
|
|
Line 729 ber_scanf ( BerElement *ber,
|
Line 729 ber_scanf ( BerElement *ber,
|
|
|
case 'v': /* sequence of strings */ |
case 'v': /* sequence of strings */ |
{ |
{ |
bgbvr cookie = { ber, ChArray }; |
bgbvr cookie = { ChArray }; |
|
cookie.ber = ber; |
cookie.res.c = va_arg( ap, char *** ); |
cookie.res.c = va_arg( ap, char *** ); |
cookie.alloc = 1; |
cookie.alloc = 1; |
rc = ber_get_stringbvr( &cookie, 0 ); |
rc = ber_get_stringbvr( &cookie, 0 ); |
Line 738 ber_scanf ( BerElement *ber,
|
Line 739 ber_scanf ( BerElement *ber,
|
|
|
case 'V': /* sequence of strings + lengths */ |
case 'V': /* sequence of strings + lengths */ |
{ |
{ |
bgbvr cookie = { ber, BvVec }; |
bgbvr cookie = { BvVec }; |
|
cookie.ber = ber; |
cookie.res.bv = va_arg( ap, struct berval *** ); |
cookie.res.bv = va_arg( ap, struct berval *** ); |
cookie.alloc = 1; |
cookie.alloc = 1; |
rc = ber_get_stringbvr( &cookie, 0 ); |
rc = ber_get_stringbvr( &cookie, 0 ); |
Line 747 ber_scanf ( BerElement *ber,
|
Line 749 ber_scanf ( BerElement *ber,
|
|
|
case 'W': /* bvarray */ |
case 'W': /* bvarray */ |
{ |
{ |
bgbvr cookie = { ber, BvArray }; |
bgbvr cookie = { BvArray }; |
|
cookie.ber = ber; |
cookie.res.ba = va_arg( ap, struct berval ** ); |
cookie.res.ba = va_arg( ap, struct berval ** ); |
cookie.alloc = 1; |
cookie.alloc = 1; |
rc = ber_get_stringbvr( &cookie, 0 ); |
rc = ber_get_stringbvr( &cookie, 0 ); |
break; |
break; |
} |
} |
|
|
case 'w': /* bvoffarray - must include address of |
case 'M': /* bvoffarray - must include address of |
* a record len, and record offset. |
* a record len, and record offset. |
* number of records will be returned thru |
* number of records will be returned thru |
* len ptr on finish. |
* len ptr on finish. parsed in-place. |
*/ |
*/ |
{ |
{ |
bgbvr cookie = { ber, BvOff }; |
bgbvr cookie = { BvOff }; |
|
cookie.ber = ber; |
cookie.res.ba = va_arg( ap, struct berval ** ); |
cookie.res.ba = va_arg( ap, struct berval ** ); |
cookie.alloc = 0; |
cookie.alloc = 0; |
l = va_arg( ap, ber_len_t * ); |
l = va_arg( ap, ber_len_t * ); |
Line 781 ber_scanf ( BerElement *ber,
|
Line 785 ber_scanf ( BerElement *ber,
|
case '{': /* begin sequence */ |
case '{': /* begin sequence */ |
case '[': /* begin set */ |
case '[': /* begin set */ |
if ( *(fmt + 1) != 'v' && *(fmt + 1) != 'V' |
if ( *(fmt + 1) != 'v' && *(fmt + 1) != 'V' |
&& *(fmt + 1) != 'W' && *(fmt + 1) != 'w' ) |
&& *(fmt + 1) != 'W' && *(fmt + 1) != 'M' ) |
rc = ber_skip_tag( ber, &len ); |
rc = ber_skip_tag( ber, &len ); |
break; |
break; |
|
|
Line 881 ber_scanf ( BerElement *ber,
|
Line 885 ber_scanf ( BerElement *ber,
|
case 'v': /* sequence of strings */ |
case 'v': /* sequence of strings */ |
case 'V': /* sequence of strings + lengths */ |
case 'V': /* sequence of strings + lengths */ |
case 'W': /* BVarray */ |
case 'W': /* BVarray */ |
|
case 'm': /* berval in-place */ |
|
case 'M': /* BVoff array in-place */ |
case 'n': /* null */ |
case 'n': /* null */ |
case 'x': /* skip the next element - whatever it is */ |
case 'x': /* skip the next element - whatever it is */ |
case '{': /* begin sequence */ |
case '{': /* begin sequence */ |