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 );
}