docs: def _do_search(conf):
      '''
      Builds connection and search arguments, performs the LDAP search and
      formats the results as a dictionary appropriate for pillar use.
      '''
      # Build LDAP connection args
      connargs = {}
      for name in ['server', 'port', 'tls', 'binddn', 'bindpw', 'anonymous']:
          connargs[name] = _config(name, conf)
      if connargs['binddn'] and connargs['bindpw']:
          connargs['anonymous'] = False
      # Build search args
      try:
          _filter = conf['filter']
      except KeyError:
          raise SaltInvocationError('missing filter')
      _dn = _config('dn', conf)
      scope = _config('scope', conf)
      _lists = _config('lists', conf) or []
      _attrs = _config('attrs', conf) or []
      _dict_key_attr = _config('dict_key_attr', conf, 'dn')
      attrs = _lists + _attrs + [_dict_key_attr]
      if not attrs:
          attrs = None
      # Perform the search
      try:
          result = __salt__['ldap.search'](_filter, _dn, scope, attrs,
                                           **connargs)['results']
      except IndexError:  # we got no results for this search
          log.debug('LDAP search returned no results for filter %s', _filter)
          result = {}
      except Exception:
          log.critical(
              'Failed to retrieve pillar data from LDAP:\n', exc_info=True
          )
          return {}
      return result