From 79ff9bad7d02c61ed687fca0d7b9360274a69bab Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Fri, 10 Oct 2025 10:46:28 +0200 Subject: [PATCH] Fix OMEMO startup When setting up OMEMO for the first time via `/omemo gen` one had to reconnect in order to make OMEMO work. This is fixed now. Fixes: 5b6b5130 ("Fix OMEMO keyfile loading") Signed-off-by: Steffen Jaeckel --- src/omemo/omemo.c | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index 443d3f1d..837b2862 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -145,6 +145,32 @@ omemo_init(void) omemo_static_data.fingerprint_ac = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)autocomplete_free); } +static gboolean +_omemo_finalize_identity_load(ProfAccount* account) +{ + auto_gchar gchar* omemo_dir = files_file_in_account_data_path(DIR_OMEMO, account->jid, NULL); + if (!omemo_dir) { + log_error("[OMEMO] failed creating directory"); + return FALSE; + } + + if (load_custom_keyfile(&omemo_ctx.trust, g_strdup_printf("%s/%s", omemo_dir, "trust.txt"))) { + _load_trust(); + } + + if (load_custom_keyfile(&omemo_ctx.sessions, g_strdup_printf("%s/%s", omemo_dir, "sessions.txt"))) { + _load_sessions(); + } + + if (load_custom_keyfile(&omemo_ctx.knowndevices, g_strdup_printf("%s/%s", omemo_dir, "known_devices.txt"))) { + _load_known_devices(); + } + + omemo_devicelist_subscribe(); + + return TRUE; +} + void omemo_on_connect(ProfAccount* account) { @@ -243,19 +269,7 @@ omemo_on_connect(ProfAccount* account) return; } - if (load_custom_keyfile(&omemo_ctx.trust, g_strdup_printf("%s/%s", omemo_dir, "trust.txt"))) { - _load_trust(); - } - - if (load_custom_keyfile(&omemo_ctx.sessions, g_strdup_printf("%s/%s", omemo_dir, "sessions.txt"))) { - _load_sessions(); - } - - if (load_custom_keyfile(&omemo_ctx.knowndevices, g_strdup_printf("%s/%s", omemo_dir, "known_devices.txt"))) { - _load_known_devices(); - } - - omemo_devicelist_subscribe(); + _omemo_finalize_identity_load(account); } void @@ -323,7 +337,8 @@ omemo_generate_crypto_materials(ProfAccount* account) omemo_identity_keyfile_save(); - omemo_ctx.loaded = TRUE; + if ((omemo_ctx.loaded = _omemo_finalize_identity_load(account)) == FALSE) + return; omemo_publish_crypto_materials(); omemo_start_sessions(); @@ -340,7 +355,7 @@ omemo_publish_crypto_materials(void) return; } - omemo_bundle_publish(true); + omemo_bundle_publish(TRUE); } static void