in metadata/src/metadata.cpp [35:111]
std::list<krb_ticket_info_t *> read_meta_data_json( std::string file_path )
{
std::list<krb_ticket_info_t *> krb_ticket_info_list;
try
{
if ( file_path.empty() )
{
std::cout << Util::getCurrentTime() << '\t' << "ERROR: meta data file is empty" << std::endl;
return krb_ticket_info_list;
}
// deserialize json to krb_ticket_info object
Json::Value root;
std::ifstream json_file( file_path );
if ( json_file.is_open() )
{
json_file >> root;
json_file.close();
// deserialize json to krb_ticket_info object
const Json::Value& child_tree_krb_info = root["krb_ticket_info"];
for ( const Json::Value& krb_info : child_tree_krb_info )
{
krb_ticket_info_t * krb_ticket_info =
new krb_ticket_info_t ;
std::string krb_file_path = krb_info["krb_file_path"].asString();
if ( contains_invalid_characters( krb_file_path ) )
{
std::cout << Util::getCurrentTime() << '\t' << "ERROR: krb file path contains invalid characters" <<
std::endl;
delete ( krb_ticket_info );
break;
}
// only add path if it exists
if ( std::filesystem::exists( krb_file_path ) )
{
krb_ticket_info->krb_file_path = krb_file_path;
std::string service_account = krb_info["service_account_name"].asString();
if (Util::contains_invalid_characters_in_ad_account_name(service_account)) {
std::cout << Util::getCurrentTime() << '\t' << "ERROR: service account name contains invalid characters" << std::endl;
delete krb_ticket_info;
break;
}
krb_ticket_info->service_account_name = service_account;
krb_ticket_info->domain_name = krb_info["domain_name"].asString();
krb_ticket_info->domainless_user = krb_info["domainless_user"].asString();
if(krb_info.isMember("distinguished_name"))
{
krb_ticket_info->distinguished_name = krb_info["distinguished_name"].asString();
}
if(krb_info.isMember("credspec_info"))
{
krb_ticket_info->credspec_info = krb_info["credspec_info"].asString();
}
krb_ticket_info_list.push_back( krb_ticket_info );
}
}
}
}
catch ( const std::exception& ex )
{
std::cout << Util::getCurrentTime() << '\t' << "ERROR: '" << ex.what() << "'!" << std::endl;
std::cout << Util::getCurrentTime() << '\t' << "ERROR: meta data file is not properly formatted" <<
std::endl;
return krb_ticket_info_list;
}
return krb_ticket_info_list;
}