Browse Source

check domain name

Darien Raymond 6 years ago
parent
commit
2aa0c08709
2 changed files with 11 additions and 3 deletions
  1. 8 0
      app/dns/server.go
  2. 3 3
      proxy/dns/dns.go

+ 8 - 0
app/dns/server.go

@@ -196,6 +196,14 @@ func toNetIP(ips []net.Address) []net.IP {
 }
 }
 
 
 func (s *Server) lookupIPInternal(domain string, option IPOption) ([]net.IP, error) {
 func (s *Server) lookupIPInternal(domain string, option IPOption) ([]net.IP, error) {
+	if len(domain) == 0 {
+		return nil, newError("empty domain name")
+	}
+
+	if domain[len(domain)-1] == '.' {
+		domain = domain[:len(domain)-1]
+	}
+
 	ips := s.lookupStatic(domain, option, 0)
 	ips := s.lookupStatic(domain, option, 0)
 	if ips != nil && ips[0].Family().IsIP() {
 	if ips != nil && ips[0].Family().IsIP() {
 		return toNetIP(ips), nil
 		return toNetIP(ips), nil

+ 3 - 3
proxy/dns/dns.go

@@ -216,18 +216,18 @@ func (h *Handler) handleIPQuery(id uint16, qType dnsmessage.Type, domain string,
 		RCode:    dnsmessage.RCodeSuccess,
 		RCode:    dnsmessage.RCodeSuccess,
 		Response: true,
 		Response: true,
 	})
 	})
-	builder.StartAnswers()
+	common.Must(builder.StartAnswers())
 
 
 	rHeader := dnsmessage.ResourceHeader{Name: dnsmessage.MustNewName(domain), Class: dnsmessage.ClassINET, TTL: 600}
 	rHeader := dnsmessage.ResourceHeader{Name: dnsmessage.MustNewName(domain), Class: dnsmessage.ClassINET, TTL: 600}
 	for _, ip := range ips {
 	for _, ip := range ips {
 		if len(ip) == net.IPv4len {
 		if len(ip) == net.IPv4len {
 			var r dnsmessage.AResource
 			var r dnsmessage.AResource
 			copy(r.A[:], ip)
 			copy(r.A[:], ip)
-			builder.AResource(rHeader, r)
+			common.Must(builder.AResource(rHeader, r))
 		} else {
 		} else {
 			var r dnsmessage.AAAAResource
 			var r dnsmessage.AAAAResource
 			copy(r.AAAA[:], ip)
 			copy(r.AAAA[:], ip)
-			builder.AAAAResource(rHeader, r)
+			common.Must(builder.AAAAResource(rHeader, r))
 		}
 		}
 	}
 	}
 	msgBytes, err := builder.Finish()
 	msgBytes, err := builder.Finish()