On Mon, Jun 10, 2019 at 05:49:49PM -0600, Andreas Dilger wrote:
> On Jun 3, 2019, at 2:27 PM, Brian Murray <[email protected]> wrote:
> >
> > When enabling extended attribute support in a tar file (--xattrs) all
> > extended attributes are stored in the archive, however when the same archive
> > is extracted only the user.* extended attributes are extracted. To have all
> > the extended attributes read and applied on extraction one must also use the
> > '--xattrs-include=*' option. I find this behavior surprising and especially
> > so
> > given that the documentation indicates that "By default, when `--xattr' is
> > used, all names are stored in the archive (or extracted, if using
> > `--extract')"[1].
> >
> > I'm happy to help working on resolving this issue but it isn't clear to me
> > whether the program or the documentation is incorrect. I've read some of
> > this
> > mailing list's archive but didn't find an explanation as to why restoration
> > of
> > only 'user.*' extended attributes would not be a bug[2].
> >
> > [1] https://www.gnu.org/software/tar/manual/tar.html#SEC70
> > [2] Which I reported here https://savannah.gnu.org/bugs/index.php?56421
>
> As Pavel mentioned, it isn't necessarily safe/correct to extract all xattrs,
> especially in cross-platform usage. However, it *does* make sense to save
> all of the xattrs, since it is then possible to extract whichever ones that
> are useful. If the xattrs aren't saved at time of archive creation, they
> may be permanently lost.
Thanks for the information Pavel and Andreas. Given what you've said
I've created a couple of patches, one for the documentation change and
one adding a comment to xattrs.c which clarifies why only user.*
extended attributes are extracted by default.
Cheers,
--
Brian Murray
diff --git a/doc/tar.texi b/doc/tar.texi
index 0296c42..843e96d 100644
--- a/doc/tar.texi
+++ b/doc/tar.texi
@@ -5648,9 +5648,9 @@ Disable extended attributes support. This is the default.
Attribute names are strings prefixed by a @dfn{namespace} name and a dot.
Currently, four namespaces exist: @samp{user}, @samp{trusted},
@samp{security} and @samp{system}. By default, when @option{--xattr}
-is used, all names are stored in the archive (or extracted, if using
-@option{--extract}). This can be controlled using the following
-options:
+is used, all names are stored in the archive. However, when using
+@option{--extract} only @samp{user} is extracted by default). This can
+be controlled using the following options:
@table @option
@item --xattrs-exclude=@var{pattern}
diff --git a/src/xattrs.c b/src/xattrs.c
index df65460..ed8d4e5 100644
--- a/src/xattrs.c
+++ b/src/xattrs.c
@@ -636,6 +636,9 @@ xattrs_matches_mask (const char *kw, struct xattrs_mask_map *mm)
return false;
}
+/* during extraction xattrs are checked against the user supplied
+ include/exclude mask but if no mask is given then only the user.*
+ domain is included as it may not be compatible across platforms. */
#define USER_DOT_PFX "user."
static bool