|
|
@@ -61,6 +61,7 @@ var (
|
|
|
ErrAuthOldRevision = errors.New("auth: revision in header is old")
|
|
|
ErrInvalidAuthToken = errors.New("auth: invalid auth token")
|
|
|
ErrInvalidAuthOpts = errors.New("auth: invalid auth options")
|
|
|
+ ErrInvalidAuthMgmt = errors.New("auth: invalid auth management")
|
|
|
|
|
|
// BcryptCost is the algorithm cost / strength for hashing auth passwords
|
|
|
BcryptCost = bcrypt.DefaultCost
|
|
|
@@ -352,6 +353,11 @@ func (as *authStore) UserAdd(r *pb.AuthUserAddRequest) (*pb.AuthUserAddResponse,
|
|
|
}
|
|
|
|
|
|
func (as *authStore) UserDelete(r *pb.AuthUserDeleteRequest) (*pb.AuthUserDeleteResponse, error) {
|
|
|
+ if as.enabled && strings.Compare(r.Name, rootUser) == 0 {
|
|
|
+ plog.Errorf("the user root must not be deleted")
|
|
|
+ return nil, ErrInvalidAuthMgmt
|
|
|
+ }
|
|
|
+
|
|
|
tx := as.be.BatchTx()
|
|
|
tx.Lock()
|
|
|
defer tx.Unlock()
|
|
|
@@ -477,6 +483,11 @@ func (as *authStore) UserList(r *pb.AuthUserListRequest) (*pb.AuthUserListRespon
|
|
|
}
|
|
|
|
|
|
func (as *authStore) UserRevokeRole(r *pb.AuthUserRevokeRoleRequest) (*pb.AuthUserRevokeRoleResponse, error) {
|
|
|
+ if as.enabled && strings.Compare(r.Name, rootUser) == 0 && strings.Compare(r.Role, rootRole) == 0 {
|
|
|
+ plog.Errorf("the role root must not be revoked from the user root")
|
|
|
+ return nil, ErrInvalidAuthMgmt
|
|
|
+ }
|
|
|
+
|
|
|
tx := as.be.BatchTx()
|
|
|
tx.Lock()
|
|
|
defer tx.Unlock()
|
|
|
@@ -579,6 +590,11 @@ func (as *authStore) RoleRevokePermission(r *pb.AuthRoleRevokePermissionRequest)
|
|
|
}
|
|
|
|
|
|
func (as *authStore) RoleDelete(r *pb.AuthRoleDeleteRequest) (*pb.AuthRoleDeleteResponse, error) {
|
|
|
+ if as.enabled && strings.Compare(r.Role, rootRole) == 0 {
|
|
|
+ plog.Errorf("the role root must not be deleted")
|
|
|
+ return nil, ErrInvalidAuthMgmt
|
|
|
+ }
|
|
|
+
|
|
|
tx := as.be.BatchTx()
|
|
|
tx.Lock()
|
|
|
defer tx.Unlock()
|