diff options
| author | Shulhan <ms@kilabit.info> | 2022-05-11 01:55:01 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2022-05-11 01:55:01 +0700 |
| commit | 1c3e6525b18f7c88d0155f856518a89415d0d95e (patch) | |
| tree | eb6285f3b88ac193fd835e9a22e71abc79fe4f2d /cmd/resolver/resolver.go | |
| parent | a619e95df4d64ca7a8ddf41d996b62dc23334f9f (diff) | |
| download | rescached-1c3e6525b18f7c88d0155f856518a89415d0d95e.tar.xz | |
cmd/resolver: implement command to add new record to hosts file
The command has the following signature,
resolver hosts.d rr add <name> <domain> <value>
Given the hosts file name "hosts" and domain "my.hosts" with value
"127.0.0.1", it will add new line "127.0.0.1 my.hosts" to the "hosts"
file.
If the domain name already exists, the new record will be appended
instead of replaced.
Diffstat (limited to 'cmd/resolver/resolver.go')
| -rw-r--r-- | cmd/resolver/resolver.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/cmd/resolver/resolver.go b/cmd/resolver/resolver.go index 1c55669..62ce953 100644 --- a/cmd/resolver/resolver.go +++ b/cmd/resolver/resolver.go @@ -319,11 +319,54 @@ func (rsol *resolver) doCmdHostsd(args []string) { fmt.Println(string(jsonb)) + case subCmdRR: + rsol.doCmdHostsdRecord(args[1:]) + default: log.Fatalf("resolver: %s: unknown sub command: %s", rsol.cmd, subCmd) } } +func (rsol *resolver) doCmdHostsdRecord(args []string) { + if len(args) == 0 { + log.Fatalf("resolver: %s %s %s: missing arguments", rsol.cmd, cmdHostsd, subCmdRR) + } + + var ( + subCmd = strings.ToLower(args[0]) + + resc *rescached.Client + record *dns.ResourceRecord + jsonb []byte + err error + ) + + switch subCmd { + case subCmdAdd: + args = args[1:] + if len(args) < 3 { + log.Fatalf("resolver: missing arguments") + } + + resc = rsol.newRescachedClient() + record, err = resc.HostsdRecordAdd(args[0], args[1], args[2]) + if err != nil { + log.Fatalf("resolver: %s", err) + } + + jsonb, err = json.MarshalIndent(record, "", " ") + if err != nil { + log.Fatalf("resolver: %s", err) + } + + fmt.Println(string(jsonb)) + + case subCmdDelete: + default: + log.Fatalf("resolver: %s %s: unknown command %s", rsol.cmd, subCmdRR, subCmd) + } +} + func (rsol *resolver) doCmdQuery(args []string) { var ( maxAttempts = defAttempts |
