summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKévin THIERRY <kevin.thierry@open.eurogiciel.org>2014-02-07 14:50:01 +0100
committerKévin THIERRY <kevin.thierry@open.eurogiciel.org>2014-02-19 16:36:03 +0100
commitb45dfedd91890a8c17138f1a8e223a6992dc4eb8 (patch)
tree9d31cea94ea5b5c2c18390e318354d023b0d9478
parent884dcb1b9c50cf0e2e4107accd13b0b040b74393 (diff)
downloadbadge-b45dfedd91890a8c17138f1a8e223a6992dc4eb8.tar.gz
badge-b45dfedd91890a8c17138f1a8e223a6992dc4eb8.tar.bz2
badge-b45dfedd91890a8c17138f1a8e223a6992dc4eb8.zip
Add multi-user support
Also: + do not generate a "badge" RPM since its only purpose was to install the db files. This has been moved in the "libbadge" RPM which uses it. Bug-Tizen: PTREL-333 Change-Id: I782e5fab2ed3ad5e107b406eca01b3aee8af677f Signed-off-by: Kévin THIERRY <kevin.thierry@open.eurogiciel.org>
-rw-r--r--CMakeLists.txt7
-rw-r--r--packaging/badge.spec25
-rw-r--r--packaging/init_db.sh6
-rw-r--r--src/badge_internal.c51
4 files changed, 60 insertions, 29 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f158b23..224a358 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,9 +6,6 @@ SET(EXEC_PREFIX "\${prefix}")
SET(PROJECT_NAME "${PROJECT_NAME}")
SET(LIBDIR ${LIB_INSTALL_DIR})
SET(INCLUDEDIR "\${prefix}/include/${PROJECT_NAME}")
-SET(DBDIR "/opt/dbspace")
-SET(DBFILE ".${PROJECT_NAME}.db")
-SET(DBPATH "${DBDIR}/${DBFILE}")
SET(VERSION_MAJOR 0)
SET(VERSION "${VERSION_MAJOR}.0.1")
@@ -40,6 +37,7 @@ pkg_check_modules(pkgs REQUIRED
dbus-glib-1
vconf
com-core
+ libtzplatform-config
)
FOREACH(flag ${pkgs_CFLAGS})
@@ -52,9 +50,6 @@ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
ADD_DEFINITIONS("-DBADGE_USE_DLOG")
-ADD_DEFINITIONS("-DDBDIR=\"${DBDIR}\"")
-ADD_DEFINITIONS("-DDBFILE=\"${DBFILE}\"")
-ADD_DEFINITIONS("-DBADGE_DB_PATH=\"${DBPATH}\"")
FOREACH(lib_file ${SUBMODULES})
ADD_LIBRARY(${lib_file} SHARED ${SRCS})
diff --git a/packaging/badge.spec b/packaging/badge.spec
index 751ab07..3e20dfc 100644
--- a/packaging/badge.spec
+++ b/packaging/badge.spec
@@ -1,32 +1,31 @@
Name: badge
-Summary: badge library
+Summary: Badge library
Version: 0.0.5
-Release: 1
+Release: 0
Group: Application Framework/Libraries
License: Apache-2.0
Source0: %{name}-%{version}.tar.gz
-Source1001: badge.manifest
+Source1001: badge.manifest
+Source1002: init_db.sh
BuildRequires: pkgconfig(aul)
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(dbus-glib-1)
BuildRequires: pkgconfig(dlog)
BuildRequires: pkgconfig(vconf)
BuildRequires: pkgconfig(com-core)
+BuildRequires: pkgconfig(sqlite3)
+BuildRequires: pkgconfig(libtzplatform-config)
BuildRequires: cmake
-BuildRequires: sqlite3
-Requires: libbadge
%description
Badge library.
%package -n libbadge
Summary: Badge Library
-Requires: %{name} = %{version}-%{release}
%description -n libbadge
Badge library.
-
%package devel
Summary: Badge library (devel)
Group: Application Framework/Development
@@ -45,8 +44,8 @@ make %{?jobs:-j%jobs}
%install
%make_install
-mkdir -p %{buildroot}/opt/dbspace
-sqlite3 %{buildroot}/opt/dbspace/.%{name}.db < %{name}.sql
+install -D -m 0640 %{name}.sql %{buildroot}%{TZ_SYS_SHARE}/%{name}/ressources/%{name}.sql
+install -D -m 0750 %{SOURCE1002} %{buildroot}%{TZ_SYS_SHARE}/%{name}/ressources/init_db.sh
%post -p /sbin/ldconfig -n libbadge
@@ -58,11 +57,9 @@ sqlite3 %{buildroot}/opt/dbspace/.%{name}.db < %{name}.sql
%manifest badge.manifest
%defattr(-,root,root,-)
%{_libdir}/libbadge.so.*
-
-%files
-%manifest %{name}.manifest
-%verify(not md5 size mtime) %config(noreplace) %attr(660,root,app) /opt/dbspace/.%{name}.db-journal
-%verify(not md5 size mtime) %config(noreplace) %attr(660,root,app) /opt/dbspace/.%{name}.db
+%{TZ_SYS_SHARE}/%{name}
+%attr(640,root,%{TZ_SYS_USER_GROUP}) %{TZ_SYS_SHARE}/%{name}/ressources/%{name}.sql
+%attr(750,root,%{TZ_SYS_USER_GROUP}) %{TZ_SYS_SHARE}/%{name}/ressources/init_db.sh
%files devel
%manifest %{name}.manifest
diff --git a/packaging/init_db.sh b/packaging/init_db.sh
new file mode 100644
index 0000000..d480bc1
--- /dev/null
+++ b/packaging/init_db.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+source /etc/tizen-platform.conf
+
+sqlite3 $TZ_USER_DB/.badge.db < $TZ_SYS_SHARE/badge/ressources/badge.sql
+chmod 600 $TZ_USER_DB/.badge.db
diff --git a/src/badge_internal.c b/src/badge_internal.c
index 83155a2..4f1bc7e 100644
--- a/src/badge_internal.c
+++ b/src/badge_internal.c
@@ -24,6 +24,7 @@
#include <stdlib.h>
#include <stdarg.h>
#include <fcntl.h>
+#include <errno.h>
#include <unistd.h>
#include <glib.h>
#include <dbus/dbus.h>
@@ -32,6 +33,9 @@
#include <sqlite3.h>
#include <db-util.h>
+/* For multi-user support */
+#include <tzplatform_config.h>
+
#include "badge_log.h"
#include "badge_error.h"
#include "badge_internal.h"
@@ -41,7 +45,11 @@
#define BADGE_TABLE_NAME "badge_data"
#define BADGE_OPTION_TABLE_NAME "badge_option"
-#define BADGE_CHANGED_NOTI "badge_changed"
+#define BADGE_CHANGED_NOTI "badge_changed"
+
+#define BADGE_DB_PATH tzplatform_mkpath(TZ_USER_DB, "badge.db")
+
+#define SCRIPT_INIT_DB tzplatform_mkpath(TZ_SYS_SHARE, "badge/resources/init_db.sh")
struct _badge_h {
char *pkgname;
@@ -55,6 +63,30 @@ struct _badge_cb_data {
static GList *g_badge_cb_list;
+static int db_util_open_wrapper(sqlite3 *db)
+{
+ static int init_db = 1;
+ struct stat sts;
+ int sqlret, ret;
+
+ /* Check if the DB exists */
+ if(init_db) {
+ /* If the DB doesn't exist, create it and initialize it */
+ ret = stat(BADGE_DB_PATH, &sts);
+ if (ret == -1 && errno == ENOENT) {
+ DBG("DB %s doesn't exist, it needs to be created and \
+ initialized, calling %s", BADGE_DB_PATH, SCRIPT_INIT_DB);
+ system(SCRIPT_INIT_DB);
+ }
+ init_db = 0;
+ }
+
+ /* Open DB */
+ sqlret = db_util_open(BADGE_DB_PATH, &db, 0);
+
+ return sqlret;
+}
+
static inline long _get_max_len(void)
{
long max = 0;
@@ -287,13 +319,14 @@ badge_error_e _badge_is_existing(const char *pkgname, bool *existing)
int sqlret;
badge_error_e ret = BADGE_ERROR_NONE;
badge_error_e result = BADGE_ERROR_NONE;
+ badge_error_e sqlret_open;
if (!pkgname || !existing) {
ERR("pkgname : %s, existing : %p", pkgname, existing);
return BADGE_ERROR_INVALID_DATA;
}
- sqlret = db_util_open(BADGE_DB_PATH, &db, 0);
+ sqlret = db_util_open_wrapper(&db);
if (sqlret != SQLITE_OK || !db) {
ERR("fail to db_util_open - [%d]", sqlret);
return BADGE_ERROR_FROM_DB;
@@ -325,7 +358,7 @@ badge_error_e _badge_foreach_existed(badge_cb callback, void *data)
if (!callback)
return BADGE_ERROR_INVALID_DATA;
- sqlret = db_util_open(BADGE_DB_PATH, &db, 0);
+ sqlret = db_util_open_wrapper(&db);
if (sqlret != SQLITE_OK || !db) {
ERR("fail to db_util_open - [%d]", sqlret);
return BADGE_ERROR_FROM_DB;
@@ -409,7 +442,7 @@ badge_error_e _badge_insert(badge_h *badge)
if (!badge || !badge->pkgname || !badge->writable_pkgs)
return BADGE_ERROR_INVALID_DATA;
- sqlret = db_util_open(BADGE_DB_PATH, &db, 0);
+ sqlret = db_util_open_wrapper(&db);
if (sqlret != SQLITE_OK || !db) {
ERR("fail to db_util_open - [%s][%d]", BADGE_DB_PATH, sqlret);
return BADGE_ERROR_FROM_DB;
@@ -499,7 +532,7 @@ badge_error_e _badge_remove(const char *caller, const char *pkgname)
if (!pkgname)
return BADGE_ERROR_INVALID_DATA;
- sqlret = db_util_open(BADGE_DB_PATH, &db, 0);
+ sqlret = db_util_open_wrapper(&db);
if (sqlret != SQLITE_OK || !db) {
ERR("fail to db_util_open - [%d]", sqlret);
return BADGE_ERROR_FROM_DB;
@@ -586,7 +619,7 @@ badge_error_e _badget_set_count(const char *caller, const char *pkgname,
if (!pkgname)
return BADGE_ERROR_INVALID_DATA;
- sqlret = db_util_open(BADGE_DB_PATH, &db, 0);
+ sqlret = db_util_open_wrapper(&db);
if (sqlret != SQLITE_OK || !db) {
ERR("fail to db_util_open - [%d]", sqlret);
return BADGE_ERROR_FROM_DB;
@@ -650,7 +683,7 @@ badge_error_e _badget_get_count(const char *pkgname, unsigned int *count)
if (!count)
return BADGE_ERROR_INVALID_DATA;
- sqlret = db_util_open(BADGE_DB_PATH, &db, 0);
+ sqlret = db_util_open_wrapper(&db);
if (sqlret != SQLITE_OK || !db) {
ERR("fail to db_util_open - [%d]", sqlret);
return BADGE_ERROR_FROM_DB;
@@ -715,7 +748,7 @@ badge_error_e _badget_set_display(const char *pkgname,
if (is_display != 0 && is_display != 1)
return BADGE_ERROR_INVALID_DATA;
- sqlret = db_util_open(BADGE_DB_PATH, &db, 0);
+ sqlret = db_util_open_wrapper(&db);
if (sqlret != SQLITE_OK || !db) {
ERR("fail to db_util_open - [%d]", sqlret);
return BADGE_ERROR_FROM_DB;
@@ -794,7 +827,7 @@ badge_error_e _badget_get_display(const char *pkgname, unsigned int *is_display)
if (!is_display)
return BADGE_ERROR_INVALID_DATA;
- sqlret = db_util_open(BADGE_DB_PATH, &db, 0);
+ sqlret = db_util_open_wrapper(&db);
if (sqlret != SQLITE_OK || !db) {
ERR("fail to db_util_open - [%d]", sqlret);
return BADGE_ERROR_FROM_DB;