diff --git a/rpm_to_cve_parser/rhel_rpm_to_cve.rb b/rpm_to_cve_parser/rhel_rpm_to_cve.rb index bd29305..b47786a 100755 --- a/rpm_to_cve_parser/rhel_rpm_to_cve.rb +++ b/rpm_to_cve_parser/rhel_rpm_to_cve.rb @@ -7,13 +7,11 @@ class RhelRpmToCve def initialize(filepath) @filepath = filepath @file = File.read(filepath) - @xml = Ox.load(file, mode: :hash) + @xml = Ox.parse(file) end def list_pkg_names - xml[:rpms][:rpm].map do |key| - key.first[:rpm] - end + xml.rpms.locate("?/@rpm") end def pkg_exists?(pkg_name) @@ -22,8 +20,8 @@ class RhelRpmToCve def cves_per_pkg_name(pkg_name) if pkg_exists? pkg_name - results = find_pkg(pkg_name).map do |r| - r[:cve] + results = find_pkg(pkg_name).locate('*/cve').map do |r| + r.text end.compact { @@ -36,9 +34,14 @@ class RhelRpmToCve end def find_pkg(pkg_name) - xml[:rpms][:rpm].select do |results| - results if results.first[:rpm] == pkg_name - end.first + xml.rpms.locate("rpm[@rpm=#{pkg_name}]").first end + def convert_to_json + pkgs = list_pkg_names + pkgs_and_cves = pkgs.map do |pkg_name| + cves_per_pkg_name(pkg_name) + end + pkgs_and_cves.to_json + end end diff --git a/rpm_to_cve_parser/rpm-to-cve.xml b/rpm_to_cve_parser/rpm-to-cve.xml index 072dad7..78f6bdc 100644 --- a/rpm_to_cve_parser/rpm-to-cve.xml +++ b/rpm_to_cve_parser/rpm-to-cve.xml @@ -1291032,4 +1291032,301 @@ CVE-2020-15683 CVE-2020-15969 + + RHSA-2020:4330 + i686 + ppc64 + s390x + x86_64 + CVE-2020-15683 + CVE-2020-15969 + + + RHSA-2020:4330 + ppc64 + s390x + x86_64 + CVE-2020-15683 + CVE-2020-15969 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4331 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + + + RHSA-2020:4332 + ppc64le + x86_64 + CVE-2020-14385 + CVE-2020-14386 + diff --git a/rpm_to_cve_parser/rpm_pkg_audit.rb b/rpm_to_cve_parser/rpm_pkg_audit.rb index b82820a..cca565c 100755 --- a/rpm_to_cve_parser/rpm_pkg_audit.rb +++ b/rpm_to_cve_parser/rpm_pkg_audit.rb @@ -2,8 +2,7 @@ # frozen_string_literal: true require 'optparse' -require 'pry' -require 'pp' +require 'json' require './rhel_rpm_to_cve' data_file = './rpm-to-cve.xml' @@ -26,7 +25,8 @@ pkg_name = options[:pkg] rpm_auditer = RhelRpmToCve.new(data_file) if pkg_name - pp rpm_auditer.cves_per_pkg_name(pkg_name) + json = rpm_auditer.cves_per_pkg_name(pkg_name).to_json + puts JSON.pretty_generate(JSON.parse(json)) else options.key?(:list) puts rpm_auditer.list_pkg_names.sort end