Re: [PATCH] Fix --xattr-include='*' documentation
Updated patch is attached (more appropriate place for the second chunk). Pavel On Wednesday, November 24, 2021 3:32:12 PM CET Pavel Raiskup wrote: > * doc/tar.texi (Extended File Attributes): The default extraction > pattern consists of just 'user.*' namespace only. While on it, try > to explain the reasons for this default behavior. > --- > doc/tar.texi | 15 --- > 1 file changed, 12 insertions(+), 3 deletions(-) > > diff --git a/doc/tar.texi b/doc/tar.texi > index 389a3448..e03ce3d4 100644 > --- a/doc/tar.texi > +++ b/doc/tar.texi > @@ -5647,9 +5647,14 @@ 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 (with @option{--create}), > +but only @samp{user} namespace is extracted (if using @option{--extract}). > +The reason for this behavior is that any other, system defined attributes > +don't provide us sufficient compatibility promise. Storing all attributes > +is safe operation for the archiving purposes. Though extracting those > +(often security related) attributes on a different system than originally > +archived can lead to extraction failures, or even misinterpretations. > +This behavior can be controlled using the following options: > > @table @option > @item --xattrs-exclude=@var{pattern} > @@ -5659,6 +5664,10 @@ Specify exclude pattern for extended attributes. > Specify include pattern for extended attributes. > @end table > > +Users shall manually check the attributes are binary compatible with the > +target system first, before any other namespace is extracted with an > +explicit @option{--xattr-include} option. > + > Here, the @var{pattern} is a globbing pattern. For example, the > following command: > > >From 82457322dd91eb887963a9537baa705176442d08 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Wed, 24 Nov 2021 14:42:07 +0100 Subject: [PATCH] Fix --xattr-include='*' documentation * doc/tar.texi (Extended File Attributes): The default extraction pattern consists of just 'user.*' namespace only. While on it, try to explain the reasons for this default behavior. --- doc/tar.texi | 15 --- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/doc/tar.texi b/doc/tar.texi index 389a3448..952bb875 100644 --- a/doc/tar.texi +++ b/doc/tar.texi @@ -5647,9 +5647,14 @@ 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 (with @option{--create}), +but only @samp{user} namespace is extracted (if using @option{--extract}). +The reason for this behavior is that any other, system defined attributes +don't provide us sufficient compatibility promise. Storing all attributes +is safe operation for the archiving purposes. Though extracting those +(often security related) attributes on a different system than originally +archived can lead to extraction failures, or even misinterpretations. +This behavior can be controlled using the following options: @table @option @item --xattrs-exclude=@var{pattern} @@ -5669,6 +5674,10 @@ $ @kbd{tar --xattrs --xattrs-exclude='user.*' -c a.tar .} will include in the archive @file{a.tar} all attributes, except those from the @samp{user} namespace. +Users shall check the attributes are binary compatible with the target system +before any other namespace is extracted with an explicit +@option{--xattr-include} option. + Any number of these options can be given, thereby creating lists of include and exclude patterns. -- 2.33.1
Re: [PATCH] Don't pre-create read-only files with --extract --xattrs
Gently pinging on this again. This causes invalid extraction failures. I'm ready for the review cycles (patch attached :-)! Pavel On Monday, February 15, 2021 10:00:20 AM CET Pavel Raiskup wrote: > Ping, I can see there's 1.34 release now, thank you! > > But the git isn't updated yet so I'm not sure this has been fixed or not. > > Pavel > > On Tuesday, February 9, 2021 5:06:31 PM CET Pavel Raiskup wrote: > > Gently ping on this. This is easily reproducible, so I am re-attaching > > the patch including a new test-case that fails with the current code: > > > > $ tar --xattrs -xf tar > > tar: setxattrat: Cannot set 'user.attr' extended attribute for file > > 'file': Permission denied > > tar: file: Cannot open: Permission denied > > tar: Exiting with failure status due to previous errors > > > > Pavel > > > > On Friday, October 9, 2020 1:39:11 PM CET Pavel Raiskup wrote: > > > We used to respect the target file mode when pre-creating files in > > > set_xattr, so we also pre-created read-only files that we were not able > > > to open later for writing. This is now fixed, and we always create the > > > file with S_IWUSR. > > > > > > Fixes the original bug report https://bugzilla.redhat.com/1886540 > > > > > > * src/extract.c (set_xattr): Blindly add S_IWUSR flag to pre-created > > > files, to avoid openat failures later. > > > --- > > > src/extract.c | 8 +++- > > > 1 file changed, 7 insertions(+), 1 deletion(-) > > > > > > diff --git a/src/extract.c b/src/extract.c > > > index b73a591..2e650ad 100644 > > > --- a/src/extract.c > > > +++ b/src/extract.c > > > @@ -865,7 +865,13 @@ set_xattr (char const *file_name, struct > > > tar_stat_info const *st, > > > > > >for (;;) > > > { > > > - if (!mknodat (chdir_fd, file_name, mode ^ invert_permissions, > > > 0)) > > > + /* We'll open the file with O_WRONLY later by open_output_file, > > > + therefore we need to give us the S_IWUSR bit. If the file > > > was > > > + meant to be user-read-only, the permissions will be > > > corrected by > > > + the set_stat call. */ > > > + mode_t initial_mode = mode ^ invert_permissions | S_IWUSR; > > > + > > > + if (!mknodat (chdir_fd, file_name, initial_mode, 0)) > > > { > > >/* Successfully created file */ > > >xattrs_xattrs_set (st, file_name, typeflag, 0); > > > > > > > > > > > > >From 5f9283cd00273115097920da7ece8e97ccf1902b Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Fri, 9 Oct 2020 12:03:22 +0200 Subject: [PATCH] Don't pre-create read-only files with --extract --xattrs We used to respect the target file mode when pre-creating files in set_xattr, so we also pre-created read-only files that we were not able to open later for writing. This is now fixed, and we always create the file with S_IWUSR. Fixes the original bug report https://bugzilla.redhat.com/1886540 * src/extract.c (set_xattr): Blindly add S_IWUSR flag to pre-created files, to avoid openat failures later. * tests/xattr08.at: New test-case file. --- src/extract.c| 8 +++- tests/xattr08.at | 45 + 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 tests/xattr08.at diff --git a/src/extract.c b/src/extract.c index 850a08a2..1bfe36a6 100644 --- a/src/extract.c +++ b/src/extract.c @@ -860,7 +860,13 @@ set_xattr (char const *file_name, struct tar_stat_info const *st, for (;;) { - if (!mknodat (chdir_fd, file_name, mode ^ invert_permissions, 0)) + /* We'll open the file with O_WRONLY later by open_output_file, + therefore we need to give us the S_IWUSR bit. If the file was + meant to be user-read-only, the permissions will be corrected by + the set_stat call. */ + mode_t initial_mode = mode ^ invert_permissions | S_IWUSR; + + if (!mknodat (chdir_fd, file_name, initial_mode, 0)) { /* Successfully created file */ xattrs_xattrs_set (st, file_name, typeflag, 0); diff --git a/tests/xattr08.at b/tests/xattr08.at new file mode 100644 index ..0dd3ed34 --- /dev/null +++ b/tests/xattr08.at @@ -0,0 +1,45 @@ +# Process this file with autom4te to create testsuite. -*- Autotest -*- +# +# Test suite for GNU tar. +# Copyright 2021 Free Software Foundation, Inc. + +# This file is part of GNU tar. + +# GNU tar is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# GNU tar is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You
[PATCH] Fix --xattr-include='*' documentation
* doc/tar.texi (Extended File Attributes): The default extraction pattern consists of just 'user.*' namespace only. While on it, try to explain the reasons for this default behavior. --- doc/tar.texi | 15 --- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/doc/tar.texi b/doc/tar.texi index 389a3448..e03ce3d4 100644 --- a/doc/tar.texi +++ b/doc/tar.texi @@ -5647,9 +5647,14 @@ 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 (with @option{--create}), +but only @samp{user} namespace is extracted (if using @option{--extract}). +The reason for this behavior is that any other, system defined attributes +don't provide us sufficient compatibility promise. Storing all attributes +is safe operation for the archiving purposes. Though extracting those +(often security related) attributes on a different system than originally +archived can lead to extraction failures, or even misinterpretations. +This behavior can be controlled using the following options: @table @option @item --xattrs-exclude=@var{pattern} @@ -5659,6 +5664,10 @@ Specify exclude pattern for extended attributes. Specify include pattern for extended attributes. @end table +Users shall manually check the attributes are binary compatible with the +target system first, before any other namespace is extracted with an +explicit @option{--xattr-include} option. + Here, the @var{pattern} is a globbing pattern. For example, the following command: -- 2.33.1