Software / code / prosody-modules
Annotate
mod_dnsupdate/mod_dnsupdate.lua @ 6325:6ea80b73d8f2
mod_http_oauth2: Only require redirect URIs when using grant types that need it
In the Device flow, no redirect URI is used because the client instead
receives responses by polling. It is therefore unnecessary to enforce a
requirement that these include redirect URI(s).
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 03 Jul 2025 15:42:42 +0200 |
| parent | 6257:3ae0d518b739 |
| rev | line source |
|---|---|
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 module:set_global(); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 local config = require "core.configmanager"; |
|
6255
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
4 local modulemanager = require "core.modulemanager"; |
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 local argparse = require "util.argparse"; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 local dns = require"net.adns".resolver(); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 local async = require "util.async"; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 local set = require "util.set"; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 local nameprep = require"util.encodings".stringprep.nameprep; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local idna_to_ascii = require"util.encodings".idna.to_ascii; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 |
|
6255
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
12 local services = { "xmpp-client"; "xmpps-client"; "xmpp-server"; "xmpps-server" } |
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 local function validate_dnsname_option(options, option_name, default) |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 local host = options[option_name]; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 if host == nil then return default end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 local normalized = nameprep(host); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 if not normalized then |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 module:log("error", "--%s %q fails normalization"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 return; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 local alabel = idna_to_ascii(normalized); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 if not alabel then |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 module:log("error", "--%s %q fails IDNA"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 return; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 return alabel; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 function module.command(arg) |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 local opts = argparse.parse(arg, { |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 short_params = { d = "domain"; p = "primary"; t = "target"; l = "ttl"; h = "help"; ["?"] = "help" }; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 value_params = { domain = true; primary = true; target = true; ttl = true }; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 }); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 if not arg[1] or arg[2] or not opts or opts.help or not opts.domain then |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 local out = opts.help and io.stdout or io.stderr; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 out:write("prosodyctl mod_dnsupdate [options] virtualhost\n"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 out:write("\t-d --domain\tbase domain name *required*\n"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 out:write("\t-p --primary\tprimary DNS name server\n"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 out:write("\t-t --target\ttarget hostname for SRV\n"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 out:write("\t-l --ttl\tTTL to use\n"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 out:write("\t--each\tremove and replace individual SRV records\n"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 out:write("\t--reset\tremove and replace all SRV records\n"); |
|
4896
54fa2116bbf3
mod_dnsupdate: Add a --remove option to delete all SRV records
Kim Alvefur <zash@zash.se>
parents:
4882
diff
changeset
|
45 out:write("\t--remove\tremove all SRV records\n"); |
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 return opts and opts.help and 0 or 1; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 local vhost = nameprep(arg[1]); -- TODO loop over arg[]? |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 if not vhost then |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 module:log("error", "Host %q fails normalization", arg[1]); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 return 1; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 local ihost = idna_to_ascii(vhost); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 if not ihost then |
| 4882 | 56 module:log("error", "Host %q fails IDNA", vhost); |
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 return 1; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 end |
|
6255
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
59 if not config.get(vhost, "component_module") and not config.get(vhost, "defined") then |
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 module:log("error", "Host %q is not defined in the config", vhost); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 return 1; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 local domain = validate_dnsname_option(opts, "domain"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 if not domain then |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 module:log("error", "--domain is required"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 return 1; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 local primary = validate_dnsname_option(opts, "primary") |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 or async.wait_for(dns:lookup_promise(domain, "SOA"):next(function(ret) return ret[1].soa.mname; end)); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 if not primary then |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 module:log("error", "Could not discover primary name server, specify it with --primary"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 return 1; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 local target = validate_dnsname_option(opts, "target", module:context(vhost):get_option_string("xmpp_host", ihost)); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 -- TODO validate that target has A/AAAA |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 local configured_ports = { |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 ["xmpp-client"] = module:get_option_array("c2s_ports", { 5222 }); |
|
4763
91077c928c57
mod_dnsupdate: Fix to use correct port settings
Kim Alvefur <zash@zash.se>
parents:
4762
diff
changeset
|
80 ["xmpp-server"] = module:get_option_array("s2s_ports", { 5269 }); |
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 ["xmpps-client"] = module:get_option_array("c2s_direct_tls_ports", {}); |
|
4763
91077c928c57
mod_dnsupdate: Fix to use correct port settings
Kim Alvefur <zash@zash.se>
parents:
4762
diff
changeset
|
82 ["xmpps-server"] = module:get_option_array("s2s_direct_tls_ports", {}); |
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 }; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 |
|
6255
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
85 local modules_enabled = modulemanager.get_modules_for_host(vhost); |
|
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
86 if not modules_enabled:contains("c2s") then |
|
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
87 configured_ports["xmpp-client"] = {}; |
|
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
88 configured_ports["xmpps-client"] = {}; |
|
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
89 end |
|
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
90 if not modules_enabled:contains("s2s") then |
|
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
91 configured_ports["xmpp-server"] = {}; |
|
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
92 configured_ports["xmpps-server"] = {}; |
|
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
93 end |
|
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6254
diff
changeset
|
94 |
|
6257
3ae0d518b739
mod_dnsupdate: Check if multiplexing is enabled
Kim Alvefur <zash@zash.se>
parents:
6256
diff
changeset
|
95 if modules_enabled:contains("net_multiplex") then |
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 for opt, ports in pairs(configured_ports) do |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 ports:append(module:get_option_array(opt:sub(1, 5) == "xmpps" and "ssl_ports" or "ports", {})); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 local existing_srv = {}; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 for _, service in ipairs(services) do |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
103 existing_srv[service] = dns:lookup_promise(("_%s._tcp.%s"):format(service, ihost), "SRV"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
104 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
105 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
106 print("zone", domain); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
107 print("server", primary); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
108 print("ttl " .. tostring(opts.ttl or 60 * 60)); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
109 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
110 for _, service in ipairs(services) do |
|
6254
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
111 local config_ports = set.new(configured_ports[service]); |
|
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
112 local dns_ports = set.new(); |
|
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
113 |
|
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
114 if (opts.reset or opts.remove) and not opts.each then |
|
4764
a754f7e380b2
mod_dnsupdate: Rewrite port config vs DNS comparison code
Kim Alvefur <zash@zash.se>
parents:
4763
diff
changeset
|
115 print(("del _%s._tcp.%s IN SRV"):format(service, ihost)); |
|
a754f7e380b2
mod_dnsupdate: Rewrite port config vs DNS comparison code
Kim Alvefur <zash@zash.se>
parents:
4763
diff
changeset
|
116 else |
|
6254
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
117 local records = (async.wait_for(existing_srv[service])); |
|
4764
a754f7e380b2
mod_dnsupdate: Rewrite port config vs DNS comparison code
Kim Alvefur <zash@zash.se>
parents:
4763
diff
changeset
|
118 for _, rr in ipairs(records) do |
|
6254
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
119 if target == nameprep(rr.srv.target):gsub("%.$", "") then |
|
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
120 dns_ports:add(rr.srv.port) |
|
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
121 elseif opts.each then |
|
4764
a754f7e380b2
mod_dnsupdate: Rewrite port config vs DNS comparison code
Kim Alvefur <zash@zash.se>
parents:
4763
diff
changeset
|
122 print(("del _%s._tcp.%s IN SRV %s"):format(service, ihost, rr)); |
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
123 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
124 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
125 end |
|
6254
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
126 |
|
4896
54fa2116bbf3
mod_dnsupdate: Add a --remove option to delete all SRV records
Kim Alvefur <zash@zash.se>
parents:
4882
diff
changeset
|
127 if not opts.remove then |
|
6254
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
128 if config_ports:empty() then |
|
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
129 print(("add _%s._tcp.%s IN SRV 0 0 0 ."):format(service, ihost)); |
|
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
130 else |
|
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
131 for port in (config_ports - dns_ports) do |
|
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
132 print(("add _%s._tcp.%s IN SRV 1 1 %d %s"):format(service, ihost, port, target)); |
|
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
133 end |
|
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5711
diff
changeset
|
134 end |
|
4896
54fa2116bbf3
mod_dnsupdate: Add a --remove option to delete all SRV records
Kim Alvefur <zash@zash.se>
parents:
4882
diff
changeset
|
135 end |
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
136 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
137 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
138 print("show"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
139 print("send"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
140 print("answer"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
141 end |