diff options
author | molotkov-and <molotkov-and@ydb.tech> | 2023-04-18 13:06:08 +0300 |
---|---|---|
committer | molotkov-and <molotkov-and@ydb.tech> | 2023-04-18 13:06:08 +0300 |
commit | c30a4071eb92a8dfc20a8da12b4f0652b284a926 (patch) | |
tree | 7b7e94b6c9ca05b4fd2c895407c89f6af1c6a996 | |
parent | afb45309bf6aa93176180c4be5cde2f51c7371ea (diff) | |
download | ydb-c30a4071eb92a8dfc20a8da12b4f0652b284a926.tar.gz |
Check navigate response status in login service. Check that domain info is not null
-rw-r--r-- | ydb/core/grpc_services/rpc_login.cpp | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/ydb/core/grpc_services/rpc_login.cpp b/ydb/core/grpc_services/rpc_login.cpp index 06862d12b5c..322545d600b 100644 --- a/ydb/core/grpc_services/rpc_login.cpp +++ b/ydb/core/grpc_services/rpc_login.cpp @@ -47,18 +47,19 @@ public: } void HandleNavigate(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev) { - const NSchemeCache::TSchemeCacheNavigate* response = ev->Get()->Request.Get(); - if (response->ResultSet.size() == 1) { - const NSchemeCache::TSchemeCacheNavigate::TEntry& entry = response->ResultSet.front(); - ui64 schemeShardTabletId = entry.DomainInfo->ExtractSchemeShard(); - IActor* pipe = NTabletPipe::CreateClient(SelfId(), schemeShardTabletId, GetPipeClientConfig()); - PipeClient = RegisterWithSameMailbox(pipe); - THolder<TEvSchemeShard::TEvLogin> request = MakeHolder<TEvSchemeShard::TEvLogin>(); - const Ydb::Auth::LoginRequest* protoRequest = GetProtoRequest(); - request.Get()->Record.SetUser(protoRequest->user()); - request.Get()->Record.SetPassword(protoRequest->password()); - NTabletPipe::SendData(SelfId(), PipeClient, request.Release()); - return; + const auto& resultSet = ev->Get()->Request.Get()->ResultSet; + if (resultSet.size() == 1 && resultSet.front().Status == NSchemeCache::TSchemeCacheNavigate::EStatus::Ok) { + const auto domainInfo = resultSet.front().DomainInfo; + if (domainInfo != nullptr) { + IActor* pipe = NTabletPipe::CreateClient(SelfId(), domainInfo->ExtractSchemeShard(), GetPipeClientConfig()); + PipeClient = RegisterWithSameMailbox(pipe); + THolder<TEvSchemeShard::TEvLogin> request = MakeHolder<TEvSchemeShard::TEvLogin>(); + const Ydb::Auth::LoginRequest* protoRequest = GetProtoRequest(); + request.Get()->Record.SetUser(protoRequest->user()); + request.Get()->Record.SetPassword(protoRequest->password()); + NTabletPipe::SendData(SelfId(), PipeClient, request.Release()); + return; + } } Status = Ydb::StatusIds::SCHEME_ERROR; ReplyAndPassAway(); |