Browse Source

etcdserver: return internal error in a case of not auth specific errors

Hitoshi Mitake 9 years ago
parent
commit
8ee8d755bb
3 changed files with 18 additions and 4 deletions
  1. 5 2
      auth/store.go
  2. 10 2
      etcdserver/api/v3rpc/auth.go
  3. 3 0
      etcdserver/api/v3rpc/util.go

+ 5 - 2
auth/store.go

@@ -15,8 +15,9 @@
 package auth
 
 import (
+	"errors"
+
 	"github.com/coreos/etcd/auth/authpb"
-	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/storage/backend"
 	"github.com/coreos/pkg/capnslog"
@@ -29,6 +30,8 @@ var (
 	authUsersBucketName = []byte("authUsers")
 
 	plog = capnslog.NewPackageLogger("github.com/coreos/etcd", "auth")
+
+	ErrUserAlreadyExist = errors.New("auth: user already exists")
 )
 
 type AuthStore interface {
@@ -79,7 +82,7 @@ func (as *authStore) UserAdd(r *pb.AuthUserAddRequest) (*pb.AuthUserAddResponse,
 
 	_, vs := tx.UnsafeRange(authUsersBucketName, []byte(r.Name), nil, 0)
 	if len(vs) != 0 {
-		return &pb.AuthUserAddResponse{}, rpctypes.ErrUserAlreadyExist
+		return &pb.AuthUserAddResponse{}, ErrUserAlreadyExist
 	}
 
 	newUser := authpb.User{

+ 10 - 2
etcdserver/api/v3rpc/auth.go

@@ -29,7 +29,11 @@ func NewAuthServer(s *etcdserver.EtcdServer) *AuthServer {
 }
 
 func (as *AuthServer) AuthEnable(ctx context.Context, r *pb.AuthEnableRequest) (*pb.AuthEnableResponse, error) {
-	return as.authenticator.AuthEnable(ctx, r)
+	resp, err := as.authenticator.AuthEnable(ctx, r)
+	if err != nil {
+		return nil, togRPCError(err)
+	}
+	return resp, nil
 }
 
 func (as *AuthServer) AuthDisable(ctx context.Context, r *pb.AuthDisableRequest) (*pb.AuthDisableResponse, error) {
@@ -68,7 +72,11 @@ func (as *AuthServer) RoleGrant(ctx context.Context, r *pb.AuthRoleGrantRequest)
 }
 
 func (as *AuthServer) UserAdd(ctx context.Context, r *pb.AuthUserAddRequest) (*pb.AuthUserAddResponse, error) {
-	return as.authenticator.UserAdd(ctx, r)
+	resp, err := as.authenticator.UserAdd(ctx, r)
+	if err != nil {
+		return nil, togRPCError(err)
+	}
+	return resp, nil
 }
 
 func (as *AuthServer) UserDelete(ctx context.Context, r *pb.AuthUserDeleteRequest) (*pb.AuthUserDeleteResponse, error) {

+ 3 - 0
etcdserver/api/v3rpc/util.go

@@ -15,6 +15,7 @@
 package v3rpc
 
 import (
+	"github.com/coreos/etcd/auth"
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	"github.com/coreos/etcd/lease"
@@ -36,6 +37,8 @@ func togRPCError(err error) error {
 		return rpctypes.ErrRequestTooLarge
 	case etcdserver.ErrNoSpace:
 		return rpctypes.ErrNoSpace
+	case auth.ErrUserAlreadyExist:
+		return rpctypes.ErrUserAlreadyExist
 	default:
 		return grpc.Errorf(codes.Internal, err.Error())
 	}