const gchar *queries = NULL;
g_return_val_if_fail (GSIGNOND_DB_IS_METADATA_DATABASE (obj), FALSE);
RETURN_IF_NOT_OPEN (obj, FALSE);
+ gint fk_enabled = 0;
+ gint version = 0;
- if (gsignond_db_sql_database_get_db_version(obj,
- "PRAGMA user_version;") > 0) {
- DBG ("Metadata DB is already created");
+ queries = "PRAGMA foreign_keys = 1;";
+ if (!gsignond_db_sql_database_exec (obj, queries)) {
+ DBG ("Metadata DB enabling foreign keys failed");
+ return FALSE;
+ }
+
+ gsignond_db_sql_database_query_exec_int (obj, "PRAGMA foreign_keys;",
+ &fk_enabled);
+ version = gsignond_db_sql_database_get_db_version(obj,
+ "PRAGMA user_version;");
+ if (version > 0) {
+ DBG ("Metadata DB is already created with with version (%d) and "
+ "foreign keys enabled (%d)", version, fk_enabled);
return TRUE;
}
+ queries = "PRAGMA user_version = 1;";
+ if (!gsignond_db_sql_database_exec (obj, queries)) {
+ DBG ("Metadata DB setting version failed");
+ return FALSE;
+ }
+
+ version = gsignond_db_sql_database_get_db_version(obj,
+ "PRAGMA user_version;");
+ DBG ("Metadata DB is to be created with version (%d) and foreign keys "
+ "enabled(%d)", version, fk_enabled);
+
queries = ""
"CREATE TABLE IDENTITY"
"(id INTEGER PRIMARY KEY AUTOINCREMENT,"
"identity_id INTEGER CONSTRAINT fk_identity_id REFERENCES "
"IDENTITY(id) ON DELETE CASCADE,"
"method_id INTEGER CONSTRAINT fk_method_id REFERENCES "
- "METHODS(id) ON DELETE CASCADE,"
+ "METHODS(id),"
"mechanism_id INTEGER CONSTRAINT fk_mechanism_id "
- "REFERENCES MECHANISMS(id) ON DELETE CASCADE,"
+ "REFERENCES MECHANISMS(id),"
"secctx_id INTEGER CONSTRAINT fk_secctx_id REFERENCES "
- "SECCTX(id) ON DELETE CASCADE);"
+ "SECCTX(id));"
"CREATE TABLE REFS"
"(identity_id INTEGER CONSTRAINT fk_identity_id "
"REFERENCES IDENTITY(id) ON DELETE CASCADE,"
"secctx_id INTEGER CONSTRAINT fk_secctx_id REFERENCES "
- "SECCTX(id) ON DELETE CASCADE,"
+ "SECCTX(id),"
"ref TEXT,"
"PRIMARY KEY (identity_id, secctx_id, ref));"
"identity_id INTEGER CONSTRAINT fk_identity_id "
"REFERENCES IDENTITY(id) ON DELETE CASCADE,"
"secctx_id INTEGER CONSTRAINT fk_secctx_id REFERENCES SECCTX(id) "
- "ON DELETE CASCADE);"
+ ");"
// Triggers for deleting orphan SECCTX entries
"CREATE TRIGGER fkdstale_ACL_secctx_id_SECCTX_id"
"IDENTITY WHERE id = NEW.identity_id) IS NULL;"
"END;"
- // Cascading Delete
- "CREATE TRIGGER fkdc_REALMS_identity_id_IDENTITY_id"
- "BEFORE DELETE ON [IDENTITY]"
- "FOR EACH ROW BEGIN"
- " DELETE FROM REALMS WHERE REALMS.identity_id = OLD.id;"
- "END;"
-
// Foreign Key Preventing insert
"CREATE TRIGGER fki_ACL_identity_id_IDENTITY_id"
"BEFORE INSERT ON [ACL]"
"IDENTITY WHERE id = NEW.identity_id) IS NULL;"
"END;"
- // Cascading Delete
- "CREATE TRIGGER fkdc_ACL_identity_id_IDENTITY_id"
- "BEFORE DELETE ON [IDENTITY]"
- "FOR EACH ROW BEGIN"
- " DELETE FROM ACL WHERE ACL.identity_id = OLD.id;"
- "END;"
-
// Foreign Key Preventing insert
"CREATE TRIGGER fki_ACL_method_id_METHODS_id"
"BEFORE INSERT ON [ACL]"
"WHERE id = NEW.method_id) IS NULL;"
"END;"
- // Cascading Delete
- "CREATE TRIGGER fkdc_ACL_method_id_METHODS_id"
- "BEFORE DELETE ON [METHODS]"
- "FOR EACH ROW BEGIN"
- " DELETE FROM ACL WHERE ACL.method_id = OLD.id;"
- "END;"
-
// Foreign Key Preventing insert
"CREATE TRIGGER fki_ACL_mechanism_id_MECHANISMS_id"
"BEFORE INSERT ON [ACL]"
"MECHANISMS WHERE id = NEW.mechanism_id) IS NULL;"
"END;"
- // Cascading Delete
- "CREATE TRIGGER fkdc_ACL_mechanism_id_MECHANISMS_id"
- "BEFORE DELETE ON [MECHANISMS]"
- "FOR EACH ROW BEGIN"
- " DELETE FROM ACL WHERE ACL.mechanism_id = OLD.id;"
- "END;"
-
// Foreign Key Preventing insert
"CREATE TRIGGER fki_ACL_secctx_id_SECCTX_id"
"BEFORE INSERT ON [ACL]"
"WHERE id = NEW.secctx_id) IS NULL;"
"END;"
- // Cascading Delete
- "CREATE TRIGGER fkdc_ACL_secctx_id_SECCTX_id"
- "BEFORE DELETE ON [SECCTX]"
- "FOR EACH ROW BEGIN"
- " DELETE FROM ACL WHERE ACL.secctx_id = OLD.id;"
- "END;"
-
// Foreign Key Preventing insert
"CREATE TRIGGER fki_REFS_identity_id_IDENTITY_id"
"BEFORE INSERT ON [REFS]"
"IDENTITY WHERE id = NEW.identity_id) IS NULL;"
"END;"
- // Cascading Delete
- "CREATE TRIGGER fkdc_REFS_identity_id_IDENTITY_id"
- "BEFORE DELETE ON [IDENTITY]"
- "FOR EACH ROW BEGIN"
- " DELETE FROM REFS WHERE REFS.identity_id = OLD.id;"
- "END;"
-
// Foreign Key Preventing insert
"CREATE TRIGGER fki_REFS_secctx_id_SECCTX_id"
"BEFORE INSERT ON [REFS]"
"WHERE id = NEW.secctx_id) IS NULL;"
"END;"
- // Cascading Delete
- "CREATE TRIGGER fkdc_REFS_secctx_id_SECCTX_id"
- "BEFORE DELETE ON [SECCTX]"
- "FOR EACH ROW BEGIN"
- " DELETE FROM REFS WHERE REFS.secctx_id = OLD.id;"
- "END;"
-
// Foreign Key Preventing insert
"CREATE TRIGGER fki_OWNER_identity_id_IDENTITY_id"
"BEFORE INSERT ON [OWNER]"
"IDENTITY WHERE id = NEW.identity_id) IS NULL;"
"END;"
- // Cascading Delete
- "CREATE TRIGGER fkdc_OWNER_identity_id_IDENTITY_id"
- "BEFORE DELETE ON [IDENTITY]"
- "FOR EACH ROW BEGIN"
- " DELETE FROM OWNER WHERE OWNER.identity_id = OLD.id;"
- "END;"
-
// Foreign Key Preventing insert
"CREATE TRIGGER fki_OWNER_secctx_id_SECCTX_id"
"BEFORE INSERT ON [OWNER]"
" WHERE NEW.secctx_id IS NOT NULL AND (SELECT id FROM SECCTX "
"WHERE id = NEW.secctx_id) IS NULL;"
"END;"
-
- // Cascading Delete
- "CREATE TRIGGER fkdc_OWNER_secctx_id_SECCTX_id"
- "BEFORE DELETE ON [SECCTX]"
- "FOR EACH ROW BEGIN"
- " DELETE FROM OWNER WHERE OWNER.secctx_id = OLD.id;"
- "END;"
-
- "PRAGMA user_version = 1;";
+ ;
return gsignond_db_sql_database_transaction_exec (obj, queries);
}
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>
+#include <glib/gstdio.h>
#include "gsignond/gsignond-config.h"
#include "gsignond/gsignond-log.h"
(GEqualFunc)g_str_equal,
(GDestroyNotify)NULL,
(GDestroyNotify)g_sequence_free);
- seq1 = _sequence_new("mech11"); g_sequence_append (seq1, "mech12");
+ seq1 = _sequence_new("mech11"); //g_sequence_append (seq1, "mech12");
g_hash_table_insert (methods, "method1", seq1);
g_hash_table_insert (methods, "method2", _sequence_new("mech21"));
- g_hash_table_insert (methods, "method3", _sequence_new("mech31"));
+ //g_hash_table_insert (methods, "method3", _sequence_new("mech31"));
gsignond_identity_info_set_methods (identity, methods);
g_hash_table_unref (methods);
}
/*acl*/
ctx1 = gsignond_security_context_new_from_values ("sysctx1", "appctx1");
- ctx2 = gsignond_security_context_new_from_values ("sysctx2", "appctx2");
- ctx3 = gsignond_security_context_new_from_values ("sysctx3", "appctx3");
+ //ctx2 = gsignond_security_context_new_from_values ("sysctx2", "appctx2");
+ //ctx3 = gsignond_security_context_new_from_values ("sysctx3", "appctx3");
ctx_list = g_list_append (ctx_list,ctx1);
- ctx_list = g_list_append (ctx_list,ctx2);
- ctx_list = g_list_append (ctx_list,ctx3);
+ //ctx_list = g_list_append (ctx_list,ctx2);
+ //ctx_list = g_list_append (ctx_list,ctx3);
if (add_acl) {
gsignond_identity_info_set_access_control_list (identity, ctx_list);
}
return TRUE;
}
-START_TEST (test_secret_database)
+START_TEST (test_sql_database)
{
GSignondDbSecretDatabase *database = NULL;
GSignondConfig *config = NULL;
config = gsignond_config_new ();
dir = gsignond_config_get_string (config,
- GSIGNOND_CONFIG_GENERAL_SECURE_DIR);
+ GSIGNOND_CONFIG_GENERAL_STORAGE_PATH);
if (!dir) {
dir = g_get_user_data_dir ();
}
- filename = g_build_filename (dir, "secret_test.db", NULL);
+ g_mkdir_with_parents (dir, S_IRWXU);
+ filename = g_build_filename (dir, "sql_db_test.db", NULL);
fail_unless (gsignond_db_sql_database_open (sqldb, filename,
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE) == TRUE);
/* don't open the db again if its already open */
GHashTable *data = NULL;
GHashTable *data2 = NULL;
Data input;
+ const gchar *dir = NULL;
config = gsignond_config_new ();
/* Secret Storage */
g_object_unref(config);
fail_if (storage == NULL);
+ dir = gsignond_config_get_string (config,
+ GSIGNOND_CONFIG_GENERAL_SECURE_DIR);
+ if (!dir) {
+ dir = g_get_user_data_dir ();
+ }
+ g_mkdir_with_parents (dir, S_IRWXU);
+
fail_unless (gsignond_secret_storage_get_last_error (storage) == NULL);
fail_unless (gsignond_secret_storage_clear_db (storage) == FALSE);
fail_unless (gsignond_secret_storage_is_open_db (storage) == FALSE);
TCase *tc_core = tcase_create ("Tests");
tcase_add_test (tc_core, test_identity_info);
- tcase_add_test (tc_core, test_secret_database);
+
+ tcase_add_test (tc_core, test_sql_database);
tcase_add_test (tc_core, test_secret_storage);
tcase_add_test (tc_core, test_metadata_database);
tcase_add_test (tc_core, test_credentials_database);