]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib/utils kr_straddr_socket(): support mempools
authorVladimír Čunát <vladimir.cunat@nic.cz>
Mon, 8 Apr 2019 13:52:18 +0000 (15:52 +0200)
committerPetr Špaček <petr.spacek@nic.cz>
Thu, 11 Apr 2019 07:12:49 +0000 (09:12 +0200)
"Unfortunately", for FFI-bound C functions there it doesn't hold that
missing parameters would be converted to nil/NULL.
Still, this function seems unlikely to have been used outside the repo.

daemon/bindings/net.c
daemon/lua/kres-gen.lua
lib/utils.c
lib/utils.h
modules/http/http_doh.lua
modules/http/http_doh.test.lua
modules/policy/policy.lua

index 952990bc26d99fb603528c154782ab3b09b38df4..0b22ffcb619505255dc87430134e00048bc1de08 100644 (file)
@@ -598,7 +598,7 @@ static int net_tls_client(lua_State *L)
        uint16_t port = 853;
        const struct sockaddr *addr = NULL;
        if (kr_straddr_split(addr_str, buf, &port) == kr_ok())
-               addr = kr_straddr_socket(buf, port);
+               addr = kr_straddr_socket(buf, port, NULL);
        /* Add newcfg into the C map, saving the original into oldcfg. */
        if (!addr)
                lua_error_p(L, "address '%s' could not be converted", addr_str);
@@ -642,7 +642,7 @@ int net_tls_client_clear(lua_State *L)
        uint16_t port = 853;
        const struct sockaddr *addr = NULL;
        if (kr_straddr_split(addr_str, buf, &port) == kr_ok())
-               addr = kr_straddr_socket(buf, port);
+               addr = kr_straddr_socket(buf, port, NULL);
        if (!addr)
                lua_error_p(L, "invalid IP address");
        /* Do the actual removal. */
index 4989c02c7fecf3a1cc16263c646d10b1887bf3f1..84db39ca02a1dd0b0e06b6009feb917ab68abe34 100644 (file)
@@ -320,7 +320,7 @@ int kr_straddr_family(const char *);
 int kr_straddr_subnet(void *, const char *);
 int kr_bitcmp(const char *, const char *, int);
 int kr_family_len(int);
-struct sockaddr *kr_straddr_socket(const char *, int);
+struct sockaddr *kr_straddr_socket(const char *, int, knot_mm_t *);
 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);
index da74f98641bf0d76276c2e574cbc6353c6cb99eb..8f4aee6ddc902fca91c627da4bf9cc066706d46d 100644 (file)
@@ -455,24 +455,24 @@ int kr_family_len(int family)
        }
 }
 
-struct sockaddr * kr_straddr_socket(const char *addr, int port)
+struct sockaddr * kr_straddr_socket(const char *addr, int port, knot_mm_t *pool)
 {
        switch (kr_straddr_family(addr)) {
        case AF_INET: {
-               struct sockaddr_in *res = malloc(sizeof(*res));
+               struct sockaddr_in *res = mm_alloc(pool, sizeof(*res));
                if (uv_ip4_addr(addr, port, res) >= 0) {
                        return (struct sockaddr *)res;
                } else {
-                       free(res);
+                       mm_free(pool, res);
                        return NULL;
                }
        }
        case AF_INET6: {
-               struct sockaddr_in6 *res = malloc(sizeof(*res));
+               struct sockaddr_in6 *res = mm_alloc(pool, sizeof(*res));
                if (uv_ip6_addr(addr, port, res) >= 0) {
                        return (struct sockaddr *)res;
                } else {
-                       free(res);
+                       mm_free(pool, res);
                        return NULL;
                }
        }
index 571a8c7c2e8842e7f3657464be6a1e743a106a21..4d8530aa7dd3cca05c5d2042bb5af14b7474749f 100644 (file)
@@ -345,9 +345,11 @@ int kr_straddr_family(const char *addr);
 /** Return address length in given family (struct in*_addr). */
 KR_EXPORT KR_CONST
 int kr_family_len(int family);
+
 /** Create a sockaddr* from string+port representation (also accepts IPv6 link-local). */
 KR_EXPORT
-struct sockaddr * kr_straddr_socket(const char *addr, int port);
+struct sockaddr * kr_straddr_socket(const char *addr, int port, knot_mm_t *pool);
+
 /** Parse address and return subnet length (bits).
   * @warning 'dst' must be at least `sizeof(struct in6_addr)` long. */
 KR_EXPORT
index ea0d91cb70e041c972384bfe9115f22246e7aa58..95bf02e3dfcfe92d1a7dc50392cf55db8677d0c8 100644 (file)
@@ -12,7 +12,7 @@ local function convert_sockaddr(family, ipaddr, port)
        if not (family and ipaddr and port) then
                panic('failed to obtain peer IP address')
        end
-       return ffi.gc(ffi.C.kr_straddr_socket(ipaddr, port), ffi.C.free)
+       return ffi.gc(ffi.C.kr_straddr_socket(ipaddr, port, nil), ffi.C.free)
 end
 
 -- Trace execution of DNS queries
index edf48845279005e39b60f49a99d9b2a5038b5af3..37c6f64110c5b5e48879955fdde4e9811776a7d0 100644 (file)
@@ -194,7 +194,7 @@ else
 
        local function test_dstaddr()
                local triggered = false
-               local exp_dstaddr = ffi.gc(ffi.C.kr_straddr_socket(host, port), ffi.C.free)
+               local exp_dstaddr = ffi.gc(ffi.C.kr_straddr_socket(host, port, nil), ffi.C.free)
                local function check_dstaddr(state, req)
                        triggered = true
                        same(ffi.C.kr_sockaddr_cmp(req.qsource.dst_addr, exp_dstaddr), 0,
index 17352db4123ef3911c72ae1665152a6eb777863c..b42b69d916505a65b89a39e778e6ede5e3bad0b0 100644 (file)
@@ -48,7 +48,7 @@ end
 -- String address@port -> sockaddr.
 local function addr2sock(target, default_port)
        local addr, port = addr_split_port(target, default_port)
-       local sock = ffi.gc(ffi.C.kr_straddr_socket(addr, port), ffi.C.free);
+       local sock = ffi.gc(ffi.C.kr_straddr_socket(addr, port, nil), ffi.C.free);
        if sock == nil then
                error("target '"..target..'" is not a valid IP address')
        end