Re: [PATCH] Fix --xattr-include='*' documentation

2021-11-24 Thread Pavel Raiskup
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

2021-11-24 Thread Pavel Raiskup
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

2021-11-24 Thread Pavel Raiskup
* 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