Extend ClientOffline 90/80890/2
authorBartlomiej Grzelewski <b.grzelewski@samsung.com>
Wed, 20 Jul 2016 11:35:33 +0000 (13:35 +0200)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Fri, 21 Oct 2016 08:36:18 +0000 (01:36 -0700)
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

src/client/client-offline.cpp
src/client/include/client-offline.h

index c2d95df..121eee1 100644 (file)
 
 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<int>(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()
index d50fc6f..ef640c8 100644 (file)
@@ -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