aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhcpp <hcpp@ydb.tech>2022-10-06 11:01:20 +0300
committerhcpp <hcpp@ydb.tech>2022-10-06 11:01:20 +0300
commit4331deb577ea9068218fdd5c88acf3e5023e73dd (patch)
tree4ef3c156664e990f1da413885a37d14fb2649b0e
parent5ef5eca3fd81c95fbd0318c0ac3b9282c37f1cf1 (diff)
downloadydb-4331deb577ea9068218fdd5c88acf3e5023e73dd.tar.gz
connection id validation has been added for binding
-rw-r--r--ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp
index 854c0f66d4e..4d3e5b5e78e 100644
--- a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp
+++ b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp
@@ -248,6 +248,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvCreateQuery
}
}
+ TSet<TString> connectionIds;
if (permissions.Check(TPermissions::CONNECTIONS_USE)) {
auto connections = GetEntitiesWithVisibilityPriority<YandexQuery::Connection>(resultSets[resultSets.size() - 2], CONNECTION_COLUMN_NAME);
for (const auto& [_, connection]: connections) {
@@ -255,6 +256,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvCreateQuery
continue;
}
*queryInternal.add_connection() = connection;
+ connectionIds.insert(connection.meta().id());
}
}
@@ -270,6 +272,9 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvCreateQuery
}
*queryInternal.add_binding() = binding;
+ if (!connectionIds.contains(binding.content().connection_id())) {
+ ythrow TControlPlaneStorageException(TIssuesIds::BAD_REQUEST) << "Unable to resolve connection for binding " << binding.meta().id() << ", name " << binding.content().name() << ", connection id " << binding.content().connection_id();
+ }
}
}
}
@@ -902,6 +907,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvModifyQuery
}
}
+ TSet<TString> connectionIds;
if (permissions.Check(TPermissions::CONNECTIONS_USE)) {
auto connections = GetEntitiesWithVisibilityPriority<YandexQuery::Connection>(resultSets[resultSets.size() - 3], CONNECTION_COLUMN_NAME);
for (const auto& [_, connection]: connections) {
@@ -909,6 +915,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvModifyQuery
continue;
}
*internal.add_connection() = connection;
+ connectionIds.insert(connection.meta().id());
}
}
@@ -924,6 +931,9 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvModifyQuery
}
*internal.add_binding() = binding;
+ if (!connectionIds.contains(binding.content().connection_id())) {
+ ythrow TControlPlaneStorageException(TIssuesIds::BAD_REQUEST) << "Unable to resolve connection for binding " << binding.meta().id() << ", name " << binding.content().name() << ", connection id " << binding.content().connection_id();
+ }
}
}
}