From 1a319859eb5194b45848d1753d12ac309b72dbc0 Mon Sep 17 00:00:00 2001 From: Kota Kanbe Date: Wed, 26 Apr 2017 12:20:21 +0900 Subject: [PATCH] Include RHEL, CentOS epoch number in version --- Gopkg.lock | 10 +++++----- scan/redhat.go | 17 +++++++++++------ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index c76e602a..3f569b94 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -141,7 +141,7 @@ memo = "bd95ed8c2b0aa32327ae55d88bff888b8198d238f7a71eee0f8663494664a0ac" branch = "master" name = "github.com/kotakanbe/goval-dictionary" packages = ["config","db","log","models"] - revision = "c33f7c4a77c3522ea25a70b9c38e1ae910f106cb" + revision = "9aba0cebf04ef546c7ae8666fea5e142b9e90fc1" [[projects]] branch = "master" @@ -237,25 +237,25 @@ memo = "bd95ed8c2b0aa32327ae55d88bff888b8198d238f7a71eee0f8663494664a0ac" branch = "master" name = "github.com/ymomoi/goval-parser" packages = ["oval"] - revision = "fa7d8e949108b0b2b7d124bef9a7f2bda9b6dd69" + revision = "4ddf6fc4f1a1af026f7cae41f76979c7ff2b2e2f" [[projects]] branch = "master" name = "golang.org/x/crypto" packages = ["curve25519","ed25519","ed25519/internal/edwards25519","ssh","ssh/agent","ssh/terminal"] - revision = "96846453c37f0876340a66a47f3f75b1f3a6cd2d" + revision = "3543873453996aaab2fc6b3928a35fc5ca2b5afb" [[projects]] branch = "master" name = "golang.org/x/net" packages = ["context","idna","publicsuffix"] - revision = "d212a1ef2de2f5d441c327b8f26cf3ea3ea9f265" + revision = "da118f7b8e5954f39d0d2130ab35d4bf0e3cb344" [[projects]] branch = "master" name = "golang.org/x/sys" packages = ["unix"] - revision = "ea9bcade75cb975a0b9738936568ab388b845617" + revision = "8c0a5eacbac818f9011015b17992f53d9cec3e8f" [[projects]] branch = "master" diff --git a/scan/redhat.go b/scan/redhat.go index 4214f341..053e16fa 100644 --- a/scan/redhat.go +++ b/scan/redhat.go @@ -244,7 +244,7 @@ func (o *redhat) scanPackages() error { } func (o *redhat) scanInstalledPackages() (installedPackages models.PackageInfoList, err error) { - cmd := "rpm -qa --queryformat '%{NAME}\t%{VERSION}\t%{RELEASE}\n'" + cmd := "rpm -qa --queryformat '%{NAME}\t%{EPOCHNUM}\t%{VERSION}\t%{RELEASE}\n'" r := o.exec(cmd, noSudo) if r.isSuccess() { // e.g. @@ -269,14 +269,20 @@ func (o *redhat) scanInstalledPackages() (installedPackages models.PackageInfoLi func (o *redhat) parseScannedPackagesLine(line string) (models.PackageInfo, error) { fields := strings.Fields(line) - if len(fields) != 3 { + if len(fields) != 4 { return models.PackageInfo{}, fmt.Errorf("Failed to parse package line: %s", line) } + ver := "" + if fields[1] == "0" { + ver = fields[2] + } else { + ver = fmt.Sprintf("%s:%s", fields[1], fields[2]) + } return models.PackageInfo{ Name: fields[0], - Version: fields[1], - Release: fields[2], + Version: ver, + Release: fields[3], }, nil } @@ -471,13 +477,12 @@ func (o *redhat) parseYumCheckUpdateLine(line string) (models.PackageInfo, error if len(verfields) != 2 { return models.PackageInfo{}, fmt.Errorf("Unknown format: %s", line) } - version := o.regexpReplace(verfields[0], `^[0-9]+:`, "") release := verfields[1] repos := strings.Join(fields[2:len(fields)], " ") return models.PackageInfo{ Name: packName, - NewVersion: version, + NewVersion: verfields[0], NewRelease: release, Repository: repos, }, nil