#include <FBaseSysLog.h>
#include <FBaseString.h>
#include <FBaseColArrayList.h>
+#include <FBase_StringConverter.h>
#include <FIoFile.h>
#include <FIo_IpcClient.h>
+#include <privacy_checker_client.h>
#include "FSec_AccessController.h"
#include "FSec_PrivilegeManager.h"
#include "FSec_PrivilegeManagerMessage.h"
#include "FSec_PrivilegeInfo.h"
+
using namespace Tizen::App;
using namespace Tizen::App::Package;
using namespace Tizen::Base;
goto CATCH;
}
+ r = CheckPrivacy(packageId, privilege);
+ SysTryReturnResult(NID_SEC, r == E_SUCCESS, E_USER_NOT_CONSENTED, "The user blocks an application from calling the method.");
+
return r;
CATCH:
}
}
+ r = CheckPrivacy(packageId, privilege2);
+ SysTryReturnResult(NID_SEC, r == E_SUCCESS, E_USER_NOT_CONSENTED, "The user blocks an application from calling the method.");
+
return r;
CATCH:
goto CATCH;
}
+ r = CheckPrivacy(packageId, privilege);
+ SysTryReturnResult(NID_SEC, r == E_SUCCESS, E_USER_NOT_CONSENTED, "The user blocks an application from calling the method.");
+
return r;
CATCH:
}
}
+ r = CheckPrivacy(packageId, privilege);
+ SysTryReturnResult(NID_SEC, r == E_SUCCESS, E_USER_NOT_CONSENTED, "The user blocks an application from calling the method.");
+
return r;
CATCH:
}
}
+ r = CheckPrivacy(packageId, privilege2);
+ SysTryReturnResult(NID_SEC, r == E_SUCCESS, E_USER_NOT_CONSENTED, "The user blocks an application from calling the method.");
+
return r;
CATCH:
r = E_PRIVILEGE_DENIED;
goto CATCH;
}
+
}
+ r = CheckPrivacy(packageId, privilege);
+ SysTryReturnResult(NID_SEC, r == E_SUCCESS, E_USER_NOT_CONSENTED, "The user blocks an application from calling the method.");
+
return r;
CATCH:
return r;
}
+result
+_AccessController::CheckPrivacy(const PackageId & packageId, _Privilege privilege)
+{
+ result r = E_SUCCESS;
+ int ret = PRIV_MGR_ERROR_SUCCESS;
+
+ if (privacyListTable[privilege][_PRV_API_VER_2_0] != true)
+ {
+ return r;
+ }
+
+ std::unique_ptr<char[]> pPackageId(null);
+ pPackageId.reset(_StringConverter::CopyToCharArrayN(packageId));
+ SysTryReturnResult(NID_SEC, pPackageId != null, E_SYSTEM, "An unexpected system error occurred.");
+
+ std::unique_ptr<char[]> pPrivilegeId(null);
+ String privilegeId(L"http://tizen.org/privilege/");
+ privilegeId.Append(privilegeListTable[privilege].privilegeString);
+
+ pPrivilegeId.reset(_StringConverter::CopyToCharArrayN(privilegeId));
+ SysTryReturnResult(NID_SEC, pPrivilegeId != null, E_SYSTEM, "An unexpected system error occurred.");
+
+ ret = privacy_checker_check_package_by_privilege(pPackageId.get(), pPrivilegeId.get());
+ if (ret != PRIV_MGR_ERROR_SUCCESS)
+ {
+ r = E_USER_NOT_CONSENTED;
+ SysLog(NID_SEC, "Result : FALSE [Privacy]");
+ }
+
+ return r;
+}
+
+result
+_AccessController::CheckPrivacy(const PackageId & packageId, const String& privilege)
+{
+ result r = E_SUCCESS;
+ int ret = PRIV_MGR_ERROR_SUCCESS;
+
+ std::unique_ptr<char[]> pPackageId(null);
+ pPackageId.reset(_StringConverter::CopyToCharArrayN(packageId));
+ SysTryReturnResult(NID_SEC, pPackageId != null, E_SYSTEM, "An unexpected system error occurred.");
+
+ std::unique_ptr<char[]> pPrivilegeId(null);
+ pPrivilegeId.reset(_StringConverter::CopyToCharArrayN(privilege));
+ SysTryReturnResult(NID_SEC, pPrivilegeId != null, E_SYSTEM, "An unexpected system error occurred.");
+
+ ret = privacy_checker_check_package_by_privilege(pPackageId.get(), pPrivilegeId.get());
+ if (ret != PRIV_MGR_ERROR_SUCCESS)
+ {
+ r = E_USER_NOT_CONSENTED;
+ SysLog(NID_SEC, "Result : FALSE [Privacy]");
+ }
+
+ return r;
+}
+
}} //Tizen::Security
{ _PRV_LEVEL_USER }, // networkbearerselection
};
+const static bool privacyListTable[_MAX_PRIVILEGE_ENUM][_PRV_API_VER_MAX] =
+{
+ { false }, // alarm
+ { false }, // application.kill
+ { false }, // application.launch
+ { false }, // appmanager.launch
+ { false }, // appsetting
+ { false }, // appusage
+ { false }, // audiomanager.route
+ { false }, // audiomanager.session
+ { false }, // audiomanager.voipsession
+ { false }, // audiorecorder
+ { true }, // bluetooth.admin
+ { true }, // bluetooth.gap
+ { true }, // bluetooth.health
+ { true }, // bluetooth.opp
+ { true }, // bluetooth.spp
+ { true }, // bluetoothmanager
+ { true }, // calendar.read
+ { true }, // calendar.write
+ { false }, // callforward
+ { false }, // callhistory.read
+ { false }, // callhistory.write
+ { false }, // camera
+ { false }, // cellbroadcast
+ { false }, // certificate.read
+ { false }, // certificate.write
+ { true }, // contact.read
+ { true }, // contact.write
+ { false }, // content.read
+ { false }, // content.write
+ { false }, // customnetaccount
+ { true }, // dns
+ { true }, // download
+ { false }, // drmservice
+ { true }, // http
+ { false }, // ime
+ { false }, // imemanager
+ { false }, // inputmanager
+ { true }, // location
+ { true }, // messaging.email
+ { true }, // messaging.mms
+ { true }, // messaging.sms
+ { false }, // network.account
+ { true }, // network.connection
+ { false }, // network.statistics.read
+ { false }, // network.statistics.write
+ { false }, // networkmanager
+ { true }, // nfc.admin
+ { false }, // nfc.cardemulation
+ { true }, // nfc.common
+ { true }, // nfc.p2p
+ { true }, // nfc.tag
+ { false }, // notification
+ { false }, // notificationmanager
+ { false }, // packageinfo
+ { false }, // packagelicensemanager
+ { false }, // packagemanager.install
+ { false }, // packagesetting
+ { false }, // platforminfo
+ { false }, // power
+ { true }, // push
+ { false }, // setting
+ { false }, // smstrigger
+ { true }, // socket
+ { false }, // systeminfo
+ { false }, // systemsetting.read
+ { false }, // systemsetting.write
+ { false }, // telephonymanager
+ { false }, // uimanager
+ { false }, // useridentity
+ { false }, // vibrator
+ { false }, // videorecorder
+ { false }, // wappush
+ { false }, // web.privacy
+ { true }, // web.service
+ { false }, // wifi.admin
+ { false }, // wifi.read
+ { true }, // wifi.wifidirect.admin
+ { true }, // wifi.wifidirect.read
+ { false }, // wifimanager
+ { false }, // appwidgetprovider.install
+ { true }, // account.read
+ { true }, // account.write
+ { true }, // userprofile.read
+ { true }, // userprofile.write
+ { false }, // telephony
+ { false }, // netstatisticsmanager
+ { false }, // network.statistics
+ { false }, // nfcmanager
+ { false }, // bookmark.read
+ { false }, // bookmark.write
+ { false }, // geolocationpermission.read
+ { false }, // geolocationpermission.write
+ { false }, // lockmanager
+ { false }, // shortcut.install
+ { false }, // appmanager.kill
+ { false }, // privilegemanager.read
+ { false }, // privacymanager.read
+ { false }, // privacymanager.write
+ { false }, // antivirus
+ { true }, // internet
+ { true }, // messaging.read
+ { true }, // messaging.write
+ { false }, // package.info
+ { false }, // packagemanager.info
+ { false }, // packagemanager.setting
+ { false }, // system
+ { false }, // systemmanager
+ { false }, // settingmanager.read
+ { false }, // settingmanager.write
+ { false }, // appmanager.certificate
+ { false }, // datacontrol.consumer
+ { false }, // datasync
+ { false }, // filesystem.read
+ { false }, // filesystem.write
+ { false }, // messageport
+ { false }, // networkbearerselection
+};
+
const int MAX_BITWISE_PRIV_SIZE = (((_MAX_PRIVILEGE_ENUM - 1) / 32) + 1) * 4;
const int MAX_APP_ID_SIZE = 10;
const int MAX_CACHE_SIZE = 20;