]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Implement parsing of scoped IPv6 addresses
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 31 Jul 2018 10:46:38 +0000 (11:46 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 31 Jul 2018 10:46:38 +0000 (11:46 +0100)
src/libutil/addr.c
test/lua/unit/addr.lua

index ce97e486c78cb799383121609ae060fc15bfb52f..a6f1adaf8b1d17807ea7906c75ae1584bab041a6 100644 (file)
@@ -493,7 +493,7 @@ gboolean
 rspamd_parse_inet_address_ip6 (const guchar *text, gsize len, gpointer target)
 {
        guchar t, *zero = NULL, *s, *d,  *addr = target;
-       const guchar *p, *digit = NULL;
+       const guchar *p, *digit = NULL, *percent;
        gsize len4 = 0;
        guint n = 8, nibbles = 0, word = 0;
 
@@ -513,6 +513,11 @@ rspamd_parse_inet_address_ip6 (const guchar *text, gsize len, gpointer target)
                p = text;
        }
 
+       /* Check IPv6 scope */
+       if ((percent = memchr (p, '%', len)) != NULL && percent > p) {
+               len = percent - p; /* Ignore scope */
+       }
+
        for (/* void */; len; len--) {
                t = *p++;
 
index 6ec058c3fbd5c7a333624d1fe745fa002ad564f2..03ceb2dbd036f095f4cdba075fdbd7c88dbf9c9b 100644 (file)
@@ -2,7 +2,7 @@
 
 context("Inet addr check functions", function()
   local ffi = require("ffi")
-  
+
   ffi.cdef[[
   typedef struct rspamd_inet_addr_s rspamd_inet_addr_t;
   bool rspamd_parse_inet_address (rspamd_inet_addr_t **target,
@@ -16,6 +16,8 @@ context("Inet addr check functions", function()
     {'256.1.1.1', false},
     {'/tmp/socket', true},
     {'./socket', true},
+    {'[fe80::f919:8b26:ff93:3092%5]', true},
+    {'[fe80::f919:8b26:ff93:3092]', true},
   }
 
   for i,c in ipairs(cases) do