diff --git a/pkg/auth/authorizer/abac/abac.go b/pkg/auth/authorizer/abac/abac.go index 9b367cf57f..c3bfedcc4d 100644 --- a/pkg/auth/authorizer/abac/abac.go +++ b/pkg/auth/authorizer/abac/abac.go @@ -29,9 +29,10 @@ import ( "github.com/golang/glog" api "k8s.io/kubernetes/pkg/apis/abac" + _ "k8s.io/kubernetes/pkg/apis/abac/latest" "k8s.io/kubernetes/pkg/apis/abac/v0" - _ "k8s.io/kubernetes/pkg/apis/abac/v1beta1" "k8s.io/kubernetes/pkg/auth/authorizer" + "k8s.io/kubernetes/pkg/runtime" ) type policyLoadError struct { @@ -63,6 +64,8 @@ func NewFromFile(path string) (policyList, error) { scanner := bufio.NewScanner(file) pl := make(policyList, 0) + decoder := api.Codecs.UniversalDecoder() + i := 0 unversionedLines := 0 for scanner.Scan() { @@ -76,34 +79,29 @@ func NewFromFile(path string) (policyList, error) { continue } - dataKind, err := api.Scheme.DataKind(b) + decodedObj, _, err := decoder.Decode(b, nil, nil) if err != nil { - return nil, policyLoadError{path, i, b, err} - } - - if dataKind.IsEmpty() { + if !(runtime.IsMissingVersion(err) || runtime.IsMissingKind(err) || runtime.IsNotRegisteredError(err)) { + return nil, policyLoadError{path, i, b, err} + } unversionedLines++ // Migrate unversioned policy object oldPolicy := &v0.Policy{} - if err := latest.Codec.DecodeInto(b, oldPolicy); err != nil { + if err := runtime.DecodeInto(decoder, b, oldPolicy); err != nil { return nil, policyLoadError{path, i, b, err} } if err := api.Scheme.Convert(oldPolicy, p); err != nil { return nil, policyLoadError{path, i, b, err} } - } else { - decodedObj, err := latest.Codec.Decode(b) - if err != nil { - return nil, policyLoadError{path, i, b, err} - } - decodedPolicy, ok := decodedObj.(*api.Policy) - if !ok { - return nil, policyLoadError{path, i, b, fmt.Errorf("unrecognized object: %#v", decodedObj)} - } - p = decodedPolicy + pl = append(pl, p) + continue } - pl = append(pl, p) + decodedPolicy, ok := decodedObj.(*api.Policy) + if !ok { + return nil, policyLoadError{path, i, b, fmt.Errorf("unrecognized object: %#v", decodedObj)} + } + pl = append(pl, decodedPolicy) } if unversionedLines > 0 { diff --git a/pkg/auth/authorizer/abac/abac_test.go b/pkg/auth/authorizer/abac/abac_test.go index 5fa1154fd3..8b4e3b75ba 100644 --- a/pkg/auth/authorizer/abac/abac_test.go +++ b/pkg/auth/authorizer/abac/abac_test.go @@ -21,7 +21,7 @@ import ( "os" "testing" - "k8s.io/kubernetes/pkg/apis/abac" + api "k8s.io/kubernetes/pkg/apis/abac" "k8s.io/kubernetes/pkg/apis/abac/v0" "k8s.io/kubernetes/pkg/apis/abac/v1beta1" "k8s.io/kubernetes/pkg/auth/authorizer"