From 82be5afa579e49730e60644da6449e114f1d477c Mon Sep 17 00:00:00 2001 From: "sangwan.kwon" Date: Mon, 19 Sep 2016 18:02:06 +0900 Subject: [PATCH] Check db version and update bundle at start up * For support platform upgrade 2.4 to 3.0, * check db schema version and update bundle file at boot up. * This is for adding user certificates to bundle. Change-Id: Ic081153940a8efc089321b492dae0e33ee67b592 Signed-off-by: sangwan.kwon --- etc/upgrade/cert-svc-db-upgrade.sh.in | 4 ++ vcore/server/include/cert-server-db.h | 2 + vcore/server/src/cert-server-db.c | 95 +++++++++++++++++++++++------------ vcore/server/src/cert-server-main.c | 25 +++++++++ 4 files changed, 93 insertions(+), 33 deletions(-) diff --git a/etc/upgrade/cert-svc-db-upgrade.sh.in b/etc/upgrade/cert-svc-db-upgrade.sh.in index ce3e94c..9ff5a09 100755 --- a/etc/upgrade/cert-svc-db-upgrade.sh.in +++ b/etc/upgrade/cert-svc-db-upgrade.sh.in @@ -45,6 +45,10 @@ echo "DETACH DATABASE 'tmp';" >> $MIGRATION_USER_TABLE sqlite3 $NEW_DB ".read $MIGRATION_USER_TABLE" rm -rf $MIGRATION_USER_TABLE +# update schema version to 2.4 (this is for bundle upgrade) +sqlite3 $NEW_DB "UPDATE schema_info SET version='1', description='Tizen 2.4' \ + WHERE version='2';" + # update disabled certs on db disabled_certs_cnt=`sqlite3 $OLD_DB "SELECT count(*) FROM disabled_certs;"` if [ "$disabled_certs_cnt" != "0" ] diff --git a/vcore/server/include/cert-server-db.h b/vcore/server/include/cert-server-db.h index 20ae86f..5aea447 100644 --- a/vcore/server/include/cert-server-db.h +++ b/vcore/server/include/cert-server-db.h @@ -37,5 +37,7 @@ int initialize_db(void); void deinitialize_db(void); int execute_insert_update_query(const char *query); int execute_select_query(const char *query, sqlite3_stmt **stmt); +int get_schema_version(schema_version *version); +int set_schema_version(schema_version version); #endif // CERT_SERVER_DB_H_ diff --git a/vcore/server/src/cert-server-db.c b/vcore/server/src/cert-server-db.c index 163087f..77a3246 100644 --- a/vcore/server/src/cert-server-db.c +++ b/vcore/server/src/cert-server-db.c @@ -26,50 +26,18 @@ sqlite3 *cert_store_db = NULL; - -void check_schema_version(void) -{ - sqlite3_stmt *stmt = NULL; - char *query = NULL; - - query = sqlite3_mprintf("SELECT version FROM schema_info WHERE version=%d", - TIZEN_3_0); - - int result = execute_select_query(query, &stmt); - - if (result != CERTSVC_SUCCESS) { - SLOGE("Failed to get schema version."); - return; - } - - if (sqlite3_step(stmt) == SQLITE_ROW) - SLOGI("Database version is 2(Tizen 3.0)"); - else - SLOGW("Database should be upgrade."); - - if (query) - sqlite3_free(query); - if (stmt) - sqlite3_finalize(stmt); -} - int initialize_db(void) { - int result = CERTSVC_SUCCESS; - if (cert_store_db != NULL) return CERTSVC_SUCCESS; - result = db_util_open(CERTSVC_SYSTEM_STORE_DB, &cert_store_db, 0); + int result = db_util_open(CERTSVC_SYSTEM_STORE_DB, &cert_store_db, 0); if (result != SQLITE_OK) { SLOGE("opening %s failed!", CERTSVC_SYSTEM_STORE_DB); cert_store_db = NULL; return CERTSVC_FAIL; } - /* Check schema version for consistent on platform upgrade */ - check_schema_version(); - return CERTSVC_SUCCESS; } @@ -138,3 +106,64 @@ int execute_select_query(const char *query, sqlite3_stmt **stmt) *stmt = stmts; return CERTSVC_SUCCESS; } + +int get_schema_version(schema_version *version) +{ + sqlite3_stmt *stmt = NULL; + char *query = NULL; + + query = sqlite3_mprintf("SELECT version FROM schema_info WHERE version=%d", + TIZEN_3_0); + + if (!query) { + SLOGE("Failed to generate query"); + return CERTSVC_BAD_ALLOC; + } + + int result = execute_select_query(query, &stmt); + if (result != CERTSVC_SUCCESS) { + SLOGE("Failed to get schema version."); + goto exit; + } + + if (sqlite3_step(stmt) == SQLITE_ROW) { + SLOGI("Database version is 2(Tizen 3.0)"); + *version = TIZEN_3_0; + } else { + SLOGW("Database should be upgrade."); + *version = TIZEN_2_4; + } + +exit: + + if (query) + sqlite3_free(query); + if (stmt) + sqlite3_finalize(stmt); + + return result; +} + +int set_schema_version(schema_version version) +{ + if (version != TIZEN_3_0) { + SLOGE("Schema version should be set as TIZEN_3_0"); + return CERTSVC_WRONG_ARGUMENT; + } + + char *query = sqlite3_mprintf("INSERT INTO schema_info (version, description)" + "VALUES (%d, 'Tizen 3.0')", (int)version); + if (!query) { + SLOGE("Failed to generate query"); + return CERTSVC_BAD_ALLOC; + } + + int result = execute_insert_update_query(query); + if (result != CERTSVC_SUCCESS) + SLOGE("Insert schema version to database failed."); + + if (query) + sqlite3_free(query); + + return result; +} diff --git a/vcore/server/src/cert-server-main.c b/vcore/server/src/cert-server-main.c index ca1b468..80dc700 100644 --- a/vcore/server/src/cert-server-main.c +++ b/vcore/server/src/cert-server-main.c @@ -103,6 +103,31 @@ void CertSvcServerComm(void) goto Error_close_exit; } + // check schema version for consistent on platform upgrade + SLOGI("Start to check schema version."); + schema_version version; + result = get_schema_version(&version); + if (result != CERTSVC_SUCCESS) { + SLOGE("Failed to check schema version."); + result = CERTSVC_IO_ERROR; + goto Error_close_exit; + } + + if (version != TIZEN_3_0) { + SLOGI("Start to update schema version and bundle."); + // remake bundle according to new DB + result = update_ca_certificate_file(NULL); + if (result != CERTSVC_SUCCESS) { + SLOGE("Failed to migrate bundle."); + result = CERTSVC_IO_ERROR; + goto Error_close_exit; + } + + // set DB schema version to TIZEN_3_O + set_schema_version(TIZEN_3_0); + } + SLOGI("Finish checking DB schema version."); + fd_set fd; struct timeval tv; while (1) { -- 2.7.4