mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-18 11:19:10 +00:00
pfMacPasswordStore implementation.
Conflicts: Sources/Plasma/FeatureLib/pfPasswordStore/pfPasswordStore_impl.h
This commit is contained in:
@ -15,6 +15,11 @@ set(pfPasswordStore_SOURCES
|
|||||||
add_library(pfPasswordStore STATIC ${pfPasswordStore_HEADERS} ${pfPasswordStore_SOURCES})
|
add_library(pfPasswordStore STATIC ${pfPasswordStore_HEADERS} ${pfPasswordStore_SOURCES})
|
||||||
target_link_libraries(pfPasswordStore CoreLib plFile)
|
target_link_libraries(pfPasswordStore CoreLib plFile)
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
find_library(SECURITY_LIBRARY Security)
|
||||||
|
target_link_libraries(pfPasswordStore ${SECURITY_LIBRARY})
|
||||||
|
endif(APPLE)
|
||||||
|
|
||||||
source_group("Header Files" FILES ${pfPasswordStore_HEADERS})
|
source_group("Header Files" FILES ${pfPasswordStore_HEADERS})
|
||||||
source_group("Source Files" FILES ${pfPasswordStore_SOURCES})
|
source_group("Source Files" FILES ${pfPasswordStore_SOURCES})
|
||||||
|
|
||||||
|
@ -54,8 +54,12 @@ pfPasswordStore* pfPasswordStore::Instance()
|
|||||||
if (store == nullptr) {
|
if (store == nullptr) {
|
||||||
#ifdef HS_BUILD_FOR_WIN32
|
#ifdef HS_BUILD_FOR_WIN32
|
||||||
store = new pfWin32PasswordStore();
|
store = new pfWin32PasswordStore();
|
||||||
|
#else
|
||||||
|
#ifdef HS_BUILD_FOR_OSX
|
||||||
|
store = new pfMacPasswordStore();
|
||||||
#else
|
#else
|
||||||
store = new pfFilePasswordStore();
|
store = new pfFilePasswordStore();
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,3 +202,52 @@ bool pfWin32PasswordStore::SetPassword(const plString& username, const plString&
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HS_BUILD_FOR_OSX
|
||||||
|
#include <Security/Security.h>
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
** pfMacPasswordStore **
|
||||||
|
*****************************************************************************/
|
||||||
|
const plString pfMacPasswordStore::GetPassword(const plString& username)
|
||||||
|
{
|
||||||
|
plString service = plProduct::UUID();
|
||||||
|
|
||||||
|
void* passwd = nullptr;
|
||||||
|
uint32_t passwd_len = 0;
|
||||||
|
|
||||||
|
if (SecKeychainFindGenericPassword(nullptr,
|
||||||
|
service.GetSize(),
|
||||||
|
service.c_str(),
|
||||||
|
username.GetSize(),
|
||||||
|
username.c_str(),
|
||||||
|
&passwd_len,
|
||||||
|
&passwd,
|
||||||
|
nullptr) != errSecSuccess)
|
||||||
|
{
|
||||||
|
return plString::Null;
|
||||||
|
}
|
||||||
|
|
||||||
|
plString ret(reinterpret_cast<const char*>(passwd), size_t(passwd_len));
|
||||||
|
|
||||||
|
SecKeychainItemFreeContent(nullptr, passwd);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool pfMacPasswordStore::SetPassword(const plString& username, const plString& password)
|
||||||
|
{
|
||||||
|
plString service = plProduct::UUID();
|
||||||
|
|
||||||
|
return SecKeychainAddGenericPassword(nullptr,
|
||||||
|
service.GetSize(),
|
||||||
|
service.c_str(),
|
||||||
|
username.GetSize(),
|
||||||
|
username.c_str(),
|
||||||
|
password.GetSize(),
|
||||||
|
password.c_str(),
|
||||||
|
nullptr) == errSecSuccess;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -80,8 +80,18 @@ public:
|
|||||||
* @todo A Linux libsecret-based storage mechanism.
|
* @todo A Linux libsecret-based storage mechanism.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef HS_BUILD_FOR_OSX
|
||||||
/**
|
/**
|
||||||
* @todo An OSX KeyChain-based storage mechanism.
|
* An OSX Keychain password storage mechanism.
|
||||||
*/
|
*/
|
||||||
|
class pfMacPasswordStore : public pfPasswordStore
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
pfMacPasswordStore() { }
|
||||||
|
|
||||||
|
virtual const plString GetPassword(const plString& username);
|
||||||
|
virtual bool SetPassword(const plString& username, const plString& password);
|
||||||
|
};
|
||||||
|
#endif //HS_BUILD_FOR_OSX
|
||||||
|
|
||||||
#endif //pfPasswordStore_impl_inc
|
#endif //pfPasswordStore_impl_inc
|
||||||
|
Reference in New Issue
Block a user