From e879ff1e9ed28ffdd0b3dbf0714e6f2bfa653c9e Mon Sep 17 00:00:00 2001 From: sadayuki-matsuno Date: Thu, 1 Apr 2021 17:38:20 +0900 Subject: [PATCH] feat(scanner) export pkg list scan method (#1203) * feat(scanner) export pkg list scan method * fix args * fix func * fix init debian --- scanner/serverapi.go | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/scanner/serverapi.go b/scanner/serverapi.go index d8aca839..d3b9740c 100644 --- a/scanner/serverapi.go +++ b/scanner/serverapi.go @@ -179,6 +179,26 @@ func ViaHTTP(header http.Header, body string, toLocalFile bool) (models.ScanResu Release: kernelRelease, Version: kernelVersion, } + installedPackages, srcPackages, err := ParseInstalledPkgs(distro, kernel, body) + if err != nil { + return models.ScanResult{}, err + } + + return models.ScanResult{ + ServerName: serverName, + Family: family, + Release: release, + RunningKernel: models.Kernel{ + Release: kernelRelease, + Version: kernelVersion, + }, + Packages: installedPackages, + SrcPackages: srcPackages, + ScannedCves: models.VulnInfos{}, + }, nil +} + +func ParseInstalledPkgs(distro config.Distro, kernel models.Kernel, pkgList string) (models.Packages, models.SrcPackages, error) { base := base{ Distro: distro, osPackages: osPackages{ @@ -188,7 +208,7 @@ func ViaHTTP(header http.Header, body string, toLocalFile bool) (models.ScanResu } var osType osTypeInterface - switch family { + switch distro.Family { case constant.Debian, constant.Ubuntu: osType = &debian{base: base} case constant.RedHat: @@ -208,28 +228,10 @@ func ViaHTTP(header http.Header, body string, toLocalFile bool) (models.ScanResu redhatBase: redhatBase{base: base}, } default: - return models.ScanResult{}, xerrors.Errorf("Server mode for %s is not implemented yet", family) + return models.Packages{}, models.SrcPackages{}, xerrors.Errorf("Server mode for %s is not implemented yet", base.Distro.Family) } - installedPackages, srcPackages, err := osType.parseInstalledPackages(body) - if err != nil { - return models.ScanResult{}, err - } - - result := models.ScanResult{ - ServerName: serverName, - Family: family, - Release: release, - RunningKernel: models.Kernel{ - Release: kernelRelease, - Version: kernelVersion, - }, - Packages: installedPackages, - SrcPackages: srcPackages, - ScannedCves: models.VulnInfos{}, - } - - return result, nil + return osType.parseInstalledPackages(pkgList) } // initServers detect the kind of OS distribution of target servers