From cd6722017b3552dfc591d601419cb01c080d4f72 Mon Sep 17 00:00:00 2001 From: Kota Kanbe Date: Sat, 6 Feb 2021 08:42:06 +0900 Subject: [PATCH] fix(scan): yum-ps err `Failed to find the package` (#1165) --- models/packages.go | 9 +++------ scan/redhatbase.go | 18 +++++++++--------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/models/packages.go b/models/packages.go index 31f61168..29670941 100644 --- a/models/packages.go +++ b/models/packages.go @@ -63,13 +63,13 @@ func (ps Packages) FindOne(f func(Package) bool) (string, Package, bool) { } // FindByFQPN search a package by Fully-Qualified-Package-Name -func (ps Packages) FindByFQPN(nameVerRelArc string) (*Package, error) { +func (ps Packages) FindByFQPN(nameVerRel string) (*Package, error) { for _, p := range ps { - if nameVerRelArc == p.FQPN() { + if nameVerRel == p.FQPN() { return &p, nil } } - return nil, xerrors.Errorf("Failed to find the package: %s", nameVerRelArc) + return nil, xerrors.Errorf("Failed to find the package: %s", nameVerRel) } // Package has installed binary packages. @@ -96,9 +96,6 @@ func (p Package) FQPN() string { if p.Release != "" { fqpn += fmt.Sprintf("-%s", p.Release) } - if p.Arch != "" { - fqpn += fmt.Sprintf(".%s", p.Arch) - } return fqpn } diff --git a/scan/redhatbase.go b/scan/redhatbase.go index ef896772..4edaf04e 100644 --- a/scan/redhatbase.go +++ b/scan/redhatbase.go @@ -508,14 +508,14 @@ func (o *redhatBase) yumPs() error { for pid, loadedFiles := range pidLoadedFiles { o.log.Debugf("rpm -qf: %#v", loadedFiles) - pkgNames, err := o.getPkgName(loadedFiles) + pkgNameVerRels, err := o.getPkgNameVerRels(loadedFiles) if err != nil { - o.log.Debugf("Failed to get package name by file path: %s, err: %s", pkgNames, err) + o.log.Debugf("Failed to get package name by file path: %s, err: %s", pkgNameVerRels, err) continue } uniq := map[string]struct{}{} - for _, name := range pkgNames { + for _, name := range pkgNameVerRels { uniq[name] = struct{}{} } @@ -529,8 +529,8 @@ func (o *redhatBase) yumPs() error { ListenPortStats: pidListenPorts[pid], } - for fqpn := range uniq { - p, err := o.Packages.FindByFQPN(fqpn) + for pkgNameVerRel := range uniq { + p, err := o.Packages.FindByFQPN(pkgNameVerRel) if err != nil { return err } @@ -623,7 +623,7 @@ func (o *redhatBase) parseNeedsRestarting(stdout string) (procs []models.NeedRes func (o *redhatBase) procPathToFQPN(execCommand string) (string, error) { execCommand = strings.Replace(execCommand, "\x00", " ", -1) // for CentOS6.9 path := strings.Fields(execCommand)[0] - cmd := `LANGUAGE=en_US.UTF-8 rpm -qf --queryformat "%{NAME}-%{EPOCH}:%{VERSION}-%{RELEASE}.%{ARCH}\n" ` + path + cmd := `LANGUAGE=en_US.UTF-8 rpm -qf --queryformat "%{NAME}-%{EPOCH}:%{VERSION}-%{RELEASE}\n" ` + path r := o.exec(cmd, noSudo) if !r.isSuccess() { return "", xerrors.Errorf("Failed to SSH: %s", r) @@ -632,7 +632,7 @@ func (o *redhatBase) procPathToFQPN(execCommand string) (string, error) { return strings.Replace(fqpn, "-(none):", "-", -1), nil } -func (o *redhatBase) getPkgName(paths []string) (pkgNames []string, err error) { +func (o *redhatBase) getPkgNameVerRels(paths []string) (pkgNameVerRels []string, err error) { cmd := o.rpmQf() + strings.Join(paths, " ") r := o.exec(util.PrependProxyEnv(cmd), noSudo) if !r.isSuccess(0, 2, 4, 8) { @@ -647,9 +647,9 @@ func (o *redhatBase) getPkgName(paths []string) (pkgNames []string, err error) { o.log.Debugf("Failed to parse rpm -qf line: %s, r: %s. continue", line, r) continue } - pkgNames = append(pkgNames, pack.FQPN()) + pkgNameVerRels = append(pkgNameVerRels, pack.FQPN()) } - return pkgNames, nil + return pkgNameVerRels, nil } func (o *redhatBase) rpmQa() string {