From 784db4bbd61fb42914200cf5bcafd5afa2d2ff4a Mon Sep 17 00:00:00 2001 From: ramin Date: Tue, 6 Aug 2024 15:00:04 +0100 Subject: [PATCH] fix(libs/utils): rely on DNS for rpc/grpc requests to core (#3624) --- libs/utils/address.go | 13 ++++++++----- libs/utils/address_test.go | 2 ++ nodebuilder/core/config.go | 2 +- nodebuilder/core/config_test.go | 13 +++++++++++-- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/libs/utils/address.go b/libs/utils/address.go index c20d11ad06..b4efca7bf3 100644 --- a/libs/utils/address.go +++ b/libs/utils/address.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "net" + "net/netip" "strings" ) @@ -24,19 +25,21 @@ func SanitizeAddr(addr string) (string, error) { return addr, nil } -// ValidateAddr sanitizes the given address and verifies that it is a valid IP or hostname. The -// sanitized address is returned. +// ValidateAddr sanitizes the given address and verifies that it +// is a valid IP or hostname. The sanitized address is returned. func ValidateAddr(addr string) (string, error) { addr, err := SanitizeAddr(addr) if err != nil { return addr, err } - ip := net.ParseIP(addr) - if ip != nil { - return addr, nil + // if the address is a valid IP, return it + ip, err := netip.ParseAddr(addr) + if err == nil { + return ip.String(), nil } + // if the address is not a valid IP, resolve it resolved, err := net.ResolveIPAddr("ip4", addr) if err != nil { return addr, err diff --git a/libs/utils/address_test.go b/libs/utils/address_test.go index b18ead91a1..39fd0a2ec5 100644 --- a/libs/utils/address_test.go +++ b/libs/utils/address_test.go @@ -53,6 +53,8 @@ func TestValidateAddr(t *testing.T) { {addr: "https://celestia.org", want: want{unresolved: true}}, // Testcase: hostname is valid, but no schema {addr: "celestia.org", want: want{unresolved: true}}, + // Testcase: localhost + {addr: "localhost", want: want{addr: "127.0.0.1"}}, } for _, tt := range tests { diff --git a/nodebuilder/core/config.go b/nodebuilder/core/config.go index a211fac231..b82be1d809 100644 --- a/nodebuilder/core/config.go +++ b/nodebuilder/core/config.go @@ -44,7 +44,7 @@ func (cfg *Config) Validate() error { return fmt.Errorf("nodebuilder/core: grpc port is not set") } - ip, err := utils.ValidateAddr(cfg.IP) + ip, err := utils.SanitizeAddr(cfg.IP) if err != nil { return err } diff --git a/nodebuilder/core/config_test.go b/nodebuilder/core/config_test.go index 9b06d6918d..6535e28807 100644 --- a/nodebuilder/core/config_test.go +++ b/nodebuilder/core/config_test.go @@ -26,6 +26,15 @@ func TestValidate(t *testing.T) { cfg: Config{}, expectErr: false, }, + { + name: "hostname preserved", + cfg: Config{ + IP: "celestia.org", + RPCPort: DefaultRPCPort, + GRPCPort: DefaultGRPCPort, + }, + expectErr: false, + }, { name: "missing RPC port", cfg: Config{ @@ -43,13 +52,13 @@ func TestValidate(t *testing.T) { expectErr: true, }, { - name: "invalid IP", + name: "invalid IP, but will be accepted as host and not raise an error", cfg: Config{ IP: "invalid-ip", RPCPort: DefaultRPCPort, GRPCPort: DefaultGRPCPort, }, - expectErr: true, + expectErr: false, }, { name: "invalid RPC port",