Compare commits

..

2 Commits

Author SHA1 Message Date
61a5de6ab9 fix(omemo): bootstrap device list on prosody-class servers
All checks were successful
CI Code / Check coding style (pull_request) Successful in 29s
CI Code / Linux (debian) (pull_request) Successful in 8m38s
CI Code / Check spelling (pull_request) Successful in 14s
CI Code / Linux (ubuntu) (pull_request) Successful in 4m40s
CI Code / Linux (arch) (pull_request) Successful in 12m35s
CI Code / Code Coverage (pull_request) Successful in 10m2s
Two gaps kept /omemo gen from ever publishing on a fresh account:

- _omemo_receive_devicelist() only recognised the legacy code='404'
  error attribute as "node does not exist". Prosody sends the RFC 6120
  <item-not-found/> condition instead, so the empty-list bootstrap never
  ran. Accept the defined condition too, and log the expected bootstrap
  case at debug instead of error.

- connection_request_features() disco'd only the server domain, but
  XEP-0163 PEP services (including pubsub#publish-options) announce
  their features on the account's bare JID. Query the bare JID as well,
  registering it in the feature table, so connection_supports() sees
  PEP features.

Fixes #169
2026-07-21 09:14:59 +03:00
2be16df905 ci(docker): add Docker publishing workflow and Dockerfile
All checks were successful
CI Code / Check spelling (pull_request) Successful in 13s
CI Code / Check coding style (pull_request) Successful in 24s
CI Code / Code Coverage (pull_request) Successful in 3m42s
CI Code / Linux (debian) (pull_request) Successful in 5m13s
CI Code / Linux (ubuntu) (pull_request) Successful in 5m18s
CI Code / Linux (arch) (pull_request) Successful in 6m59s
CI Code / Check spelling (push) Successful in 13s
CI Code / Check coding style (push) Successful in 23s
CI Code / Code Coverage (push) Successful in 3m38s
Publish Docker image / Push Docker image to Docker Hub (push) Successful in 4m46s
CI Code / Linux (debian) (push) Successful in 5m26s
CI Code / Linux (ubuntu) (push) Successful in 5m33s
CI Code / Linux (arch) (push) Successful in 7m10s
Introduce GitHub Actions workflow for automated Docker image
publishing to Docker Hub, along with a dedicated Dockerfile in
the ci directory to streamline container builds.
2026-07-11 17:43:16 +00:00
3 changed files with 17 additions and 6 deletions

View File

@@ -2,7 +2,7 @@ name: Publish Docker image
on:
push:
branches: [master, ci/docker-hub-publishing]
branches: [master]
release:
types: [published]
@@ -24,19 +24,18 @@ jobs:
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051
with:
images: cproofdev/cproof
tags: |
type=raw,value=dev,enable={{is_default_branch}}
type=raw,value=test,enable={{is_not_default_branch}}
type=sha,prefix=nightly-,enable={{is_default_branch}}
type=ref,event=tag
type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }}
- name: Build and push Docker image
id: push
uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671
uses: docker/build-push-action@2bd26e71295ee32cbf6a73510d165bf7232460f3
with:
context: .
file: ./ci/Dockerfile

View File

@@ -658,6 +658,15 @@ connection_request_features(void)
/* We don't record it as a requested feature to avoid triggering th
* sv_ev_connection_features_received too soon */
iq_disco_info_request_onconnect(conn.domain);
const char* barejid = connection_get_barejid();
if (barejid && g_strcmp0(barejid, conn.domain) != 0) {
if (!g_hash_table_contains(conn.features_by_jid, barejid)) {
g_hash_table_insert(conn.features_by_jid, strdup(barejid),
g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL));
}
iq_disco_info_request_onconnect(barejid); // XEP-0163: PEP services announce features on the account's bare JID
}
}
void

View File

@@ -446,18 +446,21 @@ _omemo_receive_devicelist(xmpp_stanza_t* const stanza, void* const userdata)
GList* device_list = NULL;
if (g_strcmp0(type, STANZA_TYPE_ERROR) == 0) {
log_error("[OMEMO] can't get OMEMO device list");
xmpp_stanza_t* error = xmpp_stanza_get_child_by_name(stanza, "error");
if (!error) {
log_error("[OMEMO] missing error element in device list response");
return 1;
}
// a missing node is signalled via legacy code='404' or the RFC 6120 <item-not-found/> condition
const char* code = xmpp_stanza_get_attribute(error, "code");
if (g_strcmp0(code, "404") == 0) {
if (g_strcmp0(code, "404") == 0
|| xmpp_stanza_get_child_by_name_and_ns(error, STANZA_NAME_ITEM_NOT_FOUND, STANZA_NS_STANZAS)) {
log_debug("[OMEMO] no devicelist node for %s, bootstrapping an empty one", from);
omemo_set_device_list(from, NULL);
return 1;
}
log_error("[OMEMO] can't get OMEMO device list");
}
xmpp_stanza_t* root = NULL;