--- libraries/libldap/sasl.c 2003/05/22 14:21:14 1.50 +++ libraries/libldap/sasl.c 2003/12/01 00:58:26 1.50.2.3 @@ -1,7 +1,19 @@ -/* $OpenLDAP: pkg/ldap/libraries/libldap/sasl.c,v 1.49 2003/02/13 22:02:31 hyc Exp $ */ -/* - * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2003 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . + */ +/* Portions Copyright (C) The Internet Society (1997) + * ASN.1 fragments are from RFC 2251; see RFC for full legal notices. */ /* @@ -429,6 +441,7 @@ ldap_sasl_interactive_bind_s( void *defaults ) { int rc; + char *smechs = NULL; #if defined( LDAP_R_COMPILE ) && defined( HAVE_CYRUS_SASL ) ldap_pvt_thread_mutex_lock( &ldap_int_sasl_mutex ); @@ -439,26 +452,31 @@ ldap_sasl_interactive_bind_s( * ask all the time. No, we don't ever actually bind, but I'll * let the final bind handler take care of saving the cdn. */ - rc = ldap_simple_bind(ld, dn, NULL); - return rc < 0 ? rc : 0; + rc = ldap_simple_bind( ld, dn, NULL ); + rc = rc < 0 ? rc : 0; + goto done; } else #endif - if( mechs == NULL || *mechs == '\0' ) { - char *smechs; +#ifdef HAVE_CYRUS_SASL + if( mechs == NULL || *mechs == '\0' ) { + mechs = ld->ld_options.ldo_def_sasl_mech; + } +#endif + + if( mechs == NULL || *mechs == '\0' ) { rc = ldap_pvt_sasl_getmechs( ld, &smechs ); - if( rc != LDAP_SUCCESS ) { goto done; } #ifdef NEW_LOGGING LDAP_LOG ( TRANSPORT, DETAIL1, - "ldap_interactive_sasl_bind_s: server supports: %s\n", + "ldap_sasl_interactive_bind_s: server supports: %s\n", smechs, 0, 0 ); #else Debug( LDAP_DEBUG_TRACE, - "ldap_interactive_sasl_bind_s: server supports: %s\n", + "ldap_sasl_interactive_bind_s: server supports: %s\n", smechs, 0, 0 ); #endif @@ -467,10 +485,11 @@ ldap_sasl_interactive_bind_s( } else { #ifdef NEW_LOGGING LDAP_LOG ( TRANSPORT, DETAIL1, - "ldap_interactive_sasl_bind_s: user selected: %s\n", mechs, 0, 0 ); + "ldap_sasl_interactive_bind_s: user selected: %s\n", + mechs, 0, 0 ); #else Debug( LDAP_DEBUG_TRACE, - "ldap_interactive_sasl_bind_s: user selected: %s\n", + "ldap_sasl_interactive_bind_s: user selected: %s\n", mechs, 0, 0 ); #endif } @@ -483,6 +502,7 @@ done: #if defined( LDAP_R_COMPILE ) && defined( HAVE_CYRUS_SASL ) ldap_pvt_thread_mutex_unlock( &ldap_int_sasl_mutex ); #endif + if ( smechs ) LDAP_FREE( smechs ); return rc; }