fix(scan): yum-ps err Failed to find the package (#1165)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user