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

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) ===

From 9b1d7b0630cdbbfa5a09139e3067323ed64feba7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 13 Nov 2019 14:13:38 -0800
Subject: [PATCH 1/5] shared/cert: Make adding of ip/names optional
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 shared/cert.go | 40 ++++++++++++++++++++++------------------
 1 file changed, 22 insertions(+), 18 deletions(-)

diff --git a/shared/cert.go b/shared/cert.go
index 35ec3be8bc..5388628ea3 100644
--- a/shared/cert.go
+++ b/shared/cert.go
@@ -42,13 +42,13 @@ import (
 //
 // If a CA certificate is found, it will be returned as well as second return
 // value (otherwise it will be nil).
-func KeyPairAndCA(dir, prefix string, kind CertKind) (*CertInfo, error) {
+func KeyPairAndCA(dir, prefix string, kind CertKind, addHosts bool) 
(*CertInfo, error) {
        certFilename := filepath.Join(dir, prefix+".crt")
        keyFilename := filepath.Join(dir, prefix+".key")
 
        // Ensure that the certificate exists, or create a new one if it does
        // not.
-       err := FindOrGenCert(certFilename, keyFilename, kind == CertClient)
+       err := FindOrGenCert(certFilename, keyFilename, kind == CertClient, 
addHosts)
        if err != nil {
                return nil, err
        }
@@ -212,14 +212,14 @@ func mynames() ([]string, error) {
 
 // FindOrGenCert generates a keypair if needed.
 // The type argument is false for server, true for client.
-func FindOrGenCert(certf string, keyf string, certtype bool) error {
+func FindOrGenCert(certf string, keyf string, certtype bool, addHosts bool) 
error {
        if PathExists(certf) && PathExists(keyf) {
                return nil
        }
 
        /* If neither stat succeeded, then this is our first run and we
         * need to generate cert and privkey */
-       err := GenCert(certf, keyf, certtype)
+       err := GenCert(certf, keyf, certtype, addHosts)
        if err != nil {
                return err
        }
@@ -228,7 +228,7 @@ func FindOrGenCert(certf string, keyf string, certtype 
bool) error {
 }
 
 // GenCert will create and populate a certificate file and a key file
-func GenCert(certf string, keyf string, certtype bool) error {
+func GenCert(certf string, keyf string, certtype bool, addHosts bool) error {
        /* Create the basenames if needed */
        dir := path.Dir(certf)
        err := os.MkdirAll(dir, 0750)
@@ -241,7 +241,7 @@ func GenCert(certf string, keyf string, certtype bool) 
error {
                return err
        }
 
-       certBytes, keyBytes, err := GenerateMemCert(certtype)
+       certBytes, keyBytes, err := GenerateMemCert(certtype, addHosts)
        if err != nil {
                return err
        }
@@ -264,17 +264,12 @@ func GenCert(certf string, keyf string, certtype bool) 
error {
 
 // GenerateMemCert creates client or server certificate and key pair,
 // returning them as byte arrays in memory.
-func GenerateMemCert(client bool) ([]byte, []byte, error) {
+func GenerateMemCert(client bool, addHosts bool) ([]byte, []byte, error) {
        privk, err := ecdsa.GenerateKey(elliptic.P384(), rand.Reader)
        if err != nil {
                return nil, nil, fmt.Errorf("Failed to generate key: %v", err)
        }
 
-       hosts, err := mynames()
-       if err != nil {
-               return nil, nil, fmt.Errorf("Failed to get my hostname: %v", 
err)
-       }
-
        validFrom := time.Now()
        validTo := validFrom.Add(10 * 365 * 24 * time.Hour)
 
@@ -319,14 +314,23 @@ func GenerateMemCert(client bool) ([]byte, []byte, error) 
{
                template.ExtKeyUsage = 
[]x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}
        }
 
-       for _, h := range hosts {
-               if ip, _, err := net.ParseCIDR(h); err == nil {
-                       if !ip.IsLinkLocalUnicast() && 
!ip.IsLinkLocalMulticast() {
-                               template.IPAddresses = 
append(template.IPAddresses, ip)
+       if addHosts {
+               hosts, err := mynames()
+               if err != nil {
+                       return nil, nil, fmt.Errorf("Failed to get my hostname: 
%v", err)
+               }
+
+               for _, h := range hosts {
+                       if ip, _, err := net.ParseCIDR(h); err == nil {
+                               if !ip.IsLinkLocalUnicast() && 
!ip.IsLinkLocalMulticast() {
+                                       template.IPAddresses = 
append(template.IPAddresses, ip)
+                               }
+                       } else {
+                               template.DNSNames = append(template.DNSNames, h)
                        }
-               } else {
-                       template.DNSNames = append(template.DNSNames, h)
                }
+       } else if !client {
+               template.DNSNames = []string{"unspecified"}
        }
 
        derBytes, err := x509.CreateCertificate(rand.Reader, &template, 
&template, &privk.PublicKey, privk)

From 92835fdb85fdf934140fbeadddb9a51df5d8838b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 13 Nov 2019 14:13:57 -0800
Subject: [PATCH 2/5] lxc/config: Update to changed cert functions
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/config/cert.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxc/config/cert.go b/lxc/config/cert.go
index 17b3f426a3..42ccf8312a 100644
--- a/lxc/config/cert.go
+++ b/lxc/config/cert.go
@@ -24,5 +24,5 @@ func (c *Config) GenerateClientCertificate() error {
        certf := c.ConfigPath("client.crt")
        keyf := c.ConfigPath("client.key")
 
-       return shared.FindOrGenCert(certf, keyf, true)
+       return shared.FindOrGenCert(certf, keyf, true, false)
 }

From 559322511e8cd50ced5ac55d0247ca269a3726cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 13 Nov 2019 14:14:06 -0800
Subject: [PATCH 3/5] lxd/util: Update to changed cert functions
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/util/encryption.go | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lxd/util/encryption.go b/lxd/util/encryption.go
index 968d9ed044..8317f8de37 100644
--- a/lxd/util/encryption.go
+++ b/lxd/util/encryption.go
@@ -47,10 +47,12 @@ func LoadCert(dir string) (*shared.CertInfo, error) {
        if shared.PathExists(filepath.Join(dir, "cluster.crt")) {
                prefix = "cluster"
        }
-       cert, err := shared.KeyPairAndCA(dir, prefix, shared.CertServer)
+
+       cert, err := shared.KeyPairAndCA(dir, prefix, shared.CertServer, true)
        if err != nil {
                return nil, errors.Wrap(err, "failed to load TLS certificate")
        }
+
        return cert, nil
 }
 

From c989d20383a78296bb1099cf366e8ad208a92fcf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 13 Nov 2019 15:08:45 -0800
Subject: [PATCH 4/5] lxd/vm: Update to changed cert functions
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/vm_qemu.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lxd/vm_qemu.go b/lxd/vm_qemu.go
index 043fa4d74d..4f75feb046 100644
--- a/lxd/vm_qemu.go
+++ b/lxd/vm_qemu.go
@@ -292,13 +292,13 @@ func (vm *vmQemu) generateAgentCert() (string, string, 
string, string, error) {
        clientKeyFile := filepath.Join(vm.Path(), "agent-client.key")
 
        // Create server certificate.
-       err := shared.FindOrGenCert(agentCertFile, agentKeyFile, false)
+       err := shared.FindOrGenCert(agentCertFile, agentKeyFile, false, false)
        if err != nil {
                return "", "", "", "", err
        }
 
        // Create client certificate.
-       err = shared.FindOrGenCert(clientCertFile, clientKeyFile, true)
+       err = shared.FindOrGenCert(clientCertFile, clientKeyFile, true, false)
        if err != nil {
                return "", "", "", "", err
        }

From 1bb508b53e3263ed5a6a17bb9fa7c5d97f165f3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 13 Nov 2019 14:17:51 -0800
Subject: [PATCH 5/5] lxd-agent: Update to changed cert functions
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-agent/network.go | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lxd-agent/network.go b/lxd-agent/network.go
index 07b5648ebc..e018493764 100644
--- a/lxd-agent/network.go
+++ b/lxd-agent/network.go
@@ -3,7 +3,6 @@ package main
 import (
        "crypto/tls"
        "net"
-       "path/filepath"
        "sync"
        "time"
 
@@ -57,7 +56,7 @@ func (l *networkListener) Accept() (net.Conn, error) {
 }
 
 func serverTLSConfig() (*tls.Config, error) {
-       certInfo, err := shared.KeyPairAndCA(filepath.Join("/", "media", 
"lxd_config"), "agent", shared.CertServer)
+       certInfo, err := shared.KeyPairAndCA(".", "agent", shared.CertServer, 
false)
        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