aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-03-23 22:13:39 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-03-23 22:13:39 +0000
commit7fcf40d88893e07a26cde8d266a18f0ac6b30ccd (patch)
tree5fa86fc2f146b7f108c847aabd6377cc0bd01deb
parent59d6fe4f5787005f48bfd9fe32d5b85e763312b4 (diff)
downloadrspamd-7fcf40d88893e07a26cde8d266a18f0ac6b30ccd.tar.gz
rspamd-7fcf40d88893e07a26cde8d266a18f0ac6b30ccd.zip
Use port when calculating listen socket hash.
-rw-r--r--src/libutil/addr.c7
-rw-r--r--src/libutil/addr.h4
-rw-r--r--src/main.c7
3 files changed, 12 insertions, 6 deletions
diff --git a/src/libutil/addr.c b/src/libutil/addr.c
index e115072b1..38e5ac4fa 100644
--- a/src/libutil/addr.c
+++ b/src/libutil/addr.c
@@ -960,10 +960,11 @@ rspamd_inet_address_compare (const rspamd_inet_addr_t *a1,
}
gint
-rspamd_inet_address_compare_ptr (const gpointer a1,
- const gpointer a2)
+rspamd_inet_address_compare_ptr (gconstpointer a1,
+ gconstpointer a2)
{
- const rspamd_inet_addr_t **i1 = a1, **i2 = a2;
+ const rspamd_inet_addr_t **i1 = (const rspamd_inet_addr_t **)a1,
+ **i2 = (const rspamd_inet_addr_t **)a2;
return rspamd_inet_address_compare (*i1, *i2);
}
diff --git a/src/libutil/addr.h b/src/libutil/addr.h
index 1ea0ab8b5..a13c14b53 100644
--- a/src/libutil/addr.h
+++ b/src/libutil/addr.h
@@ -202,8 +202,8 @@ gint rspamd_inet_address_compare (const rspamd_inet_addr_t *a1,
* @param a2
* @return
*/
-gint rspamd_inet_address_compare_ptr (const gpointer a1,
- const gpointer a2);
+gint rspamd_inet_address_compare_ptr (gconstpointer a1,
+ gconstpointer a2);
/**
* Performs deep copy of rspamd inet addr
* @param addr
diff --git a/src/main.c b/src/main.c
index 373c01695..dfa2e6294 100644
--- a/src/main.c
+++ b/src/main.c
@@ -656,6 +656,8 @@ make_listen_key (struct rspamd_worker_bind_conf *cf)
gpointer xxh;
guint i, keylen;
guint8 *key;
+ rspamd_inet_addr_t *addr;
+ guint16 port;
xxh = XXH32_init (0xdeadbeef);
if (cf->is_systemd) {
@@ -665,9 +667,12 @@ make_listen_key (struct rspamd_worker_bind_conf *cf)
else {
XXH32_update (xxh, cf->name, strlen (cf->name));
for (i = 0; i < cf->cnt; i ++) {
+ addr = g_ptr_array_index (cf->addrs, i);
key = rspamd_inet_address_get_radix_key (
- g_ptr_array_index (cf->addrs, i), &keylen);
+ addr, &keylen);
XXH32_update (xxh, key, keylen);
+ port = rspamd_inet_address_get_port (addr);
+ XXH32_update (xxh, &port, sizeof (port));
}
}