The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/distrobuilder/pull/243
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 4dd7dd704a687496bac8a831f351583767a48085 Mon Sep 17 00:00:00 2001 From: Thomas Hipp <thomas.h...@canonical.com> Date: Fri, 11 Oct 2019 21:02:08 +0200 Subject: [PATCH 1/2] shared: Update getChecksum function Signed-off-by: Thomas Hipp <thomas.h...@canonical.com> --- shared/net.go | 12 +++--------- shared/util.go | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/shared/net.go b/shared/net.go index aa16210..993edf7 100644 --- a/shared/net.go +++ b/shared/net.go @@ -1,7 +1,6 @@ package shared import ( - "bufio" "fmt" "hash" "io" @@ -9,7 +8,6 @@ import ( "net/http" "os" "path/filepath" - "regexp" "strings" lxd "github.com/lxc/lxd/shared" @@ -135,13 +133,9 @@ func downloadChecksum(targetDir string, URL string, fname string, hashFunc hash. tempFile.Seek(0, 0) - scanner := bufio.NewScanner(tempFile) - for scanner.Scan() { - s := strings.Split(scanner.Text(), " ") - matched, _ := regexp.MatchString(fmt.Sprintf(".*%s", filepath.Base(fname)), s[len(s)-1]) - if matched && (hashLen == 0 || hashLen == len(strings.TrimSpace(s[0]))) { - return s[0], nil - } + checksum := getChecksum(filepath.Base(fname), hashLen, tempFile) + if checksum != "" { + return checksum, nil } return "", fmt.Errorf("Could not find checksum") diff --git a/shared/util.go b/shared/util.go index f8873b5..04a3937 100644 --- a/shared/util.go +++ b/shared/util.go @@ -1,6 +1,7 @@ package shared import ( + "bufio" "bytes" "fmt" "io" @@ -365,3 +366,26 @@ func GetTargetDir(def DefinitionImage) string { return targetDir } + +func getChecksum(fname string, hashLen int, r io.Reader) string { + scanner := bufio.NewScanner(r) + + for scanner.Scan() { + if !strings.Contains(scanner.Text(), fname) { + continue + } + + for _, s := range strings.Split(scanner.Text(), " ") { + m, _ := regexp.MatchString("[[:xdigit:]]+", s) + if !m { + continue + } + + if hashLen == 0 || hashLen == len(strings.TrimSpace(s)) { + return s + } + } + } + + return "" +} From d10fe3ba36de434d880508172422a641994346ed Mon Sep 17 00:00:00 2001 From: Thomas Hipp <thomas.h...@canonical.com> Date: Fri, 11 Oct 2019 21:02:28 +0200 Subject: [PATCH 2/2] shared: Add test for getChecksum Signed-off-by: Thomas Hipp <thomas.h...@canonical.com> --- shared/util_test.go | 88 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/shared/util_test.go b/shared/util_test.go index a964728..994eae3 100644 --- a/shared/util_test.go +++ b/shared/util_test.go @@ -1,6 +1,8 @@ package shared import ( + "bytes" + "io" "log" "os" "path" @@ -213,3 +215,89 @@ func TestSetEnvVariables(t *testing.T) { require.False(t, set, "Expected 'BAR' to be unset") require.Empty(t, val) } + +func Test_getChecksum(t *testing.T) { + type args struct { + fname string + hashLen int + r io.Reader + } + tests := []struct { + name string + args args + want string + }{ + { + "CentOS-8-x86_64-1905-dvd1.iso", + args{ + "CentOS-8-x86_64-1905-dvd1.iso", + 64, + bytes.NewBufferString(`-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +# CentOS-8-x86_64-1905-boot.iso: 559939584 bytes +SHA256 (CentOS-8-x86_64-1905-boot.iso) = a7993a0d4b7fef2433e0d4f53530b63c715d3aadbe91f152ee5c3621139a2cbc +# CentOS-8-x86_64-1905-dvd1.iso: 7135559680 bytes +SHA256 (CentOS-8-x86_64-1905-dvd1.iso) = ea17ef71e0df3f6bf1d4bf1fc25bec1a76d1f211c115d39618fe688be34503e8 +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1 + +iQIVAwUBXYirdQW1VbOEg8ZdAQigchAAj+LbZtV7BQTnfB3i+fzECuomjsTZE8Ki +zUs9fLA67aayBL1KiavIzURMgjqj/+dXWr73Kv49pELngrznPlEPOclCaPkAKSe0 +V2Nj56AUhT/tHGcBoNvD0UrC0nCObMLx6PI2FDEozEELyQR32Syjtb0y5CDnxRvX +6JeGWPWQsf+jXdZS/GUUh39XR5va5YAwues0qLfqNf7nfUk07tmU0pcCG+vRN13H +45av+1/49zbxn4Y/Km2AaAbmqX8LlQpppVYE2K5V73YsG3o6eSU1DwjDijQHYPOK +ZUixjbhh5xkOzvhv5HUETvPncbnOez+xLwDPFAMFz/jX/4BgLWpA1/PM/3xcFFij +qXBlZh+QLWm1Z8UCBftDc+RqoktI460cqL/SsnOyHmQ+95QLt20yR46hi3oZ6/Cv +cUdXaql3iCNWZUvi27Dr8bExqaVaJn0zeDCItPWUA7NwxXP2TlGs2VXC4E37HQhZ +SyuCQZMrwGmDJl7gMOE7kZ/BifKvrycAlvTPvhq0jrUwLvokX8QhoTmAwRdzwGSk +9nS+BkoK7xW5lSATuVYEcCkb2fL+qDKuSBJMuKhQNhPs6rN5OEZL3gU54so7Jyz9 +OmR+r+1+/hELjOIsPcR4IiyauJQXXgtJ28G7swMsrl07PYHOU+awvB/N9GyUzNAM +RP3G/3Z1T3c= +=HgZm +-----END PGP SIGNATURE-----`), + }, + "ea17ef71e0df3f6bf1d4bf1fc25bec1a76d1f211c115d39618fe688be34503e8", + }, + + { + "CentOS-7-x86_64-Minimal-1908.iso", + args{ + "CentOS-7-x86_64-Minimal-1908.iso", + 64, + bytes.NewBufferString(`-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +9bba3da2876cb9fcf6c28fb636bcbd01832fe6d84cd7445fa58e44e569b3b4fe CentOS-7-x86_64-DVD-1908.iso +bd5e6ca18386e8a8e0b5a9e906297b5610095e375e4d02342f07f32022b13acf CentOS-7-x86_64-Everything-1908.iso +ba827210d4eb9313fc19120b9b85e7baef234c7f81bc55847a336114ddac20cb CentOS-7-x86_64-LiveGNOME-1908.iso +0ef3310d13f7fc140ec5180dc05369d2f473e802577466825205d17e46ef5a9b CentOS-7-x86_64-LiveKDE-1908.iso +9a2c47d97b9975452f7d582264e9fc16d108ed8252ac6816239a3b58cef5c53d CentOS-7-x86_64-Minimal-1908.iso +6ffa7ad44e8716e4cd6a5c3a85ba5675a935fc0448c260f43b12311356ba85ad CentOS-7-x86_64-NetInstall-1908.iso +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1 + +iQIVAwUBXYDRPyTGqKf0qA61AQhHcg/+LvGu95Y825HoUpS9JPFIb7axkIj8fx5/ +Qw2fN+BQtd7W7jcUNmofaajjWyqP5b5Q0iCyNrbhAT6CO4lVVY1z+OxCefAk/Wve +go1fSY5cRn7LRtvDuKrkDHJE+nYCVBg8ksWRBm2Xwx2sy4AxP2PAs7Oh3QvkK+9V +199YPLAQ+m4cFdBTTR3Dl78OEKVgjp5O351n4q0pKp72jxhjCZ+tk+dWGg9JEBSb +53nMkwnqTWZzFYpLqGc3fOfscc38oIvet0y3gVbZLNsE25AwwMxqjlC/Z2TqXwc5 +1JoZI7XkKggWH6fA4BuzcOtezGMPMPDaqnNhfAWzYq3CsQAA8aQuQaCnGoG2dNN/ +fdhGRrbXdpAFbKhfQ/dbKSvDGNvZTFfRfD9m5AJ/ddUAv7DFr4VeVur1KMTqtVO2 +NvcLRn7BnkN7ZRqvqdT4kDyndWgQCABahqI6OcC8mmc449JecloQK4U1zGhKMRor +33OtMEW/KhnSOu9pK6+CRnPykyIk2yxUCJ11YFXCKNKfX2cmdFf0puUsmefB6O7E +1nVE3n0aZVSVmebl3sjVJvstT2oyVNynnSQ/Fw3NBAiHe5FvgUnVqHQKyg1nnTet +hsfTg6egTQUGOB2fVgt7n3p1HIvCjXAjKo6Wa3R8+aoapQ74Gcok3I3rNoL1jWbW +Z4iksZrx82g= +=L746 +-----END PGP SIGNATURE-----`), + }, + "9a2c47d97b9975452f7d582264e9fc16d108ed8252ac6816239a3b58cef5c53d", + }, + } + + for _, tt := range tests { + got := getChecksum(tt.args.fname, tt.args.hashLen, tt.args.r) + require.Equal(t, tt.want, got) + } +}
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel