diff options
Diffstat (limited to 'testing/lua-resty-dns/add-naptr.patch')
-rw-r--r-- | testing/lua-resty-dns/add-naptr.patch | 98 |
1 files changed, 70 insertions, 28 deletions
diff --git a/testing/lua-resty-dns/add-naptr.patch b/testing/lua-resty-dns/add-naptr.patch index a3bb991698..6a2294a0d4 100644 --- a/testing/lua-resty-dns/add-naptr.patch +++ b/testing/lua-resty-dns/add-naptr.patch @@ -1,14 +1,44 @@ -From 5dcc817d96352b05f7468d058c39be3e6616d037 Mon Sep 17 00:00:00 2001 +From 4a2b0606cf3757ef98413b8986602b60a8913890 Mon Sep 17 00:00:00 2001 From: Sergey Lukin <sergey.lukin@inbox.lv> Date: Fri, 5 Aug 2016 12:09:11 +0300 Subject: [PATCH] add NAPTR record support --- - lib/resty/dns/resolver.lua | 49 ++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 49 insertions(+) + README.markdown | 11 +++++++++ + lib/resty/dns/resolver.lua | 61 ++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 72 insertions(+) +diff --git a/README.markdown b/README.markdown +index 2cf852e..7fb2974 100644 +--- a/README.markdown ++++ b/README.markdown +@@ -28,6 +28,7 @@ Table of Contents + * [TYPE_TXT](#type_txt) + * [TYPE_AAAA](#type_aaaa) + * [TYPE_SRV](#type_srv) ++ * [TYPE_NAPTR](#type_naptr) + * [TYPE_SPF](#type_spf) + * [CLASS_IN](#class_in) + * [SECTION_AN](#section_an) +@@ -373,6 +374,16 @@ See RFC 2782 for details. + + [Back to TOC](#table-of-contents) + ++TYPE_NAPTR ++---------- ++`syntax: typ = r.TYPE_NAPTR` ++ ++The `NAPTR` resource record type, equal to the decimal number `35`. ++ ++See RFC 2915 for details. ++ ++[Back to TOC](#table-of-contents) ++ + TYPE_SPF + --------- + `syntax: typ = r.TYPE_SPF` diff --git a/lib/resty/dns/resolver.lua b/lib/resty/dns/resolver.lua -index 7612b52..989d225 100644 +index 7612b52..6cb6fda 100644 --- a/lib/resty/dns/resolver.lua +++ b/lib/resty/dns/resolver.lua @@ -48,6 +48,7 @@ local TYPE_MX = 15 @@ -27,24 +57,29 @@ index 7612b52..989d225 100644 TYPE_SPF = TYPE_SPF, CLASS_IN = CLASS_IN, SECTION_AN = SECTION_AN, -@@ -209,6 +211,16 @@ local function _encode_name(s) - return char(#s) .. s +@@ -210,6 +212,21 @@ local function _encode_name(s) end + +local function _decode_string(buf, pos) + local slen = byte(buf, pos) ++ + if slen == 0 then + return "", pos + 1 + end ++ + if pos + 1 + slen >= #buf then + return nil, 'truncated' + end ++ + return sub(buf, pos + 1, pos + slen), pos + slen + 1 +end - ++ ++ local function _decode_name(buf, pos) local labels = {} -@@ -484,6 +496,43 @@ local function parse_section(answers, section, buf, start_pos, size, + local nptrs = 0 +@@ -484,6 +501,50 @@ local function parse_section(answers, section, buf, start_pos, size, pos = p @@ -53,34 +88,41 @@ index 7612b52..989d225 100644 + return nil, "bad NAPTR record value length: " .. len + end + -+ local hi = byte(buf, pos) -+ local lo = byte(buf, pos + 1) -+ ans.order = lshift(hi, 8) + lo ++ local order_hi = byte(buf, pos) ++ local order_lo = byte(buf, pos + 1) ++ ans.order = lshift(order_hi, 8) + order_lo + -+ hi = byte(buf, pos + 2) -+ lo = byte(buf, pos + 3) -+ ans.preference = lshift(hi, 8) + lo ++ local preference_hi = byte(buf, pos + 2) ++ local preference_lo = byte(buf, pos + 3) ++ ans.preference = lshift(preference_hi, 8) + preference_lo + -+ local str, p = _decode_string(buf, pos + 4) -+ if not str then return nil, pos end -+ ans.flags = str ++ local flags_str, p = _decode_string(buf, pos + 4) ++ if not flags_str then ++ return nil, pos ++ end ++ ans.flags = flags_str + -+ str, p = _decode_string(buf, p) -+ if not str then return nil, pos end -+ ans.services = str ++ local services_str, p = _decode_string(buf, p) ++ if not services_str then ++ return nil, pos ++ end ++ ans.services = services_str + -+ str, p = _decode_string(buf, p) -+ if not str then return nil, pos end -+ ans.regexp = str ++ local regexp_str, p = _decode_string(buf, p) ++ if not regexp_str then ++ return nil, pos ++ end ++ ans.regexp = regexp_str + -+ if p - pos < len then -+ str,p = _decode_name(buf, p) -+ if not str then return nil, pos end -+ ans.replacements = str ++ local replacements_str,p = _decode_name(buf, p) ++ if not replacements_str ++ then return nil, pos + end ++ ans.replacements = replacements_str + + if p - pos ~= len then -+ return nil, format("bad NAPTR record length: %d ~= %d", p - pos, len) ++ return nil, format("bad NAPTR record length: %d ~= %d", ++ p - pos, len) + end + + pos = p |