def bind(config_or_password={}, config_or_ignore=nil, &block)
if config_or_password.is_a?(String)
config = (config_or_ignore || {}).merge(:password => config_or_password)
else
config = config_or_password
end
config = {:bind_dn => dn, :allow_anonymous => false}.merge(config)
config[:password_block] ||= block if block_given?
establish_connection(config)
before_connection = @connection
begin
@connection = nil
connection.connect
@connection = connection
clear_connection_based_cache
clear_association_cache
rescue ActiveLdap::Error
remove_connection
@connection = before_connection
raise
end
true
end