From 19d63b5da01410d5f79d34ef2d4e62e1a63468b1 Mon Sep 17 00:00:00 2001 From: Zofia Abramowska Date: Fri, 26 Feb 2016 17:08:51 +0100 Subject: [PATCH] PrivilegeDB: Add getters for fetching owner/target private sharing 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 | 24 ++++++++++++++++++++++++ src/common/privilege_db.cpp | 30 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/common/include/privilege_db.h b/src/common/include/privilege_db.h index c6b794a..a14038a 100644 --- a/src/common/include/privilege_db.h +++ b/src/common/include/privilege_db.h @@ -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> &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> &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> &targetSharing); + /** * Clear information about private sharing. * * @exception DB::SqlConnection::Exception::InternalError on internal error diff --git a/src/common/privilege_db.cpp b/src/common/privilege_db.cpp index 54bc75a..70da867 100644 --- a/src/common/privilege_db.cpp +++ b/src/common/privilege_db.cpp @@ -324,6 +324,36 @@ void PrivilegeDb::GetAllPrivateSharing(std::map> &ownerSharing) +{ + try_catch([&] { + 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> &targetSharing) +{ + try_catch([&] { + 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([&] { { -- 2.7.4