version 1.107, 2007/03/20 14:10:16
|
version 1.108, 2007/03/23 14:27:38
|
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.106 2007/01/02 19:00:57 kurt Exp $ */ |
/* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.107 2007/03/20 14:10:16 hyc Exp $ */ |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
* |
* |
* Copyright 1998-2007 The OpenLDAP Foundation. |
* Copyright 1998-2007 The OpenLDAP Foundation. |
Line 471 nomem:
|
Line 471 nomem:
|
} |
} |
|
|
ber_tag_t |
ber_tag_t |
ber_get_stringbv( BerElement *ber, struct berval *bv, int alloc ) |
ber_get_stringbv( BerElement *ber, struct berval *bv, int option ) |
{ |
{ |
ber_tag_t tag; |
ber_tag_t tag; |
|
|
Line 489 ber_get_stringbv( BerElement *ber, struc
|
Line 489 ber_get_stringbv( BerElement *ber, struc
|
return LBER_DEFAULT; |
return LBER_DEFAULT; |
} |
} |
|
|
if ( alloc ) { |
if ( option & LBER_BV_ALLOC ) { |
bv->bv_val = (char *) ber_memalloc_x( bv->bv_len + 1, |
bv->bv_val = (char *) ber_memalloc_x( bv->bv_len + 1, |
ber->ber_memctx ); |
ber->ber_memctx ); |
if ( bv->bv_val == NULL ) { |
if ( bv->bv_val == NULL ) { |
Line 508 ber_get_stringbv( BerElement *ber, struc
|
Line 508 ber_get_stringbv( BerElement *ber, struc
|
ber->ber_ptr += bv->bv_len; |
ber->ber_ptr += bv->bv_len; |
} |
} |
ber->ber_tag = *(unsigned char *)ber->ber_ptr; |
ber->ber_tag = *(unsigned char *)ber->ber_ptr; |
bv->bv_val[bv->bv_len] = '\0'; |
if ( !( option & LBER_BV_NOTERM )) |
|
bv->bv_val[bv->bv_len] = '\0'; |
|
|
return tag; |
return tag; |
} |
} |
|
|
ber_tag_t |
ber_tag_t |
ber_get_stringbv_null( BerElement *ber, struct berval *bv, int alloc ) |
ber_get_stringbv_null( BerElement *ber, struct berval *bv, int option ) |
{ |
{ |
ber_tag_t tag; |
ber_tag_t tag; |
|
|
Line 538 ber_get_stringbv_null( BerElement *ber,
|
Line 539 ber_get_stringbv_null( BerElement *ber,
|
return tag; |
return tag; |
} |
} |
|
|
if ( alloc ) { |
if ( option & LBER_BV_ALLOC ) { |
bv->bv_val = (char *) ber_memalloc_x( bv->bv_len + 1, |
bv->bv_val = (char *) ber_memalloc_x( bv->bv_len + 1, |
ber->ber_memctx ); |
ber->ber_memctx ); |
if ( bv->bv_val == NULL ) { |
if ( bv->bv_val == NULL ) { |
Line 557 ber_get_stringbv_null( BerElement *ber,
|
Line 558 ber_get_stringbv_null( BerElement *ber,
|
ber->ber_ptr += bv->bv_len; |
ber->ber_ptr += bv->bv_len; |
} |
} |
ber->ber_tag = *(unsigned char *)ber->ber_ptr; |
ber->ber_tag = *(unsigned char *)ber->ber_ptr; |
bv->bv_val[bv->bv_len] = '\0'; |
if ( !( option & LBER_BV_NOTERM )) |
|
bv->bv_val[bv->bv_len] = '\0'; |
|
|
return tag; |
return tag; |
} |
} |
Line 570 ber_get_stringa( BerElement *ber, char *
|
Line 572 ber_get_stringa( BerElement *ber, char *
|
|
|
assert( buf != NULL ); |
assert( buf != NULL ); |
|
|
tag = ber_get_stringbv( ber, &bv, 1 ); |
tag = ber_get_stringbv( ber, &bv, LBER_BV_ALLOC ); |
*buf = bv.bv_val; |
*buf = bv.bv_val; |
|
|
return tag; |
return tag; |
Line 584 ber_get_stringa_null( BerElement *ber, c
|
Line 586 ber_get_stringa_null( BerElement *ber, c
|
|
|
assert( buf != NULL ); |
assert( buf != NULL ); |
|
|
tag = ber_get_stringbv_null( ber, &bv, 1 ); |
tag = ber_get_stringbv_null( ber, &bv, LBER_BV_ALLOC ); |
*buf = bv.bv_val; |
*buf = bv.bv_val; |
|
|
return tag; |
return tag; |
Line 604 ber_get_stringal( BerElement *ber, struc
|
Line 606 ber_get_stringal( BerElement *ber, struc
|
return LBER_DEFAULT; |
return LBER_DEFAULT; |
} |
} |
|
|
tag = ber_get_stringbv( ber, *bv, 1 ); |
tag = ber_get_stringbv( ber, *bv, LBER_BV_ALLOC ); |
if ( tag == LBER_DEFAULT ) { |
if ( tag == LBER_DEFAULT ) { |
LBER_FREE( *bv ); |
LBER_FREE( *bv ); |
*bv = NULL; |
*bv = NULL; |
Line 845 ber_scanf ( BerElement *ber,
|
Line 847 ber_scanf ( BerElement *ber,
|
|
|
case 'o': /* octet string in a supplied berval */ |
case 'o': /* octet string in a supplied berval */ |
bval = va_arg( ap, struct berval * ); |
bval = va_arg( ap, struct berval * ); |
rc = ber_get_stringbv( ber, bval, 1 ); |
rc = ber_get_stringbv( ber, bval, LBER_BV_ALLOC ); |
break; |
break; |
|
|
case 'O': /* octet string - allocate & include length */ |
case 'O': /* octet string - allocate & include length */ |
Line 874 ber_scanf ( BerElement *ber,
|
Line 876 ber_scanf ( BerElement *ber,
|
bgbvr cookie = { ChArray }; |
bgbvr cookie = { ChArray }; |
cookie.ber = ber; |
cookie.ber = ber; |
cookie.res.c = va_arg( ap, char *** ); |
cookie.res.c = va_arg( ap, char *** ); |
cookie.alloc = 1; |
cookie.alloc = LBER_BV_ALLOC; |
rc = ber_get_stringbvl( &cookie, NULL ); |
rc = ber_get_stringbvl( &cookie, NULL ); |
break; |
break; |
} |
} |
Line 884 ber_scanf ( BerElement *ber,
|
Line 886 ber_scanf ( BerElement *ber,
|
bgbvr cookie = { BvVec }; |
bgbvr cookie = { BvVec }; |
cookie.ber = ber; |
cookie.ber = ber; |
cookie.res.bv = va_arg( ap, struct berval *** ); |
cookie.res.bv = va_arg( ap, struct berval *** ); |
cookie.alloc = 1; |
cookie.alloc = LBER_BV_ALLOC; |
rc = ber_get_stringbvl( &cookie, NULL ); |
rc = ber_get_stringbvl( &cookie, NULL ); |
break; |
break; |
} |
} |
Line 894 ber_scanf ( BerElement *ber,
|
Line 896 ber_scanf ( BerElement *ber,
|
bgbvr cookie = { BvArray }; |
bgbvr cookie = { BvArray }; |
cookie.ber = ber; |
cookie.ber = ber; |
cookie.res.ba = va_arg( ap, struct berval ** ); |
cookie.res.ba = va_arg( ap, struct berval ** ); |
cookie.alloc = 1; |
cookie.alloc = LBER_BV_ALLOC; |
rc = ber_get_stringbvl( &cookie, NULL ); |
rc = ber_get_stringbvl( &cookie, NULL ); |
break; |
break; |
} |
} |