filter pkgs by list file
authorHyunwoo Kim <hwlove.kim@samsung.com>
Wed, 26 Jun 2013 11:37:12 +0000 (20:37 +0900)
committerHyunwoo Kim <hwlove.kim@samsung.com>
Wed, 26 Jun 2013 11:37:20 +0000 (20:37 +0900)
Change-Id: I623b058881bc4679cb3632d5394b2fa45c6aa38e
Signed-off-by: Hyunwoo Kim <hwlove.kim@samsung.com>
client/CMakeLists.txt
client/src/PrivacyChecker.cpp
common/inc/PrivacyDb.h
common/src/PrivacyDb.cpp
common/src/PrivacyIdInfo.cpp
packaging/privacy-manager.spec
pkgmgr_plugin/privileges.cpp
res/usr/share/privacy-manager/privacy-filter-list.ini [new file with mode: 0644]
server/CMakeLists.txt

index 9d3d4e79cb8627016243229d1aa848723ac317a9..c384f2620edac228e86e0df179bec35cd7026575 100644 (file)
@@ -36,6 +36,11 @@ SET(common_include_dir "${CMAKE_SOURCE_DIR}/common/inc/")
 ADD_DEFINITIONS("-fvisibility=hidden")
 ADD_DEFINITIONS("-Wall -Werror")
 ADD_DEFINITIONS("-DDLOG_ERROR_ENABLED")
+OPTION (FILTER_LISTED_PKG "FILTER PKG BY LIST" ON)
+IF(FILTER_LISTED_PKG)
+    MESSAGE("FILTER PKGs BY FILTERING LIST")
+    ADD_DEFINITIONS("-D__FILTER_LISTED_PKG")
+ENDIF(FILTER_LISTED_PKG)
 
 ###################################################################################################
 ## for libprivacy-manager-client (executable)
index 897c29328201cd3fa97b9e6fa2cb35bd4b8b7ef6..0cda415a2f4ca7065cfa29cd2ed44d80cde845eb 100644 (file)
@@ -370,7 +370,7 @@ PrivacyChecker::updateCache(const std::string pkgId, std::string privacyId, std:
        {\r
                bool privacyEnabled = sqlite3_column_int(pPrivacyStmt.get(), 0) > 0 ? true : false;\r
 \r
-               LOGD("Set result : %s : %d", privacyId.c_str(), privacyEnabled );\r
+               SECURE_LOGD("Set result : %s : %d", privacyId.c_str(), privacyEnabled );\r
                pkgCacheMap.erase(privacyId);\r
                pkgCacheMap.insert(std::map < std::string, bool >::value_type(privacyId, privacyEnabled));\r
        }\r
@@ -401,7 +401,7 @@ PrivacyChecker::updateCache(std::string pkgId, std::map < std::string, bool >& p
 \r
                pkgCacheMap.insert(std::map < std::string, bool >::value_type(std::string(privacyId), privacyEnabled));\r
 \r
-               LOGD("Privacy found : %s %d", privacyId, privacyEnabled);\r
+               SECURE_LOGD("Privacy found : %s %d", privacyId, privacyEnabled);\r
        }\r
        LOGI("leave : %d", res);\r
        return PRIV_MGR_ERROR_SUCCESS;\r
index dad0e9a6ec4bea3f52a89cc3bc9cdca517fd578f..470fb5b66eb52944b64f24290dca3fe6690860e7 100644 (file)
 #include <memory>
 #include <list>
 #include <mutex>
+#ifdef __FILTER_LISTED_PKG
+#include <map>
+#endif
 
 class PrivacyDb
 {
 private:
        static std::mutex m_singletonMutex;
        static PrivacyDb* m_pInstance;
+#ifdef __FILTER_LISTED_PKG
+    const static std::string PRIVACY_FILTER_LIST_FILE;
+    const static std::string FILTER_KEY;
+    static std::map < std::string, bool > m_filteredPkgList;
+#endif
 
 private:
        void createDB(void);
index 2ce0d7a9dafe3ad266702ace70f55057f6de68f4..f1a9bc6b7a6e6df5b6ddc048581908b5f128a177 100644 (file)
@@ -15,6 +15,7 @@
  */
 
 #include <sstream>
+#include <fstream>
 #include <dlog.h>
 #include <Utils.h>
 #include <PrivacyDb.h>
 
 std::mutex PrivacyDb::m_singletonMutex;
 PrivacyDb* PrivacyDb::m_pInstance = NULL;
+#ifdef __FILTER_LISTED_PKG
+const std::string PrivacyDb::PRIVACY_FILTER_LIST_FILE = std::string("/usr/share/privacy-manager/privacy-filter-list.ini");
+const std::string PrivacyDb::FILTER_KEY = std::string("package_id");
+std::map < std::string, bool > PrivacyDb::m_filteredPkgList;
+#endif
 
 void
 PrivacyDb::createDB(void)
@@ -33,6 +39,7 @@ PrivacyDb::createDB(void)
 
 bool PrivacyDb::isFilteredPackage(const std::string pkgId) const
 {
+#ifdef __FILTER_PRELOADED_PKG__
        pkgmgrinfo_pkginfo_h handle;
 
        int res = pkgmgrinfo_pkginfo_get_pkginfo(pkgId.c_str(), &handle);
@@ -45,6 +52,18 @@ bool PrivacyDb::isFilteredPackage(const std::string pkgId) const
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
 
        return preloaded;
+#elif __FILTER_LISTED_PKG
+       if (m_filteredPkgList.empty())
+               return false;
+
+       std::map < std::string, bool >::iterator it;
+       if ( (it = m_filteredPkgList.find(pkgId)) != m_filteredPkgList.end())
+               return true;
+
+    return false;
+#else
+    return false;
+#endif
 }
 
 int
@@ -88,12 +107,12 @@ PrivacyDb::getPrivacyAppPackages(std::list <std::string>& list) const
        {
                const char* pValue =  reinterpret_cast < const char* > (sqlite3_column_text(pStmt.get(), 0));
 
-               LOGD("PkgId found : %s ", pValue);
+               SECURE_LOGD("PkgId found : %s ", pValue);
                std::string pkgId = std::string(pValue);
 
                if (isFilteredPackage(pkgId))
                {
-                       LOGD("%s is Filtered", pValue);
+                       SECURE_LOGD("%s is Filtered", pValue);
                        continue;
                }
                list.push_back(std::string(pValue));
@@ -124,7 +143,7 @@ PrivacyDb::getAppPackagePrivacyInfo(const std::string pkgId, std::list < std::pa
 
                privacyInfoList.push_back( std::pair <std::string, bool> (std::string(privacyId), privacyEnabled) );
 
-               LOGD("Privacy found : %s %d", privacyId, privacyEnabled);
+               SECURE_LOGD("Privacy found : %s %d", privacyId, privacyEnabled);
        }
 
        LOGI("leave");
@@ -155,7 +174,7 @@ PrivacyDb::addAppPackagePrivacyInfo(const std::string pkgId, const std::list < s
        
        for ( std::list <std::string>::const_iterator iter = privilegeList.begin(); iter != privilegeList.end(); ++iter)
        {
-               LOGD(" install privacy: %s", iter->c_str());
+               SECURE_LOGD(" install privacy: %s", iter->c_str());
                prepareDb(pDbHandler, privacyQuery.c_str(), pPrivacyStmt);
                
                res = sqlite3_bind_text(pPrivacyStmt.get(), 1, pkgId.c_str(), -1, SQLITE_TRANSIENT);
@@ -218,7 +237,7 @@ PrivacyDb::isUserPrompted(const std::string pkgId, bool& isPrompted) const
 
        if (isFilteredPackage(pkgId))
        {
-               LOGD("%s is Filtered", pkgId.c_str());
+               SECURE_LOGD("%s is Filtered", pkgId.c_str());
                return 0;
        }
 
@@ -236,7 +255,7 @@ PrivacyDb::isUserPrompted(const std::string pkgId, bool& isPrompted) const
        }
        else
        {
-               LOGE("The package[%s] can not access privacy", pkgId.c_str());
+               SECURE_LOGE("The package[%s] can not access privacy", pkgId.c_str());
                return PRIV_MGR_ERROR_SUCCESS;
        }
 
@@ -279,7 +298,7 @@ PrivacyDb::getAppPackagesbyPrivacyId(std::string privacyId, std::list < std::pai
        openDb(PRIVACY_DB_PATH.c_str(), pDbHandler, SQLITE_OPEN_READWRITE);
        prepareDb(pDbHandler, sql.c_str(), pStmt);
 
-       LOGD("privacy id : %s", privacyId.c_str());
+       SECURE_LOGD("privacy id : %s", privacyId.c_str());
        int res = sqlite3_bind_text(pStmt.get(), 1, privacyId.c_str(), -1, SQLITE_TRANSIENT);
        TryReturn( res == SQLITE_OK, PRIV_MGR_ERROR_DB_ERROR, , "sqlite3_bind_text : %d", res);
 
@@ -291,7 +310,7 @@ PrivacyDb::getAppPackagesbyPrivacyId(std::string privacyId, std::list < std::pai
         std::string pkgId = std::string(pPkgId);
                if (isFilteredPackage(pkgId))
                {
-                       LOGD("%s is Filtered", pPkgId);
+                       SECURE_LOGD("%s is Filtered", pPkgId);
                        continue;
                }
 
@@ -306,6 +325,29 @@ PrivacyDb::getAppPackagesbyPrivacyId(std::string privacyId, std::list < std::pai
 PrivacyDb::PrivacyDb(void)
 {
 
+#ifdef __FILTER_LISTED_PKG
+    SECURE_LOGD("Construct with filter list");
+    std::ifstream inFile;
+    inFile.open(PRIVACY_FILTER_LIST_FILE);
+    TryReturn(inFile.is_open(), , , "Cannot find %s file.", PRIVACY_FILTER_LIST_FILE.c_str());
+    
+    char inputLine[256] = {0,};
+    while(inFile.getline(inputLine, 256))
+    {
+        if (inputLine[0] == '#')
+            continue;
+        if (strncmp(FILTER_KEY.c_str(), inputLine, FILTER_KEY.length()) != 0)
+        {
+            SECURE_LOGD("Invalid Key[%s]", inputLine);
+            continue;
+        }
+        std::string pkgId = std::string(inputLine).substr(FILTER_KEY.length() + 1);
+        if (!pkgId.empty())
+            m_filteredPkgList.insert ( std::pair < std::string, bool > (pkgId, true) );
+        SECURE_LOGD("Filter PKG: %s", pkgId.c_str());
+    }
+#endif
+
 }
 
 PrivacyDb::~PrivacyDb(void)
index 9438552631321321ae4f7b7a87b9fafcfe3369f8..64d28fb0699f1e6634ef5ca7b397f55aaed5fa20 100644 (file)
@@ -103,7 +103,7 @@ PrivacyIdInfo::getAllPrivacyId(std::list < std::string >& privacyIdList)
        {\r
                const char* privacyId =  reinterpret_cast < const char* > (sqlite3_column_text(pStmt.get(), 0));\r
                privacyIdList.push_back(std::string(privacyId));\r
-               LOGD(" privacy Id : %s", privacyId);\r
+               SECURE_LOGD(" privacy Id : %s", privacyId);\r
        }\r
 \r
        return PRIV_MGR_ERROR_SUCCESS;\r
index afe12fb01583c2152a40606fecefd07843fa6fbf..4817c34d0ac43b2c36091c250619dd13999917aa 100755 (executable)
@@ -1,7 +1,7 @@
 Name:    privacy-manager-server
 Summary: Privacy Management
-Version: 0.0.3
-Release: 5
+Version: 0.0.4
+Release: 0
 Group:   System/Libraries
 License: SAMSUNG
 Source0: %{name}-%{version}.tar.gz
@@ -82,13 +82,15 @@ echo cmake . -DPREFIX=%{_prefix} \
         -DLIBDIR=%{_libdir} \
         -DINCLUDEDIR=%{_includedir} \
         -DCMAKE_BUILD_TYPE=%{build_type} \
-        -DVERSION=%{version} 
+        -DVERSION=%{version} \
+        -DFILTER_LISTED_PKG=ON
 cmake . -DPREFIX=%{_prefix} \
         -DEXEC_PREFIX=%{_exec_prefix} \
         -DLIBDIR=%{_libdir} \
         -DINCLUDEDIR=%{_includedir} \
         -DCMAKE_BUILD_TYPE=%{build_type} \
-        -DVERSION=%{version} 
+        -DVERSION=%{version} \
+        -DFILTER_LISTED_PKG=ON
 make %{?jobs:-j%jobs}
 
 %install
@@ -101,6 +103,8 @@ mkdir -p %{buildroot}/usr/bin
 cp res/usr/bin/* %{buildroot}/usr/bin/
 mkdir -p %{buildroot}/opt/dbspace
 cp res/opt/dbspace/.privacylist.db /%{buildroot}/opt/dbspace/
+mkdir -p %{buildroot}/usr/share/privacy-manager/
+cp res/usr/share/privacy-manager/privacy-filter-list.ini %{buildroot}/usr/share/privacy-manager/
 #mkdir -p %{buildroot}/etc/rc.d/init.d
 #cp res/etc/rc.d/init.d/* %{buildroot}/etc/rc.d/init.d/
 
@@ -147,6 +151,7 @@ fi
 %manifest packaging/privacy-manager-client.manifest
 %{_libdir}/libprivacy-manager-client.so*
 /usr/share/license/privacy-manager-client
+/usr/share/privacy-manager/privacy-filter-list.ini
 /usr/etc/package-manager/parserlib/libprivileges.so
 
 %files -n privacy-manager-client-devel
index 72a37900ea248fe993a4ef51c8c8a548b3128f41..21b217f6204d1898435cc3f145d7badcd3852238 100644 (file)
@@ -65,7 +65,7 @@ int PKGMGR_PARSER_PLUGIN_INSTALL(xmlDocPtr docPtr, const char* packageId)
                if (xmlStrcmp(curPtr->name, _NODE_PRIVILEGE) == 0)
                {
                        xmlChar* pPrivilege = xmlNodeListGetString(docPtr, curPtr->xmlChildrenNode, 1);
-                       LOGD(" value= %s", reinterpret_cast<char*>(pPrivilege));
+                       SECURE_LOGD(" value= %s", reinterpret_cast<char*>(pPrivilege));\r
                        if (pPrivilege == NULL)
                        {
                                LOGE("Failed to get value");
@@ -73,7 +73,7 @@ int PKGMGR_PARSER_PLUGIN_INSTALL(xmlDocPtr docPtr, const char* packageId)
                        }
             if (strncmp(reinterpret_cast<char*>(pPrivilege), TEST_AUTOMATION_PRIVILEGE, strlen(TEST_AUTOMATION_PRIVILEGE) ) == 0 )
             {
-               LOGD("No privacy popup");
+               SECURE_LOGD("No privacy popup");
                 privacyPopupRequired = false;
             }
             else 
diff --git a/res/usr/share/privacy-manager/privacy-filter-list.ini b/res/usr/share/privacy-manager/privacy-filter-list.ini
new file mode 100644 (file)
index 0000000..1c2daab
--- /dev/null
@@ -0,0 +1,26 @@
+#reference app Email
+package_id=vxqbrefica
+#reference app Camera
+package_id=hdufar9ycj
+#reference app Settings
+package_id=kto5jikgul
+#reference app Music Player
+package_id=dhrul6qzj3
+#reference app Messages
+package_id=8r4r5ddzzn
+#reference app ImageViewer
+package_id=jysyv9o1dc
+#reference app Contacts
+package_id=f9uev8hsyo
+#reference app CallApp
+package_id=nI2PLNdTwi
+#reference app Phone
+package_id=zktdpemtmw
+#reference app NfcPushUi
+package_id=42KriKjov3
+#reference app Calendar
+package_id=ph1vq2phrp
+#reference app Account
+package_id=ZsnYtAdjl2
+#reference app CalendarService
+package_id=xZuDw2OeGg
index a7ed3a1e727d3c98b1303ee3954a9ee37b218a52..0e07e980fa049919a14b17df8c6865757d521bbf 100644 (file)
@@ -33,6 +33,11 @@ SET(dbus_include_dir "/usr/include/dbus-1.0")
 ADD_DEFINITIONS("-fvisibility=hidden")
 ADD_DEFINITIONS("-Wall -Werror")
 ADD_DEFINITIONS("-DDLOG_ERROR_ENABLED")
+OPTION (FILTER_LISTED_PKG "FILTER PKG BY LIST" ON)
+IF(FILTER_LISTED_PKG)
+    MESSAGE("FILTER PKGs BY FILTERING LIST")
+    ADD_DEFINITIONS("-D__FILTER_LISTED_PKG")
+ENDIF(FILTER_LISTED_PKG)
 
 ###################################################################################################
 ## for privacy-manager-server (executable)