**Use case**
In some organisations are using AD with hierarchical structure (nested organisation unit) and DN follow this structure. As result we can not  use permanent build_dn for users with different OU.

**Describe the solution you'd like**
Solution can be look like:
1) bind as service account
2) set dn for user_name by some filter string to user_dn
3) bind as user_dn with password
3) use user_dn with filter for group/roles fetching

This approach is implemented in Metabase.

LDAPClient(LDAPClient &&) = delete;
    LDAPClient & operator= (const LDAPClient &) = delete;
    LDAPClient & operator= (LDAPClient &&) = delete;
protected:
    MAYBE_NORETURN void diag(const int rc, String text = "");
    MAYBE_NORETURN void openConnection();
    void closeConnection() noexcept;
    SearchResults search(const SearchParams & search_params);
protected:
    const Params params;
#if USE_LDAP
    LDAP * handle = nullptr;
#endif
};
class LDAPSimpleAuthClient
    : private LDAPClient
{
public:
    using LDAPClient::LDAPClient;
    bool authenticate(const SearchParamsList * search_params, SearchResultsList * search_results);
};
}
#undef MAYBE_NORETURN