1
0
mirror of https://git.yoctoproject.org/poky synced 2026-06-04 02:00:04 +00:00

cve-update-db-native: add progress handler

(From OE-Core rev: 694f5107388c5301b82581007ff5fe96dfa8769d)

Signed-off-by: Chris Laplante <chris.laplante@agilent.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 79ae2e82b8ec11578177f428060b568d6c7d44ca)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Chris Laplante
2020-09-09 16:51:06 -04:00
committed by Richard Purdie
parent ed79212913
commit 5d97a53f1e
+46 -42
View File
@@ -29,6 +29,7 @@ python do_populate_cve_db() {
Update NVD database with json data feed Update NVD database with json data feed
""" """
import bb.utils import bb.utils
import bb.progress
import sqlite3, urllib, urllib.parse, shutil, gzip import sqlite3, urllib, urllib.parse, shutil, gzip
from datetime import date from datetime import date
@@ -60,54 +61,57 @@ python do_populate_cve_db() {
initialize_db(c) initialize_db(c)
for year in range(YEAR_START, date.today().year + 1): with bb.progress.ProgressHandler(d) as ph:
year_url = BASE_URL + str(year) total_years = date.today().year + 1 - YEAR_START
meta_url = year_url + ".meta" for i, year in enumerate(range(YEAR_START, date.today().year + 1)):
json_url = year_url + ".json.gz" ph.update((float(i + 1) / total_years) * 100)
year_url = BASE_URL + str(year)
meta_url = year_url + ".meta"
json_url = year_url + ".json.gz"
# Retrieve meta last modified date # Retrieve meta last modified date
try:
response = urllib.request.urlopen(meta_url)
except urllib.error.URLError as e:
cve_f.write('Warning: CVE db update error, Unable to fetch CVE data.\n\n')
bb.warn("Failed to fetch CVE data (%s)" % e.reason)
return
if response:
for l in response.read().decode("utf-8").splitlines():
key, value = l.split(":", 1)
if key == "lastModifiedDate":
last_modified = value
break
else:
bb.warn("Cannot parse CVE metadata, update failed")
return
# Compare with current db last modified date
c.execute("select DATE from META where YEAR = ?", (year,))
meta = c.fetchone()
if not meta or meta[0] != last_modified:
# Clear products table entries corresponding to current year
c.execute("delete from PRODUCTS where ID like ?", ('CVE-%d%%' % year,))
# Update db with current year json file
try: try:
response = urllib.request.urlopen(json_url) response = urllib.request.urlopen(meta_url)
if response:
update_db(c, gzip.decompress(response.read()).decode('utf-8'))
c.execute("insert or replace into META values (?, ?)", [year, last_modified])
except urllib.error.URLError as e: except urllib.error.URLError as e:
cve_f.write('Warning: CVE db update error, CVE data is outdated.\n\n') cve_f.write('Warning: CVE db update error, Unable to fetch CVE data.\n\n')
bb.warn("Cannot parse CVE data (%s), update failed" % e.reason) bb.warn("Failed to fetch CVE data (%s)" % e.reason)
return return
# Update success, set the date to cve_check file. if response:
if year == date.today().year: for l in response.read().decode("utf-8").splitlines():
cve_f.write('CVE database update : %s\n\n' % date.today()) key, value = l.split(":", 1)
if key == "lastModifiedDate":
last_modified = value
break
else:
bb.warn("Cannot parse CVE metadata, update failed")
return
cve_f.close() # Compare with current db last modified date
conn.commit() c.execute("select DATE from META where YEAR = ?", (year,))
conn.close() meta = c.fetchone()
if not meta or meta[0] != last_modified:
# Clear products table entries corresponding to current year
c.execute("delete from PRODUCTS where ID like ?", ('CVE-%d%%' % year,))
# Update db with current year json file
try:
response = urllib.request.urlopen(json_url)
if response:
update_db(c, gzip.decompress(response.read()).decode('utf-8'))
c.execute("insert or replace into META values (?, ?)", [year, last_modified])
except urllib.error.URLError as e:
cve_f.write('Warning: CVE db update error, CVE data is outdated.\n\n')
bb.warn("Cannot parse CVE data (%s), update failed" % e.reason)
return
# Update success, set the date to cve_check file.
if year == date.today().year:
cve_f.write('CVE database update : %s\n\n' % date.today())
cve_f.close()
conn.commit()
conn.close()
} }
def initialize_db(c): def initialize_db(c):