From 95755841dbb0fb8382b877a19ad37168435db83c Mon Sep 17 00:00:00 2001 From: yue9944882 <291271447@qq.com> Date: Tue, 29 Jan 2019 00:38:57 +0800 Subject: [PATCH] fixes compatibility w/ nil authorizer in apiserver Kubernetes-commit: 2486174142023ef785f196afee69bbcb78ae1f52 --- pkg/server/config.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkg/server/config.go b/pkg/server/config.go index 75d1276c4..be642ed6d 100644 --- a/pkg/server/config.go +++ b/pkg/server/config.go @@ -614,9 +614,18 @@ func (s *SecureServingInfo) HostPort() (string, int, error) { } // AuthorizeClientBearerToken wraps the authenticator and authorizer in loopback authentication logic -// if the loopback client config is specified AND it has a bearer token. +// if the loopback client config is specified AND it has a bearer token. Note that if either authn or +// authz is nil, this function won't add a token authenticator or authorizer. func AuthorizeClientBearerToken(loopback *restclient.Config, authn *AuthenticationInfo, authz *AuthorizationInfo) { - if loopback == nil || authn == nil || authz == nil || authn.Authenticator == nil && authz.Authorizer == nil || len(loopback.BearerToken) == 0 { + if loopback == nil || len(loopback.BearerToken) == 0 { + return + } + if authn == nil || authz == nil { + // prevent nil pointer panic + } + if authn.Authenticator == nil || authz.Authorizer == nil { + // authenticator or authorizer might be nil if we want to bypass authz/authn + // and we also do nothing in this case. return }