The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/7809

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
- Further improves upon https://github.com/lxc/lxd/pull/7796/commits/6f3bd86122b84ef64b5cc2c4c6662a8afe942aee by using the canonical address (including port) for comparison rather than just the requested listen IP, as in the default case the existing listen socket was not detected and failed `lxd init`.
- Uses `net.JoinHostPort` rather than manual `fmt.Sprintf`, and in some cases this will add support for IPv6 listen addresses that were not properly handled.
From f2445d96042831054d7a5243d51ad6a8a988fa5b Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 25 Aug 2020 12:23:31 +0100
Subject: [PATCH 1/6] lxd/main/init/interactive:  Use net.JoinHostPort rather
 than manual fmt.Sprintf

Which also adds IPv6 support for listeners as this wasn't handled.

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/main_init_interactive.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lxd/main_init_interactive.go b/lxd/main_init_interactive.go
index ad3b42133f..f6cfe3b33f 100644
--- a/lxd/main_init_interactive.go
+++ b/lxd/main_init_interactive.go
@@ -675,7 +675,7 @@ they otherwise would.
                }
 
                netPort := cli.AskInt("Port to bind LXD to [default=8443]: ", 
1, 65535, "8443", func(netPort int64) error {
-                       address := fmt.Sprintf("%s:%d", netAddr, netPort)
+                       address := net.JoinHostPort(netAddr, 
strconv.Itoa(int(netPort)))
 
                        s, _, err := d.GetServer()
                        if err == nil {
@@ -693,7 +693,7 @@ they otherwise would.
                        listener.Close()
                        return nil
                })
-               config.Node.Config["core.https_address"] = fmt.Sprintf("%s:%d", 
netAddr, netPort)
+               config.Node.Config["core.https_address"] = 
net.JoinHostPort(netAddr, strconv.Itoa(int(netPort)))
                config.Node.Config["core.trust_password"] = 
cli.AskPassword("Trust password for new clients: ")
                if config.Node.Config["core.trust_password"] == "" {
                        fmt.Printf("No password set, client certificates will 
have to be manually trusted.")

From 9905b2849e3c7a59697a8598118c42305521fe59 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 25 Aug 2020 12:23:12 +0100
Subject: [PATCH 2/6] lxd/main/init/interactive: Error wrapping

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/main_init_interactive.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxd/main_init_interactive.go b/lxd/main_init_interactive.go
index f6cfe3b33f..8653bd7217 100644
--- a/lxd/main_init_interactive.go
+++ b/lxd/main_init_interactive.go
@@ -135,7 +135,7 @@ func (c *cmdInit) askClustering(config *cmdInitData, d 
lxd.InstanceServer) error
 
                        listener, err := net.Listen("tcp", address)
                        if err != nil {
-                               return fmt.Errorf("Can't bind address %q: %v", 
address, err)
+                               return errors.Wrapf(err, "Can't bind address 
%q", address)
                        }
 
                        listener.Close()

From c14fd8655df0c13558b86b279e9f275ec9006846 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 25 Aug 2020 12:22:20 +0100
Subject: [PATCH 3/6] lxd/main/init/interactive: Use canonical address after
 port has been added for comparison

Otherwise if default port is added, the listen address doesn't match the 
supplied host IP and a duplicate bind is attempted.

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/main_init_interactive.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxd/main_init_interactive.go b/lxd/main_init_interactive.go
index 8653bd7217..403f39741c 100644
--- a/lxd/main_init_interactive.go
+++ b/lxd/main_init_interactive.go
@@ -127,7 +127,7 @@ func (c *cmdInit) askClustering(config *cmdInitData, d 
lxd.InstanceServer) error
 
                        s, _, err := d.GetServer()
                        if err == nil {
-                               if s.Config["cluster.https_address"] == value 
|| s.Config["core.https_address"] == value {
+                               if s.Config["cluster.https_address"] == address 
|| s.Config["core.https_address"] == address {
                                        // We already own the address, just 
move on.
                                        return nil
                                }

From ef4fad27e2475634766612696b197504b606b15a Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 25 Aug 2020 12:20:57 +0100
Subject: [PATCH 4/6] lxd/main/init/auto: Use net.JoinHostPort rather than
 manual fmt.Sprintf

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/main_init_auto.go | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lxd/main_init_auto.go b/lxd/main_init_auto.go
index 19840d0a59..56ac325e7a 100644
--- a/lxd/main_init_auto.go
+++ b/lxd/main_init_auto.go
@@ -2,6 +2,8 @@ package main
 
 import (
        "fmt"
+       "net"
+       "strconv"
 
        "github.com/pkg/errors"
        "github.com/spf13/cobra"
@@ -66,7 +68,7 @@ func (c *cmdInit) RunAuto(cmd *cobra.Command, args []string, 
d lxd.InstanceServe
 
        // Network listening
        if c.flagNetworkAddress != "" {
-               config.Config["core.https_address"] = fmt.Sprintf("%s:%d", 
c.flagNetworkAddress, c.flagNetworkPort)
+               config.Config["core.https_address"] = 
net.JoinHostPort(c.flagNetworkAddress, strconv.Itoa(c.flagNetworkPort))
 
                if c.flagTrustPassword != "" {
                        config.Config["core.trust_password"] = 
c.flagTrustPassword

From e5e7c5d9cc97d45dacb5a0a7e5d85916688415f7 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 25 Aug 2020 12:20:17 +0100
Subject: [PATCH 5/6] lxd/util/net: Updates CanonicalNetworkAddress to use
 net.JoinHostPort rather than manual fmt.Sprintf

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/util/net.go | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/lxd/util/net.go b/lxd/util/net.go
index b5a4046523..f2831cab9a 100644
--- a/lxd/util/net.go
+++ b/lxd/util/net.go
@@ -68,19 +68,17 @@ func (a *inMemoryAddr) String() string {
        return ""
 }
 
-// CanonicalNetworkAddress parses the given network address and returns a
-// string of the form "host:port", possibly filling it with the default port if
-// it's missing.
+// CanonicalNetworkAddress parses the given network address and returns a 
string of the form "host:port",
+// possibly filling it with the default port if it's missing.
 func CanonicalNetworkAddress(address string) string {
        _, _, err := net.SplitHostPort(address)
        if err != nil {
                ip := net.ParseIP(address)
-               if ip != nil && ip.To4() == nil {
-                       address = fmt.Sprintf("[%s]:%s", address, 
shared.DefaultPort)
-               } else {
-                       address = fmt.Sprintf("%s:%s", address, 
shared.DefaultPort)
+               if ip != nil {
+                       address = net.JoinHostPort(ip.String(), 
shared.DefaultPort)
                }
        }
+
        return address
 }
 

From 8418016b730b641e8fddea8a94074a0cbfcbb249 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 25 Aug 2020 12:19:43 +0100
Subject: [PATCH 6/6] lxd/device/device/utils/proxy: Use net.JoinHostPort
 rather than manual fmt.Sprintf

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/device/device_utils_proxy.go | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/lxd/device/device_utils_proxy.go b/lxd/device/device_utils_proxy.go
index 6aae2a5b87..29d53eeb7a 100644
--- a/lxd/device/device_utils_proxy.go
+++ b/lxd/device/device_utils_proxy.go
@@ -3,6 +3,7 @@ package device
 import (
        "fmt"
        "net"
+       "strconv"
        "strings"
 
        deviceConfig "github.com/lxc/lxd/lxd/device/config"
@@ -53,13 +54,7 @@ func ProxyParseAddr(addr string) 
(*deviceConfig.ProxyAddress, error) {
                }
 
                for i := int64(0); i < portRange; i++ {
-                       var newAddr string
-                       if strings.Contains(address, ":") {
-                               // IPv6 addresses need to be enclosed in square 
brackets.
-                               newAddr = fmt.Sprintf("[%s]:%d", address, 
portFirst+i)
-                       } else {
-                               newAddr = fmt.Sprintf("%s:%d", address, 
portFirst+i)
-                       }
+                       newAddr := net.JoinHostPort(address, 
strconv.Itoa(int(portFirst+i)))
                        newProxyAddr.Addr = append(newProxyAddr.Addr, newAddr)
                }
        }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to