#!/usr/bin/perl -w
# dumps all CVSS scores for all released updates into CSV.
use strict;

my $dn = `dirname $0`;chomp($dn);
my $pwd = `pwd`;chomp($pwd);
if ($dn !~ /^\//) { $dn = $pwd . "/" . $dn; }
push @INC,$dn;

require CanDBReader;

require SMASHData;

read_all_cached_issues();

my $mode = pop @ARGV;
$mode = "kernel" if (!defined($mode));

my @analysis = ();
my @nolivepatch = ();
my @nocvssv3 = ();
my @nocvssv3other = ();
my @differentcvssv3 = ();

my %unclosedbugs = ();

my %cve2cvss = ();

my %allcvss7 = ();

unlink("badscore.csv");

my %affected = ();

#open(CVSS,">allreports.txt");
foreach my $cve (sort keys %SMASHData::state) {
	if (!defined($SMASHData::pkgstate{$cve})) {
		next;
	}
	my %prods = %{$SMASHData::pkgstate{$cve}};

	my $basescore 		= "unknown";
	my $basevector		= "unknown";
	my $nvdbasescore	= "unknown";
	my $nvdbasevector	= "unknown";

	my $isaffected = 0;
	my $isreleased = 0;

	if (defined($SMASHData::cvssv3{$cve}))  {
		my %entry = %{$SMASHData::cvssv3{$cve}};
		my %score;
		my %nvdscore;

		if (defined($entry{'SUSE'})) {
			%score = %{$entry{'SUSE'}};
			$basescore = $score{'base_score'};
			$basevector = $score{'base_vector'};
		}
		if (defined($entry{'National Vulnerability Database'})) {
			%nvdscore = %{$entry{'National Vulnerability Database'}};
			$nvdbasescore = $nvdscore{'base_score'};
			$nvdbasevector = $nvdscore{'base_vector'};
		}
	}
	# { PROD -> { PKG -> STATE } }


	foreach my $prod (keys %prods) {
		next if ($prod eq "SLES_TERADATA-10-SP3");
		next if ($prod !~ /15.SP3/);

		my %pkgstates = %{$prods{$prod}};
		#print STDERR "$prod\n";

		foreach my $pkg (sort keys %pkgstates) {
			my $state = $pkgstates{$pkg};

			$isaffected = 1 if ($state eq "Affected");
			$isreleased = 1 if ($state eq "Released");
		}
	}

	my $basenum = 42;
	if ($nvdbasescore  =~ /^(\d+.*)/) {
		$basenum = $1;
	}

	# TEMP
	my $xscore = $basescore;
	if ($xscore eq "unknown") { $xscore = $nvdbasescore; }

	if ($isaffected) {
		print "$cve,affected,$xscore\n";
	}
	if ($isreleased) {
		print "$cve,released,$xscore\n";
	}


}

