diff options
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/wgtpkg-install.c | 54 |
2 files changed, 35 insertions, 21 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 83e0c39..45ac19c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,6 +44,7 @@ set(afm_prefix "urn:AGL:" CACHE STRING "Prefix for uniform resource set(afm_prefix_binding "${afm_prefix}binding:" CACHE STRING "URN for bindings") set(afm_user_appdir "app-data" CACHE STRING "User subdirectory for applications") set(afm_user_appdir_label "User::App-Shared" CACHE STRING "Smack label of the user subdirectory for applications") +set(systemd_units_root "${CMAKE_INSTALL_FULL_LIBDIR}/systemd" CACHE STRING "Place where unit files are to be set") set(wgtpkg_trusted_cert_dir "${afm_confdir}/certs" CACHE STRING "Path to internal certificates") if(USE_SIMULATION) @@ -62,6 +63,7 @@ add_definitions( -DFWK_LAUNCH_CONF="${afm_confdir}/afm-launch.conf" -DFWK_UNIT_CONF="${afm_confdir}/afm-unit.conf" -DFWK_USER_APP_DIR_LABEL="${afm_user_appdir_label}" + -DSYSTEMD_UNITS_ROOT="${systemd_units_root}" ) add_subdirectory(src) diff --git a/src/wgtpkg-install.c b/src/wgtpkg-install.c index 93c2bbc..836b136 100644 --- a/src/wgtpkg-install.c +++ b/src/wgtpkg-install.c @@ -39,6 +39,7 @@ #include "wgtpkg-install.h" #include "secmgr-wrap.h" #include "utils-dir.h" +#include "wgtpkg-unit.h" static const char* exec_type_strings[] = { "application/x-executable", @@ -104,25 +105,30 @@ static int set_required_permissions(struct wgt_desc_param *params, int required) int optional; while (params) { - /* check the value */ - if (!strcmp(params->value, string_required)) - optional = !required; - else if (!strcmp(params->value, string_optional)) - optional = 1; - else { - ERROR("unexpected parameter value: %s found for %s", params->value, params->name); - errno = EPERM; - return -1; - } - /* set the permission */ - if (request_permission(params->name)) { - DEBUG("granted permission: %s", params->name); - } else if (optional) { - INFO("optional permission ungranted: %s", params->name); + /* check if target */ + if (!strcmp(params->name, string_sharp_target)) { + /* do nothing when #target */ } else { - ERROR("ungranted permission required: %s", params->name); - errno = EPERM; - return -1; + /* check the value */ + if (!strcmp(params->value, string_required)) + optional = !required; + else if (!strcmp(params->value, string_optional)) + optional = 1; + else { + ERROR("unexpected parameter value: %s found for %s", params->value, params->name); + errno = EPERM; + return -1; + } + /* set the permission */ + if (request_permission(params->name)) { + DEBUG("granted permission: %s", params->name); + } else if (optional) { + INFO("optional permission ungranted: %s", params->name); + } else { + ERROR("ungranted permission required: %s", params->name); + errno = EPERM; + return -1; + } } params = params->next; } @@ -322,15 +328,21 @@ struct wgt_info *install_widget(const char *wgtfile, const char *root, int force if (install_icon(desc)) goto error3; + if (install_security(desc)) + goto error4; + if (install_exec_flag(desc)) - goto error3; + goto error4; - if (install_security(desc)) - goto error3; + if (unit_install(ifo, installdir, FWK_ICON_DIR, 1234/*TODO*/)) + goto error4; file_reset(); return ifo; +error4: + /* todo: cleanup */ + error3: wgt_info_unref(ifo); |