On Fri, 11 Dec 2020 at 20:45:09 -0800, Vagrant Cascadian wrote: > If anyone has a better handle on python's tarfile mode handling code, it > might be worth taking a closer look. I'm not entirely sure how the file > modes work in this code (they don't appear to use modes similar to those > used by umask, chmod or python's file functions)
It looks like they're encoded in the same way as st_mode in a struct stat_buf: the low bits are Unix permissions (which start making sense if you print them in octal) and the high bits are file type. See the documentation for the stat Python module, and in particular stat.S_IMODE and stat.S_IFMT. I think the correct normalization would be something like this (untested!): if tarinfo.isdir() or (tarinfo.mode & 0o111) != 0: tarinfo.mode = stat.S_IFMT(tarinfo.mode) | 0o755 else: tarinfo.mode = stat.S_IFMT(tarinfo.mode) | 0o644 (that's the same as chmod a+rX,og-w). smcv