Recheck the server mux match logic
And a test to make sure it all works. The root zone can still be configured as a last resort (wildcard) match.
This commit is contained in:
parent
0363410587
commit
5537ac771d
|
@ -69,7 +69,7 @@ var DefaultServeMux = NewServeMux()
|
||||||
var Authors = []string{"Miek Gieben", "Ask Bjørn Hansen", "Dave Cheney", "Dusty Wilson", "Peter van Dijk"}
|
var Authors = []string{"Miek Gieben", "Ask Bjørn Hansen", "Dave Cheney", "Dusty Wilson", "Peter van Dijk"}
|
||||||
|
|
||||||
// Version holds the current version.
|
// Version holds the current version.
|
||||||
var Version = "v1.1"
|
var Version = "v1.2"
|
||||||
|
|
||||||
// The HandlerFunc type is an adapter to allow the use of
|
// The HandlerFunc type is an adapter to allow the use of
|
||||||
// ordinary functions as DNS handlers. If f is a function
|
// ordinary functions as DNS handlers. If f is a function
|
||||||
|
@ -173,7 +173,6 @@ func (mux *ServeMux) match(q string, t uint16) Handler {
|
||||||
lastbyte byte
|
lastbyte byte
|
||||||
seendot bool = true
|
seendot bool = true
|
||||||
)
|
)
|
||||||
// TODO(mg): check for .
|
|
||||||
for i := 0; i < len(q); i++ {
|
for i := 0; i < len(q); i++ {
|
||||||
if seendot {
|
if seendot {
|
||||||
if h, ok := mux.z[q[lastdot+1:]]; ok {
|
if h, ok := mux.z[q[lastdot+1:]]; ok {
|
||||||
|
@ -194,8 +193,7 @@ func (mux *ServeMux) match(q string, t uint16) Handler {
|
||||||
}
|
}
|
||||||
lastbyte = q[i]
|
lastbyte = q[i]
|
||||||
}
|
}
|
||||||
// Check for the root zone too, this only delays NXDOMAIN, because if we serve . it
|
// Wildcard match, if we have found nothing try the root zone as a last resort.
|
||||||
// will be catched above.
|
|
||||||
if h, ok := mux.z["."]; ok {
|
if h, ok := mux.z["."]; ok {
|
||||||
return h
|
return h
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,3 +96,13 @@ func TestDotAsCatchAllWildcard(t *testing.T) {
|
||||||
t.Error("boe. match failed")
|
t.Error("boe. match failed")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRootServer(t *testing.T) {
|
||||||
|
mux := NewServeMux()
|
||||||
|
mux.Handle(".", HandlerFunc(HelloServer))
|
||||||
|
|
||||||
|
handler := mux.match(".", TypeNS)
|
||||||
|
if handler == nil {
|
||||||
|
t.Error("root match failed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue