Mercurial > prosody-modules
annotate mod_dnsupdate/mod_dnsupdate.lua @ 6556:7477e97a9045
mod_firewall: Apply pre-reload state before re-reading config
This change makes load/reload a bit more robust. module.load() runs before
module.restore() and it reads from the config and updates the state (if
needed).
However, after this, module.restore() could run and apply the old state again.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sun, 24 May 2026 20:03:20 +0100 |
| parents | 0703ef9f8db8 |
| children |
| 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"; |
|
6221
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6220
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 |
|
6221
52e239aa96af
mod_dnsupdate: Use modulemanager to check which of c2s and s2s are enabled
Kim Alvefur <zash@zash.se>
parents:
6220
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 |
|
6413
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
36 if not arg[1] or not opts or opts.help or not opts.domain then |
|
4762
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 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
|
50 if not domain 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", "--domain is required"); |
|
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 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
|
55 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
|
56 if not primary then |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 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
|
58 return 1; |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 print("zone", domain); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 print("server", primary); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 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
|
64 |
|
6413
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
65 for _, vhost in ipairs(arg) do |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
66 if not vhost then |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
67 module:log("error", "Host %q fails normalization", arg[1]); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
68 return 1; |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
69 end |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
70 local ihost = idna_to_ascii(vhost); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
71 if not ihost then |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
72 module:log("error", "Host %q fails IDNA", vhost); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
73 return 1; |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
74 end |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
75 if not config.get(vhost, "component_module") and not config.get(vhost, "defined") then |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
76 module:log("error", "Host %q is not defined in the config", vhost); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
77 return 1; |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
78 end |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
79 |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
80 local target = validate_dnsname_option(opts, "target", module:context(vhost):get_option_string("xmpp_host", ihost)); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
81 -- TODO validate that target has A/AAAA |
|
6220
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5688
diff
changeset
|
82 |
|
6413
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
83 local configured_ports = { |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
84 ["xmpp-client"] = module:get_option_array("c2s_ports", { 5222 }); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
85 ["xmpp-server"] = module:get_option_array("s2s_ports", { 5269 }); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
86 ["xmpps-client"] = module:get_option_array("c2s_direct_tls_ports", {}); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
87 ["xmpps-server"] = module:get_option_array("s2s_direct_tls_ports", {}); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
88 }; |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
89 |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
90 local modules_enabled = modulemanager.get_modules_for_host(vhost); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
91 if not modules_enabled:contains("c2s") then |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
92 configured_ports["xmpp-client"] = {}; |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
93 configured_ports["xmpps-client"] = {}; |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
94 end |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
95 if not modules_enabled:contains("s2s") then |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
96 configured_ports["xmpp-server"] = {}; |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
97 configured_ports["xmpps-server"] = {}; |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
98 end |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
99 |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
100 if modules_enabled:contains("net_multiplex") then |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
101 for opt, ports in pairs(configured_ports) do |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
102 ports:append(module:get_option_array(opt:sub(1, 5) == "xmpps" and "ssl_ports" or "ports", {})); |
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
103 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
104 end |
|
6220
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5688
diff
changeset
|
105 |
|
6413
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
106 local existing_srv = {}; |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
107 for _, service in ipairs(services) do |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
108 existing_srv[service] = dns:lookup_promise(("_%s._tcp.%s"):format(service, ihost), "SRV"); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
109 end |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
110 |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
111 for _, service in ipairs(services) do |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
112 local config_ports = set.new(configured_ports[service]); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
113 local dns_ports = set.new(); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
114 |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
115 if (opts.reset or opts.remove) and not opts.each then |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
116 print(("del _%s._tcp.%s IN SRV"):format(service, ihost)); |
|
6220
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5688
diff
changeset
|
117 else |
|
6413
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
118 local records = (async.wait_for(existing_srv[service])); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
119 for _, rr in ipairs(records) do |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
120 if target == nameprep(rr.srv.target):gsub("%.$", "") then |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
121 dns_ports:add(rr.srv.port) |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
122 elseif opts.each then |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
123 print(("del _%s._tcp.%s IN SRV %s"):format(service, ihost, rr)); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
124 end |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
125 end |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
126 end |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
127 |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
128 if not opts.remove then |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
129 if config_ports:empty() then |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
130 print(("add _%s._tcp.%s IN SRV 0 0 0 ."):format(service, ihost)); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
131 else |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
132 for port in (config_ports - dns_ports) do |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
133 print(("add _%s._tcp.%s IN SRV 1 1 %d %s"):format(service, ihost, port, target)); |
|
0703ef9f8db8
mod_dnsupdate: Support multiple hosts/components
Kim Alvefur <zash@zash.se>
parents:
6223
diff
changeset
|
134 end |
|
6220
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5688
diff
changeset
|
135 end |
|
b6e390a97c85
mod_dnsupdate: Improve handling of existing DNS records
Kim Alvefur <zash@zash.se>
parents:
5688
diff
changeset
|
136 end |
|
4896
54fa2116bbf3
mod_dnsupdate: Add a --remove option to delete all SRV records
Kim Alvefur <zash@zash.se>
parents:
4882
diff
changeset
|
137 end |
|
4762
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
138 end |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
139 |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
140 print("show"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
141 print("send"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
142 print("answer"); |
|
ba312cd7907f
mod_dnsupdate: Use with nsupdate to update DNS records from config
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
143 end |
