Reject deleted and placeholder peers during initial membership transport
This commit is contained in:
1 parent
f7c3251969
commit
ced7a06ec8
2 files changed
+3
-1
No files matched your search
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
|
||||
Reference in new issue
Block a user