namespace WidgetInstall {
TaskSmack::TaskSmack(InstallerContext& context) :
DPL::TaskDecl<TaskSmack>(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");
}
/* 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");
}
{
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
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");
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");
#endif
}
-void TaskSmack::SmackPrivilegeStep()
+void TaskSmack::StepSmackPrivilege()
{
LogInfo("----------------> SMACK:\
Jobs::WidgetInstall::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:\
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,