Fix checking for privileges during obtaining group 76/29476/11
authorJan Cybulski <j.cybulski@samsung.com>
Tue, 18 Nov 2014 08:29:13 +0000 (09:29 +0100)
committerJan Cybulski <j.cybulski@samsung.com>
Tue, 18 Nov 2014 14:25:55 +0000 (06:25 -0800)
Privileges of apps installed for all users also needs to be taken into account.

Change-Id: I1d31a27dc0b718f46b26d654c518d8071bbe4cfb
Signed-off-by: Jan Cybulski <j.cybulski@samsung.com>
src/server/service/service.cpp

index 2c26d1b..ec19017 100644 (file)
@@ -31,6 +31,7 @@
 
 #include <cstring>
 #include <unordered_set>
+#include <algorithm>
 
 #include <dpl/log/log.h>
 #include <dpl/serialization.h>
@@ -492,6 +493,13 @@ bool Service::processGetAppGroups(MessageBuffer &buffer, MessageBuffer &send, ui
 
         std::vector<std::string> privileges;
         m_privilegeDb.GetPkgPrivileges(pkgId, uid, privileges);
+        /*there is also a need of checking, if privilege is granted to all users*/
+        size_t tmp = privileges.size();
+        m_privilegeDb.GetPkgPrivileges(pkgId, getGlobalUserId(), privileges);
+        /*privileges needs to be sorted and with no duplications - for cynara sake*/
+        std::inplace_merge(privileges.begin(), privileges.begin() + tmp, privileges.end());
+        privileges.erase( unique( privileges.begin(), privileges.end() ), privileges.end() );
+
         for (const auto &privilege : privileges) {
             std::vector<std::string> gidsTmp;
             m_privilegeDb.GetPrivilegeGroups(privilege, gidsTmp);