aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2022-05-16 02:11:54 +0700
committerShulhan <ms@kilabit.info>2022-05-16 02:11:54 +0700
commit1f210cf3f11c5da5d410cf031f382727ac7b184b (patch)
tree5d780c8edc3cf8d8df065d87dec856fdf66a7f22
parentded1372023f408303eb5d0d9bb6f4339c88e8429 (diff)
downloadrescached-1f210cf3f11c5da5d410cf031f382727ac7b184b.tar.xz
cmd/resolver: add command to fetch and print all zones
The command has the following format, resolver zone.d
-rw-r--r--_doc/resolver.adoc12
-rw-r--r--_sys/usr/share/man/man1/resolver.1.gzbin3324 -> 3421 bytes
-rw-r--r--client.go24
-rw-r--r--cmd/resolver/resolver.go28
4 files changed, 57 insertions, 7 deletions
diff --git a/_doc/resolver.adoc b/_doc/resolver.adoc
index 0ca00fc..b82cea4 100644
--- a/_doc/resolver.adoc
+++ b/_doc/resolver.adoc
@@ -204,6 +204,10 @@ Delete record from hosts file "name" by domain name.
=== MANAGING ZONE.D
+`zone.d`::
++
+Fetch and print all zones in the server, including their SOA.
+
zone.d create <name>::
+
Create new zone file inside the zone.d directory.
@@ -360,6 +364,14 @@ Delete record "my.hosts" from hosts file "hosts",
"TTL": 604800
}
+=== MANAGING ZONE.D
+
+Print all zone in the server,
+
+ $ resolver zone.d
+ my.zone
+ SOA: {MName:my.zone RName: Serial:0 Refresh:0 Retry:0 Expire:0 Minimum:0}
+
=== MANAGING RECORD IN ZONE.D
diff --git a/_sys/usr/share/man/man1/resolver.1.gz b/_sys/usr/share/man/man1/resolver.1.gz
index 68e19f8..bc2d8eb 100644
--- a/_sys/usr/share/man/man1/resolver.1.gz
+++ b/_sys/usr/share/man/man1/resolver.1.gz
Binary files differ
diff --git a/client.go b/client.go
index 2833768..608f81c 100644
--- a/client.go
+++ b/client.go
@@ -413,6 +413,30 @@ func (cl *Client) HostsdRecordDelete(hostsName, domain string) (record *dns.Reso
return record, nil
}
+// Zoned fetch and return list of zone managed on server.
+func (cl *Client) Zoned() (zones map[string]*dns.Zone, err error) {
+ var (
+ logp = "Zoned"
+ res = libhttp.EndpointResponse{}
+
+ resBody []byte
+ )
+
+ res.Data = &zones
+
+ _, resBody, err = cl.Get(apiZoned, nil, nil)
+ if err != nil {
+ return nil, fmt.Errorf("%s: %w", logp, err)
+ }
+
+ err = json.Unmarshal(resBody, &res)
+ if err != nil {
+ return nil, fmt.Errorf("%s: %w", logp, err)
+ }
+
+ return zones, nil
+}
+
// ZonedCreate create new zone file.
func (cl *Client) ZonedCreate(name string) (zone *dns.Zone, err error) {
var (
diff --git a/cmd/resolver/resolver.go b/cmd/resolver/resolver.go
index 36175a1..deb787f 100644
--- a/cmd/resolver/resolver.go
+++ b/cmd/resolver/resolver.go
@@ -470,17 +470,31 @@ func (rsol *resolver) doCmdQuery(args []string) {
}
func (rsol *resolver) doCmdZoned(args []string) {
- if len(args) == 0 {
- log.Fatalf("resolver: %s: missing argument", rsol.cmd)
- }
-
var (
- subCmd = strings.ToLower(args[0])
- resc = rsol.newRescachedClient()
+ resc = rsol.newRescachedClient()
- err error
+ zone *dns.Zone
+ zones map[string]*dns.Zone
+ zoneName string
+ subCmd string
+ err error
)
+ if len(args) == 0 {
+ zones, err = resc.Zoned()
+ if err != nil {
+ log.Fatalf("resolver: %s: %s", rsol.cmd, err)
+ }
+
+ for zoneName, zone = range zones {
+ fmt.Println(zoneName)
+ fmt.Printf(" SOA: %+v\n", zone.SOA)
+ }
+ return
+ }
+
+ subCmd = strings.ToLower(args[0])
+
switch subCmd {
case subCmdCreate:
args = args[1:]