From 75d929f41be9ce14b97eeb8c3214bad3cb99e58f Mon Sep 17 00:00:00 2001 From: Stanimal Date: Sun, 18 Jul 2021 14:54:56 +0400 Subject: [PATCH] Add support for `/dns` multiaddrs to dns resolver - `Protocol::Dns` variant was missing from the system and tor DNS resolvers - This allows one to use `/dns` multiaddrs - [unrelated] async-trait should not be optional since https://github.com/tari-project/tari/pull/3056 --- comms/Cargo.toml | 4 ++-- comms/src/socks/client.rs | 2 +- comms/src/transports/dns/common.rs | 2 +- comms/src/transports/dns/system.rs | 4 +++- comms/src/transports/dns/tor.rs | 8 +++++++- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/comms/Cargo.toml b/comms/Cargo.toml index 73b81ccd781..ab1d6484fb0 100644 --- a/comms/Cargo.toml +++ b/comms/Cargo.toml @@ -14,6 +14,7 @@ tari_crypto = "0.11.1" tari_storage = { version = "^0.9", path = "../infrastructure/storage" } tari_shutdown = { version="^0.9", path = "../infrastructure/shutdown" } +async-trait = "0.1.36" bitflags = "1.0.4" blake2 = "0.9.0" bytes = { version = "0.5.x", features=["serde"] } @@ -42,7 +43,6 @@ tower= "0.3.1" yamux = "=0.4.7" # RPC dependencies -async-trait = {version="0.1.36", optional=true} tower-make = {version="0.3.0", optional=true} anyhow = "1.0.32" @@ -59,4 +59,4 @@ tari_common = { version = "^0.9", path="../common", features = ["build"]} [features] avx2 = ["tari_crypto/avx2"] -rpc = ["async-trait", "tower-make"] +rpc = ["tower-make"] diff --git a/comms/src/socks/client.rs b/comms/src/socks/client.rs index ab71e140612..048da7d3018 100644 --- a/comms/src/socks/client.rs +++ b/comms/src/socks/client.rs @@ -394,7 +394,7 @@ where TSocket: AsyncRead + AsyncWrite + Unpin self.len = 7 + len; }, // Special case for Tor resolve - (Protocol::Dns4(domain), None) => { + (Protocol::Dns4(domain), None) | (Protocol::Dns(domain), None) => { self.buf[3] = 0x03; let domain = domain.as_bytes(); let len = domain.len(); diff --git a/comms/src/transports/dns/common.rs b/comms/src/transports/dns/common.rs index 0f9dff0339a..813c3fc035b 100644 --- a/comms/src/transports/dns/common.rs +++ b/comms/src/transports/dns/common.rs @@ -26,7 +26,7 @@ use std::net::SocketAddr; pub fn is_dns4_addr(addr: &Multiaddr) -> bool { let proto = addr.iter().next(); - matches!(proto, Some(Protocol::Dns4(_))) + matches!(proto, Some(Protocol::Dns4(_))) || matches!(proto, Some(Protocol::Dns(_))) } pub fn convert_tcpip_multiaddr_to_socketaddr(addr: &Multiaddr) -> Result { diff --git a/comms/src/transports/dns/system.rs b/comms/src/transports/dns/system.rs index 7a363207df6..2a846ccfe68 100644 --- a/comms/src/transports/dns/system.rs +++ b/comms/src/transports/dns/system.rs @@ -46,7 +46,9 @@ impl DnsResolver for SystemDnsResolver { }; match protos { - (Protocol::Dns4(domain), Protocol::Tcp(port)) => dns_lookup(format!("{}:{}", domain, port)).boxed(), + (Protocol::Dns(domain), Protocol::Tcp(port)) | (Protocol::Dns4(domain), Protocol::Tcp(port)) => { + dns_lookup(format!("{}:{}", domain, port)).boxed() + }, (Protocol::Ip4(host), Protocol::Tcp(port)) => boxed_ready(Ok((host, port).into())), (Protocol::Ip6(host), Protocol::Tcp(port)) => boxed_ready(Ok((host, port).into())), _ => boxed_ready(Err(DnsResolverError::UnsupportedAddress(addr))), diff --git a/comms/src/transports/dns/tor.rs b/comms/src/transports/dns/tor.rs index aad18793bcc..b69205d772e 100644 --- a/comms/src/transports/dns/tor.rs +++ b/comms/src/transports/dns/tor.rs @@ -89,7 +89,7 @@ mod test { // This only works when a tor proxy is running #[ignore] - #[crate::runtime::test] + #[crate:runtime::test] async fn resolve() { let resolver = TorDnsResolver::new(SocksConfig { proxy_address: "/ip4/127.0.0.1/tcp/9050".parse().unwrap(), @@ -101,5 +101,11 @@ mod test { .await .unwrap(); assert_eq!(addr.port(), 443); + + let addr = resolver + .resolve("/dns/tari.com/tcp/443".parse().unwrap()) + .await + .unwrap(); + assert_eq!(addr.port(), 443); } }