From: Hwankyu Jhun Date: Tue, 16 Nov 2021 06:39:09 +0000 (+0900) Subject: Set real appid before checking app status X-Git-Tag: submit/tizen/20211117.004029~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F05%2F266605%2F2;p=platform%2Fcore%2Fappfw%2Famd.git Set real appid before checking app status To check the app status properly, AMD has to check whether the application ID is the alias ID or not. Some caller processes want to send the launch request with the alias app ID to the running application. Change-Id: I31781c7a0c8d2aedbc1d528e9b31a0b44faba0e3 Signed-off-by: Hwankyu Jhun --- diff --git a/src/lib/amd_app_control.cc b/src/lib/amd_app_control.cc index cb475407..cf41d64d 100644 --- a/src/lib/amd_app_control.cc +++ b/src/lib/amd_app_control.cc @@ -76,7 +76,7 @@ int _app_control_resolve(uid_t uid, bundle* b) { std::string app_id = kb.GetString(AUL_K_APPID); if (app_id != "@UNKNOWN") { __verify_request(kb); - return 0; + return -1; } kb.Delete(AUL_K_APPID); diff --git a/src/lib/amd_app_property.c b/src/lib/amd_app_property.c index 95791346..6d79c0d9 100644 --- a/src/lib/amd_app_property.c +++ b/src/lib/amd_app_property.c @@ -834,6 +834,37 @@ int _app_property_metadata_remove_filter(const char *key, const char *value) return 0; } +int _app_property_set_real_appid(uid_t uid, bundle *b) +{ + const char *alias_appid; + const char *appid; + const char *alias_info; + app_property_h app_property; + + alias_appid = bundle_get_val(b, AUL_K_APPID); + if (!alias_appid) + return -1; + + alias_info = bundle_get_val(b, AUL_SVC_K_ALIAS_INFO); + if (alias_info && !strcmp(alias_info, "disable")) + return -1; + + app_property = _app_property_find(uid); + if (!app_property) + return -1; + + appid = _app_property_get_real_appid(app_property, alias_appid); + if (!appid) + return -1; + + _W("alias_appid(%s), appid(%s)", alias_appid, appid); + bundle_del(b, AUL_K_ORG_APPID); + bundle_add(b, AUL_K_ORG_APPID, alias_appid); + bundle_del(b, AUL_K_APPID); + bundle_add(b, AUL_K_APPID, appid); + return 0; +} + static int __dispatch_app_set_alias_appid(request_h req) { int ret; diff --git a/src/lib/amd_app_property.h b/src/lib/amd_app_property.h index a10108da..97a1f6af 100644 --- a/src/lib/amd_app_property.h +++ b/src/lib/amd_app_property.h @@ -18,8 +18,9 @@ #define __AMD_APP_PROPERTY_H__ #include -#include #include +#include +#include #include #include @@ -88,6 +89,8 @@ int _app_property_metadata_add_filter(const char *key, const char *value); int _app_property_metadata_remove_filter(const char *key, const char *value); +int _app_property_set_real_appid(uid_t uid, bundle *b); + #ifdef __cplusplus } #endif diff --git a/src/lib/amd_appinfo.c b/src/lib/amd_appinfo.c index 38fa2500..4c6f94cc 100644 --- a/src/lib/amd_appinfo.c +++ b/src/lib/amd_appinfo.c @@ -21,27 +21,29 @@ #include #include #include -#include #include +#include +#include +#include +#include +#include +#include #include #include #include #include -#include -#include -#include -#include #include "amd_api_noti.h" -#include "amd_util.h" +#include "amd_app_property.h" +#include "amd_app_status.h" #include "amd_appinfo.h" #include "amd_launch.h" -#include "amd_app_status.h" -#include "amd_signal.h" -#include "amd_app_property.h" -#include "amd_suspend.h" #include "amd_login_monitor.h" #include "amd_noti.h" +#include "amd_signal.h" +#include "amd_suspend.h" +#include "amd_util.h" +#include "aul_svc_priv_key.h" #define CATEGORY_IME "http://tizen.org/category/ime" @@ -2415,3 +2417,41 @@ bool _appinfo_is_platform_app(const char *appid, uid_t uid) return false; } + +void _appinfo_set_effective_appid(uid_t uid, bundle *b) +{ + const struct appinfo *ai; + const struct appinfo *effective_ai; + const char *appid; + const char *effective_appid; + const char *pkgid; + const char *effective_pkgid; + + appid = bundle_get_val(b, AUL_K_APPID); + if (!appid) + return; + + ai = _appinfo_find(uid, appid); + if (!ai) + return; + + bundle_del(b, AUL_SVC_K_PKG_NAME); + bundle_add(b, AUL_SVC_K_PKG_NAME, appid); + + effective_appid = _appinfo_get_value(ai, AIT_EFFECTIVE_APPID); + if (!effective_appid) + return; + + effective_ai = _appinfo_find(uid, effective_appid); + if (!effective_ai) + return; + + pkgid = _appinfo_get_value(ai, AIT_PKGID); + effective_pkgid = _appinfo_get_value(effective_ai, AIT_PKGID); + if (pkgid && effective_pkgid && !strcmp(pkgid, effective_pkgid)) { + _W("Use effective appid(%s) instead of real appid(%s)", + effective_appid, appid); + bundle_del(b, AUL_K_APPID); + bundle_add(b, AUL_K_APPID, effective_appid); + } +} diff --git a/src/lib/amd_appinfo.h b/src/lib/amd_appinfo.h index 6419adcb..2a5c3fa7 100644 --- a/src/lib/amd_appinfo.h +++ b/src/lib/amd_appinfo.h @@ -17,9 +17,10 @@ #ifndef __AMD_APPINFO_H__ #define __AMD_APPINFO_H__ +#include #include +#include #include -#include #ifdef __cplusplus extern "C" { @@ -145,6 +146,8 @@ int _appinfo_get_cert_visibility(const char *pkgid, uid_t uid); bool _appinfo_is_platform_app(const char *appid, uid_t uid); +void _appinfo_set_effective_appid(uid_t uid, bundle* b); + #ifdef __cplusplus } #endif diff --git a/src/lib/amd_launch.c b/src/lib/amd_launch.c index b6e94d82..c0cf57ab 100644 --- a/src/lib/amd_launch.c +++ b/src/lib/amd_launch.c @@ -46,7 +46,6 @@ #include "amd_anr_monitor.h" #include "amd_api_app_request_broker.h" #include "amd_app_com.h" -#include "amd_app_control.h" #include "amd_app_property.h" #include "amd_app_status.h" #include "amd_appinfo.h" @@ -1224,74 +1223,6 @@ static int __listen_poweroff_state_signal(void *data) return 0; } -static void __set_effective_appid(uid_t uid, bundle *kb) -{ - const struct appinfo *ai; - const struct appinfo *effective_ai; - const char *appid; - const char *effective_appid; - const char *pkgid; - const char *effective_pkgid; - - appid = bundle_get_val(kb, AUL_K_APPID); - if (appid == NULL) - return; - - ai = _appinfo_find(uid, appid); - if (ai == NULL) - return; - - bundle_del(kb, AUL_SVC_K_PKG_NAME); - bundle_add(kb, AUL_SVC_K_PKG_NAME, appid); - - effective_appid = _appinfo_get_value(ai, AIT_EFFECTIVE_APPID); - if (effective_appid == NULL) - return; - - effective_ai = _appinfo_find(uid, effective_appid); - if (effective_ai == NULL) - return; - - pkgid = _appinfo_get_value(ai, AIT_PKGID); - effective_pkgid = _appinfo_get_value(effective_ai, AIT_PKGID); - if (pkgid && effective_pkgid && strcmp(pkgid, effective_pkgid) == 0) { - _D("use effective appid instead of the real appid"); - bundle_del(kb, AUL_K_APPID); - bundle_add(kb, AUL_K_APPID, effective_appid); - } -} - -static int __set_real_appid(uid_t uid, bundle *kb) -{ - const char *alias_appid; - const char *appid; - const char *alias_info; - app_property_h app_property; - - alias_appid = bundle_get_val(kb, AUL_K_APPID); - if (alias_appid == NULL) - return -1; - - alias_info = bundle_get_val(kb, AUL_SVC_K_ALIAS_INFO); - if (alias_info && strcmp(alias_info, "disable") == 0) - return -1; - - app_property = _app_property_find(uid); - if (app_property == NULL) - return -1; - - appid = _app_property_get_real_appid(app_property, alias_appid); - if (appid == NULL) - return -1; - - _D("alias_appid(%s), appid(%s)", alias_appid, appid); - bundle_del(kb, AUL_K_ORG_APPID); - bundle_add(kb, AUL_K_ORG_APPID, alias_appid); - bundle_del(kb, AUL_K_APPID); - bundle_add(kb, AUL_K_APPID, appid); - return 0; -} - static void __check_new_instance(bundle *kb, bool *new_instance) { const char *str; @@ -1349,13 +1280,6 @@ static int __dispatch_app_start(request_h req) if (kb == NULL) return -1; - _app_control_resolve(_request_get_target_uid(req), kb); - ret = __set_real_appid(_request_get_target_uid(req), kb); - if (ret == 0 && _request_get_cmd(req) == APP_RESUME) - bundle_del(kb, AUL_K_INSTANCE_ID); - - __set_effective_appid(_request_get_target_uid(req), kb); - bundle_del(kb, AUL_K_NEW_INSTANCE); _noti_send(AMD_NOTI_MSG_LAUNCH_APP_START_START, 0, 0, req, kb); __check_new_instance(kb, &new_instance); diff --git a/src/lib/amd_request.c b/src/lib/amd_request.c index 7640c691..6d93e71e 100644 --- a/src/lib/amd_request.c +++ b/src/lib/amd_request.c @@ -39,16 +39,18 @@ #include #include "amd_api_noti.h" -#include "amd_config.h" -#include "amd_util.h" -#include "amd_request.h" +#include "amd_app_control.h" +#include "amd_app_property.h" #include "amd_app_status.h" +#include "amd_config.h" #include "amd_cynara.h" -#include "amd_socket.h" -#include "aul_svc_priv_key.h" -#include "amd_signal.h" #include "amd_login_monitor.h" #include "amd_noti.h" +#include "amd_request.h" +#include "amd_signal.h" +#include "amd_socket.h" +#include "amd_util.h" +#include "aul_svc_priv_key.h" #define PENDING_REQUEST_TIMEOUT 5000 /* msec */ #define SYSTEM_REQUEST_TIMEOUT 90000 /* msec */ @@ -461,6 +463,24 @@ static app_status_h __get_app_status(request_h req, const char *appid) return app_status; } +static bool __can_be_implicit_launch(int cmd) +{ + switch (cmd) { + case APP_START: + case APP_START_ASYNC: + case APP_START_RES_ASYNC: + case APP_START_RES: + case APP_OPEN: + case APP_RESUME: + case APP_SEND_LAUNCH_REQUEST: + case APP_SEND_LAUNCH_REQUEST_SYNC: + case APP_SEND_RESUME_REQUEST: + return true; + default: + return false; + } +} + static int __check_request(request_h req) { int pid; @@ -477,10 +497,19 @@ static int __check_request(request_h req) if (req->kb == NULL) return -1; - appid = bundle_get_val(req->kb, AUL_K_APPID); - if (appid == NULL) + if (bundle_get_val(req->kb, AUL_K_APPID) == NULL) return -1; + if (__can_be_implicit_launch(req->cmd)) + _app_control_resolve(req->t_uid, req->kb); + + if (_app_property_set_real_appid(req->t_uid, req->kb) == 0 && + req->cmd == APP_RESUME) + bundle_del(req->kb, AUL_K_INSTANCE_ID); + + _appinfo_set_effective_appid(req->t_uid, req->kb); + + appid = bundle_get_val(req->kb, AUL_K_APPID); app_status = __get_app_status(req, appid); if (app_status == NULL) return 0; diff --git a/src/modules/rpc-port/amd_rpc_port.cc b/src/modules/rpc-port/amd_rpc_port.cc index 42c7cd13..54edac3b 100644 --- a/src/modules/rpc-port/amd_rpc_port.cc +++ b/src/modules/rpc-port/amd_rpc_port.cc @@ -142,31 +142,6 @@ void RpcRemove(int pid) { pid_map.erase(found); } -void SetRealAppId(uid_t uid, tizen_base::Bundle& b) { - std::string alias_appid = b.GetString(AUL_K_APPID); - if (alias_appid.empty()) - return; - - std::string alias_info = b.GetString(AUL_SVC_K_ALIAS_INFO); - if (alias_info == "disable") - return; - - amd_app_property_h app_property = amd_app_property_find(uid); - if (app_property == nullptr) - return; - - const char* appid = amd_app_property_get_real_appid(app_property, - alias_appid.c_str()); - if (appid == nullptr) - return; - - _D("alias_appid(%s), appid(%s)", alias_appid.c_str(), appid); - b.Delete(AUL_K_ORG_APPID); - b.Add(AUL_K_ORG_APPID, alias_appid); - b.Delete(AUL_K_APPID); - b.Add(AUL_K_APPID, appid); -} - int PassFds(int fd, const int (*fds)[2], int fds_num) { #define MAX_NR_OF_DESCRIPTORS 2 union { @@ -222,7 +197,6 @@ static int DispatchRpcPortPrepareStub(amd_request_h req) { tizen_base::Bundle b(kb, false, false); uid_t target_uid = amd_request_get_target_uid(req); - SetRealAppId(target_uid, b); std::string app_id = b.GetString(AUL_K_APPID); if (app_id.empty()) { _E("Failed to get appid");