From: Martin Matuska Date: Wed, 22 Feb 2017 13:25:42 +0000 (+0100) Subject: Add ARCHIVE_READDISK_NO_ACL option to suppress reading ACLs from disk X-Git-Tag: v3.3.1~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=afbb01ac0c01674a2e13fdd331c138a23ca438d4;p=thirdparty%2Flibarchive.git Add ARCHIVE_READDISK_NO_ACL option to suppress reading ACLs from disk --- diff --git a/libarchive/archive.h b/libarchive/archive.h index 605cde84f..20fa09b1d 100644 --- a/libarchive/archive.h +++ b/libarchive/archive.h @@ -1001,6 +1001,8 @@ __LA_DECL int archive_read_disk_set_atime_restored(struct archive *); #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 591a21254..fc9481d1a 100644 --- a/libarchive/archive_read_disk_entry_from_file.c +++ b/libarchive/archive_read_disk_entry_from_file.c @@ -269,7 +269,9 @@ archive_read_disk_entry_from_file(struct archive *_a, } #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 b89370421..102f2a0a6 100644 --- a/libarchive/archive_read_disk_posix.c +++ b/libarchive/archive_read_disk_posix.c @@ -618,6 +618,10 @@ archive_read_disk_set_behavior(struct archive *_a, int flags) 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 2569321da..54353da4a 100644 --- a/libarchive/archive_read_disk_private.h +++ b/libarchive/archive_read_disk_private.h @@ -73,6 +73,8 @@ struct archive_read_disk { 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);