2 * Copyright (c) 2000 - 2016 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.
20 #include <sys/types.h>
24 #include <package-manager.h>
26 #include "pkgmgr-server.h"
29 #define DB_DIR "/var/lib/package-manager"
32 static const char *_get_db_path(void)
34 return DB_DIR"/blacklist.db";
37 static sqlite3 *_open_db(void)
43 path = _get_db_path();
45 ERR("get db path error");
49 ret = sqlite3_open_v2(path, &db, SQLITE_OPEN_READWRITE, NULL);
50 if (ret != SQLITE_OK) {
51 ERR("open db error: %d", ret);
58 static int __add_blacklist_info(sqlite3 *db, uid_t uid, const char *pkgid)
60 static const char query[] =
61 "INSERT INTO blacklist (uid, pkgid) VALUES(?, ?)";
65 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
66 if (ret != SQLITE_OK) {
67 ERR("prepare error: %s", sqlite3_errmsg(db));
71 sqlite3_bind_int(stmt, 1, uid);
72 sqlite3_bind_text(stmt, 2, pkgid, -1, SQLITE_STATIC);
74 ret = sqlite3_step(stmt);
75 sqlite3_finalize(stmt);
76 if (ret != SQLITE_DONE) {
77 ERR("step error: %s", sqlite3_errmsg(db));
84 int __add_blacklist(uid_t uid, const char *pkgid)
91 return PKGMGR_R_ERROR;
93 ret = sqlite3_exec(db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
94 if (ret != SQLITE_OK) {
96 ERR("transaction failed");
97 return PKGMGR_R_ERROR;
100 if (__add_blacklist_info(db, uid, pkgid)) {
101 sqlite3_exec(db, "ROLLBACK", NULL, NULL, NULL);
102 sqlite3_close_v2(db);
103 return PKGMGR_R_ERROR;
106 ret = sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);
107 if (ret != SQLITE_OK) {
108 ERR("commit error: %s", sqlite3_errmsg(db));
109 sqlite3_close_v2(db);
110 return PKGMGR_R_ERROR;
113 sqlite3_close_v2(db);
118 static int __remove_blacklist_info(sqlite3 *db, uid_t uid, const char *pkgid)
120 static const char query[] =
121 "DELETE FROM blacklist WHERE uid=? AND pkgid=?";
125 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
126 if (ret != SQLITE_OK) {
127 ERR("prepare error: %s", sqlite3_errmsg(db));
131 sqlite3_bind_int(stmt, 1, uid);
132 sqlite3_bind_text(stmt, 2, pkgid, -1, SQLITE_STATIC);
134 ret = sqlite3_step(stmt);
135 sqlite3_finalize(stmt);
136 if (ret != SQLITE_DONE) {
137 ERR("step error: %s", sqlite3_errmsg(db));
144 int __remove_blacklist(uid_t uid, const char *pkgid)
151 return PKGMGR_R_ERROR;
153 ret = sqlite3_exec(db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
154 if (ret != SQLITE_OK) {
155 sqlite3_close_v2(db);
156 ERR("transaction failed");
157 return PKGMGR_R_ERROR;
160 if (__remove_blacklist_info(db, uid, pkgid)) {
161 sqlite3_exec(db, "ROLLBACK", NULL, NULL, NULL);
162 sqlite3_close_v2(db);
163 return PKGMGR_R_ERROR;
166 ret = sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);
167 if (ret != SQLITE_OK) {
168 ERR("commit error: %s", sqlite3_errmsg(db));
169 sqlite3_close_v2(db);
170 return PKGMGR_R_ERROR;
173 sqlite3_close_v2(db);
178 int __check_blacklist(uid_t uid, const char *pkgid, int *result)
180 static const char query[] =
181 "SELECT * FROM blacklist WHERE uid=? AND pkgid=?";
189 return PKGMGR_R_ERROR;
192 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
193 if (ret != SQLITE_OK) {
194 ERR("prepare error: %s", sqlite3_errmsg(db));
196 sqlite3_close_v2(db);
197 return PKGMGR_R_ERROR;
200 sqlite3_bind_int(stmt, 1, uid);
201 sqlite3_bind_text(stmt, 2, pkgid, -1, SQLITE_STATIC);
203 ret = sqlite3_step(stmt);
204 sqlite3_finalize(stmt);
205 if (ret != SQLITE_ROW) {
206 if (ret != SQLITE_DONE)
207 ERR("step error: %s", sqlite3_errmsg(db));
209 sqlite3_close_v2(db);
210 return ret == SQLITE_DONE ? PKGMGR_R_OK : PKGMGR_R_ERROR;
214 sqlite3_close_v2(db);