]> git.decadent.org.uk Git - dak.git/blobdiff - dak/edit_transitions.py
merge from joerg
[dak.git] / dak / edit_transitions.py
index 0d75652b783457fbd532b4a86a9734325a72c08d..e283a46a3499153a86c9491a95f284b26811cdd4 100755 (executable)
@@ -24,7 +24,7 @@
 
 ################################################################################
 
-import os, pg, sys, time
+import os, pg, sys, time, errno
 import apt_pkg
 import daklib.database
 import daklib.utils
@@ -102,11 +102,11 @@ def lock_file(lockfile):
 def edit_transitions():
     trans_file = Cnf["Dinstall::Reject::ReleaseTransitions"]
 
-    tempfile = "./%s.transition.tmp" % (os.getpid() )
-
-    lockfile="%s.lock" % (tempfile)
+    lockfile="/tmp/transitions.lock"
     lock_file(lockfile)
 
+    tempfile = "./%s.transition.tmp" % (os.getpid() )
+
     daklib.utils.copy(trans_file, tempfile)
 
     editor = os.environ.get("EDITOR", "vi")
@@ -144,7 +144,11 @@ def edit_transitions():
             break
 
     # We seem to be done and also have a working file. Copy over.
-    daklib.utils.copy(tempfile, trans_file, True)
+    # We are not using daklib.utils.copy here, as we use sudo to get this file copied, to
+    # limit the rights needed to edit transitions
+    os.spawnl(os.P_WAIT, "/usr/bin/sudo", "/usr/bin/sudo", "-u", "dak", "-H", 
+              "cp", tempfile, trans_file)
+
     os.unlink(tempfile)
     os.unlink(lockfile)
 
@@ -230,7 +234,6 @@ def check_transitions(transitions):
             print "Transition source %s not in testing, transition still ongoing." % (source)
         else:
             compare = apt_pkg.VersionCompare(current, expected)
-            print "Apt compare says: %s" % (compare)
             if compare < 0:
                 # This is still valid, the current version in database is older than
                 # the new version we wait for
@@ -266,14 +269,25 @@ def check_transitions(transitions):
             print "Committing"
             for remove in to_remove:
                 del transitions[remove]
-            destfile = file(Cnf["Dinstall::Reject::ReleaseTransitions"], 'w')
+
+            lockfile="/tmp/transitions.lock"
+            lock_file(lockfile)
+            tempfile = "./%s.transition.tmp" % (os.getpid() )
+
+            destfile = file(tempfile, 'w')
             syck.dump(transitions, destfile)
+            destfile.close()
+
+            os.spawnl(os.P_WAIT, "/usr/bin/sudo", "/usr/bin/sudo", "-u", "dak", "-H", 
+                      "cp", tempfile, Cnf["Dinstall::Reject::ReleaseTransitions"])
+
+            os.unlink(tempfile)
+            os.unlink(lockfile)
             print "Done"
         else:
             print "WTF are you typing?"
             sys.exit(0)
 
-
 ################################################################################
 
 def main():
@@ -305,7 +319,7 @@ def main():
         edit_transitions()
     elif Options["check"]:
         # Check and remove outdated transitions
-        check_transitions(transitions, Cnf["Dinstall::Reject::ReleaseTransitions"])
+        check_transitions(transitions)
     else:
         # Output information about the currently defined transitions.
         transition_info(transitions)