aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_doc/resolver.adoc30
-rw-r--r--_sys/usr/share/man/man1/resolver.1.gzbin2811 -> 2906 bytes
-rw-r--r--client.go31
-rw-r--r--cmd/resolver/main.go15
-rw-r--r--cmd/resolver/resolver.go18
-rw-r--r--go.mod2
-rw-r--r--go.sum4
-rw-r--r--httpd.go6
8 files changed, 101 insertions, 5 deletions
diff --git a/_doc/resolver.adoc b/_doc/resolver.adoc
index f0d40de..9951ad5 100644
--- a/_doc/resolver.adoc
+++ b/_doc/resolver.adoc
@@ -181,6 +181,13 @@ instead of replaced.
--
+hosts.d rr delete <name> <domain>::
++
+--
+Delete record from hosts file "name" by domain name.
+--
+
+
== EXIT STATUS
Upon exit and success +resolver+ will return 0, or 1 otherwise.
@@ -188,6 +195,8 @@ Upon exit and success +resolver+ will return 0, or 1 otherwise.
== EXAMPLES
+=== QUERY EXAMPLES
+
Query the IPv4 address for kilabit.info,
$ resolver query kilabit.info
@@ -215,6 +224,9 @@ Inspect the rescached's caches on server at http://127.0.0.1:5380,
$ resolver -server=http://127.0.0.1:5380 caches
+
+=== MANAGING CACHES
+
Search caches that contains "bit" on the domain name,
$ resolver caches search bit
@@ -227,6 +239,9 @@ Remove all caches in the server,
$ resolver caches remove all
+
+=== MANAGING ENVIRONMENT
+
Fetch and print current server environment,
$ resolver env
@@ -239,6 +254,9 @@ Update the server environment by reading JSON from standard input,
$ cat /tmp/env.json | resolver env update -
+
+=== MANAGING HOSTS.D
+
Create new hosts file named "myhosts" inside the hosts.d directory,
$ resolver hosts.d create myhosts
@@ -269,6 +287,8 @@ Get the content of hosts file named "myhosts" inside the hosts.d directory,
}
]
+=== MANAGING RECORD ON HOSTS.D
+
Add new record "127.0.0.1 my.hosts" to hosts file named "hosts",
$ resolver hosts.d rr add hosts my.hosts 127.0.0.1
@@ -280,6 +300,16 @@ Add new record "127.0.0.1 my.hosts" to hosts file named "hosts",
"TTL": 604800
}
+Delete record "my.hosts" from hosts file "hosts",
+
+ $ resolver hosts.d rr delete hosts my.hosts
+ {
+ "Value": "127.0.0.1",
+ "Name": "my.hosts",
+ "Type": 1,
+ "Class": 1,
+ "TTL": 604800
+ }
== AUTHOR
diff --git a/_sys/usr/share/man/man1/resolver.1.gz b/_sys/usr/share/man/man1/resolver.1.gz
index 61dc96c..5a6d304 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 cc4399e..49f6a12 100644
--- a/client.go
+++ b/client.go
@@ -380,3 +380,34 @@ func (cl *Client) HostsdRecordAdd(hostsName, domain, value string) (record *dns.
return record, nil
}
+
+// HostsdRecordDelete delete a record from hosts file by domain name.
+func (cl *Client) HostsdRecordDelete(hostsName, domain string) (record *dns.ResourceRecord, err error) {
+ var (
+ logp = "HostsdRecordDelete"
+ res = libhttp.EndpointResponse{
+ Data: &record,
+ }
+ params = url.Values{}
+
+ resb []byte
+ )
+
+ params.Set(paramNameName, hostsName)
+ params.Set(paramNameDomain, domain)
+
+ _, resb, err = cl.Delete(apiHostsdRR, nil, params)
+ if err != nil {
+ return nil, fmt.Errorf("%s: %w", logp, err)
+ }
+
+ err = json.Unmarshal(resb, &res)
+ if err != nil {
+ return nil, fmt.Errorf("%s: %w", logp, err)
+ }
+ if res.Code != http.StatusOK {
+ return nil, fmt.Errorf("%s: %d %s", logp, res.Code, res.Message)
+ }
+
+ return record, nil
+}
diff --git a/cmd/resolver/main.go b/cmd/resolver/main.go
index 2c40b90..fac894c 100644
--- a/cmd/resolver/main.go
+++ b/cmd/resolver/main.go
@@ -206,6 +206,10 @@ hosts.d rr add <name> <domain> <value>
If the domain name already exists, the new record will be appended
instead of replaced.
+hosts.d rr delete <name> <domain>
+
+ Delete record from hosts file "name" by domain name.
+
== Examples
@@ -299,5 +303,16 @@ Add new record "127.0.0.1 my.hosts" to hosts file named "hosts",
"Type": 1,
"Class": 1,
"TTL": 604800
+ }
+
+Delete record "my.hosts" from hosts file "hosts",
+
+ $ resolver hosts.d rr delete hosts my.hosts
+ {
+ "Value": "127.0.0.1",
+ "Name": "my.hosts",
+ "Type": 1,
+ "Class": 1,
+ "TTL": 604800
}`)
}
diff --git a/cmd/resolver/resolver.go b/cmd/resolver/resolver.go
index 62ce953..792f8d9 100644
--- a/cmd/resolver/resolver.go
+++ b/cmd/resolver/resolver.go
@@ -362,6 +362,24 @@ func (rsol *resolver) doCmdHostsdRecord(args []string) {
fmt.Println(string(jsonb))
case subCmdDelete:
+ args = args[1:]
+ if len(args) <= 1 {
+ log.Fatalf("resolver: %s %s: missing arguments", rsol.cmd, subCmd)
+ }
+
+ resc = rsol.newRescachedClient()
+ record, err = resc.HostsdRecordDelete(args[0], args[1])
+ 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))
+
default:
log.Fatalf("resolver: %s %s: unknown command %s", rsol.cmd, subCmdRR, subCmd)
}
diff --git a/go.mod b/go.mod
index 054bdf7..b9bdfd8 100644
--- a/go.mod
+++ b/go.mod
@@ -5,6 +5,6 @@ module github.com/shuLhan/rescached-go/v4
go 1.16
-require github.com/shuLhan/share v0.36.1-0.20220418175009-e5c85cdbfb18
+require github.com/shuLhan/share v0.37.1-0.20220512163842-15f02872a61e
//replace github.com/shuLhan/share => ../share
diff --git a/go.sum b/go.sum
index c6d95c1..09149c9 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,5 @@
-github.com/shuLhan/share v0.36.1-0.20220418175009-e5c85cdbfb18 h1:kC1DQeauBOs830pBOx0oD7u4WWdV74dpy1/QR3kPNqE=
-github.com/shuLhan/share v0.36.1-0.20220418175009-e5c85cdbfb18/go.mod h1:laKGR1DNboj8+INRIC9VFYRiVEu/IIjrLurUmTHXkw0=
+github.com/shuLhan/share v0.37.1-0.20220512163842-15f02872a61e h1:1EyRREadyiHwpNsz8z0YUFQ5ifGbiXG9nBg1JitnL7M=
+github.com/shuLhan/share v0.37.1-0.20220512163842-15f02872a61e/go.mod h1:laKGR1DNboj8+INRIC9VFYRiVEu/IIjrLurUmTHXkw0=
golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=
diff --git a/httpd.go b/httpd.go
index e336307..4ae5a60 100644
--- a/httpd.go
+++ b/httpd.go
@@ -915,6 +915,7 @@ func (srv *Server) apiHostsdRecordDelete(epr *libhttp.EndpointRequest) (resbody
domainName = epr.HttpRequest.Form.Get(paramNameDomain)
hfile *dns.HostsFile
+ rr *dns.ResourceRecord
found bool
)
@@ -935,8 +936,8 @@ func (srv *Server) apiHostsdRecordDelete(epr *libhttp.EndpointRequest) (resbody
return nil, &res
}
- found = hfile.RemoveRecord(domainName)
- if !found {
+ rr = hfile.RemoveRecord(domainName)
+ if rr == nil {
res.Message = "unknown domain name: " + domainName
return nil, &res
}
@@ -951,6 +952,7 @@ func (srv *Server) apiHostsdRecordDelete(epr *libhttp.EndpointRequest) (resbody
res.Code = http.StatusOK
res.Message = "domain name '" + domainName + "' has been removed from hosts file"
+ res.Data = rr
return json.Marshal(&res)
}