[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