From 0a9200e268d5291f8caf643373eb4c295116d510 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 30 Sep 2020 19:29:35 +0200 Subject: [PATCH 1/6] Require libstrophe/libmesode 0.10.0 --- configure.ac | 12 ++---------- src/xmpp/connection.c | 8 -------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/configure.ac b/configure.ac index fb9fbbb6..7ccf9964 100644 --- a/configure.ac +++ b/configure.ac @@ -131,19 +131,11 @@ AS_IF([test "x$PTHREAD_CC" != x], [ CC="$PTHREAD_CC" ]) ### Check for libmesode, fall back to libstrophe ### TODO libmesode support will be removed in the future, rewrite this section -PKG_CHECK_MODULES([libmesode], [libmesode >= 0.9.3], +PKG_CHECK_MODULES([libmesode], [libmesode >= 0.10.0], [LIBS="$libmesode_LIBS $LIBS" CFLAGS="$CFLAGS $libmesode_CFLAGS" XMPP_LIB="libmesode" AC_DEFINE([HAVE_LIBMESODE], [1], [libmesode])], - [PKG_CHECK_MODULES([libstrophe], [libstrophe >= 0.9.3], + [PKG_CHECK_MODULES([libstrophe], [libstrophe >= 0.10.0], [LIBS="$libstrophe_LIBS $LIBS" CFLAGS="$CFLAGS $libstrophe_CFLAGS" XMPP_LIB="libstrophe" AC_DEFINE([HAVE_LIBSTROPHE], [1], [libstrophe])], [XMPP_LIB=""])]) -if test "x$XMPP_LIB" = x; then - PKG_CHECK_MODULES([libmesode], [libmesode >= 0.9.2], - [LIBS="$libmesode_LIBS $LIBS" CFLAGS="$CFLAGS $libmesode_CFLAGS" XMPP_LIB="libmesode" AC_DEFINE([HAVE_LIBMESODE], [1], [libmesode])], - [PKG_CHECK_MODULES([libstrophe], [libstrophe >= 0.9.2], - [LIBS="$libstrophe_LIBS $LIBS" CFLAGS="$CFLAGS $libstrophe_CFLAGS" XMPP_LIB="libstrophe" AC_DEFINE([HAVE_LIBSTROPHE], [1], [libstrophe])], - [AC_MSG_ERROR([libstrophe-0.9.2 or later is required for profanity])])]) - AC_DEFINE([HAVE_LIBSTROPHE_LT_0_9_3], [1], [Old libstrophe is present]) -fi AC_MSG_CHECKING([whether ${XMPP_LIB} works]) AC_LINK_IFELSE([AC_LANG_SOURCE([[ diff --git a/src/xmpp/connection.c b/src/xmpp/connection.c index ace28255..0bcab020 100644 --- a/src/xmpp/connection.c +++ b/src/xmpp/connection.c @@ -193,13 +193,7 @@ connection_connect(const char* const jid, const char* const passwd, const char* } if (auth_policy && (g_strcmp0(auth_policy, "legacy") == 0)) { -#ifdef HAVE_LIBSTROPHE_LT_0_9_3 - log_warning("Legacy authentication is requested, but it hasn't been " - "built. Update libstrophe and rebuild Profanity."); - cons_show("Legacy authentication is requested, but it hasn't been built."); -#else flags |= XMPP_CONN_FLAG_LEGACY_AUTH; -#endif /* HAVE_LIBSTROPHE_LT_0_9_3 */ } xmpp_conn_set_flags(conn.xmpp_conn, flags); @@ -215,9 +209,7 @@ connection_connect(const char* const jid, const char* const passwd, const char* LOG_FLAG_IF_SET(XMPP_CONN_FLAG_TRUST_TLS); LOG_FLAG_IF_SET(XMPP_CONN_FLAG_DISABLE_TLS); LOG_FLAG_IF_SET(XMPP_CONN_FLAG_LEGACY_SSL); -#ifndef HAVE_LIBSTROPHE_LT_0_9_3 LOG_FLAG_IF_SET(XMPP_CONN_FLAG_LEGACY_AUTH); -#endif /* HAVE_LIBSTROPHE_LT_0_9_3 */ #undef LOG_FLAG_IF_SET } From 17b1b431f563fa99e24e55a392c251f590bfc465 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 30 Sep 2020 19:34:00 +0200 Subject: [PATCH 2/6] Replace stanza_get_child_by_name_and_ns with xmpp_stanza_get_child_by_name_and_ns Replace our own stanza_get_child_by_name_and_ns() with the upstreamed xmpp_stanza_get_child_by_name_and_ns() provided by the new libstrophe/libmesode 0.10.0. --- src/xmpp/avatar.c | 2 +- src/xmpp/bookmark.c | 2 +- src/xmpp/message.c | 8 ++++---- src/xmpp/ox.c | 8 ++++---- src/xmpp/stanza.c | 20 -------------------- src/xmpp/stanza.h | 2 -- 6 files changed, 10 insertions(+), 32 deletions(-) diff --git a/src/xmpp/avatar.c b/src/xmpp/avatar.c index 97bd9e67..b6263a7f 100644 --- a/src/xmpp/avatar.c +++ b/src/xmpp/avatar.c @@ -210,7 +210,7 @@ _avatar_request_item_result_handler(xmpp_stanza_t* const stanza, void* const use return 1; } - xmpp_stanza_t* st_data = stanza_get_child_by_name_and_ns(item, "data", STANZA_NS_USER_AVATAR_DATA); + xmpp_stanza_t* st_data = xmpp_stanza_get_child_by_name_and_ns(item, "data", STANZA_NS_USER_AVATAR_DATA); if (!st_data) { return 1; } diff --git a/src/xmpp/bookmark.c b/src/xmpp/bookmark.c index a866354e..b603a71a 100644 --- a/src/xmpp/bookmark.c +++ b/src/xmpp/bookmark.c @@ -308,7 +308,7 @@ _bookmark_result_id_handler(xmpp_stanza_t* const stanza, void* const userdata) // we save minimize, which is not standard, so that we don't remove it if it was set by gajim int minimize = 0; - xmpp_stanza_t* minimize_st = stanza_get_child_by_name_and_ns(child, STANZA_NAME_MINIMIZE, STANZA_NS_EXT_GAJIM_BOOKMARKS); + xmpp_stanza_t* minimize_st = xmpp_stanza_get_child_by_name_and_ns(child, STANZA_NAME_MINIMIZE, STANZA_NS_EXT_GAJIM_BOOKMARKS); if (minimize_st) { char* min_str = xmpp_stanza_get_text(minimize_st); if (strcmp(min_str, "true") == 0) { diff --git a/src/xmpp/message.c b/src/xmpp/message.c index 8e057e99..48ecf6d7 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -947,7 +947,7 @@ _handle_groupchat(xmpp_stanza_t* const stanza) const char* id = xmpp_stanza_get_id(stanza); char* originid = NULL; - xmpp_stanza_t* origin = stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_ORIGIN_ID, STANZA_NS_STABLE_ID); + xmpp_stanza_t* origin = xmpp_stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_ORIGIN_ID, STANZA_NS_STABLE_ID); if (origin) { originid = (char*)xmpp_stanza_get_attribute(origin, STANZA_ATTR_ID); } @@ -1282,7 +1282,7 @@ _handle_chat(xmpp_stanza_t* const stanza, gboolean is_mam, gboolean is_carbon, c // live messages use XEP-0359 // TODO: add to muc too char* stanzaid = NULL; - xmpp_stanza_t* stanzaidst = stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_STANZA_ID, STANZA_NS_STABLE_ID); + xmpp_stanza_t* stanzaidst = xmpp_stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_STANZA_ID, STANZA_NS_STABLE_ID); if (stanzaidst) { stanzaid = (char*)xmpp_stanza_get_attribute(stanzaidst, STANZA_ATTR_ID); if (stanzaid) { @@ -1365,7 +1365,7 @@ _handle_ox_chat(xmpp_stanza_t* const stanza, ProfMessage* message, gboolean is_m message->enc = PROF_MSG_ENC_OX; #ifdef HAVE_LIBGPGME - xmpp_stanza_t* ox = stanza_get_child_by_name_and_ns(stanza, "openpgp", STANZA_NS_OPENPGP_0); + xmpp_stanza_t* ox = xmpp_stanza_get_child_by_name_and_ns(stanza, "openpgp", STANZA_NS_OPENPGP_0); message->plain = p_ox_gpg_decrypt(xmpp_stanza_get_text(ox)); // Implementation for libstrophe 0.10. @@ -1390,7 +1390,7 @@ _handle_ox_chat(xmpp_stanza_t* const stanza, ProfMessage* message, gboolean is_m static gboolean _handle_mam(xmpp_stanza_t* const stanza) { - xmpp_stanza_t* result = stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_RESULT, STANZA_NS_MAM2); + xmpp_stanza_t* result = xmpp_stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_RESULT, STANZA_NS_MAM2); if (!result) { return FALSE; } diff --git a/src/xmpp/ox.c b/src/xmpp/ox.c index d98a0682..e8b579d4 100644 --- a/src/xmpp/ox.c +++ b/src/xmpp/ox.c @@ -269,7 +269,7 @@ _ox_metadata_result(xmpp_conn_t* const conn, xmpp_stanza_t* const stanza, void* return FALSE; } // pubsub - xmpp_stanza_t* pubsub = stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_PUBSUB, XMPP_FEATURE_PUBSUB); + xmpp_stanza_t* pubsub = xmpp_stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_PUBSUB, XMPP_FEATURE_PUBSUB); if (!pubsub) { cons_show("OX: Error: No pubsub"); return FALSE; @@ -287,7 +287,7 @@ _ox_metadata_result(xmpp_conn_t* const conn, xmpp_stanza_t* const stanza, void* return FALSE; } - xmpp_stanza_t* publickeyslist = stanza_get_child_by_name_and_ns(item, STANZA_NAME_PUBLIC_KEYS_LIST, STANZA_NS_OPENPGP_0); + xmpp_stanza_t* publickeyslist = xmpp_stanza_get_child_by_name_and_ns(item, STANZA_NAME_PUBLIC_KEYS_LIST, STANZA_NS_OPENPGP_0); if (!publickeyslist) { cons_show("OX: Error: No publickeyslist"); return FALSE; @@ -392,7 +392,7 @@ _ox_public_key_result(xmpp_conn_t* const conn, xmpp_stanza_t* const stanza, void return FALSE; } // pubsub - xmpp_stanza_t* pubsub = stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_PUBSUB, XMPP_FEATURE_PUBSUB); + xmpp_stanza_t* pubsub = xmpp_stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_PUBSUB, XMPP_FEATURE_PUBSUB); if (!pubsub) { cons_show("Public Key import failed. Check log for details."); log_error("OX: Public key request response failed: No "); @@ -413,7 +413,7 @@ _ox_public_key_result(xmpp_conn_t* const conn, xmpp_stanza_t* const stanza, void return FALSE; } - xmpp_stanza_t* pubkey = stanza_get_child_by_name_and_ns(item, STANZA_NAME_PUPKEY, STANZA_NS_OPENPGP_0); + xmpp_stanza_t* pubkey = xmpp_stanza_get_child_by_name_and_ns(item, STANZA_NAME_PUPKEY, STANZA_NS_OPENPGP_0); if (!pubkey) { cons_show("Public Key import failed. Check log for details."); log_error("OX: Public key request response failed: No "); diff --git a/src/xmpp/stanza.c b/src/xmpp/stanza.c index 85fdd2c3..48c09953 100644 --- a/src/xmpp/stanza.c +++ b/src/xmpp/stanza.c @@ -2574,26 +2574,6 @@ _stanza_create_sha1_hash(char* str) return b64; } -xmpp_stanza_t* -stanza_get_child_by_name_and_ns(xmpp_stanza_t* const stanza, const char* const name, const char* const ns) -{ - xmpp_stanza_t* child; - const char* child_ns; - const char* child_name; - - for (child = xmpp_stanza_get_children(stanza); child; child = xmpp_stanza_get_next(child)) { - child_name = xmpp_stanza_get_name(child); - if (child_name && strcmp(name, child_name) == 0) { - child_ns = xmpp_stanza_get_ns(child); - if (child_ns && strcmp(ns, child_ns) == 0) { - break; - } - } - } - - return child; -} - xmpp_stanza_t* stanza_create_avatar_retrieve_data_request(xmpp_ctx_t* ctx, const char* stanza_id, const char* const item_id, const char* const jid) { diff --git a/src/xmpp/stanza.h b/src/xmpp/stanza.h index 51d69873..2058f9a2 100644 --- a/src/xmpp/stanza.h +++ b/src/xmpp/stanza.h @@ -375,8 +375,6 @@ char* stanza_text_strdup(xmpp_stanza_t* stanza); XMPPCaps* stanza_parse_caps(xmpp_stanza_t* const stanza); void stanza_free_caps(XMPPCaps* caps); -xmpp_stanza_t* stanza_get_child_by_name_and_ns(xmpp_stanza_t* const stanza, const char* const name, const char* const ns); - xmpp_stanza_t* stanza_create_avatar_retrieve_data_request(xmpp_ctx_t* ctx, const char* stanza_id, const char* const item_id, const char* const jid); xmpp_stanza_t* stanza_create_mam_iq(xmpp_ctx_t* ctx, const char* const jid, const char* const startdate); From 7f5169c2e963a1c3a3508a0a368e5cf48ab832f7 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 30 Sep 2020 19:41:18 +0200 Subject: [PATCH 3/6] Use g_date_time_format_iso8601() This partly reverts d3a387a0ec6e5265f625de87318be2de610efb01. For proanity 0.9.x we still wanted to support older glib versions so that we can be packaged for various linux distros. Now with 0.10 we want to move on. --- configure.ac | 4 ++-- src/database.c | 10 ++-------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/configure.ac b/configure.ac index 7ccf9964..fa5838ed 100644 --- a/configure.ac +++ b/configure.ac @@ -186,8 +186,8 @@ AS_IF([test "x$ncurses_cv_wget_wch" != xyes], [AC_MSG_ERROR([ncurses does not support wide characters])]) ### Check for glib libraries -PKG_CHECK_MODULES([glib], [glib-2.0 >= 2.56.0], [], - [AC_MSG_ERROR([glib 2.56.0 or higher is required for profanity])]) +PKG_CHECK_MODULES([glib], [glib-2.0 >= 2.62.0], [], + [AC_MSG_ERROR([glib 2.62.0 or higher is required for profanity])]) PKG_CHECK_MODULES([gio], [gio-2.0], [], [AC_MSG_ERROR([libgio-2.0 from glib-2.0 is required for profanity])]) diff --git a/src/database.c b/src/database.c index 8424b398..37fe5a03 100644 --- a/src/database.c +++ b/src/database.c @@ -316,15 +316,9 @@ _add_to_db(ProfMessage* message, char* type, const Jid* const from_jid, const Ji gchar* date_fmt; if (message->timestamp) { - // g_date_time_format_iso8601() is only availble from glib 2.62 on. - // To still support Debian buster lets use g_date_time_format() for now. - //date_fmt = g_date_time_format_iso8601(message->timestamp); - date_fmt = g_date_time_format(message->timestamp, "%FT%T%:::z"); + date_fmt = g_date_time_format_iso8601(message->timestamp); } else { - // g_date_time_format_iso8601() is only availble from glib 2.62 on. - // To still support Debian buster lets use g_date_time_format() for now. - //date_fmt = g_date_time_format_iso8601(g_date_time_new_now_local()); - date_fmt = g_date_time_format(g_date_time_new_now_local(), "%FT%T%:::z"); + date_fmt = g_date_time_format_iso8601(g_date_time_new_now_local()); } const char* enc = _get_message_enc_str(message->enc); From 4d4c094b5f399858a28090b40db2eeb4064f6073 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 30 Sep 2020 22:29:55 +0200 Subject: [PATCH 4/6] Enable _handle_ox_chat() payload/body decryption This part of the code was waiting for xmpp_stanza_new_from_string() from libstrophe 0.10.0. --- src/xmpp/message.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/xmpp/message.c b/src/xmpp/message.c index 48ecf6d7..8e13039c 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -1368,8 +1368,6 @@ _handle_ox_chat(xmpp_stanza_t* const stanza, ProfMessage* message, gboolean is_m xmpp_stanza_t* ox = xmpp_stanza_get_child_by_name_and_ns(stanza, "openpgp", STANZA_NS_OPENPGP_0); message->plain = p_ox_gpg_decrypt(xmpp_stanza_get_text(ox)); - // Implementation for libstrophe 0.10. - /* xmpp_stanza_t *x = xmpp_stanza_new_from_string(connection_get_ctx(), message->plain); xmpp_stanza_t *p = xmpp_stanza_get_child_by_name(x, "payload"); xmpp_stanza_t *b = xmpp_stanza_get_child_by_name(p, "body"); @@ -1378,7 +1376,6 @@ _handle_ox_chat(xmpp_stanza_t* const stanza, ProfMessage* message, gboolean is_m message->plain = xmpp_stanza_get_text(stanza); } message->encrypted = xmpp_stanza_get_text(ox); - */ if (message->plain == NULL) { message->plain = xmpp_stanza_get_text(stanza); From 0211ab0e3082d88cc8b904d2669a5f500ca474f6 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Thu, 1 Oct 2020 12:51:07 +0200 Subject: [PATCH 5/6] travis: add libstrophe to tw So far only libstrophe is in 0.10.0 on TW. Lets just add both since configure will choose libmesode anyways if both are installed. And we plan to deprecate libmesode later anyways. --- Dockerfile.tumbleweed | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile.tumbleweed b/Dockerfile.tumbleweed index 0c58dfef..217476f3 100644 --- a/Dockerfile.tumbleweed +++ b/Dockerfile.tumbleweed @@ -21,6 +21,7 @@ RUN zypper --non-interactive in --no-recommends \ libgcrypt-devel \ libgpgme-devel \ libmesode-devel \ + libstrophe-devel \ libmicrohttpd-devel \ libnotify-devel \ libotr-devel \ From f1b9bb49e1336cd16f063b756e222be2b064e08d Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Mon, 5 Oct 2020 13:48:21 +0200 Subject: [PATCH 6/6] configure: check for python3-config --- configure.ac | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index fa5838ed..2f92166e 100644 --- a/configure.ac +++ b/configure.ac @@ -82,7 +82,8 @@ elif test "x$enable_python_plugins" != xno; then rm -f Python.framework ln -s $PYTHON_FRAMEWORK Python.framework ]) AC_CHECK_PROG(PYTHON_CONFIG_EXISTS, python-config, yes, no) - if test "$PYTHON_CONFIG_EXISTS" = "yes"; then + AC_CHECK_PROG(PYTHON3_CONFIG_EXISTS, python3-config, yes, no) + if test "$PYTHON_CONFIG_EXISTS" = "yes" || test "$PYTHON3_CONFIG_EXISTS" = "yes"; then AX_PYTHON_DEVEL AM_CONDITIONAL([BUILD_PYTHON_API], [true]) AC_DEFINE([HAVE_PYTHON], [1], [Python support])