static std::pair find_dn()

in common/util.hpp [520:561]


    static std::pair<int, std::string> find_dn( std::string gmsa_account_name, std::string base_dn,
                                                std::string fqdn )
    {
        /**
         *  ldapsearch  -H ldap://ip-xxxxxxxx.activedirectory1.com
         *    -b 'DC=ActiveDirectory1,DC=com' -s sub '(CN=WebApp01)'  distinguishedName | grep
         * "distinguishedName:"
         */
        std::string distinguished_name;
        std::string search_string = " -s sub '(CN=" + gmsa_account_name + ")' distinguishedName";
        std::pair<int, std::string> ldap_search_result =
            Util::execute_ldapsearch( gmsa_account_name, base_dn, fqdn, search_string );
        if ( ldap_search_result.first == 0 && !ldap_search_result.second.empty() )
        {
            std::size_t start_pos = ldap_search_result.second.find( "distinguishedName:" );
            if ( start_pos != std::string::npos )
            {
                // distinguishedName:
                // CN=WebApp01,OU=MYOU,OU=Users,OU=ActiveDirectory,DC=ActiveDirectory1,DC=com
                distinguished_name = "distinguishedName: ";
                start_pos += distinguished_name.length();

                distinguished_name = ldap_search_result.second.substr( start_pos );
                std::size_t end_pos = distinguished_name.find_first_of( "\n" );
                if ( end_pos != std::string::npos )
                {
                    distinguished_name = distinguished_name.substr( 0, end_pos );
                }
                else
                {
                    distinguished_name = "";
                    return std::make_pair( -1, distinguished_name );
                }
            }
        }
        else
        {
            distinguished_name = "";
            return std::make_pair( -1, distinguished_name );
        }
        return std::make_pair( 0, distinguished_name );
    }