SVN: security/cve_reader.py

megabajt megabajt at pld-linux.org
Fri Oct 19 22:32:14 CEST 2007


Author: megabajt
Date: Fri Oct 19 22:32:14 2007
New Revision: 8831

Modified:
   security/cve_reader.py
Log:
- split cves and resolved entries into separate nodes


Modified: security/cve_reader.py
==============================================================================
--- security/cve_reader.py	(original)
+++ security/cve_reader.py	Fri Oct 19 22:32:14 2007
@@ -72,15 +72,15 @@
 			continue
 
 		if lines[i] == "$Log$":
-			cve = ""
+			cve = []
 			cvslog = 1
 			
 			while i + cvslog < len(lines) and not re.match('^Index\:.*\.spec', lines[i + cvslog]):
 				if re.match('.*Revision.*', lines[i+cvslog]):
-					if cve != "":
+					if len(cve) > 0:
 						# Save CVEs from the last revision
 						addCVEnote(rootnode, spec, cve, p[1], p[3])
-						cve = ""
+						cve = []
 					# Set new revison data
 					p = lines[i+cvslog].split(" ")
 				else:
@@ -89,11 +89,11 @@
 						# Good, found CVE entries. Extract them!
 						cve_list = re.findall("CVE-[0-9\-]+", lines[i+cvslog])
 						for iter in range(len(cve_list)):
-							cve += "%s " % cve_list[iter]
+							cve.append(cve_list[iter])
 				
 				cvslog = cvslog + 1
 			
-			if cve != "":
+			if len(cve) > 0:
 				addCVEnote(rootnode, spec, cve, p[1], p[3])
 			
 			# Don't check already checked lines
@@ -111,24 +111,30 @@
 	fs.close()
 
 def addCVEnote(rootnode, spec, cve, revision, date):
-	
-	resolved = ""
 
 	res = getCVSentry(spec, revision)
-
-	if res == 0:
-		resolved = revision
-	else:
-		for i in range(len(res)):
-			resolved += "%s " % res[i]
 	
 	# Generate package node
 	package = ET.Element("package")
 	ET.SubElement(package, "date").text = date
 	ET.SubElement(package, "spec").text = spec
 	ET.SubElement(package, "revision").text = revision
-	ET.SubElement(package, "resolved").text = resolved
-	ET.SubElement(package, "cves").text = cve
+	
+	resolved = ET.SubElement(package, "resolved")
+	if res == 0:
+		entry = ET.SubElement(resolved, "entry")
+		ET.SubElement(entry, "revision").text = revision
+	else:
+		for i in range(len(res)):
+			data = res[i].split(": ")
+			
+			entry = ET.SubElement(resolved, "entry")
+			ET.SubElement(entry, "autotag").text = data[0]
+			ET.SubElement(entry, "revision").text = data[1] 
+	
+	cves = ET.SubElement(package, "cves")
+	for i in range(len(cve)):
+		ET.SubElement(cves, "entry").text = cve[i]
 	
 	if len(rootnode) == 0:
 		# rootnode is empty and has no children. I can easily add new (without sorting)
@@ -239,15 +245,22 @@
 		end = RSSITEMS
 
 	for item in range(end):
-		pkg = getPackageData(rootnode[item], ['date', 'spec', 'revision', 'cves'])
+		pkg = getPackageData(rootnode[item], ['date', 'spec', 'revision'])
+		
+		# retrives CVEs
+		cves = ""
+		idx = getTagIndex(rootnode[item], 'cves')
 		
+		for i in range(len(rootnode[item][idx])):
+			cves += "%s " % rootnode[item][idx][i].text
+			
 		# date[0] - year; date[1] - month; date[2] - day
 		date = pkg['date'].split('/')
 
 		rssitem.insert(0,
 			PyRSS2Gen.RSSItem(
 				title = "New CVE fixes for %s" % pkg['spec'],
-				description = "%s on rev. %s resolves: %s" % (pkg['spec'], pkg['revision'], pkg['cves']),
+				description = "%s on rev. %s resolves: %s" % (pkg['spec'], pkg['revision'], cves),
 				pubDate = datetime.datetime(int(date[0]), int(date[1]), int(date[2]), 0, 0, 0)
 			)
 		)


More information about the pld-cvs-commit mailing list