Author: shadzik
Date: Mon Apr  7 20:53:52 2008
New Revision: 9694

Modified:
   security/cve_reader.py
Log:
- back to working revision (9147) with my latest 'guid fix'


Modified: security/cve_reader.py
==============================================================================
--- security/cve_reader.py      (original)
+++ security/cve_reader.py      Mon Apr  7 20:53:52 2008
@@ -66,7 +66,6 @@
                        continue
 
                if lines[i] == "$Log$":
-                       commitinfo = -1
                        cve = []
                        cvslog = 1
                        foundrange = 0
@@ -78,18 +77,19 @@
                                        if len(cve) > 0:
                                                # Check if parseSPEC has to be 
used
                                                if foundrange == 1 and 
foundcveafterrange == 1:
-                                                       commitinfo = 
parseSPEC(spec, mem)
+                                                       p = parseSPEC(spec, mem)
                                                
                                                # p has -1 value on some error
-                                               if commitinfo != -1:
+                                               if p != -1:
                                                        # Save CVEs from the 
last revision
-                                                       addCVEnote(rootnode, 
spec, cve, commitinfo)
+                                                       # p[1] is the revision 
and p[3] is the date of commit
+                                                       addCVEnote(rootnode, 
spec, cve, p[1], p[3])
 
                                                # Clear cve list
                                                cve = []
                                        
                                        # Set new revison data
-                                       commitinfo = lines[i+cvslog].split(" ")
+                                       p = lines[i+cvslog].split(" ")
                                        
                                        foundrange = 0
                                        foundcveafterrange = 0
@@ -119,7 +119,7 @@
                                cvslog = cvslog + 1
                        
                        if len(cve) > 0:
-                               addCVEnote(rootnode, spec, cve, commitinfo)
+                               addCVEnote(rootnode, spec, cve, p[1], p[3])
                        
                        # Don't check already checked lines
                        i = i + cvslog - 1
@@ -166,40 +166,30 @@
        return -1
 
 # adds new <package> into the XML tree
-def addCVEnote(rootnode, spec, cve, commitinfo):
-       
-       commit = {
-                 "revision": commitinfo[1],
-                 # Use only one date format (yyyy/mm/dd)
-                 "day": commitinfo[3].replace('-', '/', 2),
-                 "hour": commitinfo[4],
-                 "author": commitinfo[6]
-                }
+def addCVEnote(rootnode, spec, cve, revision, date):
 
-       res = getCVSentry(spec, commit["revision"])
+       res = getCVSentry(spec, revision)
+       
+       # Use only one date format
+       date = date.replace('-', '/', 2)
        
        # Generate package node
        package = ET.Element("package")
+       ET.SubElement(package, "date").text = date
        ET.SubElement(package, "spec").text = spec
-       
-       info = ET.SubElement(package, "info")
-       ET.SubElement(info, "revision").text = commit["revision"]
-       date = ET.SubElement(info, "date")
-       ET.SubElement(date, "day").text = commit["day"]
-       ET.SubElement(date, "hour").text = commit["hour"]
-       ET.SubElement(info, "author").text = commit["author"]
+       ET.SubElement(package, "revision").text = revision
        
        resolved = ET.SubElement(package, "resolved")
        if res == 0:
                entry = ET.SubElement(resolved, "entry")
-               ET.SubElement(entry, "revision").text = commit["revision"]
+               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]
+                       ET.SubElement(entry, "revision").text = data[1] 
        
        cves = ET.SubElement(package, "cves")
        for i in range(len(cve)):
@@ -208,47 +198,29 @@
        if len(rootnode) == 0:
                # rootnode is empty and has no children. I can easily add new 
(without sorting)
                rootnode.append(package)
-       else:           
+       else:
+               prevdate = ""
+               
                # Maybe new entry can be added at the beginning? I need check 
it.
                for item in range(len(rootnode)):       
-                       if cmpnode(rootnode[item], package) <= 0:
+                       subitem = getTagIndex(rootnode[item], 'date')
+                       
+                       prevdate = rootnode[item][subitem].text
+
+                       if cmp(prevdate, date) <= 0:
                                rootnode.insert(item, package)
                                return
 
                # Huh, new entry is the youngest one
                rootnode.insert(len(rootnode), package)
 
-# compare given nodes
-def cmpnode(node1, node2):
-       # -1 node1 is older than node2
-       #  0 node1 is equal to node2
-       #  1 node1 is younger than node2
-
-       day1 = node1.find("info/date/day").text
-       day2 = node2.find("info/date/day").text
-       
-       print day1
-
-       result = cmp(day1, day2)
-       
-       if result != 0:
-               return result
-       
-       # Time in format hh:mm:ss
-       hour1 = node1.find("info/date/hour").text
-       hour2 = node2.find("info/date/hour").text
-       
-       # Make hour a list
-       hour1 = hour1.split(":")
-       hour2 = hour2.split(":")
-       
-       for iter in range(3):
-               result = cmp(hour1[iter], hour2[iter])
-       
-               if result != 0:
-                       return result
-       
-       return 0
+# returns index (tag position) in the node which is a list
+def getTagIndex(node, tag):
+       item = ""
+
+       for item in range(0, len(node)):
+               if node[item].tag == tag:
+                       return item
 
 # get cvs log entries (auto-tags) for specs
 def getCVSentry(spec, revision):
@@ -315,10 +287,18 @@
                                        break
        return 0        
 
+# returns value (text attribute) of package subnodes specified in taglist
+def getPackageData(package, taglist):
+       pkg = {}
+       
+       for i in range(len(taglist)):
+               idx = getTagIndex(package, taglist[i])
+               pkg[taglist[i]] = package[idx].text
+       
+       return pkg
+
 # generates new RSS file
 def genRSSFeed(rootnode):
-       cves = []
-       rsscves = ""
        rssitem = []
 
        if RSSITEMS > len(rootnode):
@@ -327,27 +307,23 @@
                end = RSSITEMS
 
        for item in range(end):
+               pkg = getPackageData(rootnode[item], ['date', 'spec', 
'revision'])
                
-               date = rootnode[item].find("info/date/day").text
-               hour = rootnode[item].find("info/date/hour").text
-               revision = rootnode[item].find("info/revision").text
-               spec = rootnode[item].find("spec").text
-               
-               cves = rootnode[item].findall("cves/entry")
-               
-               for i in range(len(cves)):
-                       rsscves += "<a 
href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=%s\";>%s</a> " % 
(cves[i].text, cves[i].text)
+               # retrives CVEs
+               cves = ""
+               idx = getTagIndex(rootnode[item], 'cves')
                
+               for i in range(len(rootnode[item][idx])):
+                       cves += "<a 
href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=%s\";>%s</a> " % 
(rootnode[item][idx][i].text, rootnode[item][idx][i].text)
+                       
                # date[0] - year; date[1] - month; date[2] - day
-               date = date.split('/')
-               
-               hour = hour.split(':')
-               
+               date = pkg['date'].split('/')
+
                rssitem.insert(0,
                        PyRSS2Gen.RSSItem(
-                               title = "New CVE fixes for %s" % spec,
-                               description = "%s on revision %s resolves: %s" 
% (spec, revision, rsscves),
-                               pubDate = datetime.datetime(int(date[0]), 
int(date[1]), int(date[2]), int(hour[0]), int(hour[1]), int(hour[2])),
+                               title = "New CVE fixes for %s" % pkg['spec'],
+                               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)
                                guid = 
PyRSS2Gen.Guid("http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SPECS/%s?rev=%s"; % 
(pkg['spec'], pkg['revision']))
                        )
                )
_______________________________________________
pld-cvs-commit mailing list
pld-cvs-commit@lists.pld-linux.org
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to