summaryrefslogtreecommitdiffstats
path: root/src/libutil/addr.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-03-12 19:08:42 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-03-12 19:08:42 +0000
commit074d28ebc2c4b5ab952e74b9a815e0a55c26110a (patch)
tree452b73366ec4ba53eab3ebd7e054946ef28068b2 /src/libutil/addr.c
parent548833c06eb83565a79166a0921e428bd88af2bd (diff)
downloadrspamd-074d28ebc2c4b5ab952e74b9a815e0a55c26110a.tar.gz
rspamd-074d28ebc2c4b5ab952e74b9a815e0a55c26110a.zip
Fix sorting order and unit test for upstreams.
Diffstat (limited to 'src/libutil/addr.c')
-rw-r--r--src/libutil/addr.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/libutil/addr.c b/src/libutil/addr.c
index 19eda5a13..c2bb3db9c 100644
--- a/src/libutil/addr.c
+++ b/src/libutil/addr.c
@@ -349,6 +349,12 @@ rspamd_parse_inet_address (rspamd_inet_addr_t **target, const char *src)
if (src[0] == '/' || src[0] == '.') {
return rspamd_parse_unix_path (target, src);
}
+ else if (inet_pton (AF_INET, src, &su.s4.sin_addr) == 1) {
+ addr = rspamd_inet_addr_create (AF_INET);
+ memcpy (&addr->u.in.addr.s4.sin_addr, &su.s4.sin_addr,
+ sizeof (struct in_addr));
+ ret = TRUE;
+ }
else if (ipv6_status == RSPAMD_IPV6_SUPPORTED &&
inet_pton (AF_INET6, src, &su.s6.sin6_addr) == 1) {
addr = rspamd_inet_addr_create (AF_INET6);
@@ -356,12 +362,6 @@ rspamd_parse_inet_address (rspamd_inet_addr_t **target, const char *src)
sizeof (struct in6_addr));
ret = TRUE;
}
- else if (inet_pton (AF_INET, src, &su.s4.sin_addr) == 1) {
- addr = rspamd_inet_addr_create (AF_INET6);
- memcpy (&addr->u.in.addr.s4.sin_addr, &su.s4.sin_addr,
- sizeof (struct in_addr));
- ret = TRUE;
- }
if (ret && target) {
*target = addr;
@@ -918,8 +918,8 @@ rspamd_inet_address_compare (const rspamd_inet_addr_t *a1,
g_assert (a2 != NULL);
if (a1->af != a2->af) {
- return (rspamd_inet_address_af_order (a1) -
- rspamd_inet_address_af_order (a2));
+ return (rspamd_inet_address_af_order (a2) -
+ rspamd_inet_address_af_order (a1));
}
else {
switch (a1->af) {
@@ -940,6 +940,15 @@ rspamd_inet_address_compare (const rspamd_inet_addr_t *a1,
return 0;
}
+gint
+rspamd_inet_address_compare_ptr (const gpointer a1,
+ const gpointer a2)
+{
+ const rspamd_inet_addr_t **i1 = a1, **i2 = a2;
+
+ return rspamd_inet_address_compare (*i1, *i2);
+}
+
rspamd_inet_addr_t *
rspamd_inet_address_copy (const rspamd_inet_addr_t *addr)
{