Check db version and update bundle at start up 81/88481/6
authorsangwan.kwon <sangwan.kwon@samsung.com>
Mon, 19 Sep 2016 09:02:06 +0000 (18:02 +0900)
committersangwan.kwon <sangwan.kwon@samsung.com>
Wed, 21 Sep 2016 07:16:29 +0000 (16:16 +0900)
* 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 <sangwan.kwon@samsung.com>
etc/upgrade/cert-svc-db-upgrade.sh.in
vcore/server/include/cert-server-db.h
vcore/server/src/cert-server-db.c
vcore/server/src/cert-server-main.c

index ce3e94c1125bb1e8c82bc3f54a87f2eb26a7f225..9ff5a09fce5dfeb68d2504a5dea59254966dc9c9 100755 (executable)
@@ -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" ]
index 20ae86f80225318c09fb48b34bee5c6724c87e01..5aea4473d3513172a5d6489e9f9873fc7505668c 100644 (file)
@@ -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_
index 163087fa740730aba67a007923673c327e84ab70..77a3246dd1bdfdce28f79213668d089b8ae9d9f1 100644 (file)
 
 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;
+}
index ca1b468937c54c2db628a4185ce8bac19ac1dc85..80dc700a77f0416ff18266dba330789aa64ba7ce 100644 (file)
@@ -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) {