Really fix bit mask support when preserving S_ISUID and S_ISGID in apply_permissions.
authorZac Medico <zmedico@gentoo.org>
Wed, 22 Nov 2006 06:40:59 +0000 (06:40 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 22 Nov 2006 06:40:59 +0000 (06:40 -0000)
svn path=/main/trunk/; revision=5117

pym/portage_util.py

index 43d4fa8dda1fb9d781135a461862100780fdb895..baae9544e1500c7c3cf1caaae2cda91b063de829 100644 (file)
@@ -560,13 +560,15 @@ def apply_permissions(filename, uid=-1, gid=-1, mode=-1, mask=-1,
                (st_mode & stat.S_ISUID or st_mode & stat.S_ISGID):
                if mode == -1:
                        new_mode = st_mode
-               elif mode & stat.S_ISUID or mode & stat.S_ISGID:
+               else:
                        mode = mode & 07777
                        if mask >= 0:
                                new_mode = mode | st_mode
                                new_mode = (mask ^ new_mode) & new_mode
                        else:
                                new_mode = mode
+                       if not (new_mode & stat.S_ISUID or new_mode & stat.S_ISGID):
+                               new_mode = -1
 
        if not follow_links and stat.S_ISLNK(stat_cached.st_mode):
                # Mode doesn't matter for symlinks.