2 * Copyright (c) 2014-2020 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <system_info.h>
24 #include <privilege_db_manager.h>
25 #include <privilege_info.h>
27 #include "privilege_information.h"
31 #define LOG_TAG "PRIVILEGE_INFO"
34 #define PRIVACY_FEATURE "http://tizen.org/feature/security.privacy_privilege"
35 #define CHECK_FEATURE_SUPPORTED(feature_name) \
37 bool is_supported = false; \
38 int ret = system_info_get_platform_bool(feature_name, &is_supported); \
39 if (ret != SYSTEM_INFO_ERROR_NONE) { \
40 LOGE("system_info_get_platform_bool failed. ret = %d", ret); \
41 return PRVINFO_ERROR_INTERNAL_ERROR; \
43 if (!is_supported) { \
44 LOGE("%s is disabled", feature_name); \
45 return PRVINFO_ERROR_NOT_SUPPORTED; \
49 #define TryReturn(condition, expr, returnValue, ...) \
56 #define SAFE_FREE(var) { if (var) { free(var); var = NULL; } }
59 #define PI_API __attribute__((visibility("default")))
62 static int __convert_package_type(const char* package_type_string)
64 if (strcmp(package_type_string, "PRVINFO_PACKAGE_TYPE_WEB") == 0)
65 return PRVMGR_PACKAGE_TYPE_WRT;
66 if (strcmp(package_type_string, "PRVINFO_PACKAGE_TYPE_NATIVE") == 0)
67 return PRVMGR_PACKAGE_TYPE_CORE;
69 return PRVMGR_PACKAGE_TYPE_NONE;
72 static int __convert_return_value(int ret, const char* result)
77 return PRVINFO_ERROR_NO_MATCHING_PRIVILEGE;
78 return PRVINFO_ERROR_NONE;
79 case PRVMGR_ERR_INVALID_PARAMETER:
80 return PRVINFO_ERROR_INVALID_PARAMETER;
81 case PRVMGR_ERR_OUT_OF_MEMORY:
82 return PRVINFO_ERROR_OUT_OF_MEMORY;
83 case PRVMGR_ERR_NO_EXIST_PRIVILEGE:
84 return PRVINFO_ERROR_NO_MATCHING_PRIVILEGE;
85 case PRVMGR_ERR_INTERNAL_ERROR:
87 return PRVINFO_ERROR_INTERNAL_ERROR;
91 static int __convert_result_code(int result)
94 case PRIVILEGE_NOTI_INFO_RESULT_CODE_SUCCESS:
95 return PRIVILEGE_CONSUMER_RETURN_CODE_SUCCESS;
96 case PRIVILEGE_NOTI_INFO_RESULT_CODE_UNKNOWN_LOCALE_CODE:
97 return PRIVILEGE_CONSUMER_RETURN_CODE_UNKNOWN_LOCALE_CODE;
98 case PRIVILEGE_NOTI_INFO_RESULT_CODE_INVALID_PARAMETER:
100 return PRIVILEGE_CONSUMER_RETURN_CODE_INVALID_PARAMETER;
105 int privilege_info_get_display_name(const char *api_version, const char *privilege, char **display_name)
107 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
108 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
110 int ret = privilege_info_get_privilege_display_name(privilege, display_name);
112 return __convert_return_value(ret, *display_name);
116 int privilege_info_get_description(const char *api_version, const char *privilege, char **description)
118 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
119 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
121 int ret = privilege_info_get_privilege_description(privilege, description);
123 return __convert_return_value(ret, *description);
127 int privilege_info_get_display_name_by_pkgtype(const char *package_type, const char *api_version, const char *privilege, char **display_name)
129 TryReturn(package_type != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] package_type is NULL");
130 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
131 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
133 int ret = privilege_info_get_privilege_display_name_by_package_type(privilege, api_version, __convert_package_type(package_type), display_name);
135 return __convert_return_value(ret, *display_name);
139 int privilege_info_get_description_by_pkgtype(const char *package_type, const char *api_version, const char *privilege, char **description)
141 TryReturn(package_type != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] package_type is NULL");
142 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
143 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
145 int ret = privilege_info_get_privilege_description_by_package_type(privilege, api_version, __convert_package_type(package_type), description);
147 return __convert_return_value(ret, *description);
151 int privilege_info_get_privacy_display_name(const char *privilege, char **privacy_display_name)
153 CHECK_FEATURE_SUPPORTED(PRIVACY_FEATURE);
154 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
155 TryReturn(privilege_info_has_privacy_attr(privilege) == 1, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege %s does not exist or does not have privacy attribute", privilege);
157 char* privacy_name = NULL;
158 TryReturn(privilege_info_get_privacy_by_privilege(privilege, &privacy_name) == PRVMGR_ERR_NONE && privacy_name != NULL, SAFE_FREE(privacy_name), PRVINFO_ERROR_INTERNAL_ERROR, "[PRVINFO_ERROR_INTERNAL_ERROR] privilege_info_get_privacy_by_privilege() failed. privilege = %s", privilege);
160 int ret = privilege_info_get_privacy_display(privacy_name, privacy_display_name);
161 SAFE_FREE(privacy_name);
163 return __convert_return_value(ret, *privacy_display_name);
167 int privilege_info_get_privilege_info_list(const char* locale, GList* privilege_name_list, GList** privilege_info_list, privilege_consumer_return_code_e* return_result)
169 TryReturn(privilege_name_list != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege_name_list is NULL.");
171 privilege_noti_info_result_e result;
172 int ret = privilege_info_get_privilege_noti_info_list(locale, privilege_name_list, privilege_info_list, &result);
173 *return_result = __convert_result_code(result);
175 return __convert_return_value(ret, "");
179 int privilege_info_free_privilege_info_list(GList* privilege_info_list)
181 return __convert_return_value(privilege_info_free_privilege_noti_info_list(privilege_info_list), "");