# class LDAP::Conn

### Public Instance Methods

assert_error_code() click to toggle source

    # File lib/active_ldap/adapter/ldap_ext.rb, line 103
    def assert_error_code
      return unless failed?
      code = error_code
      message = error_message
      klass = ActiveLdap::LdapError::ERRORS[code]
      klass ||= IMPLEMENT_SPECIFIC_ERRORS[code]
      if klass.nil? and message == "Can't contact LDAP server"
        klass = ActiveLdap::ConnectionError
      end
      klass ||= ActiveLdap::LdapError
      raise klass, message
    end

error_code() click to toggle source

    # File lib/active_ldap/adapter/ldap_ext.rb, line 89
    def error_code
      code = err
      code = get_option(LDAP_OPT_ERROR_NUMBER) if code.zero?
      code
    end

error_message() click to toggle source

    # File lib/active_ldap/adapter/ldap_ext.rb, line 95
    def error_message
      if failed?
        LDAP.err2string(error_code)
      else
        nil
      end
    end

failed?() click to toggle source

    # File lib/active_ldap/adapter/ldap_ext.rb, line 85
    def failed?
      not error_code.zero?
    end

search_full(options, &block) click to toggle source

    # File lib/active_ldap/adapter/ldap_ext.rb, line 61
    def search_full(options, &block)
      base              = options[:base]
      scope             = options[:scope]
      filter            = options[:filter]
      attributes        = options[:attributes]
      limit             = options[:limit] || 0
      use_paged_results = options[:use_paged_results]
      if @@have_search_ext
        if use_paged_results
          paged_search(base, scope, filter, attributes, limit, &block)
        else
          search_ext(base, scope, filter, attributes,
                     false, nil, nil, 0, 0, limit, &block)
        end
      else
        i = 0
        search(base, scope, filter, attributes) do |entry|
          i += 1
          block.call(entry)
          break if 0 < limit and limit <= i
        end
      end
    end

### Private Instance Methods

find_paged_results_control(controls) click to toggle source

    # File lib/active_ldap/adapter/ldap_ext.rb, line 117
    def find_paged_results_control(controls)
      controls.find do |control|
        control.oid == LDAP::LDAP_CONTROL_PAGEDRESULTS
      end
    end

paged_search(base, scope, filter, attributes, limit, &block) click to toggle source

    # File lib/active_ldap/adapter/ldap_ext.rb, line 123
    def paged_search(base, scope, filter, attributes, limit, &block)
      # work around a bug with openldap
      page_size = 126
      cookie = ""
      critical = true

      loop do
        ber_string = LDAP::Control.encode(page_size, cookie)
        control = LDAP::Control.new(LDAP::LDAP_CONTROL_PAGEDRESULTS,
                                    ber_string,
                                    critical)

        search_ext(base, scope, filter, attributes,
                   false, [control], nil, 0, 0, limit, &block)

        control = find_paged_results_control(@controls)
        break if control.nil?
        returned_size, cookie = control.decode
        returned_size = returned_size.to_i
        page_size = returned_size if returned_size > 0

        break if cookie.empty?
      end
    end