5 #include <privilege_db_manager.h>
6 #include "privilege_information.h"
9 #define LOG_TAG "PRIVILEGE_INFO"
12 #define TryReturn(condition, expr, returnValue, ...) \
20 #define PI_API __attribute__((visibility("default")))
24 PRVINFO_ERROR_NO_MATCHING_PRIVILEGE = TIZEN_ERROR_PRIVILEGE_INFORMATION | 0x01
25 } privilege_info_internal_error_e;
27 int privilege_info_get_string_id(const char* package_type_string, int display, const char* api_version, const char *privilege, char **string_id)
29 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
30 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
34 privilege_db_manager_package_type_e package_type;
36 if (package_type_string != NULL)
37 goto get_string_id_with_package_type;
41 ret = privilege_db_manager_get_privilege_display(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege, api_version, &temp);
43 ret = privilege_db_manager_get_privilege_description(PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE, privilege, api_version, &temp);
45 if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE)
47 else if (ret != PRIVILEGE_DB_NO_EXIST_RESULT)
48 goto err_internal_error;
52 get_string_id_with_package_type:
53 if (package_type_string == NULL || strcmp(package_type_string, "PRVINFO_PACKAGE_TYPE_WEB") == 0)
54 package_type = PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_WRT;
55 else if (strcmp(package_type_string, "PRVINFO_PACKAGE_TYPE_NATIVE") == 0)
56 package_type = PRIVILEGE_DB_MANAGER_PACKAGE_TYPE_CORE;
58 return PRVINFO_ERROR_INVALID_PARAMETER;
61 ret = privilege_db_manager_get_privilege_display(package_type, privilege, api_version, &temp);
63 ret = privilege_db_manager_get_privilege_description(package_type, privilege, api_version, &temp);
66 if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE)
68 else if (ret == PRIVILEGE_DB_NO_EXIST_RESULT)
69 goto err_no_matching_privilege;
71 goto err_internal_error;
74 *string_id = strdup(temp);
75 TryReturn(*string_id != NULL, free(temp), PRVINFO_ERROR_OUT_OF_MEMORY, "[PRVINFO_ERROR_OUT_OF_MEMORY] Memory allocation is failed.");
77 return PRVINFO_ERROR_NONE;
79 err_no_matching_privilege:
82 return PRVINFO_ERROR_NO_MATCHING_PRIVILEGE;
86 return PRVINFO_ERROR_INTERNAL_ERROR;
89 int privilege_info_get_string_by_string_id(const char *string_id, char **string)
92 TryReturn(string_id != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] string_id is NULL");
94 temp = dgettext("privilege", string_id);
96 *string = strdup(temp);
97 TryReturn(*string != NULL, , PRVINFO_ERROR_OUT_OF_MEMORY, "[PRVINFO_ERROR_OUT_OF_MEMORY] strdup of string failed.");
99 return PRVINFO_ERROR_NONE;
103 int privilege_info_get_display_name(const char* api_version, const char* privilege, char** display_name)
106 char* string_id = NULL;
108 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
109 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
111 ret = privilege_info_get_string_id(NULL, 1, api_version, privilege, &string_id);
113 if (ret == PRVINFO_ERROR_NO_MATCHING_PRIVILEGE) {
114 char* tempPrivilege = NULL;
119 tempPrivilege = strdup(privilege);
120 TryReturn(tempPrivilege != NULL, free(tempPrivilege), PRVINFO_ERROR_OUT_OF_MEMORY, "[PRVINFO_ERROR_OUT_OF_MEMORY] tempPrivilege's strdup is failed.");
122 token = strtok_r(tempPrivilege, "/", &save);
125 token = strtok_r(NULL, "/", &save);
127 *display_name = strdup(temp);
128 TryReturn(*display_name != NULL, free(tempPrivilege), PRVINFO_ERROR_OUT_OF_MEMORY, "[PRVINFO_ERROR_OUT_OF_MEMORY] Memory allocation failed.");
130 } else if (ret == PRVINFO_ERROR_NONE) {
131 ret = privilege_info_get_string_by_string_id(string_id, display_name);
133 TryReturn(ret == PRVINFO_ERROR_NONE, , PRVINFO_ERROR_OUT_OF_MEMORY, "[PRVINFO_ERROR_OUT_OF_MEMORY] Memory allocation failed.");
135 return PRVINFO_ERROR_INTERNAL_ERROR;
137 return PRVINFO_ERROR_NONE;
142 int privilege_info_get_description(const char* api_version, const char* privilege, char** description)
145 char* string_id = NULL;
147 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
148 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
150 ret = privilege_info_get_string_id(NULL, 0, api_version, privilege, &string_id);
152 if (ret == PRVINFO_ERROR_NO_MATCHING_PRIVILEGE) {
153 ret = privilege_info_get_string_by_string_id("IDS_TPLATFORM_BODY_THIS_PRIVILEGE_IS_NOT_DEFINED", description);
154 TryReturn(ret == PRVINFO_ERROR_NONE, , PRVINFO_ERROR_OUT_OF_MEMORY, "[PRVINFO_ERROR_OUT_OF_MEMORY] Memory allocation failed.");
155 } else if (ret == PRVINFO_ERROR_NONE) {
156 ret = privilege_info_get_string_by_string_id(string_id, description);
158 TryReturn(ret == PRVINFO_ERROR_NONE, , PRVINFO_ERROR_OUT_OF_MEMORY, "[PRVINFO_ERROR_OUT_OF_MEMORY] Memory allocation failed.");
160 return PRVINFO_ERROR_INTERNAL_ERROR;
162 return PRVINFO_ERROR_NONE;
166 int privilege_info_get_display_name_by_pkgtype(const const char* package_type, const char* api_version, const char* privilege, char** display_name)
169 char* string_id = NULL;
171 TryReturn(package_type != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] package_type is NULL");
172 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
173 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
175 ret = privilege_info_get_string_id(package_type, 1, api_version, privilege, &string_id);
176 TryReturn(ret != PRVINFO_ERROR_INVALID_PARAMETER, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] invalid package_type : %s", package_type);
178 if (ret == PRVINFO_ERROR_NO_MATCHING_PRIVILEGE) {
179 char* tempPrivilege = NULL;
183 tempPrivilege = strdup(privilege);
184 TryReturn(tempPrivilege != NULL, free(tempPrivilege), PRVINFO_ERROR_OUT_OF_MEMORY, "[PRVINFO_ERROR_OUT_OF_MEMORY] tempPrivilege's strdup is failed.");
185 token = strtok_r(tempPrivilege, "/", &save);
188 token = strtok_r(NULL, "/", &save);
190 *display_name = strdup(temp);
191 TryReturn(*display_name != NULL, free(tempPrivilege), PRVINFO_ERROR_OUT_OF_MEMORY, "[PRVINFO_ERROR_OUT_OF_MEMORY] Memory allocation failed.");
193 } else if (ret == PRVINFO_ERROR_NONE) {
194 ret = privilege_info_get_string_by_string_id(string_id, display_name);
196 TryReturn(ret == PRVINFO_ERROR_NONE, , PRVINFO_ERROR_OUT_OF_MEMORY, "[PRVINFO_ERROR_OUT_OF_MEMORY] Memory allocation failed.");
198 return PRVINFO_ERROR_INTERNAL_ERROR;
200 return PRVINFO_ERROR_NONE;
204 int privilege_info_get_description_by_pkgtype(const char* package_type, const char* api_version, const char* privilege, char** description)
207 char* string_id = NULL;
209 TryReturn(package_type != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] package_type is NULL");
210 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
211 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
213 ret = privilege_info_get_string_id(package_type, 0, api_version, privilege, &string_id);
214 TryReturn(ret != PRVINFO_ERROR_INVALID_PARAMETER, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] invalid package_type : %s", package_type);
216 if (ret == PRVINFO_ERROR_NO_MATCHING_PRIVILEGE) {
217 ret = privilege_info_get_string_by_string_id("IDS_TPLATFORM_BODY_THIS_PRIVILEGE_IS_NOT_DEFINED", description);
218 TryReturn(ret == PRVINFO_ERROR_NONE, , PRVINFO_ERROR_OUT_OF_MEMORY, "[PRVINFO_ERROR_OUT_OF_MEMORY] Memory allocation failed.");
219 } else if (ret == PRVINFO_ERROR_NONE) {
220 ret = privilege_info_get_string_by_string_id(string_id, description);
222 TryReturn(ret == PRVINFO_ERROR_NONE, , PRVINFO_ERROR_OUT_OF_MEMORY, "[PRVINFO_ERROR_OUT_OF_MEMORY] Memory allocation failed.");
224 return PRVINFO_ERROR_INTERNAL_ERROR;
226 return PRVINFO_ERROR_NONE;