Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
radicle/node: `Address::is_local` for DNS names
Lorenz Leutgeb committed 5 months ago
commit f9a62e7d8de906bfdd557c28fbc0ae00d879267f
parent dc624ed518ca6bba3b1a7ec63cfd9d96cd8d642f
1 file changed +10 -2
modified crates/radicle/src/node.rs
@@ -465,8 +465,15 @@ pub struct Address(
impl Address {
    /// Check whether this address is from the local network.
    pub fn is_local(&self) -> bool {
-
        match self.0.host {
-
            HostName::Ip(ip) => address::is_local(&ip),
+
        match &self.0.host {
+
            HostName::Ip(ip) => address::is_local(ip),
+
            HostName::Dns(name) => {
+
                let name = name.strip_suffix(".").unwrap_or(name);
+

+
                // RFC 2606, Section 2
+
                // <https://datatracker.ietf.org/doc/html/rfc2606#section-2>
+
                name.ends_with(".localhost") || name == "localhost"
+
            }
            _ => false,
        }
    }
@@ -475,6 +482,7 @@ impl Address {
    pub fn is_routable(&self) -> bool {
        match self.0.host {
            HostName::Ip(ip) => address::is_routable(&ip),
+
            HostName::Dns(_) => !self.is_local(),
            _ => true,
        }
    }