From: Bartlomiej Grzelewski Date: Wed, 20 Jul 2016 11:35:33 +0000 (+0200) Subject: Extend ClientOffline X-Git-Tag: submit/tizen/20161101.061208~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F90%2F80890%2F2;p=platform%2Fcore%2Fsecurity%2Fsecurity-manager.git Extend ClientOffline Two security-manager functions will be used by systemd. This functions must not wake up security-manager service because it will cause deadlock. Change-Id: Id83256df9ee282285522db513304b2f4240e18fd --- diff --git a/src/client/client-offline.cpp b/src/client/client-offline.cpp index c2d95df..121eee1 100644 --- a/src/client/client-offline.cpp +++ b/src/client/client-offline.cpp @@ -32,39 +32,40 @@ namespace SecurityManager { -ClientOffline::ClientOffline() +ClientOffline::ClientOffline(bool wakeUp) + : m_offlineMode(false) + , m_serviceLock(nullptr) { - offlineMode = false; - serviceLock = nullptr; - if (geteuid()) { LogInfo("UID != 0, attempting only on-line mode."); return; } try { - serviceLock = new SecurityManager::FileLocker(SecurityManager::SERVICE_LOCK_FILE, false); - if (serviceLock->Locked()) { + m_serviceLock = new SecurityManager::FileLocker(SecurityManager::SERVICE_LOCK_FILE, false); + if (wakeUp && m_serviceLock->Locked()) { int retval; MessageBuffer send, recv; LogInfo("Service isn't running, try to trigger it via socket activation."); - serviceLock->Unlock(); + m_serviceLock->Unlock(); Serialization::Serialize(send, static_cast(SecurityModuleCall::NOOP)); retval = sendToServer(SERVICE_SOCKET, send.Pop(), recv); if (retval != SECURITY_MANAGER_SUCCESS) { LogInfo("Socket activation attempt failed."); - serviceLock->Lock(); - offlineMode = serviceLock->Locked(); + m_serviceLock->Lock(); + m_offlineMode = m_serviceLock->Locked(); } else LogInfo("Service seems to be running now."); + } if (m_serviceLock->Locked()) { + m_offlineMode = true; } } catch (...) { LogError("Cannot detect off-line mode by lock."); - offlineMode = false; + m_offlineMode = false; } - if (offlineMode) + if (m_offlineMode) LogInfo("Working in off-line mode."); else LogInfo("Working in on-line mode."); @@ -72,13 +73,12 @@ ClientOffline::ClientOffline() ClientOffline::~ClientOffline() { - if (serviceLock != nullptr) - delete serviceLock; + delete m_serviceLock; } bool ClientOffline::isOffline(void) { - return offlineMode; + return m_offlineMode; } Credentials ClientOffline::getCredentials() diff --git a/src/client/include/client-offline.h b/src/client/include/client-offline.h index d50fc6f..ef640c8 100644 --- a/src/client/include/client-offline.h +++ b/src/client/include/client-offline.h @@ -32,14 +32,14 @@ namespace SecurityManager { class ClientOffline { public: - ClientOffline(); + ClientOffline(bool wakeUp = true); ~ClientOffline(); + ClientOffline& operator=(const ClientOffline &) = delete; bool isOffline(void); Credentials getCredentials(); - private: - bool offlineMode; - SecurityManager::FileLocker *serviceLock; + bool m_offlineMode; + SecurityManager::FileLocker *m_serviceLock; }; } // namespace SecurityManager