diff options
author | Timo Teräs <timo.teras@iki.fi> | 2017-05-18 10:43:31 +0300 |
---|---|---|
committer | Timo Teräs <timo.teras@iki.fi> | 2017-05-18 10:44:08 +0300 |
commit | e20f9d2f6aa8485e0c5a051bcaa395141332cab6 (patch) | |
tree | 7820b01ef1b3a8b0e00b771d7a722c9078aa3bf6 /community/lua-resty-dns | |
parent | c159dac24ccc8160ce22914620b1148ac18801b6 (diff) | |
download | aports-e20f9d2f6aa8485e0c5a051bcaa395141332cab6.tar.bz2 aports-e20f9d2f6aa8485e0c5a051bcaa395141332cab6.tar.xz |
community/lua-resty-dns: moved from testing
Diffstat (limited to 'community/lua-resty-dns')
-rw-r--r-- | community/lua-resty-dns/APKBUILD | 55 | ||||
-rw-r--r-- | community/lua-resty-dns/add-naptr.patch | 244 |
2 files changed, 299 insertions, 0 deletions
diff --git a/community/lua-resty-dns/APKBUILD b/community/lua-resty-dns/APKBUILD new file mode 100644 index 0000000000..6555d23668 --- /dev/null +++ b/community/lua-resty-dns/APKBUILD @@ -0,0 +1,55 @@ +# Contributor: Timo Teräs <timo.teras@iki.fi> +# Maintainer: Timo Teräs <timo.teras@iki.fi> +_luaversions="5.1" +pkgname=lua-resty-dns +pkgver=0.18 +pkgrel=0 +pkgdesc="DNS resolver for the nginx lua module" +url="https://github.com/openresty/lua-resty-dns" +arch="noarch" +license="BSD" +depends="nginx-mod-http-lua" +makedepends="" +install="" +subpackages="" +source="lua-resty-dns-$pkgver.tar.gz::https://github.com/openresty/lua-resty-dns/archive/v$pkgver.tar.gz + add-naptr.patch" +builddir="$srcdir/lua-resty-dns-$pkgver" + +for _v in $_luaversions; do + subpackages="$subpackages lua${_v}-resty-dns:split_${_v/./_}" +done + +build() { + cd "$builddir" +} + +package() { + cd "$builddir" + local _i + for _i in $_luaversions; do + mkdir -p "$pkgdir"/usr/share/lua/$_i + make DESTDIR="$pkgdir" LUA_LIB_DIR="/usr/share/lua/$_i" install \ + || return 1 + done +} + +_split() { + local d= _ver=$1 + pkgdesc="$pkgdesc for Lua $_ver" + install_if="lua$_ver $pkgname=$pkgver-r$pkgrel" + depends= + for d in usr/lib/lua usr/share/lua; do + if [ -d "$pkgdir"/$d/$_ver ]; then + mkdir -p "$subpkgdir"/$d + mv "$pkgdir"/$d/$_ver "$subpkgdir"/$d/ || return 1 + fi + done +} + +for _v in $_luaversions; do + eval "split_${_v/./_}() { _split $_v; }" +done + +sha512sums="c825b34428aa50d1640b76bac4c39e4f39de042b3f7beef3eb764a01f09e173e439e5e0560bc49daa01891ea0f2c44ef993fe9839939bc0d06025a8aa1b0c005 lua-resty-dns-0.18.tar.gz +9f245faff407938965cd0b719ca0952678468cb9f34c1cbb6809b9ed8806c0f6441c1dee0950fd5e21b5f65666c0f651e84a01f9f69f05a4df3e65757a744669 add-naptr.patch" diff --git a/community/lua-resty-dns/add-naptr.patch b/community/lua-resty-dns/add-naptr.patch new file mode 100644 index 0000000000..3ef1985197 --- /dev/null +++ b/community/lua-resty-dns/add-naptr.patch @@ -0,0 +1,244 @@ +From 2d39a1bc09441c2b77d6911f43f94e9438c2d96c 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 + +--- + README.markdown | 11 +++++++++ + lib/resty/dns/resolver.lua | 61 ++++++++++++++++++++++++++++++++++++++++++++++ + t/TestDNS.pm | 19 ++++++++++++++- + t/mock.t | 51 ++++++++++++++++++++++++++++++++++++++ + 4 files changed, 141 insertions(+), 1 deletion(-) + +diff --git a/README.markdown b/README.markdown +index 78c4632..1699f77 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) +@@ -375,6 +376,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 cecb7e3..576db03 100644 +--- a/lib/resty/dns/resolver.lua ++++ b/lib/resty/dns/resolver.lua +@@ -46,6 +46,7 @@ local TYPE_MX = 15 + local TYPE_TXT = 16 + local TYPE_AAAA = 28 + local TYPE_SRV = 33 ++local TYPE_NAPTR = 35 + local TYPE_SPF = 99 + + local CLASS_IN = 1 +@@ -65,6 +66,7 @@ local _M = { + 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, +@@ -208,6 +210,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 = {} + local nptrs = 0 +@@ -481,6 +498,50 @@ local function parse_section(answers, section, buf, start_pos, size, + + pos = p + ++ elseif typ == TYPE_NAPTR then ++ if len < 7 then ++ return nil, "bad NAPTR record value length: " .. len ++ end ++ ++ local order_hi = byte(buf, pos) ++ local order_lo = byte(buf, pos + 1) ++ ans.order = lshift(order_hi, 8) + order_lo ++ ++ local preference_hi = byte(buf, pos + 2) ++ local preference_lo = byte(buf, pos + 3) ++ ans.preference = lshift(preference_hi, 8) + preference_lo ++ ++ local flags_str, p = _decode_string(buf, pos + 4) ++ if not flags_str then ++ return nil, pos ++ end ++ ans.flags = flags_str ++ ++ local services_str, p = _decode_string(buf, p) ++ if not services_str then ++ return nil, pos ++ end ++ ans.services = services_str ++ ++ local regexp_str, p = _decode_string(buf, p) ++ if not regexp_str then ++ return nil, pos ++ end ++ ans.regexp = regexp_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) ++ end ++ ++ pos = p ++ + elseif typ == TYPE_NS then + + local name, p = _decode_name(buf, pos) +diff --git a/t/TestDNS.pm b/t/TestDNS.pm +index cf01f29..9971c80 100644 +--- a/t/TestDNS.pm ++++ b/t/TestDNS.pm +@@ -13,6 +13,7 @@ use constant { + TYPE_CNAME => 5, + TYPE_AAAA => 28, + TYPE_SRV => 33, ++ TYPE_NAPTR => 35, + CLASS_INTERNET => 1, + }; + +@@ -261,6 +262,11 @@ sub encode_name ($) { + return $name; + } + ++sub encode_str ($) { ++ my $str = shift; ++ return chr(length($str)) . $str; ++} ++ + sub encode_record ($) { + my $ans = shift; + my $name = $ans->{name}; +@@ -304,7 +310,6 @@ sub encode_record ($) { + $class //= CLASS_INTERNET; + } + +- + my $srv = $ans->{srv}; + if (defined $srv) { + $rddata //= pack("nnn", $ans->{priority}, $ans->{weight}, $ans->{port}) . encode_name($srv); +@@ -313,6 +318,18 @@ sub encode_record ($) { + $class //= CLASS_INTERNET; + } + ++ my $services = $ans->{services}; ++ if (defined $services) { ++ $rddata //= pack("nn", $ans->{order}, $ans->{preference}) ++ . encode_str($ans->{flags}) ++ . encode_str($ans->{services}) ++ . encode_str($ans->{regexp}) ++ . encode_name($ans->{replacements}); ++ $rdlength //= length $rddata; ++ $type //= TYPE_NAPTR; ++ $class //= CLASS_INTERNET; ++ } ++ + $type //= 0; + $class //= 0; + $ttl //= 0; +diff --git a/t/mock.t b/t/mock.t +index 6d43c6f..cc727f0 100644 +--- a/t/mock.t ++++ b/t/mock.t +@@ -1721,3 +1721,54 @@ GET /t + records: [{"address":"127.0.0.1","section":1,"type":1,"class":1,"name":"www.google.com","ttl":123456}] + --- no_error_log + [error] ++ ++ ++=== TEST 35: NAPTR ++--- http_config eval: $::HttpConfig ++--- config ++ location /t { ++ content_by_lua ' ++ local resolver = require "resty.dns.resolver" ++ ++ local r, err = resolver:new{ ++ nameservers = { {"127.0.0.1", 1953} } ++ } ++ if not r then ++ ngx.say("failed to instantiate resolver: ", err) ++ return ++ end ++ ++ r._id = 125 ++ ++ local ans, err = r:query("5.4.3.2.1.e164.arpa", { qtype = r.TYPE_NAPTR }) ++ if not ans then ++ ngx.say("failed to query: ", err) ++ return ++ end ++ ++ local cjson = require "cjson" ++ ngx.say("records: ", cjson.encode(ans)) ++ '; ++ } ++--- udp_listen: 1953 ++--- udp_reply dns ++{ ++ id => 125, ++ opcode => 0, ++ qtype => 35, # NAPTR ++ qname => '5.4.3.2.1.e164.arpa', ++ answer => [ ++ { name => "5.4.3.2.1.e164.arpa", ttl => 2, order => 10, preference => 100, ++ flags => "u", ++ services => "E2U+sip", ++ regexp => "!^\\+123456(.*)\$!sip:\\1\@example.org!", ++ replacements => "" ++ } ++ ], ++} ++--- request ++GET /t ++--- response_body ++records: [{"order":10,"preference":100,"class":1,"regexp":"!^\\+123456(.*)$!sip:\\1@example.org!","replacements":"","section":1,"flags":"u","type":35,"ttl":2,"name":"5.4.3.2.1.e164.arpa","services":"E2U+sip"}] ++--- no_error_log ++[error] |