]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Add ARCHIVE_READDISK_NO_ACL option to suppress reading ACLs from disk
authorMartin Matuska <martin@matuska.org>
Wed, 22 Feb 2017 13:25:42 +0000 (14:25 +0100)
committerMartin Matuska <martin@matuska.org>
Wed, 22 Feb 2017 13:25:42 +0000 (14:25 +0100)
libarchive/archive.h
libarchive/archive_read_disk_entry_from_file.c
libarchive/archive_read_disk_posix.c
libarchive/archive_read_disk_private.h

index 605cde84f1ecfb7f0409aa4d77fd2b30fde0bb3e..20fa09b1d15b3e56edc68fa1d6e67f88fd15a8d0 100644 (file)
@@ -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);
index 591a2125467689debebe468530631b34240a3a1a..fc9481d1a0879f0eb4c9f950b598cd3adeb328b5 100644 (file)
@@ -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)
index b89370421c07bc403754c682df4b4296fc9693b7..102f2a0a6af1b2e89f1d0519c2539611966281d1 100644 (file)
@@ -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);
 }
 
index 2569321da5440e9e2e07f7c25c5809f37aba6883..54353da4a13d600436adce73a2fa5ad34def00cb 100644 (file)
@@ -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);