diff --git a/src/chat/member_sync.c b/src/chat/member_sync.c index 2848462c5..a3e531677 100644 --- a/src/chat/member_sync.c +++ b/src/chat/member_sync.c @@ -1610,6 +1610,10 @@ done: /* Строгий допуск radio/attachments: ни ожидание, ни исключение не разрешают действие. */ int member_sync_verified_ed25519(struct UTUN_INSTANCE* inst, const char* channel, uint64_t author, uint8_t key[32]) { + if (!inst || !topo_node_sqlite_member_allowed(inst->topo_sqlite_db, channel, author)) { + DEBUG_WARN(DEBUG_CATEGORY_MEMBER_SYNC, "member admission denied ch=%s node=%016llx", + channel ? channel : "-", (unsigned long long)author); return -1; + } enum ms_author_status status = member_sync_author_key(inst, channel, author, key); if (status == MS_AUTHOR_ACTIVE) return 0; DEBUG_WARN(DEBUG_CATEGORY_MEMBER_SYNC, "member verification denied ch=%s node=%016llx status=%d", diff --git a/src/chat/member_sync.h b/src/chat/member_sync.h index d6643cb4a..df72180a8 100644 --- a/src/chat/member_sync.h +++ b/src/chat/member_sync.h @@ -40,7 +40,7 @@ enum ms_author_status { enum ms_author_status member_sync_author_key(struct UTUN_INSTANCE* inst, const char* channel, uint64_t author, uint8_t key[32]); -/* Проверить source=0/deleted=0, привязку node_id/X25519 и доверенный Ed25519, +/* Проверить source=0/deleted=0/admitted=1, привязку node_id/X25519 и доверенный Ed25519, * join_sig и подпись непосредственного пригласившего (либо ключом канала для signed_by=0). * Не обходит цепочку предков. inst/channel/key обязательны, channel — канонический uint64 decimal. * 0 — ключ записан в key[32], -1 — отказ, key не меняется. */