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

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) ===
Closes #6662 
From 88cf1042c6465ddee9f532adf4e1b4d1de719345 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 1 Jan 2020 13:27:09 -0500
Subject: [PATCH 1/4] lxc-to-lxd: Set useragent
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxc-to-lxd/utils.go | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lxc-to-lxd/utils.go b/lxc-to-lxd/utils.go
index dae0247023..5915137dfc 100644
--- a/lxc-to-lxd/utils.go
+++ b/lxc-to-lxd/utils.go
@@ -13,6 +13,7 @@ import (
        "github.com/lxc/lxd/lxd/migration"
        "github.com/lxc/lxd/shared"
        "github.com/lxc/lxd/shared/api"
+       "github.com/lxc/lxd/shared/version"
 )
 
 func transferRootfs(dst lxd.ContainerServer, op lxd.Operation, rootfs string, 
rsyncArgs string) error {
@@ -91,7 +92,7 @@ func connectTarget(url string) (lxd.ContainerServer, error) {
        args := lxd.ConnectionArgs{}
        args.TLSClientCert = string(clientCrt)
        args.TLSClientKey = string(clientKey)
-       args.UserAgent = "LXC-TO-LXD"
+       args.UserAgent = fmt.Sprintf("LXC-TO-LXD %s", version.Version)
        c, err := lxd.ConnectLXD(url, &args)
 
        var certificate *x509.Certificate

From edb02d9f5c3833a1ed014eb44e148dc17abeb3a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 1 Jan 2020 13:27:18 -0500
Subject: [PATCH 2/4] lxd-p2c: Set useragent
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd-p2c/utils.go | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lxd-p2c/utils.go b/lxd-p2c/utils.go
index 45cd95f8d7..6f08884979 100644
--- a/lxd-p2c/utils.go
+++ b/lxd-p2c/utils.go
@@ -14,6 +14,7 @@ import (
        "github.com/lxc/lxd/lxd/migration"
        "github.com/lxc/lxd/shared"
        "github.com/lxc/lxd/shared/api"
+       "github.com/lxc/lxd/shared/version"
 )
 
 func transferRootfs(dst lxd.ContainerServer, op lxd.Operation, rootfs string, 
rsyncArgs string) error {
@@ -92,7 +93,7 @@ func connectTarget(url string) (lxd.ContainerServer, error) {
        args := lxd.ConnectionArgs{}
        args.TLSClientCert = string(clientCrt)
        args.TLSClientKey = string(clientKey)
-       args.UserAgent = "LXD-P2C"
+       args.UserAgent = fmt.Sprintf("LXC-P2C %s", version.Version)
        c, err := lxd.ConnectLXD(url, &args)
 
        var certificate *x509.Certificate

From 9775d9145b8463ad10b5f4fcc1b063396076e420 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 1 Jan 2020 13:27:50 -0500
Subject: [PATCH 3/4] lxd: Always set user agent
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/api_cluster.go           |  1 +
 lxd/cluster/connect.go       | 13 ++++++++++++-
 lxd/main_init_interactive.go |  2 ++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/lxd/api_cluster.go b/lxd/api_cluster.go
index df19253417..bf96d39774 100644
--- a/lxd/api_cluster.go
+++ b/lxd/api_cluster.go
@@ -352,6 +352,7 @@ func clusterPutJoin(d *Daemon, req api.ClusterPut) 
response.Response {
                TLSClientCert: string(cert.PublicKey()),
                TLSClientKey:  string(cert.PrivateKey()),
                TLSServerCert: string(req.ClusterCertificate),
+               UserAgent:     version.UserAgent,
        }
        fingerprint := cert.Fingerprint()
 
diff --git a/lxd/cluster/connect.go b/lxd/cluster/connect.go
index bd9c3881cb..0c1611fe54 100644
--- a/lxd/cluster/connect.go
+++ b/lxd/cluster/connect.go
@@ -6,12 +6,14 @@ import (
        "fmt"
        "time"
 
+       "github.com/pkg/errors"
+
        lxd "github.com/lxc/lxd/client"
        "github.com/lxc/lxd/lxd/db"
        "github.com/lxc/lxd/lxd/instance/instancetype"
        "github.com/lxc/lxd/shared"
        "github.com/lxc/lxd/shared/api"
-       "github.com/pkg/errors"
+       "github.com/lxc/lxd/shared/version"
 )
 
 // Connect is a convenience around lxd.ConnectLXD that configures the client
@@ -47,6 +49,7 @@ func Connect(address string, cert *shared.CertInfo, notify 
bool) (lxd.InstanceSe
                TLSClientCert: string(cert.PublicKey()),
                TLSClientKey:  string(cert.PrivateKey()),
                SkipGetServer: true,
+               UserAgent:     version.UserAgent,
        }
        if notify {
                args.UserAgent = "lxd-cluster-notifier"
@@ -128,29 +131,37 @@ func SetupTrust(cert, targetAddress, targetCert, 
targetPassword string) error {
        // Connect to the target cluster node.
        args := &lxd.ConnectionArgs{
                TLSServerCert: targetCert,
+               UserAgent:     version.UserAgent,
        }
+
        target, err := lxd.ConnectLXD(fmt.Sprintf("https://%s";, targetAddress), 
args)
        if err != nil {
                return errors.Wrap(err, "failed to connect to target cluster 
node")
        }
+
        block, _ := pem.Decode([]byte(cert))
        if block == nil {
                return errors.Wrap(err, "failed to decode certificate")
        }
+
        certificate := base64.StdEncoding.EncodeToString(block.Bytes)
        post := api.CertificatesPost{
                Password:    targetPassword,
                Certificate: certificate,
        }
+
        fingerprint, err := shared.CertFingerprintStr(cert)
        if err != nil {
                return errors.Wrap(err, "failed to calculate fingerprint")
        }
+
        post.Name = fmt.Sprintf("lxd.cluster.%s", fingerprint)
        post.Type = "client"
+
        err = target.CreateCertificate(post)
        if err != nil && err.Error() != "Certificate already in trust store" {
                return errors.Wrap(err, "Failed to add client cert to cluster")
        }
+
        return nil
 }
diff --git a/lxd/main_init_interactive.go b/lxd/main_init_interactive.go
index f3947ed526..7eaca13cd9 100644
--- a/lxd/main_init_interactive.go
+++ b/lxd/main_init_interactive.go
@@ -22,6 +22,7 @@ import (
        "github.com/lxc/lxd/shared/api"
        cli "github.com/lxc/lxd/shared/cmd"
        "github.com/lxc/lxd/shared/idmap"
+       "github.com/lxc/lxd/shared/version"
 )
 
 func (c *cmdInit) RunInteractive(cmd *cobra.Command, args []string, d 
lxd.InstanceServer) (*cmdInitData, error) {
@@ -178,6 +179,7 @@ func (c *cmdInit) askClustering(config *cmdInitData, d 
lxd.InstanceServer) error
                                TLSClientCert: string(cert.PublicKey()),
                                TLSClientKey:  string(cert.PrivateKey()),
                                TLSServerCert: 
string(config.Cluster.ClusterCertificate),
+                               UserAgent:     version.UserAgent,
                        }
 
                        client, err := lxd.ConnectLXD(fmt.Sprintf("https://%s";, 
config.Cluster.ClusterAddress), args)

From 60c8333a730b465e8c6bada8767bfde53caa8392 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 1 Jan 2020 13:30:23 -0500
Subject: [PATCH 4/4] shared: Set user-agent in GetRemoteCertificate
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxc-to-lxd/utils.go          |  2 +-
 lxc/remote.go                |  2 +-
 lxd-p2c/utils.go             |  2 +-
 lxd/main_init_interactive.go |  2 +-
 shared/cert.go               | 13 +++++++++++--
 5 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/lxc-to-lxd/utils.go b/lxc-to-lxd/utils.go
index 5915137dfc..395459f59f 100644
--- a/lxc-to-lxd/utils.go
+++ b/lxc-to-lxd/utils.go
@@ -98,7 +98,7 @@ func connectTarget(url string) (lxd.ContainerServer, error) {
        var certificate *x509.Certificate
        if err != nil {
                // Failed to connect using the system CA, so retrieve the 
remote certificate
-               certificate, err = shared.GetRemoteCertificate(url)
+               certificate, err = shared.GetRemoteCertificate(url, 
args.UserAgent)
                if err != nil {
                        return nil, err
                }
diff --git a/lxc/remote.go b/lxc/remote.go
index e663a8635c..7cda0be464 100644
--- a/lxc/remote.go
+++ b/lxc/remote.go
@@ -245,7 +245,7 @@ func (c *cmdRemoteAdd) Run(cmd *cobra.Command, args 
[]string) error {
        var certificate *x509.Certificate
        if err != nil {
                // Failed to connect using the system CA, so retrieve the 
remote certificate
-               certificate, err = shared.GetRemoteCertificate(addr)
+               certificate, err = shared.GetRemoteCertificate(addr, 
c.global.conf.UserAgent)
                if err != nil {
                        return err
                }
diff --git a/lxd-p2c/utils.go b/lxd-p2c/utils.go
index 6f08884979..45e34c6568 100644
--- a/lxd-p2c/utils.go
+++ b/lxd-p2c/utils.go
@@ -99,7 +99,7 @@ func connectTarget(url string) (lxd.ContainerServer, error) {
        var certificate *x509.Certificate
        if err != nil {
                // Failed to connect using the system CA, so retrieve the 
remote certificate
-               certificate, err = shared.GetRemoteCertificate(url)
+               certificate, err = shared.GetRemoteCertificate(url, 
args.UserAgent)
                if err != nil {
                        return nil, err
                }
diff --git a/lxd/main_init_interactive.go b/lxd/main_init_interactive.go
index 7eaca13cd9..e93b575c5d 100644
--- a/lxd/main_init_interactive.go
+++ b/lxd/main_init_interactive.go
@@ -132,7 +132,7 @@ func (c *cmdInit) askClustering(config *cmdInitData, d 
lxd.InstanceServer) error
                                config.Cluster.ClusterAddress = clusterAddress
 
                                // Cluster certificate
-                               cert, err := 
shared.GetRemoteCertificate(fmt.Sprintf("https://%s";, 
config.Cluster.ClusterAddress))
+                               cert, err := 
shared.GetRemoteCertificate(fmt.Sprintf("https://%s";, 
config.Cluster.ClusterAddress), version.UserAgent)
                                if err != nil {
                                        fmt.Printf("Error connecting to 
existing cluster node: %v\n", err)
                                        continue
diff --git a/shared/cert.go b/shared/cert.go
index 5388628ea3..47fd232ae7 100644
--- a/shared/cert.go
+++ b/shared/cert.go
@@ -381,7 +381,7 @@ func CertFingerprintStr(c string) (string, error) {
        return CertFingerprint(cert), nil
 }
 
-func GetRemoteCertificate(address string) (*x509.Certificate, error) {
+func GetRemoteCertificate(address string, useragent string) 
(*x509.Certificate, error) {
        // Setup a permissive TLS config
        tlsConfig, err := GetTLSConfig("", "", "", nil)
        if err != nil {
@@ -402,8 +402,17 @@ func GetRemoteCertificate(address string) 
(*x509.Certificate, error) {
        }
 
        // Connect
+       req, err := http.NewRequest("GET", address, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       if useragent != "" {
+               req.Header.Set("User-Agent", useragent)
+       }
+
        client := &http.Client{Transport: tr}
-       resp, err := client.Get(address)
+       resp, err := client.Do(req)
        if err != nil {
                return nil, err
        }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to