diff options
| -rw-r--r-- | _doc/resolver.adoc | 14 | ||||
| -rw-r--r-- | _sys/usr/share/man/man1/resolver.1.gz | bin | 3421 -> 3508 bytes | |||
| -rw-r--r-- | client.go | 27 | ||||
| -rw-r--r-- | cmd/resolver/resolver.go | 41 |
4 files changed, 81 insertions, 1 deletions
diff --git a/_doc/resolver.adoc b/_doc/resolver.adoc index b82cea4..362bc62 100644 --- a/_doc/resolver.adoc +++ b/_doc/resolver.adoc @@ -219,6 +219,10 @@ Delete zone file inside the zone.d directory. === MANAGING RECORD IN ZONE.D +`zone.d rr get <zone>`:: + +Get and print all records in the zone. + zone.d rr add <zone> <"@" | subdomain> <ttl> <type> <class> <value> ...:: + -- @@ -377,6 +381,16 @@ Print all zone in the server, Assume that we have create zone "my.zone". +Get all records in the zone "my.zone", + + $ resolver zone.d rr get my.zone + my.zone + 604800 MX IN map[Exchange:mail.my.zone Preference:10] + 604800 A IN 127.0.0.2 + 604800 A IN 127.0.0.3 + www.my.zone + 604800 A IN 192.168.1.2 + Add IPv4 address "127.0.0.1" for domain my.zone, $ resolver zone.d rr add my.zone @ 0 A IN 127.0.0.1 diff --git a/_sys/usr/share/man/man1/resolver.1.gz b/_sys/usr/share/man/man1/resolver.1.gz Binary files differindex bc2d8eb..a3b628c 100644 --- a/_sys/usr/share/man/man1/resolver.1.gz +++ b/_sys/usr/share/man/man1/resolver.1.gz @@ -499,6 +499,33 @@ func (cl *Client) ZonedDelete(name string) (zone *dns.Zone, err error) { return zone, nil } +// ZoneRecords fetch the zone records by its name. +func (cl *Client) ZonedRecords(zone string) (zoneRecords dns.ZoneRecords, err error) { + var ( + logp = "ZonedRecords" + params = url.Values{} + res = libhttp.EndpointResponse{ + Data: &zoneRecords, + } + + resBody []byte + ) + + params.Set(paramNameZone, zone) + + _, resBody, err = cl.Get(apiZonedRR, nil, params) + 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 zoneRecords, nil +} + // ZonedRecordAdd add new record to zone file. func (cl *Client) ZonedRecordAdd(zone string, rreq dns.ResourceRecord) (rres *dns.ResourceRecord, err error) { var ( diff --git a/cmd/resolver/resolver.go b/cmd/resolver/resolver.go index deb787f..ead3cfc 100644 --- a/cmd/resolver/resolver.go +++ b/cmd/resolver/resolver.go @@ -529,16 +529,24 @@ func (rsol *resolver) doCmdZoned(args []string) { } func (rsol *resolver) doCmdZonedRR(resc *rescached.Client, args []string) { + if len(args) == 0 { + log.Fatalf("resolver: %s %s: missing arguments", rsol.cmd, subCmdRR) + } + var ( - cmdAction = strings.ToLower(args[0]) + cmdAction string ) + cmdAction = strings.ToLower(args[0]) args = args[1:] switch cmdAction { case subCmdAdd: rsol.doCmdZonedRRAdd(resc, args) + case subCmdGet: + rsol.doCmdZonedRRGet(resc, args) + default: log.Fatalf("resolver: %s %s: unknown action: %q", rsol.cmd, subCmdRR, cmdAction) } @@ -628,6 +636,37 @@ func (rsol *resolver) doCmdZonedRRAdd(resc *rescached.Client, args []string) { fmt.Println(string(vbytes)) } +// doCmdZonedRRGet get and print the records on zone. +func (rsol *resolver) doCmdZonedRRGet(resc *rescached.Client, args []string) { + if len(args) == 0 { + log.Fatalf("resolver: missing zone argument") + } + + var ( + zoneRecords dns.ZoneRecords + dname string + listRR []*dns.ResourceRecord + rr *dns.ResourceRecord + err error + ) + + zoneRecords, err = resc.ZonedRecords(args[0]) + if err != nil { + log.Fatalf("resolver: %s", err) + } + + for dname, listRR = range zoneRecords { + fmt.Println(dname) + for _, rr = range listRR { + fmt.Printf(" %6d %2s %2s %v\n", + rr.TTL, + dns.RecordTypeNames[rr.Type], + dns.RecordClassName[rr.Class], + rr.Value) + } + } +} + // initSystemResolver read the system resolv.conf to create fallback DNS // resolver. func (rsol *resolver) initSystemResolver() (err error) { |
