and deduplicate the parsing logic.
- trust_anchors: don't do 5011-style updates on anchors from files
that were loaded as unmanaged trust anchors (!753)
- trust_anchors.add(): include these TAs in .summary() (!753)
+- policy module: support '#' for separating port numbers, for consistency
Improvements
------------
int kr_bitcmp(const char *, const char *, int);
int kr_family_len(int);
struct sockaddr *kr_straddr_socket(const char *, int);
+int kr_straddr_split(const char *, char * restrict, uint16_t *);
int kr_ranked_rrarray_add(ranked_rr_array_t *, const knot_rrset_t *, uint8_t, _Bool, uint32_t, knot_mm_t *);
void kr_qflags_set(struct kr_qflags *, struct kr_qflags);
void kr_qflags_clear(struct kr_qflags *, struct kr_qflags);
kr_bitcmp
kr_family_len
kr_straddr_socket
+ kr_straddr_split
kr_ranked_rrarray_add
kr_qflags_set
kr_qflags_clear
-- Metatype for sockaddr
local addr_buf = ffi.new('char[16]')
-local str_addr_buf = ffi.new('char[46 + 1 + 6 + 1]') -- IPv6 + #port + \0
+local str_addr_buf = ffi.new('char[46 + 1 + 6 + 1]') -- INET6_ADDRSTRLEN + #port + \0
local str_addr_buf_len = ffi.sizeof(str_addr_buf)
local sockaddr_t = ffi.typeof('struct sockaddr')
ffi.metatype( sockaddr_t, {
end
end
+-- Split address and port from a combined string.
local function addr_split_port(target, default_port)
- assert(default_port)
- assert(type(default_port) == 'number')
- local addr, port = target:match '([^@]*)@?(.*)'
- local nport
- if port ~= "" then
- nport = tonumber(port)
- if not nport or nport < 1 or nport > 65535 then
- error('port "'.. port ..'" is not valid')
- end
- end
- return addr, nport or default_port
+ assert(default_port and type(default_port) == 'number')
+ local port = ffi.new('uint16_t[1]', default_port)
+ local addr = ffi.new('char[47]') -- INET6_ADDRSTRLEN + 1
+ local ret = ffi.C.kr_straddr_split(target, addr, port)
+ if ret ~= 0 then
+ error('failed to parse address ' .. target)
+ end
+ return addr, tonumber(port[0])
end
-- String address@port -> sockaddr.