aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes/kubernetes.go
diff options
context:
space:
mode:
authorGravatar Chris O'Haver <cohaver@infoblox.com> 2017-01-23 15:11:32 -0500
committerGravatar Miek Gieben <miek@miek.nl> 2017-01-23 20:11:32 +0000
commitc62bd639ffaed28315ac4ef0a9d3c8624d4dbe05 (patch)
tree2b445addfee1092ed8b9cda031c14d3f710d5083 /middleware/kubernetes/kubernetes.go
parent299360fe016590291fa1c0a6ea0db8ec800a2f90 (diff)
downloadcoredns-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.go34
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
}