]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
New archive_acl_to_text() style flag: ARCHIVE_ENTRY_ACL_STYLE_COMPACT
authorMartin Matuska <martin@matuska.org>
Wed, 15 Feb 2017 19:43:54 +0000 (20:43 +0100)
committerMartin Matuska <martin@matuska.org>
Wed, 15 Feb 2017 19:43:54 +0000 (20:43 +0100)
- outputs NFSv4 permission and flags fields without minus characters
Use new compact format as default for the SCHILY.acl.ace pax header

libarchive/archive_acl.c
libarchive/archive_entry.h
libarchive/archive_entry_acl.3
libarchive/archive_write_set_format_pax.c
libarchive/test/test_acl_pax_nfs4.tar.uu
libarchive/test/test_acl_text.c

index 3ca970298752082cc33212b5b8f4fdc799416969..b8b6b636453ef2f6bbc30aa894973684919f88f3 100644 (file)
@@ -860,14 +860,14 @@ append_entry_w(wchar_t **wp, const wchar_t *prefix, int type,
                for (i = 0; i < nfsv4_acl_perm_map_size; i++) {
                        if (perm & nfsv4_acl_perm_map[i].perm)
                                *(*wp)++ = nfsv4_acl_perm_map[i].wc;
-                       else
+                       else if ((flags & ARCHIVE_ENTRY_ACL_STYLE_COMPACT) == 0)
                                *(*wp)++ = L'-';
                }
                *(*wp)++ = L':';
                for (i = 0; i < nfsv4_acl_flag_map_size; i++) {
                        if (perm & nfsv4_acl_flag_map[i].perm)
                                *(*wp)++ = nfsv4_acl_flag_map[i].wc;
-                       else
+                       else if ((flags & ARCHIVE_ENTRY_ACL_STYLE_COMPACT) == 0)
                                *(*wp)++ = L'-';
                }
                *(*wp)++ = L':';
@@ -1093,14 +1093,14 @@ append_entry(char **p, const char *prefix, int type,
                for (i = 0; i < nfsv4_acl_perm_map_size; i++) {
                        if (perm & nfsv4_acl_perm_map[i].perm)
                                *(*p)++ = nfsv4_acl_perm_map[i].c;
-                       else
+                       else if ((flags & ARCHIVE_ENTRY_ACL_STYLE_COMPACT) == 0)
                                *(*p)++ = '-';
                }
                *(*p)++ = ':';
                for (i = 0; i < nfsv4_acl_flag_map_size; i++) {
                        if (perm & nfsv4_acl_flag_map[i].perm)
                                *(*p)++ = nfsv4_acl_flag_map[i].c;
-                       else
+                       else if ((flags & ARCHIVE_ENTRY_ACL_STYLE_COMPACT) == 0)
                                *(*p)++ = '-';
                }
                *(*p)++ = ':';
index 9f1955bdbb99d6d77a4279e289fc4108c5d6f44a..ca77b37810f2eaccf851011a9dea1c49cbc85aff 100644 (file)
@@ -509,6 +509,10 @@ __LA_DECL int       archive_entry_acl_next_w(struct archive_entry *, int /* want_type
  * ARCHIVE_ENTRY_ACL_STYLE_SOLARIS - Output only one colon after "other" and
  *    "mask" entries.
  *
+ * Flags only for archive entries with NFSv4 ACL:
+ * ARCHIVE_ENTRY_ACL_STYLE_COMPACT - Do not output the minus character for
+ *    unset permissions and flags in NFSv4 ACL permission and flag fields
+ *
  * Flags for for archive entries with POSIX.1e ACL or NFSv4 ACL:
  * ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID - Include extra numeric ID field in
  *    each ACL entry.
@@ -519,6 +523,7 @@ __LA_DECL int        archive_entry_acl_next_w(struct archive_entry *, int /* want_type
 #define        ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT    0x00000002
 #define        ARCHIVE_ENTRY_ACL_STYLE_SOLARIS         0x00000004
 #define        ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA 0x00000008
+#define        ARCHIVE_ENTRY_ACL_STYLE_COMPACT         0x00000010
 
 __LA_DECL wchar_t *archive_entry_acl_to_text_w(struct archive_entry *,
            ssize_t * /* len */, int /* flags */);
index 93707d1ff05498d0f82d1de873979251ec2445ac..17cc3ceda12063b43515e2ebcce183e8b7214772 100644 (file)
@@ -390,6 +390,13 @@ Prefix each default ACL entry with the word
 The mask and other ACLs don not contain a double colon.
 .El
 .Pp
+The following flags are effecive only on NFSv4 ACL:
+.Bl -tag -offset indent -compact -width ARCHIV
+.It Dv ARCHIVE_ENTRY_ACL_STYLE_COMPACT
+Do not output minus characters for unset permissions and flags in NFSv4 ACL
+permission and flag fields.
+.El
+.Pp
 The following flags are effective on both POSIX.1e and NFSv4 ACL:
 .Bl -tag -offset indent -compact -width ARCHIV
 .It Dv ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID
index cb0e5c31598c5e122b261ee727cb83d247d7ebab..6a301ac2d196230b9a3398a42c6b9d45ab9027bc 100644 (file)
@@ -1166,7 +1166,8 @@ archive_write_pax_header(struct archive_write *a,
                if ((acl_types & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
                        ret = add_pax_acl(a, entry_original, pax,
                            ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID |
-                           ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA);
+                           ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA |
+                           ARCHIVE_ENTRY_ACL_STYLE_COMPACT);
                        if (ret == ARCHIVE_FATAL)
                                return (ARCHIVE_FATAL);
                }
index 6a41557ff01a571c1a79e9eb56b3981794af93c1..ffc5cc279f31cd3a99fd72359b0441214895175c 100644 (file)
@@ -1,8 +1,8 @@
 begin 644 test_acl_pax_nfs4.tar
 M4&%X2&5A9&5R+V9I;&4`````````````````````````````````````````
 M````````````````````````````````````````````````````````````
-M`````````````#`P,#<W-R``,#`P,#`P(``P,#`P,#`@`#`P,#`P,#`P,C`R
-M(#`P,#`P,#`P,#`P(#`Q,C`P,0`@>```````````````````````````````
+M`````````````#`P,#<W-R``,#`P,#`P(``P,#`P,#`@`#`P,#`P,#`P,3,R
+M(#`P,#`P,#`P,#`P(#`Q,C`P,P`@>```````````````````````````````
 M````````````````````````````````````````````````````````````
 M``````````````````````````````````````````!U<W1A<@`P,```````
 M````````````````````````````````````````````````````````````
@@ -10,10 +10,10 @@ M```````````````````P,#`P,#`@`#`P,#`P,"``````````````````````
 M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
-M```````````````````````Q,S`@4T-(24Q9+F%C;"YA8V4];W=N97)`.G)W
-M>'`M+6%!4E=C0V]S.BTM+2TM+2TZ86QL;W<L9W)O=7!`.G)W+7`M+6$M4BUC
-M+2US.BTM+2TM+2TZ86QL;W<L979E<GEO;F5`.G(M+2TM+6$M4BUC+2US.BTM
-M+2TM+2TZ86QL;W<*````````````````````````````````````````````
+M```````````````````````Y,"!30TA)3%DN86-L+F%C93UO=VYE<D`Z<G=X
+M<&%!4E=C0V]S.CIA;&QO=RQG<F]U<$`Z<G=P85)C<SHZ86QL;W<L979E<GEO
+M;F5`.G)A4F-S.CIA;&QO=PH`````````````````````````````````````
+M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
@@ -36,7 +36,7 @@ M````````````````````````````````````````````````````````````
 M````````4&%X2&5A9&5R+V9I;&4`````````````````````````````````
 M````````````````````````````````````````````````````````````
 M`````````````````````#`P,#<W-R``,#`P,#`P(``P,#`P,#`@`#`P,#`P
-M,#`P-#`V(#`P,#`P,#`P,#`P(#`Q,C`P-P`@>```````````````````````
+M,#`P,C4V(#`P,#`P,#`P,#`P(#`Q,C`Q,@`@>```````````````````````
 M````````````````````````````````````````````````````````````
 M``````````````````````````````````````````````````!U<W1A<@`P
 M,```````````````````````````````````````````````````````````
@@ -44,13 +44,13 @@ M```````````````````````````P,#`P,#`@`#`P,#`P,"``````````````
 M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
-M```````````````````````````````R-C(@4T-(24Q9+F%C;"YA8V4];W=N
-M97)`.G)W+7`M+6%!4E=C0V]S.BTM+2TM+2TZ86QL;W<L=7-E<CIU<V5R-S<Z
-M<BTM+2TM82U2+6,M+7,Z+2TM+2TM23IA;&QO=SHW-RQU<V5R.G5S97(W.#IR
-M=W@M+2TM+2TM+2TM+3HM+2TM+2TM.F1E;GDZ-S@L9W)O=7!`.G)W+7`M+6$M
-M4BUC+2US.BTM+2TM+2TZ86QL;W<L9W)O=7`Z9W)O=7`W.#HM=RUP+2TM02U7
-M+4-O+3HM+2TM+2TM.F1E;GDZ-S@L979E<GEO;F5`.G(M+2TM+6$M4BUC+2US
-M.BTM+2TM+2TZ86QL;W<*````````````````````````````````````````
+M```````````````````````````````Q-S0@4T-(24Q9+F%C;"YA8V4];W=N
+M97)`.G)W<&%!4E=C0V]S.CIA;&QO=RQU<V5R.G5S97(W-SIR85)C<SI).F%L
+M;&]W.C<W+'5S97(Z=7-E<C<X.G)W>#HZ9&5N>3HW."QG<F]U<$`Z<G=P85)C
+M<SHZ86QL;W<L9W)O=7`Z9W)O=7`W.#IW<$%70V\Z.F1E;GDZ-S@L979E<GEO
+M;F5`.G)A4F-S.CIA;&QO=PH`````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
@@ -70,7 +70,7 @@ M````````````````````````````````````````````````````````````
 M````````````````4&%X2&5A9&5R+V9I;&4`````````````````````````
 M````````````````````````````````````````````````````````````
 M`````````````````````````````#`P,#<W-R``,#`P,#`P(``P,#`P,#`@
-M`#`P,#`P,#`P-#$P(#`P,#`P,#`P,#`P(#`Q,C`P,@`@>```````````````
+M`#`P,#`P,#`P,C8R(#`P,#`P,#`P,#`P(#`Q,C`P-P`@>```````````````
 M````````````````````````````````````````````````````````````
 M``````````````````````````````````````````````````````````!U
 M<W1A<@`P,```````````````````````````````````````````````````
@@ -78,13 +78,13 @@ M```````````````````````````````````P,#`P,#`@`#`P,#`P,"``````
 M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
-M```````````````````````````````````````R-C0@4T-(24Q9+F%C;"YA
-M8V4];W=N97)`.G)W>'`M+6%!4E=C0V]S.BTM+2TM+2TZ86QL;W<L=7-E<CIU
-M<V5R-S<Z<G<M<"TM82U2+6,M;W,Z+2TM+2TM+3IA;&QO=SHW-RQU<V5R.G5S
-M97(W-SHM=RUP+2TM+2TM+2TM+3HM+2TM4RTM.F%U9&ET.C<W+&=R;W5P0#IR
-M=RUP+2UA+5(M8RTM<SHM+2TM+2TM.F%L;&]W+&=R;W5P.F=R;W5P-S@Z<BTM
-M+2TM82U2+6,M+2TZ+2TM+2U&+3IA;&%R;3HW."QE=F5R>6]N94`Z<BTM+2TM
-M82U2+6,M+7,Z+2TM+2TM+3IA;&QO=PH`````````````````````````````
+M```````````````````````````````````````Q-S@@4T-(24Q9+F%C;"YA
+M8V4];W=N97)`.G)W>'!A05)78T-O<SHZ86QL;W<L=7-E<CIU<V5R-S<Z<G=P
+M85)C;W,Z.F%L;&]W.C<W+'5S97(Z=7-E<C<W.G=P.E,Z875D:70Z-S<L9W)O
+M=7!`.G)W<&%28W,Z.F%L;&]W+&=R;W5P.F=R;W5P-S@Z<F%28SI&.F%L87)M
+M.C<X+&5V97)Y;VYE0#IR85)C<SHZ86QL;W<*````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
 M````````````````````````````````````````````````````````````
index 23d991e403381ad35515611c4699d2383004983f..f3d2b10edcfe1a1d6a03681490ac9ca656a8b8b1 100644 (file)
@@ -221,7 +221,14 @@ const char* acltext[] = {
        "group:group78:r-----a-R-c---:------I:allow:78\n"
        "owner@:rwxp--aARWcCo-:-------:allow\n"
        "group@:rw-p--a-R-c---:-------:allow\n"
-       "everyone@:r-----a-R-c--s:-------:allow"
+       "everyone@:r-----a-R-c--s:-------:allow",
+
+       "user:user77:rwpaRco::allow:77\n"
+       "user:user101:wpdD:fdin:deny:101\n"
+       "group:group78:raRc:I:allow:78\n"
+       "owner@:rwxpaARWcCo::allow\n"
+       "group@:rwpaRc::allow\n"
+       "everyone@:raRcs::allow"
 };
 
 static wchar_t *
@@ -458,5 +465,9 @@ DEFINE_TEST(test_acl_to_text)
        /* NFSv4 ACLs like "getfacl -i" on FreeBSD */
        compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[10]);
 
+       /* NFSv4 ACLs like "getfacl -i" on FreeBSD with stripped minus chars */
+       compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID |
+           ARCHIVE_ENTRY_ACL_STYLE_COMPACT, acltext[11]);
+
        archive_entry_free(ae);
 }