[Secure-testing-commits] r6436 - bin

fw at alioth.debian.org fw at alioth.debian.org
Thu Aug 30 09:51:23 UTC 2007


Author: fw
Date: 2007-08-30 09:51:23 +0000 (Thu, 30 Aug 2007)
New Revision: 6436

Modified:
   bin/dsa2list
Log:
* bin/dsa2list:
  New version that processes postings to debian-security-announce


Modified: bin/dsa2list
===================================================================
--- bin/dsa2list	2007-08-30 09:44:16 UTC (rev 6435)
+++ bin/dsa2list	2007-08-30 09:51:23 UTC (rev 6436)
@@ -1,5 +1,9 @@
 #!/usr/bin/python
 
+# Reasonably well-formed announcements to the debian-security-announce
+# mailing list can be piped through this script.  The result is an
+# entry suitable for data/DSA/list.
+
 import os
 import os.path
 import re
@@ -23,6 +27,9 @@
 
 import debian_support
 
+# DSAs do not contain version numbers with epochs, so they are useless
+# for our purposes.
+
 def fetch_dsc(url):
     u = urllib2.urlopen(url)
     assert u.readline()[0] == '-'       # OpenPGP cleartext signature header
@@ -45,65 +52,56 @@
     assert version is not None
     return (source, version)
 
-re_title = re.compile(r'<h2>(DSA-\d+-\d+) (\S+) -- (.*)</h2>')
-re_date = re.compile(r'^\s+<dd>(\d\d [A-Z][a-z][a-z] \d{4})</dd>$')
+re_title = re.compile(r'^Subject: .*\[DSA (\d+-\d+)\] .* fix(?:es)? (.*)$')
+re_date = re.compile(r'^([A-Z][a-z][a-z])[a-z]* (\d+)[a-z]+, (\d+)\s+http://.*')
 
 re_cve = re.compile('(CVE-\d{4}-\d{4})')
 release_headline_re = re.compile(
-    r'.*<h3>Debian GNU/Linux \S+ \(([a-z]+)\)</h3>.*')
-dscurl_re = re.compile(r'.*"(http://[^">]+\.dsc)".*')
+    r'^Debian GNU/Linux [0-9.]+ (?:\(|alias) ([a-z]+).*')
+dscurl_re = re.compile(r'^\s*(http://\S+\.dsc).*')
 
-if len(sys.argv) <> 2:
-    print "usage: dsa2list DSA-NUMBER"
+if len(sys.argv) > 1:
+    print "usage: dsa2list < MESSAGE"
     sys.exit(1)
 
-try:
-    dsa_number = int(sys.argv[1])
-except ValueError:
-    print `sys.argv[1]`, "is not an integer"
-    sys.exit(1)
-
 cve_names = {}
 package_notes = []
-for year in range(0, 6):
-    try:
-        url = "http://www.debian.org/security/%d/dsa-%d" % \
-              ((time.gmtime().tm_year - year), dsa_number)
-        u = urllib2.urlopen(url)
-    except urllib2.HTTPError:
+release = ''
+date = ''
+dsa_name = ''
+title = ''
+packages = {}
+for line in sys.stdin.readlines():
+    match = re_title.match(line)
+    if match:
+        (dsa_name, title) = match.groups()
         continue
 
-    title = ''
-    release = ''
-    date = ''
-    for line in u.readlines():
-        match = re_title.match(line)
-        if match:
-            title = "%s %s - %s" % match.groups()
-            continue
+    match = re_date.match(line)
+    if match:
+        (m, d, y) = match.groups()
+        date = "%s %s %s" % (d, m, y)
 
-        match = re_date.match(line)
-        if match:
-            (date,) = match.groups()
-        
-        for cve in re_cve.findall(line):
-            cve_names[cve] = True
-        
-        match  = release_headline_re.match(line)
-        if match:
-            (release,) = match.groups()
-            continue
-            
-        match = dscurl_re.match(line)
-        if match:
-            assert release
-            (source, version) = fetch_dsc(match.groups()[0])
-            package_notes.append((release, source, version))
-    break
+    for cve in re_cve.findall(line):
+        cve_names[cve] = True
 
+    match  = release_headline_re.match(line)
+    if match:
+        (release,) = match.groups()
+        continue
+
+    match = dscurl_re.match(line)
+    if match:
+        assert release
+        (source, version) = fetch_dsc(match.groups()[0])
+        packages[source] = True
+        package_notes.append((release, source, version))
+
 assert date
 assert title
-print "[%s] %s" % (date, title)
+packages = packages.keys()
+packages.sort()
+print "[%s] DSA-%s %s - %s" % (date, dsa_name, ' '.join(packages), title)
 
 cve_names = cve_names.keys()
 if cve_names:




More information about the Secure-testing-commits mailing list