]> git.decadent.org.uk Git - dak.git/blobdiff - dak/new_security_install.py
Merge branch 'master' into security
[dak.git] / dak / new_security_install.py
index 4cfd2133a92676d948af481d462597c26535d036..854a5834919e96aac6be9f64eb9ace94bec8d5e7 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-# Wrapper for Debian Security team
+""" Wrapper for Debian Security team """
 # Copyright (C) 2006  Anthony Towns <ajt@debian.org>
 
 # This program is free software; you can redistribute it and/or modify
 
 ################################################################################
 
+import apt_pkg, os, sys, pwd, time, commands
+
 from daklib import queue
-from daklib import logging
+from daklib import daklog
 from daklib import utils
-from daklib import database
-import apt_pkg, os, sys, pwd, time, re, commands
-
-re_taint_free = re.compile(r"^['/;\-\+\.~\s\w]+$");
+from daklib.dbconn import DBConn, get_build_queue, get_suite_architectures
+from daklib.regexes import re_taint_free
 
 Cnf = None
 Options = None
@@ -60,9 +60,7 @@ def init():
 
     Options = Cnf.SubTree("Security-Install::Options")
 
-    whoami = os.getuid()
-    whoamifull = pwd.getpwuid(whoami)
-    username = whoamifull[0]
+    username = utils.getusername()
     if username != "dak":
         print "Non-dak user: %s" % username
         Options["Sudo"] = "y"
@@ -78,7 +76,7 @@ def init():
     if Options["No-Action"]:
         Options["Sudo"] = ""
     if not Options["Sudo"] and not Options["No-Action"]:
-        Logger = Upload.Logger = logging.Logger(Cnf, "new-security-install")
+        Logger = Upload.Logger = daklog.Logger(Cnf, "new-security-install")
 
     return arguments
 
@@ -154,9 +152,9 @@ def advisory_info():
     svs = srcverarches.keys()
     svs.sort()
     for sv in svs:
-        as = srcverarches[sv].keys()
-        as.sort()
-        print " %s (%s)" % (sv, ", ".join(as))
+        as_ = srcverarches[sv].keys()
+        as_.sort()
+        print " %s (%s)" % (sv, ", ".join(as_))
 
 def prompt(opts, default):
     p = ""
@@ -235,10 +233,6 @@ def actually_upload(changes_files):
         files = Upload.pkg.files
         changes = Upload.pkg.changes
         dsc = Upload.pkg.dsc
-        # We have the changes, now return if its amd64, to not upload them to ftp-master
-        if changes["distribution"].has_key("oldstable-security") and changes["architecture"].has_key("amd64"):
-            print "Not uploading amd64 oldstable-security changes to ftp-master\n"
-            continue
         # Build the file list for this .changes file
         for file in files.keys():
             poolname = os.path.join(Cnf["Dir::Root"], Cnf["Dir::PoolRoot"],
@@ -282,9 +276,14 @@ def actually_upload(changes_files):
     for uri in uploads.keys():
         uploads[uri].extend(changesfiles[uri])
         (host, path) = uri.split(":")
-        file_list = " ".join(uploads[uri])
-        print "Uploading files to %s..." % (host)
-        spawn("lftp -c 'open %s; cd %s; put %s'" % (host, path, file_list))
+        #        file_list = " ".join(uploads[uri])
+        print "Moving files to UploadQueue"
+        for filename in uploads[uri]:
+            utils.copy(filename, Cnf["Dir::Upload"])
+            # .changes files have already been moved to queue/done by p-a
+            if not filename.endswith('.changes'):
+                remove_from_buildd(suites, filename)
+        #spawn("lftp -c 'open %s; cd %s; put %s'" % (host, path, file_list))
 
     if not Options["No-Action"]:
         filename = "%s/testing-processed" % (Cnf["Dir::Log"])
@@ -294,6 +293,20 @@ def actually_upload(changes_files):
                 file.write(" ".join([source, version])+'\n')
         file.close()
 
+def remove_from_buildd(suites, filename):
+    """Check the buildd dir for each suite and remove the file if needed"""
+    builddbase = Cnf["Dir::QueueBuild"]
+    filebase = os.path.basename(filename)
+    for s in suites:
+        try:
+            os.unlink(os.path.join(builddbase, s, filebase))
+        except OSError, e:
+            pass
+            # About no value printing this warning - it only confuses the security team,
+            # yet makes no difference otherwise.
+            #utils.warn("Problem removing %s from buildd queue %s [%s]" % (filebase, s, str(e)))
+
+
 def generate_advisory(template):
     global changes, advisory
 
@@ -374,7 +387,7 @@ def generate_advisory(template):
                                        ver, suite)
         adv += "%s\n%s\n\n" % (suite_header, "-"*len(suite_header))
 
-        arches = Cnf.ValueList("Suite::%s::Architectures" % suite)
+        arches = [x.arch_name for x in get_suite_architectures(suite)]
         if "source" in arches:
             arches.remove("source")
         if "all" in arches:
@@ -443,7 +456,7 @@ def sudo(arg, fn, exit):
 def do_Approve(): sudo("A", _do_Approve, True)
 def _do_Approve():
     # 1. dump advisory in drafts
-    draft = "/org/security.debian.org/advisories/drafts/%s" % (advisory)
+    draft = "/org/security-master.debian.org/advisories/drafts/%s" % (advisory)
     print "Advisory in %s" % (draft)
     if not Options["No-Action"]:
         adv_file = "./advisory.%s" % (advisory)
@@ -461,12 +474,15 @@ def _do_Approve():
     # 3. run dak make-suite-file-list / apt-ftparchve / dak generate-releases
     print "Updating file lists for apt-ftparchive..."
     spawn("dak make-suite-file-list")
+    spawn("dak generate-filelist")
     print "Updating Packages and Sources files..."
+    spawn("/org/security-master.debian.org/dak/config/debian-security/map.sh")
     spawn("apt-ftparchive generate %s" % (utils.which_apt_conf_file()))
     print "Updating Release files..."
     spawn("dak generate-releases")
     print "Triggering security mirrors..."
-    spawn("sudo -u archvsync /home/archvsync/signal_security")
+    spawn("/org/security-master.debian.org/dak/config/debian-security/make-mirror.sh")
+    spawn("sudo -u archvsync -H /home/archvsync/signal_security")
 
     # 4. chdir to done - do upload
     if not Options["No-Action"]:
@@ -478,9 +494,11 @@ def _do_Disembargo():
     if os.getcwd() != Cnf["Dir::Queue::Embargoed"].rstrip("/"):
         utils.fubar("Can only disembargo from %s" % Cnf["Dir::Queue::Embargoed"])
 
+    session = DBConn().session()
+
     dest = Cnf["Dir::Queue::Unembargoed"]
-    emb_q = database.get_or_set_queue_id("embargoed")
-    une_q = database.get_or_set_queue_id("unembargoed")
+    emb_q = get_build_queue("embargoed", session)
+    une_q = get_build_queue("unembargoed", session)
 
     for c in changes:
         print "Disembargoing %s" % (c)
@@ -491,7 +509,8 @@ def _do_Disembargo():
 
         if "source" in Upload.pkg.changes["architecture"].keys():
             print "Adding %s %s to disembargo table" % (Upload.pkg.changes["source"], Upload.pkg.changes["version"])
-            Upload.projectB.query("INSERT INTO disembargo (package, version) VALUES ('%s', '%s')" % (Upload.pkg.changes["source"], Upload.pkg.changes["version"]))
+            session.execute("INSERT INTO disembargo (package, version) VALUES (:package, :version)",
+                {'package': Upload.pkg.changes["source"], 'version': Upload.pkg.changes["version"]})
 
         files = {}
         for suite in Upload.pkg.changes["distribution"].keys():
@@ -504,10 +523,10 @@ def _do_Disembargo():
                 files[os.path.join(dest_dir, file)] = 1
 
         files = files.keys()
-        Upload.projectB.query("BEGIN WORK")
         for f in files:
-            Upload.projectB.query("UPDATE queue_build SET queue = %s WHERE filename = '%s' AND queue = %s" % (une_q, f, emb_q))
-        Upload.projectB.query("COMMIT WORK")
+            session.execute("UPDATE queue_build SET queue = :unembargoed WHERE filename = :filename AND queue = :embargoed",
+                {'unembargoed': une_q.queue_id, 'filename': f, 'embargoed': emb_q.queue_id})
+        session.commit()
 
         for file in Upload.pkg.files.keys():
             utils.copy(file, os.path.join(dest, file))
@@ -520,9 +539,14 @@ def _do_Disembargo():
         utils.copy(k, os.path.join(dest, k))
         os.unlink(k)
 
+    session.commit()
+
 def do_Reject(): sudo("R", _do_Reject, True)
 def _do_Reject():
     global changes
+
+    session = DBConn().session()
+
     for c in changes:
         print "Rejecting %s..." % (c)
         Upload.init_vars()
@@ -544,17 +568,19 @@ def _do_Reject():
         if not aborted:
             os.unlink(c[:-8]+".dak")
             for f in files:
-                Upload.projectB.query(
-                    "DELETE FROM queue_build WHERE filename = '%s'" % (f))
+                session.execute("DELETE FROM queue_build WHERE filename = :filename",
+                    {'filename': f})
                 os.unlink(f)
 
     print "Updating buildd information..."
-    spawn("/org/security.debian.org/dak/config/debian-security/cron.buildd")
+    spawn("/org/security-master.debian.org/dak/config/debian-security/cron.buildd")
 
     adv_file = "./advisory.%s" % (advisory)
     if os.path.exists(adv_file):
         os.unlink(adv_file)
 
+    session.commit()
+
 def do_DropAdvisory():
     for c in changes:
         Upload.init_vars()