diff options
| author | Shulhan <ms@kilabit.info> | 2022-05-16 02:11:54 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2022-05-16 02:11:54 +0700 |
| commit | 1f210cf3f11c5da5d410cf031f382727ac7b184b (patch) | |
| tree | 5d780c8edc3cf8d8df065d87dec856fdf66a7f22 | |
| parent | ded1372023f408303eb5d0d9bb6f4339c88e8429 (diff) | |
| download | rescached-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.adoc | 12 | ||||
| -rw-r--r-- | _sys/usr/share/man/man1/resolver.1.gz | bin | 3324 -> 3421 bytes | |||
| -rw-r--r-- | client.go | 24 | ||||
| -rw-r--r-- | cmd/resolver/resolver.go | 28 |
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 Binary files differindex 68e19f8..bc2d8eb 100644 --- a/_sys/usr/share/man/man1/resolver.1.gz +++ b/_sys/usr/share/man/man1/resolver.1.gz @@ -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:] |
