diff options
author | 2017-01-23 15:11:32 -0500 | |
---|---|---|
committer | 2017-01-23 20:11:32 +0000 | |
commit | c62bd639ffaed28315ac4ef0a9d3c8624d4dbe05 (patch) | |
tree | 2b445addfee1092ed8b9cda031c14d3f710d5083 /middleware/kubernetes/kubernetes.go | |
parent | 299360fe016590291fa1c0a6ea0db8ec800a2f90 (diff) | |
download | coredns-c62bd639ffaed28315ac4ef0a9d3c8624d4dbe05.tar.gz coredns-c62bd639ffaed28315ac4ef0a9d3c8624d4dbe05.tar.zst coredns-c62bd639ffaed28315ac4ef0a9d3c8624d4dbe05.zip |
correct k8s name parsing response codes (#493)
Diffstat (limited to 'middleware/kubernetes/kubernetes.go')
-rw-r--r-- | middleware/kubernetes/kubernetes.go | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/middleware/kubernetes/kubernetes.go b/middleware/kubernetes/kubernetes.go index 0d8c68976..af2de43f0 100644 --- a/middleware/kubernetes/kubernetes.go +++ b/middleware/kubernetes/kubernetes.go @@ -225,7 +225,10 @@ func (k *Kubernetes) parseRequest(lowerCasedName, qtype string) (r recordRequest } offset := 0 - if len(segs) == 5 { + if qtype == "SRV" { + if len(segs) != 5 { + return r, errInvalidRequest + } // This is a SRV style request, get first two elements as port and // protocol, stripping leading underscores if present. if segs[0][0] == '_' { @@ -233,38 +236,29 @@ func (k *Kubernetes) parseRequest(lowerCasedName, qtype string) (r recordRequest } else { r.port = segs[0] if !symbolContainsWildcard(r.port) { - return r, errors.New("srv port must start with an underscore or be a wildcard") + return r, errInvalidRequest } } if segs[1][0] == '_' { r.protocol = segs[1][1:] if r.protocol != "tcp" && r.protocol != "udp" { - return r, errors.New("invalid srv protocol: " + r.protocol) + return r, errInvalidRequest } } else { r.protocol = segs[1] if !symbolContainsWildcard(r.protocol) { - return r, errors.New("srv protocol must start with an underscore or be a wildcard") + return r, errInvalidRequest } } - offset = 2 - } else if len(segs) == 4 { - // This is an endpoint A style request. Get first element as endpoint. - r.endpoint = segs[0] - offset = 1 - } - - // SRV requests require a port and protocol - if qtype == "SRV" { if r.port == "" || r.protocol == "" { - return r, errors.New("invalid srv request") + return r, errInvalidRequest } + offset = 2 } - // A requests cannot have port/protocol - if qtype == "A" { - if r.port != "" && r.protocol != "" { - return r, errors.New("invalid a request") - } + if qtype == "A" && len(segs) == 4 { + // This is an endpoint A record request. Get first element as endpoint. + r.endpoint = segs[0] + offset = 1 } if len(segs) == (offset + 3) { @@ -280,7 +274,7 @@ func (k *Kubernetes) parseRequest(lowerCasedName, qtype string) (r recordRequest return r, nil } - return r, errors.New("invalid request") + return r, errInvalidRequest } |