version 1.2, 1999/09/08 17:06:29
|
version 1.3, 1999/12/12 02:16:46
|
Line 1
|
Line 1
|
/* $OpenLDAP$ */ |
/* $OpenLDAP: pkg/ldap/libraries/libldap/sasl.c,v 1.2 1999/09/08 17:06:29 kdz Exp $ */ |
/* |
/* |
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. |
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. |
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file |
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file |
Line 264 ldap_parse_sasl_bind_result(
|
Line 264 ldap_parse_sasl_bind_result(
|
return ld->ld_errno; |
return ld->ld_errno; |
} |
} |
|
|
errcode = LDAP_SUCCESS; |
|
scred = NULL; |
scred = NULL; |
|
|
if ( ld->ld_error ) { |
if ( ld->ld_error ) { |
Line 280 ldap_parse_sasl_bind_result(
|
Line 279 ldap_parse_sasl_bind_result(
|
|
|
ber = ber_dup( res->lm_ber ); |
ber = ber_dup( res->lm_ber ); |
|
|
|
if( ber == NULL ) { |
|
ld->ld_errno = LDAP_NO_MEMORY; |
|
return ld->ld_errno; |
|
} |
|
|
if ( ld->ld_version < LDAP_VERSION2 ) { |
if ( ld->ld_version < LDAP_VERSION2 ) { |
tag = ber_scanf( ber, "{ia}", |
tag = ber_scanf( ber, "{ia}", |
&errcode, &ld->ld_error ); |
&errcode, &ld->ld_error ); |
|
|
|
if( tag == LBER_ERROR ) { |
|
ber_free( ber, 0 ); |
|
ld->ld_errno = LDAP_DECODING_ERROR; |
|
return ld->ld_errno; |
|
} |
|
|
} else { |
} else { |
ber_len_t len; |
ber_len_t len; |
|
|
tag = ber_scanf( ber, "{iaa" /*}*/, |
tag = ber_scanf( ber, "{iaa" /*}*/, |
&errcode, &ld->ld_matched, &ld->ld_error ); |
&errcode, &ld->ld_matched, &ld->ld_error ); |
|
|
if( tag != LBER_ERROR ) { |
if( tag == LBER_ERROR ) { |
tag = ber_peek_tag(ber, &len); |
ber_free( ber, 0 ); |
|
ld->ld_errno = LDAP_DECODING_ERROR; |
|
return ld->ld_errno; |
} |
} |
|
|
|
tag = ber_peek_tag(ber, &len); |
|
|
if( tag == LDAP_TAG_REFERRAL ) { |
if( tag == LDAP_TAG_REFERRAL ) { |
/* skip 'em */ |
/* skip 'em */ |
tag = ber_scanf( ber, "x" ); |
if( ber_scanf( ber, "x" ) == LBER_ERROR ) { |
|
ber_free( ber, 0 ); |
if( tag != LBER_ERROR ) { |
ld->ld_errno = LDAP_DECODING_ERROR; |
tag = ber_peek_tag(ber, &len); |
return ld->ld_errno; |
} |
} |
|
|
|
tag = ber_peek_tag(ber, &len); |
} |
} |
|
|
/* need to clean out misc items */ |
|
if( tag == LDAP_TAG_SASL_RES_CREDS ) { |
if( tag == LDAP_TAG_SASL_RES_CREDS ) { |
tag = ber_scanf( ber, "O", &scred ); |
if( ber_scanf( ber, "O", &scred ) == LBER_ERROR ) { |
|
ber_free( ber, 0 ); |
|
ld->ld_errno = LDAP_DECODING_ERROR; |
|
return ld->ld_errno; |
|
} |
} |
} |
} |
} |
|
|
if ( tag == LBER_ERROR ) { |
ber_free( ber, 0 ); |
errcode = LDAP_DECODING_ERROR; |
|
} |
|
|
|
if( ber != NULL ) { |
|
ber_free( ber, 0 ); |
|
} |
|
|
|
/* return */ |
if ( servercredp != NULL ) { |
if ( errcode == LDAP_SUCCESS && servercredp != NULL ) { |
|
*servercredp = scred; |
*servercredp = scred; |
|
|
} else if ( scred != NULL ) { |
} else if ( scred != NULL ) { |
ber_bvfree( scred ); |
ber_bvfree( scred ); |
} |
} |
|
|
|
ld->ld_errno = errcode; |
|
|
if ( freeit ) { |
if ( freeit ) { |
ldap_msgfree( res ); |
ldap_msgfree( res ); |
} |
} |
|
|
ld->ld_errno = errcode; |
|
return( ld->ld_errno ); |
return( ld->ld_errno ); |
} |
} |