688ddb4333c7cdef7dd0ad0d27c390a7e720fba9
[platform/core/security/privilege-checker.git] / capi / include / privilege_db_manager.h
1 /*
2  * Copyright(c) 2013-2020 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #ifndef __PRIVILEGE_DB_MANAGER_H
18 #define __PRIVILEGE_DB_MANAGER_H
19
20 #include <glib.h>
21 #include <stdbool.h>
22 #include "privilege_manager_types.h"
23
24 #ifdef __cplusplus
25         extern "C" {
26 #endif
27
28 /**
29  * @brief Free GList of privilege_info_db_row_s* allocated by privilege_db_manager_get_privilege_level_info_list()
30  * @param [in] list The GList allocated by privilege_db_manager_get_privilege_level_info_list()
31  */
32 void free_privilege_level_info_list(GList* list);
33
34 /**
35  * @brief Free GList of privilege_privacy_info_s* allocated by privilege_db_manager_get_privacy_filtered_privilege_info_list()
36  * @param [in] list The GList allocated by privilege_db_manager_get_privacy_filtered_privilege_info_list()
37  */
38 void free_privilege_privacy_info_list(GList *list);
39
40 /**
41  * @brief Free privilege_privacy_info_s
42  * @param [in] info The privilege_privacy_info_s
43  */
44 void free_privilege_privacy_info(privilege_privacy_info_s* info);
45
46 /**
47  * @brief Free GList allocated by privilege_db_manager APIs
48  * @param [in] list The GList allocated by privilege_db_manager APIs
49  */
50 void privilege_db_manager_list_free(GList* list);
51
52 /**
53  * @brief Get privileges and its level information of the target profile and package type
54  * @remarks @a privilege_list must be released by you.
55  * @param [in]  package_type The package type
56  * @param [out] privilege_list The privilege list
57  * @return 0 on success, otherwise a negative error value.
58  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
59  * @retval #PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY Out of memory.
60  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
61  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
62  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
63  */
64 int privilege_db_manager_get_privilege_level_info_list(privilege_manager_package_type_e package_type, GList** privilege_list);
65
66 /**
67  * @brief Get mapped privilege list for the given api-version and privilege list.
68  * @remarks @a privilege_list must be released by using privilege_db_manager_list_free().
69  * @remarks @a mapped_privilege_list must be released by you.
70  * @param [in]  api_version The api-version to get mapped privilege list
71  * @param [in]  package_type The package type
72  * @param [in]  privilege_list The privilege list
73  * @param [out] mapped_privilege_list The mapped privilege list
74  * @return 0 on success, otherwise a negative error value.
75  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
76  * @retval #PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY Out of memory.
77  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
78  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
79  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
80  */
81 int privilege_db_manager_get_mapped_privilege_list(const char* api_version, privilege_manager_package_type_e package_type, GList* privilege_list, GList** mapped_privilege_list);
82
83 /**
84  * @brief Get privilege display name
85  * @remarks @a privilege_display must be released by you.
86  * @param [in]  package_type The package type
87  * @param [in]  privilege_name The privilege name
88  * @param [in]  api_version The api-version
89  * @param [out] privilege_display The privilege display name.
90  * @return 0 on success, otherwise a negative error value.
91  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
92  * @retval #PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY Out of memory.
93  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
94  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
95  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
96  * @retval #PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT No data selected by given qeury.
97  */
98 int privilege_db_manager_get_privilege_display(privilege_manager_package_type_e package_type, const char* privilege_name, const char* api_version, char** privilege_display);
99
100 /**
101  * @brief Get privilege description
102  * @remarks @a privilege_description must be released by you.
103  * @param [in]  package_type The package type
104  * @param [in]  privilege_name The privilege name
105  * @param [in]  api_version The api-version
106  * @param [out] privilege_description The privilege description
107  * @return 0 on success, otherwise a negative error value.
108  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
109  * @retval #PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY Out of memory.
110  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
111  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
112  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
113  * @retval #PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT No data selected by given qeury.
114  */
115 int privilege_db_manager_get_privilege_description(privilege_manager_package_type_e package_type, const char* privilege_name, const char* api_version, char** privilege_description);
116
117 /**
118  * @brief Get privacy display.
119  * @remarks @a privacy_display must be released by you.
120  * @param [in]  privacy_name The privacy name
121  * @param [out] privilege_description The privilege description
122  * @return 0 on success, otherwise a negative error value.
123  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
124  * @retval #PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY Out of memory.
125  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
126  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
127  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
128  * @retval #PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT No data selected by given qeury.
129  */
130 int privilege_db_manager_get_privacy_display(const char *privacy_name, char **privacy_display);
131
132 /**
133  * @brief Get privilege group ID
134  * @param [in]  package_type The package type
135  * @param [in]  privilege_name The privilege name
136  * @param [in]  api_version The api-version
137  * @param [out] privilege_group_id The ID of privilege group.
138  * @return 0 on success, otherwise a negative error value.
139  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
140  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
141  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
142  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
143  */
144 int privilege_db_manager_get_privilege_group_id(privilege_manager_package_type_e package_type, const char* privilege_name, const char* api_version, int* privilege_group_id);
145
146 /**
147  * @brief Determine privilege according to the given type and privilege.
148  * @param [in] type The type of check. 'v' for checking privilege exist or not, 'p' for checking privilege is privacy-related or not, and 'i' for checking privilege is internal or not.
149  * @param [in] privilege The privilege name
150  * @return 1 on true, 0 on false and -1 on error.
151  */
152 int privilege_db_manager_is(char type, const char* privilege);
153
154 /**
155  * @brief See if the given package id is privacy whitelisted for the given privilege.
156  * @remarks @a privilege must be privacy related
157  * @param [in] pkgid The package ID
158  * @param [in] privacy_id The privacy id
159  * @return 1 on true(is whitelisted), 0 on false and negative value on error.
160  * @retval #PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY Out of memory.
161  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
162  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
163  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
164  */
165 int privilege_db_manager_is_privacy_white_list(const char* pkgid, int privacy_id);
166
167 /**
168  * @brief See if the given package id is user-settable for the given privacy.
169  * @param [in] pkgid_name The privacy name
170  * @param [in] privacy_id The privacy ID
171  * @return 1 on true(is user-settable), 0 on false and negative value on error.
172  * @retval #PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY Out of memory.
173  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
174  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
175  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
176  */
177 int privilege_db_manager_is_user_settable(const char* pkgid, int privacy_id);
178
179 /**
180  * @brief Get all privacy list
181  * @remarks @a privacy_list must be released by using privilege_db_manager_list_free().
182  * @param [out] privacy_list The privacy list.
183  * @return 0 on success, otherwise a negative error value.
184  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
185  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
186  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
187  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
188  */
189 int privilege_db_manager_get_privacy_list(GList** privacy_list);
190
191 /**
192  * @brief Get list of privileges included in the given privacy group.
193  * @remarks @a privilege_list must be released by using privilege_db_manager_list_free().
194  * @param [in]  privacy_name The privacy name
195  * @param [out] privilege_list The privilege list.
196  * @return 0 on success, otherwise a negative error value.
197  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
198  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
199  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
200  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
201  */
202 int privilege_db_manager_get_privilege_list_by_privacy(const char* privacy_name, GList **privilege_list);
203
204 /**
205  * @brief Get privacy name that the given privilege is included in.
206  * @param [in]  privilege The privilege
207  * @param [out] privacy The privacy name
208  * @return 0 on success, otherwise a negative error value.
209  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
210  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
211  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
212  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
213  */
214 int privilege_db_manager_get_privacy_by_privilege(const char* privilege, char** privacy_name);
215
216 /**
217  * @brief Get privilege list of the same privacy group that the given privilege is included in.
218  * @remarks @a privilege_list must be released by using privilege_db_manager_list_free().
219  * @param [in]  privilege The privilege
220  * @param [out] privilege_list The privilege list of the same privacy group.
221  * @return 0 on success, otherwise a negative error value.
222  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
223  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
224  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
225  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
226  * @retval #PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT No data selected by given qeury.
227  */
228 int privilege_db_manager_get_same_privacy_grouped_privileges(const char* privilege, GList **privilege_list);
229
230
231 /**
232  * @brief Get privacy ID that the given privilege is included in.
233  * @param [in]  privilege The privilege
234  * @param [out] privacy_id The privacy ID
235  * @return 0 on success, otherwise a negative error value.
236  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
237  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
238  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
239  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
240  */
241 int privilege_db_manager_get_privacy_id_by_privilege(const char* privilege, int* privacy_id);
242
243 /**
244  * @brief Get ID of the given privacy name.
245  * @param [in]  privacy_name The privacy name
246  * @param [out] privacy_id The privacy ID
247  * @return 0 on success, otherwise a negative error value.
248  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
249  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
250  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
251  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
252  */
253 int privilege_db_manager_get_privacy_id(const char* privacy_name, int *privacy_id);
254
255 /**
256  * @brief See if the given privilege is in the mdm blacklist for the given uid.
257  * @param [in]  uid The uid
258  * @param [out] privilege The privilege
259  * @return 1 if true(is mdm blacklist privilege), 0 if false and otherwise a negative error value.
260  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
261  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
262  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
263  */
264 int privilege_db_manager_is_disabled_privilege(uid_t uid, const char* privilege);
265
266 /**
267  * @brief Get blacklisted privileges according to the policy type, uid, and package type.
268  * @remarks @a privilege_list must be released by using privilege_db_manager_list_free().
269  * @param [in] policy_type The policy type indicates which blacklist to get(PRVMGR_POLICY_TYPE_PREVENT for dpm blacklist and PRVMGR_POLICY_TYPE_DISABLE for mdm blacklist).
270  * @param [in]  uid The uid
271  * @param [in]  package_type The package type
272  * @param [out] privilege_list The privilege list.
273  * @return 0 on success, otherwise a negative error value.
274  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
275  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
276  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
277  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
278  */
279 int privilege_db_manager_get_black_list(privilege_manager_policy_type_e policy_type, int uid, privilege_manager_package_type_e package_type, GList** privilege_list);
280
281 /**
282  * @brief Set DPM blacklist privileges for the given uid and package type.
283  * @param [in] uid The uid
284  * @param [in] package_type The package type
285  * @param [in] privilege_list The privilege list.
286  * @return 0 on success, otherwise a negative error value.
287  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
288  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
289  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
290  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
291  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_BUSY_FAIL DB is busy.
292  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_CONSTRAINT_FAIL SQL constraint violation occured and update failed.
293  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_FULL_FAIL Write could not complete due to the disk is full.
294  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL DB update failed.
295  */
296 int privilege_db_manager_set_black_list(int uid, privilege_manager_package_type_e pacakge_type, GList *privilege_list);
297
298 /**
299  * @brief Remove the given privileges from DPM blacklist of the given uid and package type.
300  * @param [in] uid The uid
301  * @param [in] package_type The package type
302  * @param [in] privilege_list The privilege list.
303  * @return 0 on success, otherwise a negative error value.
304  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
305  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
306  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
307  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
308  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_BUSY_FAIL DB is busy.
309  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_CONSTRAINT_FAIL SQL constraint violation occured and update failed.
310  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL DB update failed.
311  */
312 int privilege_db_manager_unset_black_list(int uid, privilege_manager_package_type_e package_type, GList *privilege_list);
313
314 /**
315  * @brief Get the number of DPM blacklisted privileges in the give privilege list
316  * @remarks @a privilege_list must be released by you.
317  * @param [in] uid The uid
318  * @param [in] package_type The package type of the given privilege list
319  * @param [in] privilege_list The privilege list to check
320  * @return 0 if no blacklisted privileges in the given privilege list, or return the number of blacklisted privileges. And negative error value on error.
321  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful. No blacklisted privilege in the given privilege list.
322  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
323  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
324  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
325  */
326 int privilege_db_manager_check_black_list(uid_t uid, privilege_manager_package_type_e pacakge_type, GList *privilege_list);
327
328 /**
329  * @brief Set application package's privacy privilege information
330  * @remarks Non-privacy privilege included in the privilege list will be ignored.
331  * @remarks Call it with the privilege list before mapping.
332  * @remarks @a privilege_list must be released by you.
333  * @param [in] uid The uid
334  * @param [in] pkgid The package ID
335  * @param [in] api_version The api-version of the package
336  * @param [in] privilege_list The user-settable privacy privilege list of the package
337  * @return 0 on success, otherwise a negative error value.
338  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
339  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
340  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
341  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
342  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_BUSY_FAIL DB is busy.
343  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_CONSTRAINT_FAIL SQL constraint violation occured and update failed.
344  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_FULL_FAIL Write could not complete due to the disk is full.
345  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL DB update failed.
346  */
347 int privilege_db_manager_set_package_privacy_privilege_info(const uid_t uid, const char* pkgid, const char* api_version, GList* privilege_list);
348
349 /**
350  * @brief Delete all privacy privilege info of the given application package.
351  * @param [in] uid The uid
352  * @param [in] pkgid The package ID
353  * @return 0 on success, otherwise a negative error value.
354  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
355  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
356  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
357  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
358  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_BUSY_FAIL DB is busy.
359  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_CONSTRAINT_FAIL SQL constraint violation occured and update failed.
360  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL DB update failed.
361  */
362 int privilege_db_manager_unset_package_privilege_info(const uid_t uid, const char* pkgid);
363
364 /**
365  * @brief See if the package's api_version says it can request privacy to the user
366  * @remarks If the package have no privacy privilege then it will return PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT
367  * @param [in]  uid The uid
368  * @param [in]  pkgid The package ID
369  * @param [in]  privilege The privilege
370  * @param [out] is_privacy_requestable is_privacy_requestable value
371  * @return 0 on success, otherwise a negative error value.
372  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
373  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
374  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
375  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
376  * @retval #PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT No data selected by given qeury.
377  */
378 int privilege_db_manager_is_privacy_requestable(const uid_t uid, const char* pkgid, const char* privilege, privilege_manager_package_type_e pkg_type, bool* is_privacy_requestable);
379
380 /**
381  * @brief Get all privacy package list of the user
382  * @remarks @a package_list must be released by using privilege_db_manager_list_free().
383  * @param [in]  uid The uid
384  * @param [out] package_list The package list
385  * @return 0 on success, otherwise a negative error value.
386  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
387  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
388  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
389  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
390  * @retval #PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT No data selected by given qeury.
391  */
392 int privilege_db_manager_get_all_privacy_package_list(const uid_t uid, GList** package_list);
393
394 /**
395  * @brief Get privacy list of the application package
396  * @remarks @a privacy_list must be released by using privilege_db_manager_list_free().
397  * @param [in]  uid The uid
398  * @param [in]  pkgid The package ID
399  * @param [out] privacy_list The privacy list
400  * @return 0 on success, otherwise a negative error value.
401  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
402  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
403  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
404  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
405  * @retval #PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT No data selected by given qeury.
406  */
407 int privilege_db_manager_get_privacy_list_by_pkgid(const uid_t uid, const char* pkgid, GList** privacy_list);
408
409 /**
410  * @brief Get package list with the given privacy
411  * @remarks @a package_list must be released by using privilege_db_manager_list_free().
412  * @param [in]  uid The uid
413  * @param [in]  privacy The privacy name
414  * @param [out] package_list The package list
415  * @return 0 on success, otherwise a negative error value.
416  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
417  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
418  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
419  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
420  * @retval #PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT No data selected by given qeury.
421  */
422 int privilege_db_manager_get_package_list_by_privacy(const uid_t uid, const char* privacy, GList** package_list);
423
424 /**
425  * @brief Get package's privilege list related to the given privacy
426  * @remarks @a privilege_list must be released by using privilege_db_manager_list_free().
427  * @param [in]  uid The uid
428  * @param [in]  pkgid The package id
429  * @param [in]  privacy The privacy name
430  * @param [out] privilege_list The privilege list
431  * @return 0 on success, otherwise a negative error value.
432  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
433  * @retval #PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY Failed to prepare sql query.
434  * @retval #PRIVILEGE_DB_MANAGER_ERR_DB_NOENTRY DB not exist.
435  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
436  * @retval #PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT No data selected by given qeury.
437  */
438 int privilege_db_manager_get_privilege_list_by_pkgid_and_privacy(const uid_t uid, const char* pkgid, const char* privacy, GList** privilege_list);
439
440 /**
441  * @brief Get privilege privacy info list filtered by privacy
442  * @remarks @a privilage_privacy_info_list must released by using free_privilege_privacy_info_list().
443  * @remarks If you want to free an element of @a privilege_privacy_info_list then use free_privilege_privacy_info().
444  * @param [in] privilege_list The privilege list to filter privacy
445  * @param [in] privacy_name The privacy name to filter privilege list. If the privacy name is NULL then just filter privacy privileges.
446  * @param [out] privilege_privacy_info_list The filtered privileges and their privacy info
447  */
448 int privilege_db_manager_get_privacy_filtered_privilege_info_list(GList *privilege_list, const char* privacy_name, GList **privilege_privacy_info_list);
449
450 #ifdef __cplusplus
451         }
452 #endif
453
454 #endif /* __PRIVILEGE_DB_MANAGER_H */