diff options
author | Vsevolod Stakhov <vsevolod@rspamd.com> | 2025-03-24 12:34:32 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rspamd.com> | 2025-03-24 12:34:32 +0000 |
commit | 8943772d46bef3f52c9bd8bdbf31ca3a6a8eb23f (patch) | |
tree | c6468f06412dc604bd727b54f2367627542f7833 | |
parent | 96baa400f87bd9b8fa367c3777e27d61699e80eb (diff) | |
download | rspamd-8943772d46bef3f52c9bd8bdbf31ca3a6a8eb23f.tar.gz rspamd-8943772d46bef3f52c9bd8bdbf31ca3a6a8eb23f.zip |
[Fix] Fix maps ids
-rw-r--r-- | src/libserver/maps/map.c | 24 | ||||
-rw-r--r-- | src/libserver/maps/map_private.h | 2 |
2 files changed, 21 insertions, 5 deletions
diff --git a/src/libserver/maps/map.c b/src/libserver/maps/map.c index bd1713816..a5e891c34 100644 --- a/src/libserver/maps/map.c +++ b/src/libserver/maps/map.c @@ -2789,10 +2789,6 @@ rspamd_map_parse_backend(struct rspamd_config *cfg, const char *map_line) bk->data.sd = sdata; } - bk->id = rspamd_cryptobox_fast_hash_specific(RSPAMD_CRYPTOBOX_T1HA, - bk->uri, strlen(bk->uri), - 0xdeadbabe); - return bk; err: @@ -2823,6 +2819,13 @@ rspamd_map_calculate_hash(struct rspamd_map *map) rspamd_cryptobox_hash_init(&st, NULL, 0); + if (map->name) { + rspamd_cryptobox_hash_update(&st, map->name, strlen(map->name)); + } + if (map->description) { + rspamd_cryptobox_hash_update(&st, map->description, strlen(map->description)); + } + for (i = 0; i < map->backends->len; i++) { bk = g_ptr_array_index(map->backends, i); rspamd_cryptobox_hash_update(&st, bk->uri, strlen(bk->uri)); @@ -2831,6 +2834,19 @@ rspamd_map_calculate_hash(struct rspamd_map *map) rspamd_cryptobox_hash_final(&st, cksum); cksum_encoded = rspamd_encode_base32(cksum, sizeof(cksum), RSPAMD_BASE32_DEFAULT); rspamd_strlcpy(map->tag, cksum_encoded, sizeof(map->tag)); + + for (i = 0; i < map->backends->len; i++) { + bk = g_ptr_array_index(map->backends, i); + + /* Also update each backend */ + rspamd_cryptobox_fast_hash_state_t hst; + rspamd_cryptobox_fast_hash_init(&hst, 0); + rspamd_cryptobox_fast_hash_update(&hst, bk->uri, strlen(bk->uri)); + rspamd_cryptobox_fast_hash_update(&hst, map->tag, sizeof(map->tag)); + /* We use only 52 bits to be compatible with other numbers representation */ + bk->id = rspamd_cryptobox_fast_hash_final(&hst) & ~(0xFFFULL << 52); + } + g_free(cksum_encoded); } diff --git a/src/libserver/maps/map_private.h b/src/libserver/maps/map_private.h index 04a14d21e..0a912a5da 100644 --- a/src/libserver/maps/map_private.h +++ b/src/libserver/maps/map_private.h @@ -141,7 +141,7 @@ struct rspamd_map_backend { gboolean is_fallback; struct rspamd_map *map; struct ev_loop *event_loop; - uint32_t id; + uint64_t id; struct rspamd_cryptobox_pubkey *trusted_pubkey; union rspamd_map_backend_data data; char *uri; |