# File lib/active_ldap/base.rb, line 763
    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