diff --git a/CHANGELOG b/CHANGELOG index 826e7600dbb5a881a5ecc37571263ef7853e31c7..6ac764932ce4d7899869db833c1d62ce9938f2c0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,8 @@ - Download the bakabase with obfuscation or not - Add json-c to the download dependency script (add cmake as a requirement for that) +- Choose between static or shared library for liblektor +- Download the bakabase with obfuscation or not # v2.1 (df74b85f) diff --git a/inc/lektor/database.h b/inc/lektor/database.h index 442dbf3752e73023fb7b0dc29331ea4b16bb2c8d..cef0a11c416826fe65ab6f7c66d946177f1df9ad 100644 --- a/inc/lektor/database.h +++ b/inc/lektor/database.h @@ -158,6 +158,11 @@ bool database_config_queue_default(volatile sqlite3 *db); * for debug purpose. */ bool database_config_dump(volatile sqlite3 *db, FILE *f); +/* Check obfuscation status. If no one is set, set it and return `true`. If + * there was already an obfuscation status, return `true` if the two are the + * same, `false` otherwise. */ +bool database_config_obfuscation_check(volatile sqlite3 *db, int obfuscation); + /* Playlists */ struct lkt_playlist_metadata { const char *name; diff --git a/src/database/config.c b/src/database/config.c index cfb2e9d3fc369597fd8ae920abc2cbcc2a2903f0..ae05e5b1af91afced6bd50b0cf44de81cfd60010 100644 --- a/src/database/config.c +++ b/src/database/config.c @@ -216,3 +216,33 @@ error: sqlite3_finalize(stmt); return false; } + +bool +database_config_obfuscation_check(volatile sqlite3 *db, int obfuscation) +{ + static const char *GET_SQL = "SELECT obfuscation FROM misc WHERE id = 42;"; + static const char *SET_SQL = "UPDATE misc SET obfuscation = ? WHERE id = 42;"; + sqlite3_stmt *stmt = 0; + + SQLITE_PREPARE(db, stmt, GET_SQL, error); + + if (SQLITE_ROW == sqlite3_step(stmt)) { + /* Obfuscation mode set */ + sqlite3_finalize(stmt); + return obfuscation == sqlite3_column_int(stmt, 0); + } + + else { + /* No obfuscation mode set */ + sqlite3_finalize(stmt); + SQLITE_PREPARE(db, stmt, SET_SQL, error); + SQLITE_BIND_INT(db, stmt, 1, obfuscation, error); + SQLITE_STEP_DONE(db, stmt, error); + sqlite3_finalize(stmt); + return true; + } + +error: + sqlite3_finalize(stmt); + return false; +} diff --git a/src/database/disk.sql b/src/database/disk.sql index d1e356f6bb2ac14244e3931dcbd3e0510d65aed9..24dcac5c777a56c51970bd35a055a52df425b156 100644 --- a/src/database/disk.sql +++ b/src/database/disk.sql @@ -144,6 +144,7 @@ CREATE TABLE IF NOT EXISTS misc , last_end_update INTEGER , update_job INTEGER NOT NULL CHECK(update_job >= 0) , opened INTEGER NOT NULL CHECK(opened = 0 OR opened = 1) + , obfuscation INTEGER CHECK(obfuscation = 0 OR obfuscation = 1) ); INSERT OR REPLACE INTO misc (id, update_job, opened) VALUES (42, 0, 0); diff --git a/src/module/module_repo.c b/src/module/module_repo.c index 6f3b68c79e5720ebc8cdc4bf285c9384f3eb1c49..e4bf6d6a31584b4ed01af2dcd2acd1c47d4c88f5 100644 --- a/src/module/module_repo.c +++ b/src/module/module_repo.c @@ -489,7 +489,13 @@ module_repo_new(struct module_repo_internal *repo_, struct queue *queue, volatil } obfuscate = obfuscate ? 1 : 0; /* Safe values */ - LOG_WARN("REPO", "Downloading base in %s mode, mode is number: %d", obfuscate ? "obfuscation" : "clear", obfuscate); + LOG_WARN("REPO", "Downloading base in %s mode, mode is number: %d", + obfuscate ? "obfuscation" : "clear", obfuscate); + + if (!database_config_obfuscation_check(db, obfuscate)) { + LOG_ERROR("REPO", "Database obfuscation mismatch. Because I'm a coward I will exit"); + exit(EXIT_FAILURE); + } struct module_repo_internal repo = { .version = 1,