Issue 3016: tarfile.py incurs exception from self.chmod() when tarball has g+s (original) (raw)
As reported at https://bugs.launchpad.net/pyopenssl/+bug/236190 , tarfile.py incurs an "Operation not permitted" exception (on Mac OS 10.4) when it tries to untar the pyOpenSSL-0.6.tar.gz tarball, because that tarball has directories in it marked as having the "g+s" bit.
(Why this leads to an "Operation not permitted" exception, I don't know.)
With some effort I could reproduce the problem (on a FAT32 filesystem), but what we have here is clearly a usage problem. In unpack_tarfile() in setuptools/archive_util.py TarFile's internal _extract_member() method is used to extract the contents. For every non-fatal error (like a failing chmod()) _extract_member() raises an ExtractError exception. In TarFile.extract() these ExtractErrors are normally ignored. The unpack_tarfile() function in setuptools needs some fixing, it should either act more like TarFile.extract() or better use the public API.