From: Sungbae Yoo Date: Wed, 15 Feb 2017 04:06:03 +0000 (+0900) Subject: Change to stop user session service before the other services X-Git-Tag: submit/tizen/20170217.072251~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=66ca7855e060adaec705b108e2cc51aba5969627;p=platform%2Fcore%2Fsecurity%2Fode.git Change to stop user session service before the other services Signed-off-by: Sungbae Yoo Change-Id: Ib8525794d645747deadac3ddc79c928ba1207b33 --- diff --git a/server/internal-encryption.cpp b/server/internal-encryption.cpp index 6a8a90a..7016f25 100644 --- a/server/internal-encryption.cpp +++ b/server/internal-encryption.cpp @@ -60,6 +60,48 @@ namespace { std::unique_ptr engine; +void stopSystemdUserSessions() { + std::vector userSessionServices; + dbus::Connection& systemDBus = dbus::Connection::getSystem(); + dbus::VariantIterator iter; + + systemDBus.methodcall("org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + "ListUnits", + -1, "(a(ssssssouso))", "") + .get("(a(ssssssouso))", &iter); + + while (1) { + unsigned int dataUint; + char *dataStr[9]; + int ret; + + ret = iter.get("(ssssssouso)", dataStr, dataStr + 1, dataStr + 2, + dataStr + 3, dataStr + 4, dataStr + 5, + dataStr + 6, &dataUint, dataStr + 7, + dataStr + 8); + + if (!ret) { + break; + } + + std::string service(dataStr[0]); + if (service.compare(0, 5, "user@") == 0) { + userSessionServices.push_back(service); + } + } + + for (const std::string& service : userSessionServices) { + INFO("Stop service - " + service); + systemDBus.methodcall("org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + "StopUnit", + -1, "", "(ss)", service.c_str(), "flush"); + } +} + void stopDependedSystemdServices() { dbus::Connection& systemDBus = dbus::Connection::getSystem(); @@ -226,6 +268,8 @@ int InternalEncryption::encrypt(const std::string& password, unsigned int option try { showProgressUI("Encrypting"); + INFO("Close all user sessions..."); + stopSystemdUserSessions(); INFO("Close all processes using internal storage..."); stopDependedSystemdServices(); INFO("Umount internal storage...");