[Commits] [SCM] claws branch, master, updated. 3.16.0-14-g534ca50
ticho at claws-mail.org
ticho at claws-mail.org
Thu Jan 18 21:53:34 CET 2018
The branch, master has been updated
via 534ca50699cab24e3787d8e13a2e4a2a4bfe2234 (commit)
from 4302636fb7a93c42287ffc9c37862bd21e29dc2c (commit)
Summary of changes:
src/main.c | 9 +++++++++
src/passwordstore.c | 43 ++++++++++++++++++++++++++++++++++++-----
src/prefs_migration.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++
src/prefs_migration.h | 1 +
4 files changed, 99 insertions(+), 5 deletions(-)
- Log -----------------------------------------------------------------
commit 534ca50699cab24e3787d8e13a2e4a2a4bfe2234
Author: Andrej Kacian <ticho at claws-mail.org>
Date: Thu Jan 18 21:53:18 2018 +0100
Implement config_version in passwordstorerc.
diff --git a/src/main.c b/src/main.c
index 317b196..ed7bf5c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1331,6 +1331,15 @@ int main(int argc, char *argv[])
folder_item_update_freeze();
passwd_store_read_config();
+
+ if (prefs_update_config_version_password_store() < 0) {
+ debug_print("Password store configuration file version upgrade failed, exiting\n");
+#ifdef G_OS_WIN32
+ win32_close_log();
+#endif
+ exit(202);
+ }
+
prefs_account_init();
account_read_config_all();
diff --git a/src/passwordstore.c b/src/passwordstore.c
index 68f4b51..84119c5 100644
--- a/src/passwordstore.c
+++ b/src/passwordstore.c
@@ -37,6 +37,7 @@
#include "prefs_gtk.h"
static GSList *_password_store;
+gint _password_store_config_version = -1;
/* Finds password block of given type and name in the pwdstore. */
static PasswordBlock *_get_block(PasswordBlockType block_type,
@@ -308,6 +309,22 @@ static gint _write_to_file(FILE *fp)
GList *keys, *eitem;
gchar *typestr, *line, *key, *pwd;
+ /* Write out the config_version */
+ line = g_strdup_printf("[config_version:%d]\n", _password_store_config_version);
+ if (fputs(line, fp) == EOF) {
+ FILE_OP_ERROR("password store, config_version", "fputs");
+ g_free(line);
+ return -1;
+ }
+ g_free(line);
+
+ /* Add a newline if needed */
+ if (_password_store != NULL && fputs("\n", fp) == EOF) {
+ FILE_OP_ERROR("password store", "fputs");
+ return -1;
+ }
+
+ /* Write out each password store block */
for (item = _password_store; item != NULL; item = item->next) {
block = (PasswordBlock*)item->data;
if (block == NULL)
@@ -352,6 +369,7 @@ static gint _write_to_file(FILE *fp)
}
g_list_free(keys);
+ /* Add a separating new line if there is another block remaining */
if (item->next != NULL && fputs("\n", fp) == EOF) {
FILE_OP_ERROR("password store", "fputs");
return -1;
@@ -395,6 +413,8 @@ void passwd_store_read_config(void)
guint i = 0;
PasswordBlock *block = NULL;
PasswordBlockType type;
+ gboolean reading_config_version = FALSE;
+ gint ver = -1;
/* TODO: passwd_store_clear(); */
@@ -431,17 +451,30 @@ void passwd_store_read_config(void)
type = PWS_ACCOUNT;
} else if (!strcmp(typestr, "plugin")) {
type = PWS_PLUGIN;
+ } else if (!strcmp(typestr, "config_version")) {
+ reading_config_version = TRUE;
+ ver = atoi(name);
} else {
debug_print("Unknown password block type: '%s'\n", typestr);
g_strfreev(line);
i++; continue;
}
- if ((block = _new_block(type, name)) == NULL) {
- debug_print("Duplicate password block, ignoring: (%d/%s)\n",
- type, name);
- g_strfreev(line);
- i++; continue;
+ if (reading_config_version) {
+ if (ver < 0) {
+ debug_print("config_version:%d looks invalid, ignoring it\n", ver);
+ i++; continue;
+ }
+ debug_print("config_version in file is %d\n", ver);
+ _password_store_config_version = ver;
+ reading_config_version = FALSE;
+ } else {
+ if ((block = _new_block(type, name)) == NULL) {
+ debug_print("Duplicate password block, ignoring: (%d/%s)\n",
+ type, name);
+ g_strfreev(line);
+ i++; continue;
+ }
}
}
g_strfreev(line);
diff --git a/src/prefs_migration.c b/src/prefs_migration.c
index 6c8041b..251ba19 100644
--- a/src/prefs_migration.c
+++ b/src/prefs_migration.c
@@ -34,6 +34,8 @@
#include "prefs_common.h"
#include "alertpanel.h"
+extern gint _password_store_config_version;
+
static gint starting_config_version = 0;
gboolean _version_check(gint ver)
@@ -129,6 +131,22 @@ static void _update_config_account(PrefsAccount *ac_prefs, gint version)
ac_prefs->config_version = version + 1;
}
+static void _update_config_password_store(gint version)
+{
+ debug_print("Password store: Updating config version from %d to %d.\n",
+ version, version + 1);
+
+ switch (version) {
+ /* nothing here yet */
+
+ default:
+
+ /* NOOP */
+
+ break;
+ }
+}
+
int prefs_update_config_version_common()
{
gint ver = prefs_common_get_prefs()->config_version;
@@ -190,3 +208,36 @@ int prefs_update_config_version_accounts()
return 1;
}
+
+int prefs_update_config_version_password_store()
+{
+ gint ver;
+
+ if (_password_store_config_version == -1) {
+ /* There was no config_version stored in the config, let's assume
+ * config_version same as clawsrc started at, to avoid breaking
+ * the configuration by "upgrading" it unnecessarily. */
+ debug_print("Password store: config_version not saved, using one from clawsrc: %d\n", starting_config_version);
+ _password_store_config_version = starting_config_version;
+ }
+
+ ver = _password_store_config_version;
+
+ debug_print("Starting config update at config_version %d.\n", ver);
+
+ if (!_version_check(ver))
+ return -1;
+
+ if (ver == CLAWS_CONFIG_VERSION) {
+ debug_print("No update necessary, already at latest config_version.\n");
+ return 0; /* nothing to do */
+ }
+
+ while (ver < CLAWS_CONFIG_VERSION) {
+ _update_config_password_store(ver++);
+ _password_store_config_version = ver;
+ }
+
+ debug_print("Config update done.\n");
+ return 1;
+}
diff --git a/src/prefs_migration.h b/src/prefs_migration.h
index 31dc892..f1c5f15 100644
--- a/src/prefs_migration.h
+++ b/src/prefs_migration.h
@@ -21,5 +21,6 @@
int prefs_update_config_version_common();
int prefs_update_config_version_accounts();
+int prefs_update_config_version_password_store();
#endif /* __PREFS_MIGRATION_H__ */
-----------------------------------------------------------------------
hooks/post-receive
--
Claws Mail
More information about the Commits
mailing list