8
8
kapi "k8s.io/kubernetes/pkg/api"
9
9
"k8s.io/kubernetes/pkg/api/unversioned"
10
10
"k8s.io/kubernetes/pkg/labels"
11
+ kerrors "k8s.io/kubernetes/pkg/util/errors"
11
12
12
13
authorizationapi "github.com/openshift/origin/pkg/authorization/api"
13
14
oclient "github.com/openshift/origin/pkg/client"
@@ -25,25 +26,24 @@ type SubjectChecker interface {
25
26
type UnionSubjectChecker []SubjectChecker
26
27
27
28
// NewUnionSubjectChecker returns a new UnionSubjectChecker.
28
- func NewUnionSubjectChecker (checkers []SubjectChecker ) ( UnionSubjectChecker , error ) {
29
- return UnionSubjectChecker (checkers ), nil
29
+ func NewUnionSubjectChecker (checkers []SubjectChecker ) UnionSubjectChecker {
30
+ return UnionSubjectChecker (checkers )
30
31
}
31
32
32
33
// Allowed determines whether the given subject is allowed in rolebindings in
33
34
// the project.
34
- func (checkers UnionSubjectChecker ) Allowed (subject kapi.ObjectReference ,
35
- ctx * RoleBindingRestrictionContext ) ( bool , error ) {
35
+ func (checkers UnionSubjectChecker ) Allowed (subject kapi.ObjectReference , ctx * RoleBindingRestrictionContext ) ( bool , error ) {
36
+ errs := [] error {}
36
37
for _ , checker := range []SubjectChecker (checkers ) {
37
38
allowed , err := checker .Allowed (subject , ctx )
38
39
if err != nil {
39
- return false , err
40
- }
41
- if allowed {
42
- return true , nil
40
+ errs = append (errs , err )
41
+ } else if allowed {
42
+ return true , kerrors .NewAggregate (errs )
43
43
}
44
44
}
45
45
46
- return false , nil
46
+ return false , kerrors . NewAggregate ( errs )
47
47
}
48
48
49
49
// RoleBindingRestrictionContext holds context that is used when determining
@@ -68,9 +68,7 @@ type RoleBindingRestrictionContext struct {
68
68
69
69
// NewRoleBindingRestrictionContext returns a new RoleBindingRestrictionContext
70
70
// object.
71
- func NewRoleBindingRestrictionContext (ns string , kc kclientset.Interface ,
72
- oc oclient.Interface ,
73
- groupCache * usercache.GroupCache ) (* RoleBindingRestrictionContext , error ) {
71
+ func NewRoleBindingRestrictionContext (ns string , kc kclientset.Interface , oc oclient.Interface , groupCache * usercache.GroupCache ) (* RoleBindingRestrictionContext , error ) {
74
72
return & RoleBindingRestrictionContext {
75
73
namespace : ns ,
76
74
kclient : kc ,
@@ -151,8 +149,8 @@ type UserSubjectChecker struct {
151
149
}
152
150
153
151
// NewUserSubjectChecker returns a new UserSubjectChecker.
154
- func NewUserSubjectChecker (userRestriction * authorizationapi.UserRestriction ) ( UserSubjectChecker , error ) {
155
- return UserSubjectChecker {userRestriction : userRestriction }, nil
152
+ func NewUserSubjectChecker (userRestriction * authorizationapi.UserRestriction ) UserSubjectChecker {
153
+ return UserSubjectChecker {userRestriction : userRestriction }
156
154
}
157
155
158
156
// Allowed determines whether the given user subject is allowed in rolebindings
@@ -217,8 +215,8 @@ type GroupSubjectChecker struct {
217
215
}
218
216
219
217
// NewGroupSubjectChecker returns a new GroupSubjectChecker.
220
- func NewGroupSubjectChecker (groupRestriction * authorizationapi.GroupRestriction ) ( GroupSubjectChecker , error ) {
221
- return GroupSubjectChecker {groupRestriction : groupRestriction }, nil
218
+ func NewGroupSubjectChecker (groupRestriction * authorizationapi.GroupRestriction ) GroupSubjectChecker {
219
+ return GroupSubjectChecker {groupRestriction : groupRestriction }
222
220
}
223
221
224
222
// Allowed determines whether the given group subject is allowed in rolebindings
@@ -268,10 +266,10 @@ type ServiceAccountSubjectChecker struct {
268
266
}
269
267
270
268
// NewServiceAccountSubjectChecker returns a new ServiceAccountSubjectChecker.
271
- func NewServiceAccountSubjectChecker (serviceAccountRestriction * authorizationapi.ServiceAccountRestriction ) ( ServiceAccountSubjectChecker , error ) {
269
+ func NewServiceAccountSubjectChecker (serviceAccountRestriction * authorizationapi.ServiceAccountRestriction ) ServiceAccountSubjectChecker {
272
270
return ServiceAccountSubjectChecker {
273
271
serviceAccountRestriction : serviceAccountRestriction ,
274
- }, nil
272
+ }
275
273
}
276
274
277
275
// Allowed determines whether the given serviceaccount subject is allowed in
@@ -306,13 +304,13 @@ func (checker ServiceAccountSubjectChecker) Allowed(subject kapi.ObjectReference
306
304
func NewSubjectChecker (spec * authorizationapi.RoleBindingRestrictionSpec ) (SubjectChecker , error ) {
307
305
switch {
308
306
case spec .UserRestriction != nil :
309
- return NewUserSubjectChecker (spec .UserRestriction )
307
+ return NewUserSubjectChecker (spec .UserRestriction ), nil
310
308
311
309
case spec .GroupRestriction != nil :
312
- return NewGroupSubjectChecker (spec .GroupRestriction )
310
+ return NewGroupSubjectChecker (spec .GroupRestriction ), nil
313
311
314
312
case spec .ServiceAccountRestriction != nil :
315
- return NewServiceAccountSubjectChecker (spec .ServiceAccountRestriction )
313
+ return NewServiceAccountSubjectChecker (spec .ServiceAccountRestriction ), nil
316
314
}
317
315
318
316
return nil , fmt .Errorf ("invalid RoleBindingRestrictionSpec: %v" , spec )
0 commit comments