From: Eric Borisch Date: Fri, 1 Jun 2018 02:03:06 +0000 (-0500) Subject: Always create files owner-writable. X-Git-Tag: v3.4.0~155^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=38c806ec51e2e23e2db65c354e63df258ffcd0bf;p=thirdparty%2Flibarchive.git Always create files owner-writable. Keeps TODO_MODE around if final_mode isn't owner writable, but lets fsetxattr() succeed for non-root users. (Required for HFS+ compression.) --- diff --git a/libarchive/archive_write_disk_posix.c b/libarchive/archive_write_disk_posix.c index 3fd5f5798..88d4b5dd0 100644 --- a/libarchive/archive_write_disk_posix.c +++ b/libarchive/archive_write_disk_posix.c @@ -2223,6 +2223,13 @@ create_filesystem_object(struct archive_write_disk *a) */ mode = final_mode & 0777 & ~a->user_umask; + if (a->todo & (TODO_HFS_COMPRESSION | + TODO_XATTR | + TODO_MAC_METADATA)) { + /* Always create writable such that [f]setxattr() works */ + mode |= 0200; + } + switch (a->mode & AE_IFMT) { default: /* POSIX requires that we fall through here. */