[Issue#] N/A
[Problem] can't install web app.
[Cause] check pakcage id from RO.
And failed set smack label at shared directory.
[Solution] To validate package id is only from RW.
And skip to set smack label if update.
[SCMRequest] N/A
Change-Id: I51fe5137134ce59fd862e2a8bb61fcf35ab50587
std::string installPath =
std::string(GlobalConfig::GetUserInstalledWidgetPath()) +
"/" + pkgId;
std::string installPath =
std::string(GlobalConfig::GetUserInstalledWidgetPath()) +
"/" + pkgId;
- std::string preinstallPath =
- std::string(GlobalConfig::GetUserPreloadedWidgetPath()) +
- "/" + pkgId;
- if ((stat(installPath.c_str(), &dirStat) == 0) ||
- (stat(preinstallPath.c_str(), &dirStat) == 0))
+ if ((stat(installPath.c_str(), &dirStat) == 0))
namespace WidgetInstall {
TaskSmack::TaskSmack(InstallerContext& context) :
DPL::TaskDecl<TaskSmack>(this),
namespace WidgetInstall {
TaskSmack::TaskSmack(InstallerContext& context) :
DPL::TaskDecl<TaskSmack>(this),
+ m_context(context),
+ m_pkgId(NULL)
- AddStep(&TaskSmack::SmackFolderLabelingStep);
- AddStep(&TaskSmack::SmackPrivilegeStep);
- AddStep(&TaskSmack::SetEndofInstallation);
+ if (!m_context.isUpdateMode) {
+ AddStep(&TaskSmack::StepSetInstall);
+ AddStep(&TaskSmack::StepSmackFolderLabeling);
+ AddStep(&TaskSmack::StepSmackPrivilege);
+ } else {
+ AddStep(&TaskSmack::StepSmackPrivilege);
+ }
+ AddStep(&TaskSmack::StepSetEndofInstallation);
AddAbortStep(&TaskSmack::StepAbortSmack);
}
AddAbortStep(&TaskSmack::StepAbortSmack);
}
-void TaskSmack::SmackFolderLabelingStep()
+void TaskSmack::StepSetInstall()
- LogInfo("----------------> SMACK:\
- Jobs::WidgetInstall::TaskSmack::SmackFolderLabelingStep()");
+ LogInfo("----------------> SMACK: StepStartSetSmack()");
#ifdef WRT_SMACK_ENABLED
std::string pkg = DPL::ToUTF8String(m_context.widgetConfig.tzPkgid);
#ifdef WRT_SMACK_ENABLED
std::string pkg = DPL::ToUTF8String(m_context.widgetConfig.tzPkgid);
- char* pkgId = NULL;
- pkgId = (char*)calloc(1, pkg.length() + 1);
- snprintf(pkgId, pkg.length() + 1, "%s", pkg.c_str());
+ m_pkgId = (char*)calloc(1, pkg.length() + 1);
+ snprintf(m_pkgId, pkg.length() + 1, "%s", pkg.c_str());
if (m_context.widgetConfig.packagingType !=
WrtDB::PkgType::PKG_TYPE_HYBRID_WEB_APP)
{
if (m_context.widgetConfig.packagingType !=
WrtDB::PkgType::PKG_TYPE_HYBRID_WEB_APP)
{
- if (PC_OPERATION_SUCCESS != app_install(pkgId)) {
- free(pkgId);
+ if (PC_OPERATION_SUCCESS != app_install(m_pkgId)) {
+ free(m_pkgId);
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"failure in creating smack rules file.");
}
}
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"failure in creating smack rules file.");
}
}
+void TaskSmack::StepSmackFolderLabeling()
+{
+ LogInfo("----------------> SMACK:\
+ Jobs::WidgetInstall::TaskSmack::SmackFolderLabelingStep()");
+#ifdef WRT_SMACK_ENABLED
/* /opt/usr/apps/[pkgid] directory's label is "_" */
if (PC_OPERATION_SUCCESS != app_label_dir("_",
m_context.locations->getPackageInstallationDir().c_str())) {
/* /opt/usr/apps/[pkgid] directory's label is "_" */
if (PC_OPERATION_SUCCESS != app_label_dir("_",
m_context.locations->getPackageInstallationDir().c_str())) {
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
}
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
}
/* res directory */
std::string resDir = m_context.locations->getPackageInstallationDir() +
"/res";
/* res directory */
std::string resDir = m_context.locations->getPackageInstallationDir() +
"/res";
- if (PC_OPERATION_SUCCESS != app_label_dir(pkgId,
+ if (PC_OPERATION_SUCCESS != app_label_dir(m_pkgId,
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
}
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
}
{
if (PC_OPERATION_SUCCESS != app_label_dir("_",
m_context.locations->getUserDataRootDir().c_str())) {
{
if (PC_OPERATION_SUCCESS != app_label_dir("_",
m_context.locations->getUserDataRootDir().c_str())) {
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
}
}
/* data directory */
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
}
}
/* data directory */
- if (PC_OPERATION_SUCCESS != app_label_dir(pkgId,
+ if (PC_OPERATION_SUCCESS != app_label_dir(m_pkgId,
m_context.locations->getPrivateStorageDir().c_str())) {
m_context.locations->getPrivateStorageDir().c_str())) {
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
}
/* bin directory */
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
}
/* bin directory */
- if (PC_OPERATION_SUCCESS != app_label_dir(pkgId,
+ if (PC_OPERATION_SUCCESS != app_label_dir(m_pkgId,
m_context.locations->getBinaryDir().c_str())) {
m_context.locations->getBinaryDir().c_str())) {
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
}
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
}
- if(!setLabelForSharedDir(pkgId)) {
+ if(!setLabelForSharedDir(m_pkgId)) {
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
}
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
}
/* TODO : set label at wrt-client
/* TODO : set label at wrt-client
if (0 != smack_lsetlabel(m_context.locations->getExecFile().c_str(),
appId, SMACK_LABEL_ACCESS)) {
if (0 != smack_lsetlabel(m_context.locations->getExecFile().c_str(),
appId, SMACK_LABEL_ACCESS)) {
free(appId);
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add ACESS Label for binary failure");
free(appId);
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add ACESS Label for binary failure");
if (0 != smack_lsetlabel(m_context.locations->getExecFile().c_str(),
appId, SMACK_LABEL_EXEC)) {
if (0 != smack_lsetlabel(m_context.locations->getExecFile().c_str(),
appId, SMACK_LABEL_EXEC)) {
free(appId);
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add EXEC Label for binary failure");
}
free(appId);
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add EXEC Label for binary failure");
}
- if (PC_OPERATION_SUCCESS != app_add_friend(pkgId, appId)) {
- free(pkgId);
+ if (PC_OPERATION_SUCCESS != app_add_friend(m_pkgId, appId)) {
+ free(m_pkgId);
free(appId);
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add friend failure");
}
free(appId);
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add friend failure");
}
- if (PC_OPERATION_SUCCESS != app_label_shared_dir(appId, pkgId,
+ if (PC_OPERATION_SUCCESS != app_label_shared_dir(appId, m_pkgId,
m_context.locations->getBinaryDir().c_str())) {
m_context.locations->getBinaryDir().c_str())) {
free(appId);
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
free(appId);
ThrowMsg(Exceptions::NotAllowed, "Instalation failure. "
"Add Label failure");
-void TaskSmack::SmackPrivilegeStep()
+void TaskSmack::StepSmackPrivilege()
{
LogInfo("----------------> SMACK:\
Jobs::WidgetInstall::TaskSmack::SmackPrivilegeStep()");
{
LogInfo("----------------> SMACK:\
Jobs::WidgetInstall::TaskSmack::SmackPrivilegeStep()");
+void TaskSmack::StepRevokeForUpdate()
+{
+ LogInfo("----------------> SMACK:\
+ Jobs::WidgetInstall::TaskSmack::StepRevokePrivilegeForUpdate()");
+#ifdef WRT_SMACK_ENABLED
+ if (PC_OPERATION_SUCCESS != app_revoke_permissions(m_pkgId)) {
+ LogError("failure in revoking smack permissions");
+ }
+#endif
+}
+
void TaskSmack::StepAbortSmack()
{
LogInfo("----------------> SMACK:\
void TaskSmack::StepAbortSmack()
{
LogInfo("----------------> SMACK:\
snprintf(appId, id.length() + 1, "%s", id.c_str());
*/
snprintf(appId, id.length() + 1, "%s", id.c_str());
*/
- std::string pkg = DPL::ToUTF8String(m_context.widgetConfig.tzPkgid);
- char* pkgId = NULL;
- pkgId = (char*)calloc(1, pkg.length() + 1);
- snprintf(pkgId, pkg.length() + 1, "%s", pkg.c_str());
-
- if (PC_OPERATION_SUCCESS != app_revoke_permissions(pkgId)) {
+ if (PC_OPERATION_SUCCESS != app_revoke_permissions(m_pkgId)) {
LogError("failure in revoking smack permissions");
}
LogError("failure in revoking smack permissions");
}
- if (PC_OPERATION_SUCCESS != app_uninstall(pkgId)) {
+ if (PC_OPERATION_SUCCESS != app_uninstall(m_pkgId)) {
LogError("failure in removing smack rules file");
}
LogError("failure in removing smack rules file");
}
-void TaskSmack::SetEndofInstallation()
+void TaskSmack::StepSetEndofInstallation()
{
m_context.job->UpdateProgress(
InstallerContext::INSTALL_END,
{
m_context.job->UpdateProgress(
InstallerContext::INSTALL_END,
{
private:
InstallerContext& m_context;
{
private:
InstallerContext& m_context;
- void SmackFolderLabelingStep();
- void SmackPrivilegeStep();
- void SetEndofInstallation();
+ void StepSetInstall();
+ void StepSmackFolderLabeling();
+ void StepSmackPrivilege();
+ void StepRevokeForUpdate();
+ void StepSetEndofInstallation();
void StepAbortSmack();
bool setLabelForSharedDir(const char* pkgId);
void StepAbortSmack();
bool setLabelForSharedDir(const char* pkgId);