Add ARCHIVE_READDISK_NO_ACL option to suppress reading ACLs from disk
diff --git a/libarchive/archive.h b/libarchive/archive.h
index 605cde8..20fa09b 100644
--- a/libarchive/archive.h
+++ b/libarchive/archive.h
@@ -1001,6 +1001,8 @@
#define ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS (0x0008)
/* Default: Xattrs are read from disk. */
#define ARCHIVE_READDISK_NO_XATTR (0x0010)
+/* Default: ACLs are read from disk. */
+#define ARCHIVE_READDISK_NO_ACL (0x0020)
__LA_DECL int archive_read_disk_set_behavior(struct archive *,
int flags);
diff --git a/libarchive/archive_read_disk_entry_from_file.c b/libarchive/archive_read_disk_entry_from_file.c
index 591a212..fc9481d 100644
--- a/libarchive/archive_read_disk_entry_from_file.c
+++ b/libarchive/archive_read_disk_entry_from_file.c
@@ -269,7 +269,9 @@
}
#endif /* HAVE_READLINK || HAVE_READLINKAT */
- r = setup_acls(a, entry, &fd);
+ r = 0;
+ if (!a->suppress_acl)
+ r = setup_acls(a, entry, &fd);
if (!a->suppress_xattr) {
r1 = setup_xattrs(a, entry, &fd);
if (r1 < r)
diff --git a/libarchive/archive_read_disk_posix.c b/libarchive/archive_read_disk_posix.c
index b893704..102f2a0 100644
--- a/libarchive/archive_read_disk_posix.c
+++ b/libarchive/archive_read_disk_posix.c
@@ -618,6 +618,10 @@
a->suppress_xattr = 1;
else
a->suppress_xattr = 0;
+ if (flags & ARCHIVE_READDISK_NO_ACL)
+ a->suppress_acl = 1;
+ else
+ a->suppress_acl = 0;
return (r);
}
diff --git a/libarchive/archive_read_disk_private.h b/libarchive/archive_read_disk_private.h
index 2569321..54353da 100644
--- a/libarchive/archive_read_disk_private.h
+++ b/libarchive/archive_read_disk_private.h
@@ -73,6 +73,8 @@
int traverse_mount_points;
/* Set 1 if users want to suppress xattr information. */
int suppress_xattr;
+ /* Set 1 if users want to suppress ACL information. */
+ int suppress_acl;
const char * (*lookup_gname)(void *private, int64_t gid);
void (*cleanup_gname)(void *private);