Skip to content
Snippets Groups Projects
Commit 5f310f22 authored by Vladimír Čunát's avatar Vladimír Čunát Committed by Ondřej Surý
Browse files

policy.MIRROR: support IPv6 link-local addresses

parent ab204957
Branches
Tags
2 merge requests!2571.2 merge master,!2181.2.4 dev
......@@ -32,21 +32,16 @@ if has_socket then
end
end
local function parse_target(target)
local function addr_split_port(target)
local addr, port = target:match '([^@]*)@?(.*)'
port = port and tonumber(port) or 53
addr = kres.str2ip(addr)
if addr == nil then
error("target '"..target..'" is not a valid IP address')
end
return addr, port
end
local function parse_sock(target)
local addr, port = target:match '([^@]*)@?(.*)'
port = port and tonumber(port) or 53
-- String address@port -> sockaddr.
local function addr2sock(target)
local addr, port = addr_split_port(target)
sock = ffi.gc(ffi.C.kr_straddr_socket(addr, port), ffi.C.free);
if sock == nil then
error("target '"..target..'" is not a valid IP address')
end
......@@ -55,7 +50,7 @@ end
-- Mirror request elsewhere, and continue solving
local function mirror(target)
local addr, port = parse_target(target)
local addr, port = addr_split_port(target)
local sink, err = socket_client(addr, port)
if not sink then panic('MIRROR target %s is not a valid: %s', target, err) end
return function(state, req)
......@@ -74,11 +69,11 @@ local function forward(target)
local list = {}
if type(target) == 'table' then
for _, v in pairs(target) do
table.insert(list, parse_sock(v))
table.insert(list, addr2sock(v))
assert(#list <= 4, 'at most 4 FORWARD targets are supported')
end
else
table.insert(list, parse_sock(target))
table.insert(list, addr2sock(target))
end
return function(state, req)
req = kres.request_t(req)
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment