]> source.dussan.org Git - rspamd.git/commitdiff
Add routine to create inet address from the rdns reply
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 16 Feb 2016 16:22:55 +0000 (16:22 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 16 Feb 2016 16:22:55 +0000 (16:22 +0000)
src/libutil/addr.c
src/libutil/addr.h

index e95ac4c64800a63daac0c1deaeca9e067d02505a..414c485385826bf728d8a29339b68f7d53e0ffbe 100644 (file)
@@ -1214,6 +1214,27 @@ rspamd_inet_address_from_sa (const struct sockaddr *sa, socklen_t slen)
        return addr;
 }
 
+rspamd_inet_addr_t *
+rspamd_inet_address_from_rnds (const struct rdns_reply_entry *rep)
+{
+       rspamd_inet_addr_t *addr = NULL;
+
+       g_assert (rep != NULL);
+
+       if (rep->type == RDNS_REQUEST_A) {
+               addr = rspamd_inet_addr_create (AF_INET);
+               memcpy (&addr->u.in.addr.s4.sin_addr, &rep->content.a.addr,
+                               sizeof (struct in_addr));
+       }
+       else if (rep->type == RDNS_REQUEST_AAAA) {
+               addr = rspamd_inet_addr_create (AF_INET6);
+               memcpy (&addr->u.in.addr.s6.sin6_addr, &rep->content.aaa.addr,
+                                               sizeof (struct in6_addr));
+       }
+
+       return addr;
+}
+
 void
 rspamd_inet_address_apply_mask (rspamd_inet_addr_t *addr, guint mask)
 {
index f6bbb40aee0e854b5fb092a9e089d9bf81f683e6..afed3f8fc5ee566160ad2d5b7005bbc9b88ce8cb 100644 (file)
@@ -17,6 +17,7 @@
 #define ADDR_H_
 
 #include "config.h"
+#include "rdns.h"
 
 #ifdef HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
@@ -59,6 +60,14 @@ rspamd_inet_addr_t * rspamd_inet_address_new (int af, const void *init);
 rspamd_inet_addr_t * rspamd_inet_address_from_sa (const struct sockaddr *sa,
                socklen_t slen);
 
+/**
+ * Create new inet address from rdns reply
+ * @param rep reply element
+ * @return new ipv4 or ipv6 addr (port is NOT set)
+ */
+rspamd_inet_addr_t * rspamd_inet_address_from_rnds (
+               const struct rdns_reply_entry *rep);
+
 /**
  * Parse string with ipv6 address of length `len` to `target` which should be
  * at least sizeof (in6_addr_t)