aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rspamd.com>2025-03-24 12:34:32 +0000
committerVsevolod Stakhov <vsevolod@rspamd.com>2025-03-24 12:34:32 +0000
commit8943772d46bef3f52c9bd8bdbf31ca3a6a8eb23f (patch)
treec6468f06412dc604bd727b54f2367627542f7833
parent96baa400f87bd9b8fa367c3777e27d61699e80eb (diff)
downloadrspamd-8943772d46bef3f52c9bd8bdbf31ca3a6a8eb23f.tar.gz
rspamd-8943772d46bef3f52c9bd8bdbf31ca3a6a8eb23f.zip
[Fix] Fix maps ids
-rw-r--r--src/libserver/maps/map.c24
-rw-r--r--src/libserver/maps/map_private.h2
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;