blob: 5937b5babd355090a0f247a4715478efd73b72a6 [file] [log] [blame] [edit]
From b7a24916a37462afd8279086a65c63235cc914ec Mon Sep 17 00:00:00 2001
From: James Ye <jamesye@google.com>
Date: Wed, 31 Aug 2022 17:11:10 +1000
Subject: Add a VsockResolverFactory
Prevents vsock addresses from being resolved over DNS.
---
.../resolver/sockaddr/sockaddr_resolver.cc | 19 +++++++++++++++++++
src/core/lib/address_utils/parse_address.h | 2 +-
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc b/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc
index 46efbb06b2..f99ac16c4d 100644
--- a/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc
+++ b/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc
@@ -175,6 +175,23 @@ class UnixAbstractResolverFactory : public ResolverFactory {
};
#endif // GRPC_HAVE_UNIX_SOCKET
+class VsockResolverFactory : public ResolverFactory {
+ public:
+ bool IsValidUri(const URI& uri) const override {
+ return ParseUri(uri, grpc_parse_vsock, nullptr);
+ }
+
+ OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
+ return CreateSockaddrResolver(std::move(args), grpc_parse_vsock);
+ }
+
+ std::string GetDefaultAuthority(const URI& /*uri*/) const override {
+ return "localhost";
+ }
+
+ const char* scheme() const override { return "vsock"; }
+};
+
} // namespace
} // namespace grpc_core
@@ -190,6 +207,8 @@ void grpc_resolver_sockaddr_init() {
grpc_core::ResolverRegistry::Builder::RegisterResolverFactory(
absl::make_unique<grpc_core::UnixAbstractResolverFactory>());
#endif
+ grpc_core::ResolverRegistry::Builder::RegisterResolverFactory(
+ absl::make_unique<grpc_core::VsockResolverFactory>());
}
void grpc_resolver_sockaddr_shutdown() {}
diff --git a/src/core/lib/address_utils/parse_address.h b/src/core/lib/address_utils/parse_address.h
index 50ca4c3f84..cd26a77a6d 100644
--- a/src/core/lib/address_utils/parse_address.h
+++ b/src/core/lib/address_utils/parse_address.h
@@ -40,7 +40,7 @@ bool grpc_parse_unix_abstract(const grpc_core::URI& uri,
/** Populate \a addr and \a len from \a uri, whose path is expected to contain a
* vsock specification. Returns true upon success. */
-bool grpc_parse_vsock(const grpc_core::URI* uri,
+bool grpc_parse_vsock(const grpc_core::URI& uri,
grpc_resolved_address* resolved_addr);
/** Populate \a resolved_addr from \a uri, whose path is expected to contain an
--