From 635a03bbd88e82d48afa5c0dd800b99647dd9dc2 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 3 Nov 2026 16:00:58 +0100 Subject: [PATCH] Restrict member storage and invite connection candidates to admitted members --- src/chat/chat_attachment.c | 2 +- src/chat/invite_build.c | 2 +- src/member_files/member_files.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/chat/chat_attachment.c b/src/chat/chat_attachment.c index b5193482c..fb0c53dd6 100644 --- a/src/chat/chat_attachment.c +++ b/src/chat/chat_attachment.c @@ -1006,7 +1006,7 @@ int chat_attachment_downloaded(struct UTUN_INSTANCE* inst, const char* channel, int rc = sqlite3_exec(db, "BEGIN IMMEDIATE /* attachment downloaded */", NULL, NULL, NULL); if (rc != SQLITE_OK) goto fail; char sql[512]; snprintf(sql, sizeof(sql), "SELECT downloaded,wanted,error,NOT EXISTS(SELECT 1 FROM peers_%s" - " WHERE node_id=? AND source=0 AND deleted=0 AND length(adm_tags_sig)=64 AND json_extract(adm_tags,'$.storage')='yes')" + " WHERE node_id=? AND source=0 AND deleted=0 AND admitted=1 AND length(adm_tags_sig)=64 AND json_extract(adm_tags,'$.storage')='yes')" " FROM attachment_keys WHERE channel=? AND message_id=?", channel); stage = "prepare download state"; rc = sqlite3_prepare_v2(db, sql, -1, &st, NULL); if (rc != SQLITE_OK) goto fail; diff --git a/src/chat/invite_build.c b/src/chat/invite_build.c index dd06a866e..473aa2621 100644 --- a/src/chat/invite_build.c +++ b/src/chat/invite_build.c @@ -81,7 +81,7 @@ static int select_nodes(struct UTUN_INSTANCE* inst, uint64_t channel, struct inv DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "invite_build: inactive context/invalid channel=%llu", (unsigned long long)channel); return -1; } char sql[256]; - snprintf(sql, sizeof(sql), "SELECT node_id,node_type FROM peers_%llu WHERE source=0 AND deleted=0 ORDER BY node_id<0,node_id", + snprintf(sql, sizeof(sql), "SELECT node_id,node_type FROM peers_%llu WHERE source=0 AND deleted=0 AND admitted=1 ORDER BY node_id<0,node_id", (unsigned long long)channel); sqlite3_stmt* st = NULL; result->priority = 4; int rc = sqlite3_prepare_v2(cc->db, sql, -1, &st, NULL); diff --git a/src/member_files/member_files.c b/src/member_files/member_files.c index bc6722908..fb58d775a 100644 --- a/src/member_files/member_files.c +++ b/src/member_files/member_files.c @@ -109,7 +109,7 @@ int member_files_member(struct UTUN_INSTANCE* inst, uint64_t group, uint64_t nod (unsigned long long)group, (unsigned long long)node, storage); return 0; } char sql[256]; - snprintf(sql, sizeof(sql), "SELECT adm_tags,source,adm_tags_sig,deleted FROM \"peers_%llu\" WHERE node_id=?", + snprintf(sql, sizeof(sql), "SELECT adm_tags,source,adm_tags_sig,deleted FROM \"peers_%llu\" WHERE node_id=? AND admitted=1", (unsigned long long)group); sqlite3_stmt* st = NULL; if (sqlite3_prepare_v2(inst->topo_sqlite_db, sql, -1, &st, NULL) != SQLITE_OK) { @@ -334,7 +334,7 @@ static void mf_roots(struct mf_job* j) { *r = j->request; r->kind = MF_RESPONSE; r->type = MF_DIRECTORY; r->data_len = 0; r->more = 0; if (*r->path || r->command != MF_LIST) { r->status = MF_INVALID_PATH; return; } char sql[256]; - snprintf(sql, sizeof(sql), "SELECT node_id,join_ts,update_ts,adm_tags FROM \"peers_%llu\" WHERE deleted=0 AND source=0 ORDER BY node_id", + snprintf(sql, sizeof(sql), "SELECT node_id,join_ts,update_ts,adm_tags FROM \"peers_%llu\" WHERE deleted=0 AND source=0 AND admitted=1 ORDER BY node_id", (unsigned long long)j->group); sqlite3_stmt* st = NULL; EVP_MD_CTX* hash = EVP_MD_CTX_new(); if (!hash || EVP_DigestInit_ex(hash, EVP_sha256(), NULL) != 1 ||