summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Lortie <desrt@desrt.ca>2013-12-01 23:28:10 -0500
committerRyan Lortie <desrt@desrt.ca>2013-12-01 23:38:11 -0500
commitb2d93d4370a68fc65eb6892dfca040ff5569dc26 (patch)
tree4a07e4703dfcf98111e80aefb611e804305ce109
parenteef709c154cc907761756ec0d3def06bdff0e692 (diff)
downloaddconf-b2d93d4370a68fc65eb6892dfca040ff5569dc26.tar.gz
engine: look for system-db in /var/lib
Move the expected location for system-db to /var/lib/dconf/db instead of /etc/dconf/db. Add a fallback case to retain compatibility with system that have the file in the old location, but print a warning. Update the testcases to use the new location. A testcase will follow to ensure that the fallback code is working properly.
-rw-r--r--engine/dconf-engine-source-system.c28
-rw-r--r--tests/engine.c20
2 files changed, 37 insertions, 11 deletions
diff --git a/engine/dconf-engine-source-system.c b/engine/dconf-engine-source-system.c
index 30e67eb..ea6800a 100644
--- a/engine/dconf-engine-source-system.c
+++ b/engine/dconf-engine-source-system.c
@@ -49,11 +49,37 @@ dconf_engine_source_system_reopen (DConfEngineSource *source)
GvdbTable *table;
gchar *filename;
- filename = g_build_filename ("/etc/dconf/db", source->name, NULL);
+ filename = g_build_filename ("/var/lib/dconf/db", source->name, NULL);
table = gvdb_table_new (filename, FALSE, &error);
if (table == NULL)
{
+ gchar *etc_filename;
+
+ /* This is just a fallback, so we want to keep the original error
+ * message in case of failure, as not to confuse anyone...
+ */
+ etc_filename = g_build_filename ("/etc/dconf/db", source->name, NULL);
+ table = gvdb_table_new (etc_filename, FALSE, NULL);
+
+ if (table != NULL)
+ {
+ if (!source->did_warn)
+ {
+ /* It wasn't in /var/lib, but opening the file in /etc worked... */
+ g_warning ("binary dconf database files in /etc/dconf/db are deprecated; please run dconf-update");
+ source->did_warn = TRUE;
+ }
+
+ /* It worked, so clear the error. */
+ g_clear_error (&error);
+ }
+
+ g_free (etc_filename);
+ }
+
+ if (table == NULL)
+ {
if (!source->did_warn)
{
g_warning ("unable to open file '%s': %s; expect degraded performance", filename, error->message);
diff --git a/tests/engine.c b/tests/engine.c
index c523379..4a811ba 100644
--- a/tests/engine.c
+++ b/tests/engine.c
@@ -504,7 +504,7 @@ test_system_source (void)
/* Create the file after the fact and make sure it opens properly */
first_table = dconf_mock_gvdb_table_new ();
- dconf_mock_gvdb_install ("/etc/dconf/db/site", first_table);
+ dconf_mock_gvdb_install ("/var/lib/dconf/db/site", first_table);
reopened = dconf_engine_source_refresh (source);
g_assert (reopened);
@@ -517,7 +517,7 @@ test_system_source (void)
g_assert (source != NULL);
first_table = dconf_mock_gvdb_table_new ();
- dconf_mock_gvdb_install ("/etc/dconf/db/site", first_table);
+ dconf_mock_gvdb_install ("/var/lib/dconf/db/site", first_table);
/* Hang on to a copy for ourselves for below... */
dconf_mock_gvdb_table_ref (first_table);
@@ -533,7 +533,7 @@ test_system_source (void)
/* Replace the table on "disk" but don't invalidate the old one */
next_table = dconf_mock_gvdb_table_new ();
- dconf_mock_gvdb_install ("/etc/dconf/db/site", next_table);
+ dconf_mock_gvdb_install ("/var/lib/dconf/db/site", next_table);
/* Make sure the old table remains open (ie: no IO performed) */
reopened = dconf_engine_source_refresh (source);
@@ -548,7 +548,7 @@ test_system_source (void)
g_assert (source->values == next_table);
/* Remove the file entirely and do the same thing */
- dconf_mock_gvdb_install ("/etc/dconf/db/site", NULL);
+ dconf_mock_gvdb_install ("/var/lib/dconf/db/site", NULL);
reopened = dconf_engine_source_refresh (source);
g_assert (!reopened);
@@ -625,7 +625,7 @@ setup_state (guint n_sources,
state[i] = NULL;
}
- filename = g_strdup_printf ("/etc/dconf/db/db%d", i);
+ filename = g_strdup_printf ("/var/lib/dconf/db/db%d", i);
}
else
{
@@ -870,7 +870,7 @@ is_expected (const gchar *log_domain,
{
return g_str_equal (log_domain, "dconf") &&
log_level == (G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL) &&
- strstr (message, "unable to open file '/etc/dconf/db");
+ strstr (message, "unable to open file '/var/lib/dconf/db");
}
static gboolean
@@ -1097,7 +1097,7 @@ test_watch_fast (void)
table = dconf_mock_gvdb_table_new ();
dconf_mock_gvdb_install ("/HOME/.config/dconf/user", table);
table = dconf_mock_gvdb_table_new ();
- dconf_mock_gvdb_install ("/etc/dconf/db/site", table);
+ dconf_mock_gvdb_install ("/var/lib/dconf/db/site", table);
triv = g_variant_ref_sink (g_variant_new ("()"));
@@ -1146,7 +1146,7 @@ test_watch_fast (void)
dconf_mock_dbus_assert_no_async ();
dconf_mock_gvdb_install ("/HOME/.config/dconf/user", NULL);
- dconf_mock_gvdb_install ("/etc/dconf/db/site", NULL);
+ dconf_mock_gvdb_install ("/var/lib/dconf/db/site", NULL);
dconf_engine_unref (engine);
g_string_free (change_log, TRUE);
change_log = NULL;
@@ -1226,7 +1226,7 @@ test_change_fast (void)
locks = dconf_mock_gvdb_table_new ();
dconf_mock_gvdb_table_insert (locks, "/locked", g_variant_new_boolean (TRUE), NULL);
dconf_mock_gvdb_table_insert (table, ".locks", NULL, locks);
- dconf_mock_gvdb_install ("/etc/dconf/db/site", table);
+ dconf_mock_gvdb_install ("/var/lib/dconf/db/site", table);
empty = dconf_changeset_new ();
good_write = dconf_changeset_new_write ("/value", g_variant_new_string ("value"));
@@ -1404,7 +1404,7 @@ test_change_sync (void)
locks = dconf_mock_gvdb_table_new ();
dconf_mock_gvdb_table_insert (locks, "/locked", g_variant_new_boolean (TRUE), NULL);
dconf_mock_gvdb_table_insert (table, ".locks", NULL, locks);
- dconf_mock_gvdb_install ("/etc/dconf/db/site", table);
+ dconf_mock_gvdb_install ("/var/lib/dconf/db/site", table);
empty = dconf_changeset_new ();
good_write = dconf_changeset_new_write ("/value", g_variant_new_string ("value"));