in client-library/src/Attestation/AttestationClient/lib/AttestationClientImpl.cpp [635:702]
AttestationResult AttestationClientImpl::GetOSInfo(OsInfo& os_info) {
CLIENT_LOG_INFO("Retrieving OS Info");
os_info = OsInfo();
AttestationResult result(AttestationResult::ErrorCode::SUCCESS);
#ifdef PLATFORM_UNIX
std::unordered_map<std::string, std::string> os_release_entries;
if(!os::ParseOSReleaseFile(g_os_release_path, std::string("="), os_release_entries)) {
CLIENT_LOG_ERROR("Failed to parse file path to retrieve OS info");
result.code_ = AttestationResult::ErrorCode::ERROR_FAILED_TO_GET_OS_INFO;
result.description_ = std::string("Failed to parse file path to retrieve OS info");
return result;
}
auto entry = os_release_entries.find(std::string(g_distro_name_key));
if(entry == os_release_entries.end()) {
CLIENT_LOG_ERROR("Distro name not found");
result.code_ = AttestationResult::ErrorCode::ERROR_FAILED_TO_GET_OS_INFO;
result.description_ = std::string("Distro name not found");
return result;
}
std::string distro_name = entry->second;
entry = os_release_entries.find(std::string(g_distro_version_key));
std::string version_str = std::string("1.0");
if(entry == os_release_entries.end()) {
CLIENT_LOG_ERROR("Distro version not found, using default version");
} else {
version_str = entry->second;
}
uint32_t major_version = 0;
uint32_t minor_version = 0;
if(!os::ParseVersionString(version_str, major_version, minor_version)) {
CLIENT_LOG_ERROR("Failed to process distro version, using default version");
major_version = 1;
minor_version = 0;
}
os_info.type = OsType::LINUX;
os_info.distro_name = distro_name;
os_info.distro_version_major = major_version;
os_info.distro_version_minor = minor_version;
os_info.build = std::string(g_os_build_str);
#else
os_info.type = OsType::WINDOWS;
// For windows, distro name will be an a static string "Microsoft".
os_info.distro_name = std::string(g_distro_name_str);
std::string build;
uint32_t major_version = 0;
uint32_t minor_version = 0;
if(!os::GetWindowsVersion(major_version, minor_version, build)) {
CLIENT_LOG_ERROR("Failed to get windows version");
result.code_ = AttestationResult::ErrorCode::ERROR_FAILED_TO_GET_OS_INFO;
result.description_ = std::string("Failed to get windows version");
return result;
}
os_info.distro_version_major = major_version;
os_info.distro_version_minor = minor_version;
os_info.build = build;
#endif
return result;
}