]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/queue.py
ignore EPERM as a result of the chmod of a .dak file
[dak.git] / daklib / queue.py
index 2c3602a2b4741ba4690af16b3315e181df762ae7..813782e23ef38e0dfc7c35818eba74d3f00a37c2 100755 (executable)
@@ -219,7 +219,21 @@ class Upload:
         try:
             os.chmod(dump_filename, 0664)
         except OSError, e:
-            raise
+            # chmod may fail when the dumpfile is not owned by the user
+            # invoking dak (like e.g. when NEW is processed by a member
+            # of ftpteam)
+            if errno.errorcode[e.errno] == 'EPERM':
+                perms = stat.S_IMODE(os.stat(dump_filename)[stat.ST_MODE])
+                # security precaution, should never happen unless a weird
+                # umask is set anywhere
+                if perms & stat.S_IWOTH:
+                    utils.fubar("%s is world writable and chmod failed." % \
+                        (dump_filename,))
+                # ignore the failed chmod otherwise as the file should
+                # already have the right privileges and is just, at worst,
+                # unreadable for world
+            else:
+                raise
 
         p = cPickle.Pickler(dump_file, 1)
         d_changes = {}