From 38c806ec51e2e23e2db65c354e63df258ffcd0bf Mon Sep 17 00:00:00 2001 From: Eric Borisch Date: Thu, 31 May 2018 21:03:06 -0500 Subject: [PATCH] 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.) --- libarchive/archive_write_disk_posix.c | 7 +++++++ 1 file changed, 7 insertions(+) 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. */ -- 2.47.2