From 91ed27492b2873daa5e0d3b33f1407a862be36dd Mon Sep 17 00:00:00 2001 From: Jaemin Ryu Date: Wed, 21 Sep 2016 13:53:18 +0900 Subject: [PATCH] Create filesystem related stuff on runtime Change-Id: I7a8e2f7467e961e6077d590d63b448c64280a37f Signed-off-by: Jaemin Ryu --- device-policy-manager.manifest | 3 --- packaging/device-policy-manager.spec | 2 -- server/CMakeLists.txt | 2 -- server/main.cpp | 2 +- server/policy-manager.cpp | 11 ++++++++--- server/policy-manager.h | 3 ++- server/policy-storage.cpp | 10 ++++------ server/policy-storage.h | 2 +- server/server.cpp | 3 ++- 9 files changed, 18 insertions(+), 20 deletions(-) diff --git a/device-policy-manager.manifest b/device-policy-manager.manifest index 9a5a57a..a76fdba 100644 --- a/device-policy-manager.manifest +++ b/device-policy-manager.manifest @@ -2,7 +2,4 @@ - - - diff --git a/packaging/device-policy-manager.spec b/packaging/device-policy-manager.spec index be89bc4..4c7e68d 100755 --- a/packaging/device-policy-manager.spec +++ b/packaging/device-policy-manager.spec @@ -56,8 +56,6 @@ managing device policies. %attr(755,root,root) %{_bindir}/device-policy-manager %attr(700,root,root) %{_bindir}/factory-reset %attr(700,root,root) %{_bindir}/dpm-admin-cli -%attr(711,security_fw,security_fw) %dir %{TZ_SYS_DATA}/dpm -%attr(700,security_fw,security_fw) %dir %{TZ_SYS_DATA}/dpm/policy %{_unitdir}/device-policy-manager.service %{_unitdir}/multi-user.target.wants/device-policy-manager.service diff --git a/server/CMakeLists.txt b/server/CMakeLists.txt index 639b24f..9a40a48 100644 --- a/server/CMakeLists.txt +++ b/server/CMakeLists.txt @@ -85,5 +85,3 @@ CONFIGURE_FILE(systemd/device-policy-manager.service.in systemd/device-policy-ma INSTALL(TARGETS ${TARGET} DESTINATION bin) INSTALL(FILES systemd/device-policy-manager.service DESTINATION ${SYSTEMD_UNIT_INSTALL_DIR}) -INSTALL(DIRECTORY DESTINATION ${DATA_INSTALL_DIR}) -INSTALL(DIRECTORY DESTINATION ${DATA_INSTALL_DIR}/policy) diff --git a/server/main.cpp b/server/main.cpp index 1ec6cb2..d6d44bb 100644 --- a/server/main.cpp +++ b/server/main.cpp @@ -35,7 +35,7 @@ int main(int argc, char *argv[]) { ::signal(SIGINT, signalHandler); - ::umask(0); + ::umask(022); try { Server server; diff --git a/server/policy-manager.cpp b/server/policy-manager.cpp index 031546d..3eda234 100644 --- a/server/policy-manager.cpp +++ b/server/policy-manager.cpp @@ -100,8 +100,8 @@ std::unordered_map managedPolicyMap = { } // namespace -PolicyManager::PolicyManager(const std::string& path) : - location(path) +PolicyManager::PolicyManager(const std::string& base, const std::string& path) : + store(base), location(path) { runtime::File policyDirectory(location); @@ -110,6 +110,11 @@ PolicyManager::PolicyManager(const std::string& path) : } policyDirectory.makeDirectory(true); + + runtime::File policyStore(store); + if (!policyStore.exists()) { + policyStore.makeDirectory(true); + } } PolicyManager::~PolicyManager() @@ -190,7 +195,7 @@ void PolicyManager::prepareUserPolicy(uid_t user) void PolicyManager::populateStorage(const std::string& name, uid_t uid, bool create) { - std::unique_ptr storage(new PolicyStorage(name, uid, create)); + std::unique_ptr storage(new PolicyStorage(store, name, uid, create)); for (auto it = storage->begin(); it != storage->end(); ++it) { if (managedPolicyMap.count(it->first)) { const ManagedPolicy& policy = managedPolicyMap.at(it->first); diff --git a/server/policy-manager.h b/server/policy-manager.h index 73a9e6f..f95a7f7 100644 --- a/server/policy-manager.h +++ b/server/policy-manager.h @@ -31,7 +31,7 @@ class PolicyManager { public: typedef std::function PolicyComparator; - PolicyManager(const std::string& path); + PolicyManager(const std::string& base, const std::string& path); ~PolicyManager(); PolicyManager(const PolicyManager&) = delete; @@ -70,6 +70,7 @@ private: void cleanup(); private: + std::string store; std::string location; std::vector> storageList; }; diff --git a/server/policy-storage.cpp b/server/policy-storage.cpp index e0c09f6..4bbd3cf 100644 --- a/server/policy-storage.cpp +++ b/server/policy-storage.cpp @@ -98,17 +98,15 @@ const std::string defaultPolicyTemplate = " \n" "\n"; -const std::string clientPolicyStorage = DATA_PATH "/policy"; - -std::string StorageLocator(const std::string& name, uid_t uid) +std::string StorageLocator(const std::string& base, const std::string& name, uid_t uid) { - return clientPolicyStorage + "/" + name + "-" + std::to_string(uid) + ".xml"; + return base + "/" + name + "-" + std::to_string(uid) + ".xml"; } } // namespace -PolicyStorage::PolicyStorage(const std::string& name, uid_t uid, bool create) : - user(uid), owner(name), location(StorageLocator(name, uid)), data(nullptr) +PolicyStorage::PolicyStorage(const std::string& storage, const std::string& name, uid_t uid, bool create) : + user(uid), owner(name), location(StorageLocator(storage, name, uid)), data(nullptr) { bool useDefaultPolicyTemplate = false; diff --git a/server/policy-storage.h b/server/policy-storage.h index b812fb1..a1a52d7 100644 --- a/server/policy-storage.h +++ b/server/policy-storage.h @@ -32,7 +32,7 @@ class PolicyStorage { public: typedef std::unordered_map::iterator PolicyIterator; - PolicyStorage(const std::string& pkgid, uid_t uid, bool create = true); + PolicyStorage(const std::string& storage, const std::string& pkgid, uid_t uid, bool create = true); ~PolicyStorage(); PolicyStorage(const PolicyStorage&) = delete; diff --git a/server/server.cpp b/server/server.cpp index 7b7ac48..3dcf378 100644 --- a/server/server.cpp +++ b/server/server.cpp @@ -39,6 +39,7 @@ namespace { const std::string POLICY_MANAGER_ADDRESS = "/tmp/.device-policy-manager.sock"; const std::string POLICY_ACCESS_POINT_PATH = "/var/run/dpm"; +const std::string POLICY_STORAGE_PATH = "/opt/etc/dpm/policy"; const std::string DEVICE_ADMIN_REPOSITORY = DB_PATH; std::string GetPackageId(uid_t uid, pid_t pid) @@ -56,7 +57,7 @@ std::string GetPackageId(uid_t uid, pid_t pid) Server::Server() { - policyManager.reset(new PolicyManager(POLICY_ACCESS_POINT_PATH)); + policyManager.reset(new PolicyManager(POLICY_STORAGE_PATH, POLICY_ACCESS_POINT_PATH)); adminManager.reset(new DeviceAdministratorManager(DEVICE_ADMIN_REPOSITORY)); service.reset(new rmi::Service(POLICY_MANAGER_ADDRESS)); -- 2.7.4