From f406384c3412d15637a26a6a64ef5d3b8375f40c Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Thu, 26 Jan 2023 11:49:29 +0100 Subject: [PATCH 1/3] fix libstrophe timer-callback usage The timer will be auto-removed if the callback returns `0`. The way it was done before breaks some internals of libstrophe. Signed-off-by: Steffen Jaeckel --- src/xmpp/iq.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 89511176..592b6a86 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -1396,9 +1396,7 @@ _autoping_timed_send(xmpp_conn_t* const conn, void* const userdata) log_warning("Server doesn't advertise %s feature, disabling autoping.", XMPP_FEATURE_PING); prefs_set_autoping(0); cons_show_error("Server ping not supported (%s), autoping disabled.", XMPP_FEATURE_PING); - xmpp_conn_t* conn = connection_get_conn(); - xmpp_timed_handler_delete(conn, _autoping_timed_send); - return 1; + return 0; } if (autoping_wait) { From 901ef217278de331b9d225ea483be3ffad295885 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Thu, 26 Jan 2023 11:50:02 +0100 Subject: [PATCH 2/3] simplify some code Signed-off-by: Steffen Jaeckel --- src/xmpp/iq.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 592b6a86..e6c1f6dc 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -1462,8 +1462,7 @@ _auto_pong_id_handler(xmpp_stanza_t* const stanza, void* const userdata) log_warning("Server ping (id=%s) error type 'cancel', disabling autoping.", id); prefs_set_autoping(0); cons_show_error("Server ping not supported, autoping disabled."); - xmpp_conn_t* conn = connection_get_conn(); - xmpp_timed_handler_delete(conn, _autoping_timed_send); + xmpp_timed_handler_delete(connection_get_conn(), _autoping_timed_send); } return 0; @@ -1531,8 +1530,7 @@ _version_result_id_handler(xmpp_stanza_t* const stanza, void* const userdata) log_warning("From attribute specified different JID, using original JID."); } - xmpp_conn_t* conn = connection_get_conn(); - xmpp_ctx_t* ctx = xmpp_conn_get_context(conn); + xmpp_ctx_t* ctx = connection_get_ctx(); Jid* jidp = jid_create((char*)userdata); From b602d619f676b9a0326c31200df967f3ae81f354 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Thu, 26 Jan 2023 16:03:57 +0100 Subject: [PATCH 3/3] prevent setting invalid combination of libstrophe flags Signed-off-by: Steffen Jaeckel --- src/xmpp/connection.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/xmpp/connection.c b/src/xmpp/connection.c index d57a1376..3165a18e 100644 --- a/src/xmpp/connection.c +++ b/src/xmpp/connection.c @@ -198,6 +198,10 @@ _conn_apply_settings(const char* const jid, const char* const passwd, const char long flags = xmpp_conn_get_flags(conn.xmpp_conn); + /* clear all TLS & auth related flags */ + flags &= ~(XMPP_CONN_FLAG_DISABLE_TLS | XMPP_CONN_FLAG_MANDATORY_TLS + | XMPP_CONN_FLAG_LEGACY_SSL | XMPP_CONN_FLAG_TRUST_TLS + | XMPP_CONN_FLAG_LEGACY_AUTH); if (!tls_policy || (g_strcmp0(tls_policy, "force") == 0)) { flags |= XMPP_CONN_FLAG_MANDATORY_TLS; } else if (g_strcmp0(tls_policy, "trust") == 0) { @@ -213,8 +217,6 @@ _conn_apply_settings(const char* const jid, const char* const passwd, const char flags |= XMPP_CONN_FLAG_LEGACY_AUTH; } - xmpp_conn_set_flags(conn.xmpp_conn, flags); - /* Print debug logs that can help when users share the logs */ if (flags != 0) { log_debug("Connecting with flags (0x%lx):", flags); @@ -230,6 +232,12 @@ _conn_apply_settings(const char* const jid, const char* const passwd, const char #undef LOG_FLAG_IF_SET } + if (xmpp_conn_set_flags(conn.xmpp_conn, flags)) { + log_error("libstrophe doesn't accept this combination of flags: 0x%x", flags); + conn.conn_status = JABBER_DISCONNECTED; + return FALSE; + } + char* cert_path = prefs_get_tls_certpath(); if (cert_path) { xmpp_conn_set_capath(conn.xmpp_conn, cert_path);