[Secure-testing-commits] r6009 - bin

fw at alioth.debian.org fw at alioth.debian.org
Sat Jun 16 10:41:23 UTC 2007


Author: fw
Date: 2007-06-16 10:41:23 +0000 (Sat, 16 Jun 2007)
New Revision: 6009

Added:
   bin/mass-bug-filer
Log:
* bin/mass-bug-filer:
  Small script to file security bugs, with a few sanity checks.


Added: bin/mass-bug-filer
===================================================================
--- bin/mass-bug-filer	                        (rev 0)
+++ bin/mass-bug-filer	2007-06-16 10:41:23 UTC (rev 6009)
@@ -0,0 +1,85 @@
+#!/usr/bin/python
+
+import sys
+import apt
+import apt_pkg
+import os
+import re
+
+if len(sys.argv) < 3:
+    print >>sys.stderr, "usage: %s FILE PACKAGE..." % sys.argv[0]
+    sys.exit(1)
+
+message_file = file(sys.argv[1])
+packages = sys.argv[2:]
+
+cache = apt.Cache()
+errors = False
+for p in packages:
+    if not cache.has_key(p):
+        print >>sys.stderr, "error: no such package:", p
+        errors = True
+if errors:
+    sys.exit(2)
+
+h_subject = None
+h_to = 'submit at bugs.debian.org'
+h_bug = {'Severity' : 'grave',
+         'Tags' : 'security'}
+re_header = re.compile('^([a-zA-Z0-9-]+):\s*(\S.*?)\s*$')
+source_lines = message_file.readlines()
+state = 0
+body = []
+for line in source_lines:
+    if state == 1:
+        body.append(line)
+        continue
+        
+    if line == '\n':
+        if h_subject is None:
+            print >>sys.stderr, "error: missing Subject header"
+            sys.exit(2)
+        state = 1
+        continue
+
+    # state == 0
+    match = re_header.match(line)
+    if match is None:
+        print >>sys.stderr, "error: invalid line:", line
+        sys.exit(2)
+    (k, v) = match.groups()
+    if k == "Subject":
+        h_subject = v
+        continue
+    if h_bug.has_key(k):
+        h_bug[k] = v
+        continue
+    print >>sys.stderr, "error: invalid header field:", k
+    sys.exit(2)
+
+def make_message(pkg):
+    yield "To: %s\nSubject: %s\n\n" % (h_to, h_subject)
+    yield "Package: %s\n" % pkg
+    for x in h_bug.iteritems():
+        yield "%s: %s\n" % x
+    yield "\n"
+    for x in body:
+        yield x
+
+def sendmail(lines):
+    p = os.popen("/usr/lib/sendmail -oee -i -t", "w")
+    closed = False
+    try:
+        for x in lines:
+            p.write(x)
+    finally:
+        p.close()
+
+for p in packages:
+    sendmail(make_message(p))
+
+for p in packages:
+    print "\t- %s <unfixed> (bug filed)" % p
+
+
+




More information about the Secure-testing-commits mailing list