From: Philipp Kern Date: Tue, 21 Oct 2008 08:44:17 +0000 (+0200) Subject: ignore EPERM as a result of the chmod of a .dak file X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e00d86bf93fe8e20b456caae7c099b153b77678f;p=dak ignore EPERM as a result of the chmod of a .dak file 2008-10-21 Philipp Kern * daklib/queue.py: reintroduce James' check for EPERM after the chmod'ing of dak files and ignore it; just fubar if the file is world writable, which should really never happen Signed-off-by: Joerg Jaspert --- diff --git a/daklib/queue.py b/daklib/queue.py index 1dd3a75e..813782e2 100755 --- a/daklib/queue.py +++ b/daklib/queue.py @@ -216,7 +216,24 @@ class Upload: dump_filename = os.path.join(dest_dir,self.pkg.changes_file[:-8] + ".dak") dump_file = utils.open_file(dump_filename, 'w') - os.chmod(dump_filename, 0664) + try: + os.chmod(dump_filename, 0664) + except OSError, e: + # 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 = {}