From 4070dc72fd494e81fabaaeee16f3804e575f3c62 Mon Sep 17 00:00:00 2001 From: Shulhan Date: Sat, 4 Dec 2021 00:44:07 +0700 Subject: all: sync with latest share module This changes update the code based on refactoring on lib/dns package on share module. --- cmd/resolver/options.go | 18 +++++----- cmd/resolverbench/main.go | 6 +++- environment.go | 2 +- go.mod | 2 +- go.sum | 4 +-- httpd.go | 92 +++++++++++++++++++++++------------------------ rescached.go | 4 +-- 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) } -- cgit v1.3