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);