docs: def ldap_search(self, filter, attributes, incremental, incremental_filter):
          """
          Query the configured LDAP server with the provided search filter and
          attribute list.
          """
          for uri in self.conf_LDAP_SYNC_BIND_URI:
              #Read record of this uri
              if (self.working_uri == uri):
                  adldap_sync = self.working_adldap_sync
                  created = False
              else:
                  adldap_sync, created = ADldap_Sync.objects.get_or_create(ldap_sync_uri=uri)
  
              if ((adldap_sync.syncs_to_full > 0) and incremental):
                  filter_to_use = incremental_filter.replace('?', self.whenchanged.strftime(self.conf_LDAP_SYNC_INCREMENTAL_TIMESTAMPFORMAT))
                  logger.debug("Using an incremental search. Filter is:'%s'" % filter_to_use)
              else:
                  filter_to_use = filter
  
              ldap.set_option(ldap.OPT_REFERRALS, 0)
              #ldap.set_option(ldap.OPT_NETWORK_TIMEOUT, 10)
              l = PagedLDAPObject(uri)
              l.protocol_version = 3
  
              if (uri.startswith('ldaps:')):
                  l.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_DEMAND)
                  l.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_DEMAND)
                  l.set_option(ldap.OPT_X_TLS_DEMAND, True)
              else:
                  l.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_NEVER)
                  l.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
                  l.set_option(ldap.OPT_X_TLS_DEMAND, False)
              try:
                  l.simple_bind_s(self.conf_LDAP_SYNC_BIND_DN, self.conf_LDAP_SYNC_BIND_PASS)
              except ldap.LDAPError as e:
                  logger.error("Error connecting to LDAP server %s : %s" % (uri, e))
                  continue
  
              results = l.paged_search_ext_s(self.conf_LDAP_SYNC_BIND_SEARCH, ldap.SCOPE_SUBTREE, filter_to_use, attrlist=attributes, serverctrls=None)
              l.unbind_s()
              if (self.working_uri is None):
                  self.working_uri = uri
                  self.conf_LDAP_SYNC_BIND_URI.insert(0, uri)
                  self.working_adldap_sync = adldap_sync
  
              return (uri, results)  # Return both the LDAP server URI used and the request. This is for incremental sync purposes
          #if not connected correctly, raise error
          raise