version 1.1, 1999/06/28 20:19:21
|
version 1.4, 1999/12/12 04:02:03
|
Line 1
|
Line 1
|
|
/* $OpenLDAP: pkg/ldap/libraries/libldap/sasl.c,v 1.3 1999/12/12 02:16:46 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 251 ldap_parse_sasl_bind_result(
|
Line 252 ldap_parse_sasl_bind_result(
|
return LDAP_PARAM_ERROR; |
return LDAP_PARAM_ERROR; |
} |
} |
|
|
if(servercredp != NULL) { |
if( servercredp != NULL ) { |
if( ld->ld_version < LDAP_VERSION2 ) { |
if( ld->ld_version < LDAP_VERSION2 ) { |
return LDAP_NOT_SUPPORTED; |
return LDAP_NOT_SUPPORTED; |
} |
} |
*servercredp = NULL; |
*servercredp = NULL; |
} |
} |
|
|
if( res->lm_msgtype == LDAP_RES_BIND ) { |
if( res->lm_msgtype != LDAP_RES_BIND ) { |
ld->ld_errno = LDAP_PARAM_ERROR; |
ld->ld_errno = LDAP_PARAM_ERROR; |
return ld->ld_errno; |
return ld->ld_errno; |
} |
} |
|
|
errcode = LDAP_SUCCESS; |
|
scred = NULL; |
scred = NULL; |
|
|
if ( ld->ld_error ) { |
if ( ld->ld_error ) { |
Line 279 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 ); |
} |
} |