def bind(config_or_password={}, &block)
if config_or_password.is_a?(String)
config = {:password => config_or_password}
elsif config_or_password.respond_to?(:call)
config = {:password_block => 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
@schema = nil
clear_association_cache
rescue ActiveLdap::Error
remove_connection
@connection = before_connection
raise
end
true
end