aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormolotkov-and <molotkov-and@ydb.tech>2023-04-18 13:06:08 +0300
committermolotkov-and <molotkov-and@ydb.tech>2023-04-18 13:06:08 +0300
commitc30a4071eb92a8dfc20a8da12b4f0652b284a926 (patch)
tree7b7e94b6c9ca05b4fd2c895407c89f6af1c6a996
parentafb45309bf6aa93176180c4be5cde2f51c7371ea (diff)
downloadydb-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.cpp25
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();