X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwgtpkg-install.c;h=836b136b6da007638f02c43c478ae5b23a799e92;hb=fcc925c4a6d7bc82106f6c8da13b1a58a7b23115;hp=31c9e9105a10a3c1d922e846bdcb436bc8b754da;hpb=bfc9c138b1a9e87f9d387e2f900c14807c9da9b9;p=src%2Fapp-framework-main.git diff --git a/src/wgtpkg-install.c b/src/wgtpkg-install.c index 31c9e91..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,37 +105,42 @@ 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; } return 0; } -static int check_widget(const struct wgt_desc *desc) +static int check_permissions(const struct wgt_desc *desc) { int result; const struct wgt_desc_feature *feature; - result = check_temporary_constraints(desc); + result = 0; feature = desc->features; while(result >= 0 && feature) { if (!strcmp(feature->name, feature_required_permission)) @@ -144,6 +150,16 @@ static int check_widget(const struct wgt_desc *desc) return result; } +static int check_widget(const struct wgt_desc *desc) +{ + int result; + + result = check_temporary_constraints(desc); + if (result >= 0) + result = check_permissions(desc); + return result; +} + static int get_target_directory(char target[PATH_MAX], const char *root, const struct wgt_desc *desc) { int rc; @@ -312,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);