Reject deleted and placeholder peers during initial membership transport

This commit is contained in:
evgeny committed 2026-11-03 16:29:16 +01:00
1 parent f7c3251969
commit ced7a06ec8
2 files changed
+3 -1

No files matched your search

+1 -1
View File
@@ -159,7 +159,7 @@ int topo_group_peer_open(struct TOPO_GROUP* group, uint64_t node_id, struct TOPO
if (out) *out = NULL;
if (!group || !group->instance || !out || !node_id || node_id == group->instance->node_id ||
!group->senders_list || group->stopping || (group->group_type == TOPO_GROUP_TYPE_CHAT &&
!topo_node_sqlite_member_in_channel(group->instance->topo_sqlite_db, group->channel_id, node_id))) {
!topo_node_sqlite_member_transport_allowed(group->instance->topo_sqlite_db, group->channel_id, node_id))) {
DEBUG_WARN(DEBUG_CATEGORY_BGP, "cannot request group peer=%016llx: invalid arguments, stopped group or unknown member",
(unsigned long long)node_id); return -1;
}
+2
View File
@@ -99,6 +99,8 @@ int topo_node_sqlite_member_in_channel(sqlite3* db, const char* channel_id, uint
/* Допуск участника: source=0, deleted=0 и admitted=1 последней контрольной точки политики/цепочек.
* 1/0, ошибка логируется и даёт 0. BGP-placeholder и неподходящая цепочка доступа не дают. */
int topo_node_sqlite_member_allowed(sqlite3* db, const char* channel_id, uint64_t node_id);
/* Транспорт для первой MEMBERS сверки: полная неудалённая запись, ещё без admitted. 1/0; ошибка запрещает. */
int topo_node_sqlite_member_transport_allowed(sqlite3* db, const char* channel_id, uint64_t node_id);
/* Проверить точный X25519-ключ полного действующего мембера: 1 — есть, 0 — нет/ошибка (закрытый отказ).
* node_id вычисляется из key, SQL также сверяет все 32 байта; заглушки source=1 и deleted исключены. */
int topo_node_sqlite_member_key_allowed(sqlite3* db, const char* channel_id, const uint8_t key[32]);