]> git.decadent.org.uk Git - dak.git/commitdiff
Merge remote-tracking branch 'algernon/f/external_files' into merge
authorJoerg Jaspert <joerg@debian.org>
Mon, 17 Sep 2012 13:12:24 +0000 (15:12 +0200)
committerJoerg Jaspert <joerg@debian.org>
Mon, 17 Sep 2012 13:12:24 +0000 (15:12 +0200)
* algernon/f/external_files:
  update87: Insert a default use_extfiles value to the config table too
  debian/cron.hourly: Dump & push the external_files table to security
  Introduce the external_files table

Signed-off-by: Joerg Jaspert <joerg@debian.org>
1  2 
daklib/checks.py

diff --combined daklib/checks.py
index 38975e1eb542ba51b4dfa3d43c94e45c10f72f33,92f7e12278de34a2781a27272dab6f7052196c71..793bc681c0ec08539ee4bd10c1395deea603fcc1
@@@ -45,6 -45,12 +45,12 @@@ class Reject(Exception)
      """exception raised by failing checks"""
      pass
  
+ class RejectStupidMaintainerException(Exception):
+     """exception raised by failing the external hashes check"""
+     def __str__(self):
+         return "'%s' has mismatching %s from the external files db ('%s' [current] vs '%s' [external])" % self.args[:4]
  class Check(object):
      """base class for checks
  
@@@ -162,11 -168,48 +168,48 @@@ class HashesCheck(Check)
          changes = upload.changes
          for f in changes.files.itervalues():
              f.check(upload.directory)
 -            source = changes.source
 +        source = changes.source
          if source is not None:
              for f in source.files.itervalues():
                  f.check(upload.directory)
  
+ class ExternalHashesCheck(Check):
+     """Checks hashes in .changes and .dsc against an external database."""
+     def check_single(self, session, f):
+         q = session.execute("SELECT size, md5sum, sha1sum, sha256sum FROM external_files WHERE filename LIKE '%%/%s'" % f.filename)
+         (ext_size, ext_md5sum, ext_sha1sum, ext_sha256sum) = q.fetchone() or (None, None, None, None)
+         if not ext_size:
+             return
+         if ext_size != f.size:
+             raise RejectStupidMaintainerException(f.filename, 'size', f.size, ext_size))
+         if ext_md5sum != f.md5sum:
+             raise RejectStupidMaintainerException(f.filename, 'md5sum', f.md5sum, ext_md5sum)
+         if ext_sha1sum != f.sha1sum:
+             raise RejectStupidMaintainerException(f.filename, 'sha1sum', f.sha1sum, ext_sha1sum)
+         if ext_sha256sum != f.sha256sum:
+             raise RejectStupidMaintainerException(f.filename, 'sha256sum', f.sha256sum, ext_sha256sum)
+     def check(self, upload):
+         cnf = Config()
+         if not cnf.use_extfiles:
+             return
+         session = upload.session
+         changes = upload.changes
+         for f in changes.files.itervalues():
+             self.check_single(session, f)
+         source = changes.source
+         if source is not None:
+             for f in source.files.itervalues():
+                 self.check_single(session, f)
  class BinaryCheck(Check):
      """Check binary packages for syntax errors."""
      def check(self, upload):