dm: accept authenticated mailbox conversations without a direct shared group

This commit is contained in:
evgeny committed 2026-11-03 22:41:23 +01:00
1 parent b1bfb94f1f
commit 515da0304c
2 files changed
+5 -4

No files matched your search

+3 -4
View File
@@ -636,10 +636,9 @@ int dm_accept_message(struct UTUN_INSTANCE* inst, const uint8_t* msg, size_t len
snprintf(c.conv_id, sizeof(c.conv_id), "%s", conv_id);
c.mode = message.mode;
c.peer_node_id = author;
if (!dm_shared_group_id(dm, author, &c.group_id)) {
DEBUG_WARN(DEBUG_CATEGORY_DM, "%s: unknown correspondent peer=%llu", DM_ID, (unsigned long long)author);
return -1;
}
/* Автор/адресат уже проверены по подписанному телу. Доставка через S не требует общей группы A/B. */
if (!dm_shared_group_id(dm, author, &c.group_id)) DEBUG_DEBUG(DEBUG_CATEGORY_DM,
"%s: incoming conversation without direct group peer=%llu conv=%s", DM_ID, (unsigned long long)author, conv_id);
if (c.mode == DM_MODE_GROUPS) {
c.parties[0] = message.parties[side]; c.parties[1] = message.parties[1 - side];
if (!side) {
+2
View File
@@ -72,6 +72,8 @@ int dm_peer_role(struct UTUN_INSTANCE* inst, uint64_t peer, const char* role);
* Не расшифровывает тело и не проверяет членство/роль router-отправителя: это обязанность вызывающего. */
int dm_verify_message(struct UTUN_INSTANCE* inst, uint64_t recipient, const uint8_t* msg, size_t len);
/* Проверить и расшифровать входящее тело для локального узла, атомарно сохранить историю/беседу/media.
* Вызывающий проверяет сетевого отправителя/посредника. Общая группа автора и адресата не требуется;
* личность автора, адресат и закреплённые стороны определяются подписанным телом и проверенными ключами.
* 0 и receipt после commit либо точного повтора; -1 при отказе. Для file нужен живой dm_media.
* Точный удалённый повтор подтверждается по отпечатку без восстановления истории; конфликт отклоняется.
* receipt — обязательные 136 байт; при -1 буфер не использовать. Ошибка подписи квитанции возможна после commit. */