diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llappviewer.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llhasheduniqueid.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llmachineid.cpp | 24 | ||||
-rw-r--r-- | indra/newview/llmachineid.h | 17 | ||||
-rw-r--r-- | indra/newview/llmainlooprepeater.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llsechandler_basic.cpp | 6 |
6 files changed, 27 insertions, 26 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 81d0523512..7ccbbc6e10 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -826,7 +826,7 @@ bool LLAppViewer::init() LL_INFOS("InitInfo") << "LLCore::Http initialized." << LL_ENDL ; - LLMachineID::init(); + LLMachineID::getInstance(); //needs to be initialized before threads { if (gSavedSettings.getBOOL("QAModeMetrics")) diff --git a/indra/newview/llhasheduniqueid.cpp b/indra/newview/llhasheduniqueid.cpp index 03192d3e61..eca8d0935c 100644 --- a/indra/newview/llhasheduniqueid.cpp +++ b/indra/newview/llhasheduniqueid.cpp @@ -36,7 +36,7 @@ bool llHashedUniqueID(unsigned char id[MD5HEX_STR_SIZE]) LLMD5 hashed_unique_id; unsigned char unique_id[MAC_ADDRESS_BYTES]; if ( LLUUID::getNodeID(unique_id) - || LLMachineID::getUniqueID(unique_id, sizeof(unique_id)) + || LLMachineID::getInstance()->getUniqueID(unique_id, sizeof(unique_id)) ) { hashed_unique_id.update(unique_id, MAC_ADDRESS_BYTES); diff --git a/indra/newview/llmachineid.cpp b/indra/newview/llmachineid.cpp index b0ee8e7fcb..1420161008 100644 --- a/indra/newview/llmachineid.cpp +++ b/indra/newview/llmachineid.cpp @@ -34,8 +34,6 @@ using namespace std; #include <comdef.h> #include <Wbemidl.h> #endif -unsigned char static_unique_id[] = {0,0,0,0,0,0}; -bool static has_static_unique_id = false; #if LL_WINDOWS @@ -60,16 +58,22 @@ public: #endif //LL_WINDOWS // get an unique machine id. -// NOT THREAD SAFE - do before setting up threads. +// NOT THREAD SAFE - do first call before setting up threads. // MAC Address doesn't work for Windows 7 since the first returned hardware MAC address changes with each reboot, Go figure?? +LLMachineID::LLMachineID() : +mHasStaticUniqueId(false) +{ + // will set mStaticUniqueId to 0 + requestUniqueID(); +} -S32 LLMachineID::init() +S32 LLMachineID::requestUniqueID() { - memset(static_unique_id,0,sizeof(static_unique_id)); + memset(mStaticUniqueId, 0, sizeof(mStaticUniqueId)); S32 ret_code = 0; #if LL_WINDOWS # pragma comment(lib, "wbemuuid.lib") - size_t len = sizeof(static_unique_id); + size_t len = sizeof(mStaticUniqueId); // algorithm to detect BIOS serial number found at: // http://msdn.microsoft.com/en-us/library/aa394077%28VS.85%29.aspx @@ -228,7 +232,7 @@ S32 LLMachineID::init() if (vtProp.bstrVal[j] == 0) break; - static_unique_id[i] = (unsigned int)(static_unique_id[i] + serialNumber[j]); + mStaticUniqueId[i] = (unsigned int)(mStaticUniqueId[i] + serialNumber[j]); j++; } } @@ -253,16 +257,16 @@ S32 LLMachineID::init() unsigned char * staticPtr = (unsigned char *)(&static_unique_id[0]); ret_code = LLUUID::getNodeID(staticPtr); #endif - has_static_unique_id = true; + mHasStaticUniqueId = true; return ret_code; } S32 LLMachineID::getUniqueID(unsigned char *unique_id, size_t len) { - if (has_static_unique_id) + if (mHasStaticUniqueId) { - memcpy ( unique_id, &static_unique_id, len); + memcpy(unique_id, &mStaticUniqueId, len); LL_INFOS_ONCE("AppInit") << "UniqueID: 0x"; // Code between here and LL_ENDL is not executed unless the LL_DEBUGS // actually produces output diff --git a/indra/newview/llmachineid.h b/indra/newview/llmachineid.h index 6ef8c36fdb..b485910eb8 100644 --- a/indra/newview/llmachineid.h +++ b/indra/newview/llmachineid.h @@ -28,23 +28,20 @@ #define LL_LLMACHINEID_H -class LLMachineID +class LLMachineID : public LLSingleton<LLMachineID> { + LLSINGLETON(LLMachineID); public: - LLMachineID(); - virtual ~LLMachineID(); - static S32 getUniqueID(unsigned char *unique_id, size_t len); - static S32 init(); - -protected: + S32 getUniqueID(unsigned char *unique_id, size_t len); private: + S32 requestUniqueID(); +private: + bool mHasStaticUniqueId; + unsigned char mStaticUniqueId[6]; }; - - - #endif // LL_LLMACHINEID_H diff --git a/indra/newview/llmainlooprepeater.cpp b/indra/newview/llmainlooprepeater.cpp index 6736e9a950..972b1d838f 100644 --- a/indra/newview/llmainlooprepeater.cpp +++ b/indra/newview/llmainlooprepeater.cpp @@ -1,5 +1,5 @@ /** - * @file llmachineid.cpp + * @file llmainlooprepeater.cpp * @brief retrieves unique machine ids * * $LicenseInfo:firstyear=2009&license=viewerlgpl$ diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp index 9ab9e4a1a2..63471ab865 100644 --- a/indra/newview/llsechandler_basic.cpp +++ b/indra/newview/llsechandler_basic.cpp @@ -1310,7 +1310,7 @@ void LLSecAPIBasicHandler::_readProtectedData() U8 decrypted_buffer[BUFFER_READ_SIZE]; int decrypted_length; unsigned char unique_id[MAC_ADDRESS_BYTES]; - LLMachineID::getUniqueID(unique_id, sizeof(unique_id)); + LLMachineID::getInstance()->getUniqueID(unique_id, sizeof(unique_id)); LLXORCipher cipher(unique_id, sizeof(unique_id)); // read in the salt and key @@ -1395,7 +1395,7 @@ void LLSecAPIBasicHandler::_writeProtectedData() EVP_CIPHER_CTX_init(&ctx); EVP_EncryptInit(&ctx, EVP_rc4(), salt, NULL); unsigned char unique_id[MAC_ADDRESS_BYTES]; - LLMachineID::getUniqueID(unique_id, sizeof(unique_id)); + LLMachineID::getInstance()->getUniqueID(unique_id, sizeof(unique_id)); LLXORCipher cipher(unique_id, sizeof(unique_id)); cipher.encrypt(salt, STORE_SALT_SIZE); protected_data_stream.write((const char *)salt, STORE_SALT_SIZE); @@ -1639,7 +1639,7 @@ std::string LLSecAPIBasicHandler::_legacyLoadPassword() // Decipher with MAC address unsigned char unique_id[MAC_ADDRESS_BYTES]; - LLMachineID::getUniqueID(unique_id, sizeof(unique_id)); + LLMachineID::getInstance()->getUniqueID(unique_id, sizeof(unique_id)); LLXORCipher cipher(unique_id, sizeof(unique_id)); cipher.decrypt(&buffer[0], buffer.size()); |