From: Soyoung Kim Date: Sun, 12 May 2013 11:52:39 +0000 (+0900) Subject: fixed failed update preload web app X-Git-Tag: submit/tizen_2.2/20130713.111652^2~133 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3148e359012afc89be1d0e133c4442ba3911cdde;p=platform%2Fframework%2Fweb%2Fwrt-installer.git fixed failed update preload web app [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 --- diff --git a/src/jobs/widget_install/job_widget_install.cpp b/src/jobs/widget_install/job_widget_install.cpp index 46d88b9..6245ed0 100644 --- a/src/jobs/widget_install/job_widget_install.cpp +++ b/src/jobs/widget_install/job_widget_install.cpp @@ -545,13 +545,9 @@ bool JobWidgetInstall::validateTizenPackageID( std::string installPath = std::string(GlobalConfig::GetUserInstalledWidgetPath()) + "/" + pkgId; - std::string preinstallPath = - std::string(GlobalConfig::GetUserPreloadedWidgetPath()) + - "/" + pkgId; struct stat dirStat; - if ((stat(installPath.c_str(), &dirStat) == 0) || - (stat(preinstallPath.c_str(), &dirStat) == 0)) + if ((stat(installPath.c_str(), &dirStat) == 0)) { return false; } diff --git a/src/jobs/widget_install/task_smack.cpp b/src/jobs/widget_install/task_smack.cpp index 9769276..31a9d23 100644 --- a/src/jobs/widget_install/task_smack.cpp +++ b/src/jobs/widget_install/task_smack.cpp @@ -54,39 +54,50 @@ namespace Jobs { namespace WidgetInstall { TaskSmack::TaskSmack(InstallerContext& context) : DPL::TaskDecl(this), - m_context(context) + 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); } -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); - 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 (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."); } } +#endif +} +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())) { - free(pkgId); + free(m_pkgId); ThrowMsg(Exceptions::NotAllowed, "Instalation failure. " "Add Label failure"); } @@ -94,9 +105,9 @@ void TaskSmack::SmackFolderLabelingStep() /* 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, resDir.c_str())) { - free(pkgId); + free(m_pkgId); ThrowMsg(Exceptions::NotAllowed, "Instalation failure. " "Add Label failure"); } @@ -106,34 +117,34 @@ void TaskSmack::SmackFolderLabelingStep() { if (PC_OPERATION_SUCCESS != app_label_dir("_", m_context.locations->getUserDataRootDir().c_str())) { - free(pkgId); + free(m_pkgId); 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())) { - free(pkgId); + free(m_pkgId); 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())) { - free(pkgId); + free(m_pkgId); ThrowMsg(Exceptions::NotAllowed, "Instalation failure. " "Add Label failure"); } - if(!setLabelForSharedDir(pkgId)) { + if(!setLabelForSharedDir(m_pkgId)) { ThrowMsg(Exceptions::NotAllowed, "Instalation failure. " "Add Label failure"); } - free(pkgId); + free(m_pkgId); /* TODO : set label at wrt-client @@ -144,7 +155,7 @@ void TaskSmack::SmackFolderLabelingStep() if (0 != smack_lsetlabel(m_context.locations->getExecFile().c_str(), appId, SMACK_LABEL_ACCESS)) { - free(pkgId); + free(m_pkgId); free(appId); ThrowMsg(Exceptions::NotAllowed, "Instalation failure. " "Add ACESS Label for binary failure"); @@ -152,22 +163,22 @@ void TaskSmack::SmackFolderLabelingStep() if (0 != smack_lsetlabel(m_context.locations->getExecFile().c_str(), appId, SMACK_LABEL_EXEC)) { - free(pkgId); + free(m_pkgId); 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"); } - 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())) { - free(pkgId); + free(m_pkgId); free(appId); ThrowMsg(Exceptions::NotAllowed, "Instalation failure. " "Add Label failure"); @@ -176,7 +187,7 @@ void TaskSmack::SmackFolderLabelingStep() #endif } -void TaskSmack::SmackPrivilegeStep() +void TaskSmack::StepSmackPrivilege() { LogInfo("----------------> SMACK:\ Jobs::WidgetInstall::TaskSmack::SmackPrivilegeStep()"); @@ -217,6 +228,17 @@ void TaskSmack::SmackPrivilegeStep() #endif } +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:\ @@ -230,23 +252,18 @@ void TaskSmack::StepAbortSmack() 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"); } - if (PC_OPERATION_SUCCESS != app_uninstall(pkgId)) { + if (PC_OPERATION_SUCCESS != app_uninstall(m_pkgId)) { LogError("failure in removing smack rules file"); } - free(pkgId); + free(m_pkgId); #endif } -void TaskSmack::SetEndofInstallation() +void TaskSmack::StepSetEndofInstallation() { m_context.job->UpdateProgress( InstallerContext::INSTALL_END, diff --git a/src/jobs/widget_install/task_smack.h b/src/jobs/widget_install/task_smack.h index 5dd15bf..ad32e5c 100644 --- a/src/jobs/widget_install/task_smack.h +++ b/src/jobs/widget_install/task_smack.h @@ -35,10 +35,13 @@ class TaskSmack : { private: InstallerContext& m_context; + char* m_pkgId; - void SmackFolderLabelingStep(); - void SmackPrivilegeStep(); - void SetEndofInstallation(); + void StepSetInstall(); + void StepSmackFolderLabeling(); + void StepSmackPrivilege(); + void StepRevokeForUpdate(); + void StepSetEndofInstallation(); void StepAbortSmack(); bool setLabelForSharedDir(const char* pkgId);