PrivilegeDB: Add getters for fetching owner/target private sharing 70/65170/5
authorZofia Abramowska <z.abramowska@samsung.com>
Fri, 26 Feb 2016 16:08:51 +0000 (17:08 +0100)
committerTomasz Swierczek <t.swierczek@samsung.com>
Thu, 23 Jun 2016 05:18:57 +0000 (22:18 -0700)
Add getter functions to privilege db to fetch sharing info for
specified owner application or specified target application.
These are required to properly drop rules on application
uninstallation.

Change-Id: I7ea9933d65f453cf8838c519759be9a4036dacb9

src/common/include/privilege_db.h
src/common/privilege_db.cpp

index c6b794a..a14038a 100644 (file)
@@ -62,6 +62,8 @@ enum class StmtType {
     EAddPrivatePathSharing,
     ERemovePrivatePathSharing,
     EGetAllSharedPaths,
+    EGetSharingForOwner,
+    EGetSharingForTarget,
     EClearSharing,
     EClearPrivatePaths,
     EGetPrivilegeGroups,
@@ -117,6 +119,8 @@ private:
         { StmtType::EAddPrivatePathSharing, "INSERT INTO app_private_sharing_view(owner_app_name, target_app_name, path, path_label) VALUES(?, ?, ?, ?)"},
         { StmtType::ERemovePrivatePathSharing, "DELETE FROM app_private_sharing_view WHERE owner_app_name = ? AND target_app_name = ? AND path = ?"},
         { StmtType::EGetAllSharedPaths, "SELECT owner_app_name, path FROM app_private_sharing_view ORDER BY owner_app_name"},
+        { StmtType::EGetSharingForOwner, "SELECT target_app_name, path FROM app_private_sharing_view WHERE owner_app_name = ?"},
+        { StmtType::EGetSharingForTarget, "SELECT owner_app_name, path FROM app_private_sharing_view WHERE target_app_name = ?"},
         { StmtType::EClearSharing, "DELETE FROM app_private_sharing;"},
         { StmtType::EClearPrivatePaths, "DELETE FROM shared_path;"},
         { StmtType::EGetPrivilegeGroups, " SELECT group_name FROM privilege_group_view WHERE privilege_name = ?" },
@@ -392,6 +396,26 @@ public:
     void GetAllPrivateSharing(std::map<std::string, std::vector<std::string>> &appPathMap);
 
     /**
+     * Get all paths shared with target applications by specified owner application
+     *
+     * @param ownerAppName - owner of queried sharings
+     * @param ownerSharing - map containing vectors of paths shared by specified application
+     *                     mapped by target application names
+     * @exception DB::SqlConnection::Exception::InternalError on internal error
+     */
+    void GetPrivateSharingForOwner(const std::string &ownerAppName,
+                                   std::map<std::string, std::vector<std::string>> &ownerSharing);
+    /**
+     * Get all paths shared with specified target application name
+     *
+     * @param targetAppName - target of queried sharings
+     * @param targetSharing - map containing vectors of paths shared with specified application
+     *                     mapped by owner application names
+     * @exception DB::SqlConnection::Exception::InternalError on internal error
+     */
+    void GetPrivateSharingForTarget(const std::string &targetAppName,
+                                    std::map<std::string, std::vector<std::string>> &targetSharing);
+    /**
      * Clear information about private sharing.
      *
      * @exception DB::SqlConnection::Exception::InternalError on internal error
index 54bc75a..70da867 100644 (file)
@@ -324,6 +324,36 @@ void PrivilegeDb::GetAllPrivateSharing(std::map<std::string, std::vector<std::st
     });
 }
 
+void PrivilegeDb::GetPrivateSharingForOwner(const std::string &ownerAppName,
+                                            std::map<std::string, std::vector<std::string>> &ownerSharing)
+{
+    try_catch<void>([&] {
+        auto command = getStatement(StmtType::EGetSharingForOwner);
+        command->BindString(1, ownerAppName);
+        while (command->Step()) {
+            std::string targetAppName = command->GetColumnString(0);
+            std::string path = command->GetColumnString(1);
+            LogDebug("Got appName : " << targetAppName << " and path label : " << path);
+            ownerSharing[targetAppName].push_back(path);
+        }
+    });
+}
+
+void PrivilegeDb::GetPrivateSharingForTarget(const std::string &targetAppName,
+                                             std::map<std::string, std::vector<std::string>> &targetSharing)
+{
+    try_catch<void>([&] {
+        auto command = getStatement(StmtType::EGetSharingForTarget);
+        command->BindString(1, targetAppName);
+        while (command->Step()) {
+            std::string ownerAppName = command->GetColumnString(0);
+            std::string path = command->GetColumnString(1);
+            LogDebug("Got appName : " << ownerAppName << " and path label : " << path);
+            targetSharing[ownerAppName].push_back(path);
+        }
+    });
+}
+
 void PrivilegeDb::ClearPrivateSharing() {
     try_catch<void>([&] {
         {