]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
kres.str2dname: perform lower-casing
authorVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 11 Sep 2018 14:07:22 +0000 (16:07 +0200)
committerPetr Špaček <petr.spacek@nic.cz>
Wed, 31 Oct 2018 14:29:42 +0000 (14:29 +0000)
We use it as relatively high-level function, often on user-input names,
so it seems suitable that it does convert the case.
This fixes cache.clear('Example.Org.'), and probably also negative trust
anchors and policy uses.

daemon/cache.test/clear.test.lua
daemon/lua/kres-gen.lua
daemon/lua/kres-gen.sh
daemon/lua/kres.lua

index 31a028a6d85b877e80722e2ef037f80b1da140c1..473103bab5446083b92d47786e59987615f7d378 100644 (file)
@@ -81,7 +81,7 @@ local function test_exact_match_qtype()
 end
 
 local function test_exact_match_qname()
-       res = cache.clear('a.b.subtree1.')
+       res = cache.clear('a.b.SubTree1.')
        is(res.count, 2, 'single qname can be cleared at once')
        check_answer('exact match on qname must flush all RRs with the same owner from cache',
                     'a.b.subtree1.', kres.type.AAAA, kres.rcode.SERVFAIL)
index ef12802c65054bfb31297a98622e0f8c897762c7..28d96492118197e4e2accebc2389f5a36c1fe218 100644 (file)
@@ -263,6 +263,7 @@ int knot_dname_in_bailiwick(const knot_dname_t *, const knot_dname_t *);
 _Bool knot_dname_is_equal(const knot_dname_t *, const knot_dname_t *);
 size_t knot_dname_labels(const uint8_t *, const uint8_t *);
 size_t knot_dname_size(const knot_dname_t *);
+void knot_dname_to_lower(knot_dname_t *);
 char *knot_dname_to_str(char *, const knot_dname_t *, size_t);
 knot_rdata_t *knot_rdataset_at(const knot_rdataset_t *, uint16_t);
 int knot_rdataset_merge(knot_rdataset_t *, const knot_rdataset_t *, knot_mm_t *);
index 82ab19b6b0b4d822208f32c4ca11339bf06f746e..afc1460f555b1e865cd72480ae759fda67d3d7b2 100755 (executable)
@@ -108,6 +108,7 @@ printf "\tchar _stub[];\n};\n"
        knot_dname_is_equal
        knot_dname_labels
        knot_dname_size
+       knot_dname_to_lower
        knot_dname_to_str
 # Resource records
        knot_rdataset_at
index 0ee9b5c42687e9518c7170d49c6a780bf529d4ba..4eeb0da581f4252cdcb770900f46f74cd8af7a14 100644 (file)
@@ -323,7 +323,7 @@ end
 
 -- Convert dname pointer to wireformat string
 local function dname2wire(name)
-       if name == nil then return end
+       if name == nil then return nil end
        return ffi.string(name, knot.knot_dname_size(name))
 end
 
@@ -915,14 +915,19 @@ kres = {
        pkt_t = function (udata) return ffi.cast('knot_pkt_t *', udata) end,
        request_t = function (udata) return ffi.cast('struct kr_request *', udata) end,
        sockaddr_t = function (udata) return ffi.cast('struct sockaddr *', udata) end,
+
        -- Global API functions
+       -- Convert a lua string to a lower-case wire format (inside GC-ed ffi.string).
        str2dname = function(name)
                if type(name) ~= 'string' then return end
                local dname = ffi.gc(C.knot_dname_from_str(nil, name, 0), C.free)
+               if dname == nil then return nil end
+               ffi.C.knot_dname_to_lower(dname);
                return dname2wire(dname)
        end,
        dname2str = dname2str,
        dname2wire = dname2wire,
+
        rr2str = rr2str,
        str2ip = function (ip)
                local family = C.kr_straddr_family(ip)