Change model ScanResult.ScannedCves.AffectedPackages
This commit is contained in:
		@@ -18,8 +18,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
package oval
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"sort"
 | 
			
		||||
 | 
			
		||||
	"github.com/future-architect/vuls/config"
 | 
			
		||||
	"github.com/future-architect/vuls/models"
 | 
			
		||||
	"github.com/future-architect/vuls/util"
 | 
			
		||||
@@ -95,11 +93,11 @@ func (o DebianBase) update(r *models.ScanResult, defPacks defPacks) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// uniq(vinfo.PackNames + defPacks.actuallyAffectedPackNames)
 | 
			
		||||
	for _, name := range vinfo.PackageNames {
 | 
			
		||||
		defPacks.actuallyAffectedPackNames[name] = true
 | 
			
		||||
	for _, pack := range vinfo.AffectedPackages {
 | 
			
		||||
		defPacks.actuallyAffectedPackNames[pack.Name] = true
 | 
			
		||||
	}
 | 
			
		||||
	vinfo.PackageNames = defPacks.packNames()
 | 
			
		||||
	sort.Strings(vinfo.PackageNames)
 | 
			
		||||
	vinfo.AffectedPackages = defPacks.toPackStatuses()
 | 
			
		||||
	vinfo.AffectedPackages.Sort()
 | 
			
		||||
	r.ScannedCves[defPacks.def.Debian.CveID] = vinfo
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ func TestPackNamesOfUpdateDebian(t *testing.T) {
 | 
			
		||||
			in: models.ScanResult{
 | 
			
		||||
				ScannedCves: models.VulnInfos{
 | 
			
		||||
					"CVE-2000-1000": models.VulnInfo{
 | 
			
		||||
						PackageNames: []string{"packA"},
 | 
			
		||||
						AffectedPackages: models.PackageStatuses{{Name: "packA"}},
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
@@ -53,9 +53,9 @@ func TestPackNamesOfUpdateDebian(t *testing.T) {
 | 
			
		||||
			out: models.ScanResult{
 | 
			
		||||
				ScannedCves: models.VulnInfos{
 | 
			
		||||
					"CVE-2000-1000": models.VulnInfo{
 | 
			
		||||
						PackageNames: []string{
 | 
			
		||||
							"packA",
 | 
			
		||||
							"packB",
 | 
			
		||||
						AffectedPackages: models.PackageStatuses{
 | 
			
		||||
							{Name: "packA"},
 | 
			
		||||
							{Name: "packB"},
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
@@ -66,8 +66,8 @@ func TestPackNamesOfUpdateDebian(t *testing.T) {
 | 
			
		||||
	util.Log = util.NewCustomLogger(config.ServerInfo{})
 | 
			
		||||
	for i, tt := range tests {
 | 
			
		||||
		Debian{}.update(&tt.in, tt.defPacks)
 | 
			
		||||
		e := tt.out.ScannedCves["CVE-2000-1000"].PackageNames
 | 
			
		||||
		a := tt.in.ScannedCves["CVE-2000-1000"].PackageNames
 | 
			
		||||
		e := tt.out.ScannedCves["CVE-2000-1000"].AffectedPackages
 | 
			
		||||
		a := tt.in.ScannedCves["CVE-2000-1000"].AffectedPackages
 | 
			
		||||
		if !reflect.DeepEqual(a, e) {
 | 
			
		||||
			t.Errorf("[%d] expected: %v\n  actual: %v\n", i, e, a)
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,6 @@ package oval
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"sort"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
@@ -98,11 +97,11 @@ func (o RedHatBase) update(r *models.ScanResult, defPacks defPacks) {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// uniq(vinfo.PackNames + defPacks.actuallyAffectedPackNames)
 | 
			
		||||
		for _, name := range vinfo.PackageNames {
 | 
			
		||||
			defPacks.actuallyAffectedPackNames[name] = true
 | 
			
		||||
		for _, pack := range vinfo.AffectedPackages {
 | 
			
		||||
			defPacks.actuallyAffectedPackNames[pack.Name] = true
 | 
			
		||||
		}
 | 
			
		||||
		vinfo.PackageNames = defPacks.packNames()
 | 
			
		||||
		sort.Strings(vinfo.PackageNames)
 | 
			
		||||
		vinfo.AffectedPackages = defPacks.toPackStatuses()
 | 
			
		||||
		vinfo.AffectedPackages.Sort()
 | 
			
		||||
		r.ScannedCves[cve.CveID] = vinfo
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -102,7 +102,7 @@ func TestPackNamesOfUpdate(t *testing.T) {
 | 
			
		||||
			in: models.ScanResult{
 | 
			
		||||
				ScannedCves: models.VulnInfos{
 | 
			
		||||
					"CVE-2000-1000": models.VulnInfo{
 | 
			
		||||
						PackageNames: []string{"packA"},
 | 
			
		||||
						AffectedPackages: models.PackageStatuses{{Name: "packA"}},
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
@@ -123,9 +123,9 @@ func TestPackNamesOfUpdate(t *testing.T) {
 | 
			
		||||
			out: models.ScanResult{
 | 
			
		||||
				ScannedCves: models.VulnInfos{
 | 
			
		||||
					"CVE-2000-1000": models.VulnInfo{
 | 
			
		||||
						PackageNames: []string{
 | 
			
		||||
							"packA",
 | 
			
		||||
							"packB",
 | 
			
		||||
						AffectedPackages: models.PackageStatuses{
 | 
			
		||||
							{Name: "packA"},
 | 
			
		||||
							{Name: "packB"},
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
@@ -136,8 +136,8 @@ func TestPackNamesOfUpdate(t *testing.T) {
 | 
			
		||||
	util.Log = util.NewCustomLogger(config.ServerInfo{})
 | 
			
		||||
	for i, tt := range tests {
 | 
			
		||||
		RedHat{}.update(&tt.in, tt.defPacks)
 | 
			
		||||
		e := tt.out.ScannedCves["CVE-2000-1000"].PackageNames
 | 
			
		||||
		a := tt.in.ScannedCves["CVE-2000-1000"].PackageNames
 | 
			
		||||
		e := tt.out.ScannedCves["CVE-2000-1000"].AffectedPackages
 | 
			
		||||
		a := tt.in.ScannedCves["CVE-2000-1000"].AffectedPackages
 | 
			
		||||
		if !reflect.DeepEqual(a, e) {
 | 
			
		||||
			t.Errorf("[%d] expected: %v\n  actual: %v\n", i, e, a)
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -44,9 +44,9 @@ type defPacks struct {
 | 
			
		||||
	actuallyAffectedPackNames map[string]bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e defPacks) packNames() (names []string) {
 | 
			
		||||
func (e defPacks) toPackStatuses() (ps models.PackageStatuses) {
 | 
			
		||||
	for k := range e.actuallyAffectedPackNames {
 | 
			
		||||
		names = append(names, k)
 | 
			
		||||
		ps = append(ps, models.PackageStatus{Name: k})
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
@@ -192,7 +192,7 @@ func httpGet(url string, pack *models.Package, resChan chan<- response, errChan
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getDefsByPackNameFromOvalDB(family, osRelease string,
 | 
			
		||||
	packs models.Packages) (relatedDefs ovalResult, err error) {
 | 
			
		||||
	installedPacks models.Packages) (relatedDefs ovalResult, err error) {
 | 
			
		||||
 | 
			
		||||
	ovallog.Initialize(config.Conf.LogDir)
 | 
			
		||||
	path := config.Conf.OvalDBURL
 | 
			
		||||
@@ -211,7 +211,7 @@ func getDefsByPackNameFromOvalDB(family, osRelease string,
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer ovaldb.CloseDB()
 | 
			
		||||
	for _, pack := range packs {
 | 
			
		||||
	for _, pack := range installedPacks {
 | 
			
		||||
		definitions, err := ovaldb.GetByPackName(osRelease, pack.Name)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return relatedDefs, fmt.Errorf("Failed to get %s OVAL info by package name: %v", family, err)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user