summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/resolver/options.go18
-rw-r--r--cmd/resolverbench/main.go6
-rw-r--r--environment.go2
-rw-r--r--go.mod2
-rw-r--r--go.sum4
-rw-r--r--httpd.go92
-rw-r--r--rescached.go4
7 files changed, 66 insertions, 62 deletions
diff --git a/cmd/resolver/options.go b/cmd/resolver/options.go
index 56365a4..250c6da 100644
--- a/cmd/resolver/options.go
+++ b/cmd/resolver/options.go
@@ -16,9 +16,9 @@ import (
// List of error messages.
var (
- errQueryName = errors.New("invalid or empty query name")
- errQueryType = errors.New("unknown query type")
- errQueryClass = errors.New("unknown query class")
+ errQueryName = errors.New("invalid or empty query name")
+ errRecordType = errors.New("unknown query type")
+ errRecordClass = errors.New("unknown query class")
)
// List of command line usages.
@@ -46,8 +46,8 @@ type options struct {
nameserver string
insecure bool
qname string
- qtype uint16
- qclass uint16
+ qtype dns.RecordType
+ qclass dns.RecordClass
}
func help() {
@@ -140,9 +140,9 @@ func (opts *options) parseQType() error {
opts.sqtype = strings.ToUpper(opts.sqtype)
- opts.qtype, ok = dns.QueryTypes[opts.sqtype]
+ opts.qtype, ok = dns.RecordTypes[opts.sqtype]
if !ok {
- return errQueryType
+ return errRecordType
}
return nil
@@ -153,9 +153,9 @@ func (opts *options) parseQClass() error {
opts.sqclass = strings.ToUpper(opts.sqclass)
- opts.qclass, ok = dns.QueryClasses[opts.sqclass]
+ opts.qclass, ok = dns.RecordClasses[opts.sqclass]
if !ok {
- return errQueryClass
+ return errRecordClass
}
return nil
diff --git a/cmd/resolverbench/main.go b/cmd/resolverbench/main.go
index e042dec..f7e56a6 100644
--- a/cmd/resolverbench/main.go
+++ b/cmd/resolverbench/main.go
@@ -36,8 +36,12 @@ func main() {
fmt.Printf("= Benchmarking with %d messages\n", len(hostsFile.Records))
timeStart := time.Now()
+ q := dns.MessageQuestion{}
for _, rr := range hostsFile.Records {
- res, err := cl.Lookup(true, rr.Type, rr.Class, rr.Name)
+ q.Name = rr.Name
+ q.Type = rr.Type
+ q.Class = rr.Class
+ res, err := cl.Lookup(q, true)
if err != nil {
nfail++
log.Println("! Send error: ", err)
diff --git a/environment.go b/environment.go
index bd316c6..fdf4bd4 100644
--- a/environment.go
+++ b/environment.go
@@ -61,7 +61,7 @@ type environment struct {
HostsBlocksRaw []string `ini:"rescached::hosts_block" json:"-"`
HostsBlocks []*hostsBlock
HostsFiles map[string]*dns.HostsFile
- ZoneFiles map[string]*dns.ZoneFile
+ Zones map[string]*dns.Zone
}
func loadEnvironment(file string) (env *environment) {
diff --git a/go.mod b/go.mod
index 113a377..07522a3 100644
--- a/go.mod
+++ b/go.mod
@@ -2,6 +2,6 @@ module github.com/shuLhan/rescached-go/v4
go 1.16
-require github.com/shuLhan/share v0.31.1-0.20211113074110-0520e7df9127
+require github.com/shuLhan/share v0.32.0
//replace github.com/shuLhan/share => ../share
diff --git a/go.sum b/go.sum
index 4492535..28a46e0 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,5 @@
-github.com/shuLhan/share v0.31.1-0.20211113074110-0520e7df9127 h1:7w78woxSI+vpViEq37rOk8cqmHL/FAsmxGcG3G9F/Hc=
-github.com/shuLhan/share v0.31.1-0.20211113074110-0520e7df9127/go.mod h1:1E7VQSKC7cbCmAi6izvm2S8jH5Z98a9SSS2IlvmNs/Y=
+github.com/shuLhan/share v0.32.0 h1:PBFsTtLHAPT3UJr8q/edc3hrXi/HOOPxKEf+0SLCARs=
+github.com/shuLhan/share v0.32.0/go.mod h1:1E7VQSKC7cbCmAi6izvm2S8jH5Z98a9SSS2IlvmNs/Y=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211007125505-59d4e928ea9d h1:QWMn1lFvU/nZ58ssWqiFJMd3DKIII8NYc4sn708XgKs=
diff --git a/httpd.go b/httpd.go
index 8e3a9dd..5a392e6 100644
--- a/httpd.go
+++ b/httpd.go
@@ -26,20 +26,20 @@ import (
var memFS *memfs.MemFS
const (
- defHTTPDRootDir = "_www"
- paramNameDomain = "domain"
- paramNameName = "name"
- paramNameQuery = "query"
- paramNameType = "type"
- paramNameValue = "value"
- apiCaches = "/api/caches"
- apiCachesSearch = "/api/caches/search"
- apiEnvironment = "/api/environment"
- apiHostsBlock = "/api/hosts_block"
- apiHostsDir = "/api/hosts.d/:name"
- apiHostsDirRR = "/api/hosts.d/:name/rr"
- apiZoneFile = "/api/zone.d/:name"
- apiZoneFileRRType = "/api/zone.d/:name/rr/:type"
+ defHTTPDRootDir = "_www"
+ paramNameDomain = "domain"
+ paramNameName = "name"
+ paramNameQuery = "query"
+ paramNameType = "type"
+ paramNameValue = "value"
+ apiCaches = "/api/caches"
+ apiCachesSearch = "/api/caches/search"
+ apiEnvironment = "/api/environment"
+ apiHostsBlock = "/api/hosts_block"
+ apiHostsDir = "/api/hosts.d/:name"
+ apiHostsDirRR = "/api/hosts.d/:name/rr"
+ apiZone = "/api/zone.d/:name"
+ apiZoneRRType = "/api/zone.d/:name/rr/:type"
)
type response struct {
@@ -219,40 +219,40 @@ func (srv *Server) httpdRegisterEndpoints() (err error) {
err = srv.httpd.RegisterEndpoint(&libhttp.Endpoint{
Method: libhttp.RequestMethodPut,
- Path: apiZoneFile,
+ Path: apiZone,
RequestType: libhttp.RequestTypeNone,
ResponseType: libhttp.ResponseTypeJSON,
- Call: srv.apiZoneFileCreate,
+ Call: srv.apiZoneCreate,
})
if err != nil {
return err
}
err = srv.httpd.RegisterEndpoint(&libhttp.Endpoint{
Method: libhttp.RequestMethodDelete,
- Path: apiZoneFile,
+ Path: apiZone,
RequestType: libhttp.RequestTypeNone,
ResponseType: libhttp.ResponseTypeJSON,
- Call: srv.apiZoneFileDelete,
+ Call: srv.apiZoneDelete,
})
if err != nil {
return err
}
err = srv.httpd.RegisterEndpoint(&libhttp.Endpoint{
Method: libhttp.RequestMethodPost,
- Path: apiZoneFileRRType,
+ Path: apiZoneRRType,
RequestType: libhttp.RequestTypeJSON,
ResponseType: libhttp.ResponseTypeJSON,
- Call: srv.apiZoneFileRRCreate,
+ Call: srv.apiZoneRRCreate,
})
if err != nil {
return err
}
err = srv.httpd.RegisterEndpoint(&libhttp.Endpoint{
Method: libhttp.RequestMethodDelete,
- Path: apiZoneFileRRType,
+ Path: apiZoneRRType,
RequestType: libhttp.RequestTypeJSON,
ResponseType: libhttp.ResponseTypeJSON,
- Call: srv.apiZoneFileRRDelete,
+ Call: srv.apiZoneRRDelete,
})
if err != nil {
return err
@@ -610,7 +610,7 @@ func (srv *Server) apiHostsFileRRCreate(epr *libhttp.EndpointRequest) (resbody [
}
rr := &dns.ResourceRecord{
- Class: dns.QueryClassIN,
+ Class: dns.RecordClassIN,
}
rr.Name = epr.HttpRequest.Form.Get(paramNameDomain)
@@ -623,7 +623,7 @@ func (srv *Server) apiHostsFileRRCreate(epr *libhttp.EndpointRequest) (resbody [
res.Message = "empty 'value' query parameter"
return nil, res
}
- rr.Type = dns.GetQueryTypeFromAddress([]byte(v))
+ rr.Type = dns.RecordTypeFromAddress([]byte(v))
if rr.Type == 0 {
res.Message = "invalid address value: " + v
return nil, res
@@ -693,7 +693,7 @@ func (srv *Server) apiHostsFileRRDelete(epr *libhttp.EndpointRequest) (resbody [
return json.Marshal(res)
}
-func (srv *Server) apiZoneFileCreate(epr *libhttp.EndpointRequest) (resbody []byte, err error) {
+func (srv *Server) apiZoneCreate(epr *libhttp.EndpointRequest) (resbody []byte, err error) {
res := &response{}
res.Code = http.StatusBadRequest
@@ -708,7 +708,7 @@ func (srv *Server) apiZoneFileCreate(epr *libhttp.EndpointRequest) (resbody []by
return nil, res
}
- mf, ok := srv.env.ZoneFiles[zoneName]
+ mf, ok := srv.env.Zones[zoneName]
if ok {
res.Code = http.StatusOK
res.Data = mf
@@ -716,7 +716,7 @@ func (srv *Server) apiZoneFileCreate(epr *libhttp.EndpointRequest) (resbody []by
}
zoneFile := filepath.Join(dirZone, zoneName)
- mf = dns.NewZoneFile(zoneFile, zoneName)
+ mf = dns.NewZone(zoneFile, zoneName)
err = mf.Save()
if err != nil {
res.Code = http.StatusInternalServerError
@@ -724,7 +724,7 @@ func (srv *Server) apiZoneFileCreate(epr *libhttp.EndpointRequest) (resbody []by
return nil, res
}
- srv.env.ZoneFiles[zoneName] = mf
+ srv.env.Zones[zoneName] = mf
res.Code = http.StatusOK
res.Data = mf
@@ -732,7 +732,7 @@ func (srv *Server) apiZoneFileCreate(epr *libhttp.EndpointRequest) (resbody []by
return json.Marshal(res)
}
-func (srv *Server) apiZoneFileDelete(epr *libhttp.EndpointRequest) (resbody []byte, err error) {
+func (srv *Server) apiZoneDelete(epr *libhttp.EndpointRequest) (resbody []byte, err error) {
res := &response{}
res.Code = http.StatusBadRequest
@@ -742,7 +742,7 @@ func (srv *Server) apiZoneFileDelete(epr *libhttp.EndpointRequest) (resbody []by
return nil, res
}
- mf, ok := srv.env.ZoneFiles[zoneName]
+ mf, ok := srv.env.Zones[zoneName]
if !ok {
res.Message = "unknown zone file name " + zoneName
return nil, res
@@ -754,7 +754,7 @@ func (srv *Server) apiZoneFileDelete(epr *libhttp.EndpointRequest) (resbody []by
}
srv.dns.RemoveLocalCachesByNames(names)
- delete(srv.env.ZoneFiles, zoneName)
+ delete(srv.env.Zones, zoneName)
err = mf.Delete()
if err != nil {
@@ -770,9 +770,9 @@ func (srv *Server) apiZoneFileDelete(epr *libhttp.EndpointRequest) (resbody []by
}
//
-// apiZoneFileRRCreate create new RR for the zone file.
+// apiZoneRRCreate create new RR for the zone file.
//
-func (srv *Server) apiZoneFileRRCreate(epr *libhttp.EndpointRequest) (resbody []byte, err error) {
+func (srv *Server) apiZoneRRCreate(epr *libhttp.EndpointRequest) (resbody []byte, err error) {
res := &response{}
res.Code = http.StatusBadRequest
@@ -782,7 +782,7 @@ func (srv *Server) apiZoneFileRRCreate(epr *libhttp.EndpointRequest) (resbody []
return nil, res
}
- zoneFile := srv.env.ZoneFiles[zoneFileName]
+ zoneFile := srv.env.Zones[zoneFileName]
if zoneFile == nil {
res.Message = "unknown zone file name " + zoneFileName
return nil, res
@@ -797,10 +797,10 @@ func (srv *Server) apiZoneFileRRCreate(epr *libhttp.EndpointRequest) (resbody []
}
rr := &dns.ResourceRecord{}
- switch uint16(rrType) {
- case dns.QueryTypeSOA:
+ switch dns.RecordType(rrType) {
+ case dns.RecordTypeSOA:
rr.Value = &dns.RDataSOA{}
- case dns.QueryTypeMX:
+ case dns.RecordTypeMX:
rr.Value = &dns.RDataMX{}
}
err = json.Unmarshal(epr.RequestBody, rr)
@@ -811,7 +811,7 @@ func (srv *Server) apiZoneFileRRCreate(epr *libhttp.EndpointRequest) (resbody []
rr.Name = strings.TrimRight(rr.Name, ".")
- if rr.Type == dns.QueryTypePTR {
+ if rr.Type == dns.RecordTypePTR {
if len(rr.Name) == 0 {
res.Message = "empty PTR name"
return nil, res
@@ -847,8 +847,8 @@ func (srv *Server) apiZoneFileRRCreate(epr *libhttp.EndpointRequest) (resbody []
}
res.Code = http.StatusOK
- res.Message = fmt.Sprintf("%s record has been saved", dns.QueryTypeNames[rr.Type])
- if rr.Type == dns.QueryTypeSOA {
+ res.Message = fmt.Sprintf("%s record has been saved", dns.RecordTypeNames[rr.Type])
+ if rr.Type == dns.RecordTypeSOA {
res.Data = rr
} else {
res.Data = zoneFile.Records
@@ -858,9 +858,9 @@ func (srv *Server) apiZoneFileRRCreate(epr *libhttp.EndpointRequest) (resbody []
}
//
-// apiZoneFileRRDelete delete RR from the zone file.
+// apiZoneRRDelete delete RR from the zone file.
//
-func (srv *Server) apiZoneFileRRDelete(epr *libhttp.EndpointRequest) (resbody []byte, err error) {
+func (srv *Server) apiZoneRRDelete(epr *libhttp.EndpointRequest) (resbody []byte, err error) {
res := &response{}
res.Code = http.StatusBadRequest
@@ -870,7 +870,7 @@ func (srv *Server) apiZoneFileRRDelete(epr *libhttp.EndpointRequest) (resbody []
return nil, res
}
- mf := srv.env.ZoneFiles[zoneFileName]
+ mf := srv.env.Zones[zoneFileName]
if mf == nil {
res.Message = "unknown zone file name " + zoneFileName
return nil, res
@@ -885,10 +885,10 @@ func (srv *Server) apiZoneFileRRDelete(epr *libhttp.EndpointRequest) (resbody []
}
rr := dns.ResourceRecord{}
- switch uint16(rrType) {
- case dns.QueryTypeSOA:
+ switch dns.RecordType(rrType) {
+ case dns.RecordTypeSOA:
rr.Value = &dns.RDataSOA{}
- case dns.QueryTypeMX:
+ case dns.RecordTypeMX:
rr.Value = &dns.RDataMX{}
}
err = json.Unmarshal(epr.RequestBody, &rr)
diff --git a/rescached.go b/rescached.go
index c990b77..af00a1b 100644
--- a/rescached.go
+++ b/rescached.go
@@ -110,7 +110,7 @@ func (srv *Server) Start() (err error) {
}
}
- srv.env.ZoneFiles, err = dns.LoadZoneDir(dirZone)
+ srv.env.Zones, err = dns.LoadZoneDir(dirZone)
if err != nil {
if !errors.Is(err, os.ErrNotExist) {
return err
@@ -121,7 +121,7 @@ func (srv *Server) Start() (err error) {
}
err = nil
}
- for _, zoneFile := range srv.env.ZoneFiles {
+ for _, zoneFile := range srv.env.Zones {
srv.dns.PopulateCaches(zoneFile.Messages(), zoneFile.Path)
}