Achievements: Use gethostuuid() as machine key on macOS (#3452)

This commit is contained in:
Davide Pesavento 2025-06-18 04:29:26 -04:00 committed by GitHub
parent 99268f22ec
commit 6ef3df5a5c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 11 additions and 6 deletions

View File

@ -71,17 +71,17 @@ public:
// append hex string // append hex string
void append_hex(const void* data, size_t len, bool comma_separate = false); void append_hex(const void* data, size_t len, bool comma_separate = false);
// append a single character to this string // prepend a single character to this string
void prepend(char c); void prepend(char c);
// append a string to this string // prepend a string to this string
void prepend(const char* str); void prepend(const char* str);
void prepend(const char* str, u32 length); void prepend(const char* str, u32 length);
void prepend(const std::string& str); void prepend(const std::string& str);
void prepend(const std::string_view str); void prepend(const std::string_view str);
void prepend(const SmallStringBase& str); void prepend(const SmallStringBase& str);
// append formatted string to this string // prepend formatted string to this string
void prepend_sprintf(const char* format, ...) PRINTFLIKE(2, 3); void prepend_sprintf(const char* format, ...) PRINTFLIKE(2, 3);
void prepend_vsprintf(const char* format, va_list ap); void prepend_vsprintf(const char* format, va_list ap);

View File

@ -3709,7 +3709,6 @@ static TinyString GetLoginEncryptionMachineKey()
TinyString ret; TinyString ret;
#ifdef _WIN32 #ifdef _WIN32
HKEY hKey; HKEY hKey;
DWORD error; DWORD error;
if ((error = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Cryptography", 0, KEY_READ, &hKey)) != if ((error = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Cryptography", 0, KEY_READ, &hKey)) !=
@ -3741,12 +3740,18 @@ static TinyString GetLoginEncryptionMachineKey()
ret.resize(machine_guid_length); ret.resize(machine_guid_length);
RegCloseKey(hKey); RegCloseKey(hKey);
#elif !defined(__ANDROID__) #else
#ifdef __linux__ #if defined(__linux__)
// use /etc/machine-id on Linux // use /etc/machine-id on Linux
std::optional<std::string> machine_id = FileSystem::ReadFileToString("/etc/machine-id"); std::optional<std::string> machine_id = FileSystem::ReadFileToString("/etc/machine-id");
if (machine_id.has_value()) if (machine_id.has_value())
ret = std::string_view(machine_id.value()); ret = std::string_view(machine_id.value());
#elif defined(__APPLE__)
// use gethostuuid(2) on macOS
const struct timespec ts{};
uuid_t uuid{};
if (gethostuuid(uuid, &ts) == 0)
ret.append_hex(uuid, sizeof(uuid), false);
#endif #endif
if (ret.empty()) if (ret.empty())