Browse Source

etcdserver: make serialized txns auth-aware

Anthony Romano 9 years ago
parent
commit
30cfa30490
1 changed files with 13 additions and 3 deletions
  1. 13 3
      etcdserver/v3_server.go

+ 13 - 3
etcdserver/v3_server.go

@@ -124,11 +124,21 @@ func (s *EtcdServer) DeleteRange(ctx context.Context, r *pb.DeleteRangeRequest)
 }
 
 func (s *EtcdServer) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse, error) {
+	var result *applyResult
+	var err error
+
 	if isTxnSerializable(r) {
-		return s.applyV3.Txn(r)
+		user, err := s.usernameFromCtx(ctx)
+		if err != nil {
+			return nil, err
+		}
+		result = s.applyV3.Apply(
+			&pb.InternalRaftRequest{
+				Header: &pb.RequestHeader{Username: user},
+				Txn:    r})
+	} else {
+		result, err = s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{Txn: r})
 	}
-
-	result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{Txn: r})
 	if err != nil {
 		return nil, err
 	}