diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 15:26:00 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 15:26:00 +0000 |
commit | 830407e88f9d40d954356c3754f2647f91d5c06a (patch) | |
tree | d6a0ece6feea91f3c656166dbaa884ef8a29740e /scripts/kresd-query.lua | |
parent | Initial commit. (diff) | |
download | knot-resolver-830407e88f9d40d954356c3754f2647f91d5c06a.tar.xz knot-resolver-830407e88f9d40d954356c3754f2647f91d5c06a.zip |
Adding upstream version 5.6.0.upstream/5.6.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rwxr-xr-x | scripts/kresd-query.lua | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/scripts/kresd-query.lua b/scripts/kresd-query.lua new file mode 100755 index 0000000..713b9c7 --- /dev/null +++ b/scripts/kresd-query.lua @@ -0,0 +1,63 @@ +#!/usr/bin/env luajit +-- SPDX-License-Identifier: GPL-3.0-or-later +cli_bin = 'kresd -q -c -' +-- Work around OS X stripping dyld variables +libdir = os.getenv('DYLD_LIBRARY_PATH') +if libdir then + cli_bin = string.format('DYLD_LIBRARY_PATH="%s" %s', libdir, cli_bin) +end +cli_cmd = [[echo ' +option("ALWAYS_CUT", true) +%s +return resolve("%s", kres.type.%s, kres.class.%s, 0, +function (pkt, req) + local ok, err = pcall(function () %s end) + if not ok then + print(err) + end + quit() +end)']] +-- Parse CLI arguments +local function help() + name = 'kresd-query.lua' + print(string.format('Usage: %s [-t type] [-c class] [-C config] <name> <script>', name)) + print('Execute a single-shot query and run a script on the result.') + print('There are two variables available: pkt (kres.pkt_t), req (kres.request_t)') + print('See modules README to learn about their APIs.') + print('') + print('Options:') + print('\t-h,--help ... print this help') + print('\t-t TYPE ... query for given type (default: A)') + print('\t-c CLASS ... query in given class (default: IN)') + print('\t-C config_str ... kresd-style config (default: -)') + print('Examples:') + print('\t'..name..' -t SOA cz "print(pkt:qname())" ... print response QNAME') +end +-- Parse CLI arguments +if #arg < 2 then help() return 1 end +local qtype, qclass, qname = 'A', 'IN', nil +local config, scripts = '', {} +k = 1 while k <= #arg do + local v = arg[k] + if v == '-h' or v == '--help' then + return help() + elseif v == '-C' then + k = k + 1 + config = arg[k] + elseif v == '-c' then + k = k + 1 + qclass = arg[k]:upper() + elseif v == '-t' then + k = k + 1 + qtype = arg[k]:upper() + elseif v:byte() == string.byte('-') then + return help() + elseif not qname then + qname = v + else + table.insert(scripts, v) + end + k = k + 1 +end +cli_cmd = string.format(cli_cmd, config, qname, qtype, qclass, table.concat(scripts, ' ')) +return os.execute(cli_cmd..' | '..cli_bin) |