mirror of
https://git.yoctoproject.org/poky
synced 2026-05-08 05:09:24 +00:00
cve-update-db-native: add progress handler
(From OE-Core rev: 79ae2e82b8ec11578177f428060b568d6c7d44ca) Signed-off-by: Chris Laplante <chris.laplante@agilent.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
7c9df041f4
commit
1b836a17ec
@@ -29,6 +29,7 @@ python do_populate_cve_db() {
|
||||
Update NVD database with json data feed
|
||||
"""
|
||||
import bb.utils
|
||||
import bb.progress
|
||||
import sqlite3, urllib, urllib.parse, shutil, gzip
|
||||
from datetime import date
|
||||
|
||||
@@ -60,54 +61,57 @@ python do_populate_cve_db() {
|
||||
|
||||
initialize_db(c)
|
||||
|
||||
for year in range(YEAR_START, date.today().year + 1):
|
||||
year_url = BASE_URL + str(year)
|
||||
meta_url = year_url + ".meta"
|
||||
json_url = year_url + ".json.gz"
|
||||
with bb.progress.ProgressHandler(d) as ph:
|
||||
total_years = date.today().year + 1 - YEAR_START
|
||||
for i, year in enumerate(range(YEAR_START, date.today().year + 1)):
|
||||
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
|
||||
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
|
||||
# Retrieve meta last modified date
|
||||
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])
|
||||
response = urllib.request.urlopen(meta_url)
|
||||
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)
|
||||
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
|
||||
|
||||
# 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())
|
||||
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
|
||||
|
||||
cve_f.close()
|
||||
conn.commit()
|
||||
conn.close()
|
||||
# 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:
|
||||
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):
|
||||
|
||||
Reference in New Issue
Block a user