mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
etcdserver: keep server side change of 14548
Signed-off-by: Hitoshi Mitake <h.mitake@gmail.com>
This commit is contained in:
parent
2b189d8638
commit
01c0d8b309
@ -234,16 +234,16 @@ func (ws *watchServer) Watch(stream pb.Watch_WatchServer) (err error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sws *serverWatchStream) isWatchPermitted(wcr *pb.WatchCreateRequest) bool {
|
func (sws *serverWatchStream) isWatchPermitted(wcr *pb.WatchCreateRequest) error {
|
||||||
authInfo, err := sws.ag.AuthInfoFromCtx(sws.gRPCStream.Context())
|
authInfo, err := sws.ag.AuthInfoFromCtx(sws.gRPCStream.Context())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return err
|
||||||
}
|
}
|
||||||
if authInfo == nil {
|
if authInfo == nil {
|
||||||
// if auth is enabled, IsRangePermitted() can cause an error
|
// if auth is enabled, IsRangePermitted() can cause an error
|
||||||
authInfo = &auth.AuthInfo{}
|
authInfo = &auth.AuthInfo{}
|
||||||
}
|
}
|
||||||
return sws.ag.AuthStore().IsRangePermitted(authInfo, wcr.Key, wcr.RangeEnd) == nil
|
return sws.ag.AuthStore().IsRangePermitted(authInfo, wcr.Key, wcr.RangeEnd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sws *serverWatchStream) recvLoop() error {
|
func (sws *serverWatchStream) recvLoop() error {
|
||||||
@ -277,13 +277,29 @@ func (sws *serverWatchStream) recvLoop() error {
|
|||||||
creq.RangeEnd = []byte{}
|
creq.RangeEnd = []byte{}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !sws.isWatchPermitted(creq) {
|
err := sws.isWatchPermitted(creq)
|
||||||
|
if err != nil {
|
||||||
|
var cancelReason string
|
||||||
|
switch err {
|
||||||
|
case auth.ErrInvalidAuthToken:
|
||||||
|
cancelReason = rpctypes.ErrGRPCInvalidAuthToken.Error()
|
||||||
|
case auth.ErrAuthOldRevision:
|
||||||
|
cancelReason = rpctypes.ErrGRPCAuthOldRevision.Error()
|
||||||
|
case auth.ErrUserEmpty:
|
||||||
|
cancelReason = rpctypes.ErrGRPCUserEmpty.Error()
|
||||||
|
default:
|
||||||
|
if err != auth.ErrPermissionDenied {
|
||||||
|
sws.lg.Error("unexpected error code", zap.Error(err))
|
||||||
|
}
|
||||||
|
cancelReason = rpctypes.ErrGRPCPermissionDenied.Error()
|
||||||
|
}
|
||||||
|
|
||||||
wr := &pb.WatchResponse{
|
wr := &pb.WatchResponse{
|
||||||
Header: sws.newResponseHeader(sws.watchStream.Rev()),
|
Header: sws.newResponseHeader(sws.watchStream.Rev()),
|
||||||
WatchId: clientv3.InvalidWatchID,
|
WatchId: clientv3.InvalidWatchID,
|
||||||
Canceled: true,
|
Canceled: true,
|
||||||
Created: true,
|
Created: true,
|
||||||
CancelReason: rpctypes.ErrGRPCPermissionDenied.Error(),
|
CancelReason: cancelReason,
|
||||||
}
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user