Sync from SUSE:SLFO:Main tar revision 4c00ab0439e367eadb77346e50440b86

This commit is contained in:
Adrian Schröter 2024-05-04 01:04:04 +02:00
commit 632d807638
19 changed files with 1968 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

156
add_forgotten-tests.patch Normal file
View File

@ -0,0 +1,156 @@
From 7fac753fb6e6c0459788ee9015b984dba1de5402 Mon Sep 17 00:00:00 2001
From: Lukas Javorsky <ljavorsk@redhat.com>
Date: Tue, 18 Jul 2023 14:10:12 +0000
Subject: [PATCH] Add exclude17 and exclude18 tests which were forgotten by
upstream
Sources:
*https://git.savannah.gnu.org/cgit/tar.git/tree/tests/exclude17.at
*https://git.savannah.gnu.org/cgit/tar.git/tree/tests/exclude18.at
Repoted to upstream in ML:
*https://lists.gnu.org/archive/html/bug-tar/2023-07/msg00002.html
---
tests/exclude17.at | 35 +++++++++++++++++++
tests/exclude18.at | 87 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 122 insertions(+)
create mode 100644 tests/exclude17.at
create mode 100644 tests/exclude18.at
diff --git a/tests/exclude17.at b/tests/exclude17.at
new file mode 100644
index 0000000..5539ef3
--- /dev/null
+++ b/tests/exclude17.at
@@ -0,0 +1,35 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+#
+# Test suite for GNU tar.
+# Copyright 2013-2023 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 should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+AT_SETUP([--exclude-vcs-ignores memory allocation])
+AT_KEYWORDS([exclude exclude17])
+
+AT_TAR_CHECK([
+mkdir dir
+cd dir
+echo '*.o' >.cvsignore
+tar -cf - --exclude-vcs-ignores . | tar -tf -
+],
+[0],
+[./
+./.cvsignore
+])
+
+AT_CLEANUP
diff --git a/tests/exclude18.at b/tests/exclude18.at
new file mode 100644
index 0000000..64aaa52
--- /dev/null
+++ b/tests/exclude18.at
@@ -0,0 +1,87 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright 2004-2023 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 should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test --exclude-vcs option with subcommands: EXTRACT, LIST, DIFF.
+# Check VCS directory with files, and empty.
+#
+# Ref: https://savannah.gnu.org/bugs/?62859
+# Wed 03 Aug 2022 04:06:28 PM UTC, original submission: Quote
+# Mohamed Akram <mohdakram>
+# > The --exclude-vcs flag seems to exclude .gitignore but not .git when
+# extracting.
+
+AT_SETUP([--exclude-vcs extract list compare])
+AT_KEYWORDS([exclude-vcs extract list compare exclude18])
+
+AT_TAR_CHECK([
+AT_SORT_PREREQ
+mkdir gitrepo
+cd gitrepo
+
+# Make an empty VCS directory:
+mkdir .svn
+
+# Make a VCS directory with a file:
+mkdir .git
+touch .git/_A
+
+# Make a VCS file:
+touch .gitignore
+
+# Make non-VCS files:
+touch .git_B
+touch _C
+
+# Create an archive, include VCS:
+cd ..
+tar -cf gitrepo.tar gitrepo
+rm -r gitrepo
+
+echo Extract:
+tar -xvf gitrepo.tar --exclude-vcs | sort
+
+echo
+echo List:
+tar -tf gitrepo.tar --exclude-vcs | sort
+
+echo
+echo Diff:
+tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort
+
+],
+[0],
+[Extract:
+gitrepo/
+gitrepo/.git_B
+gitrepo/_C
+
+List:
+gitrepo/
+gitrepo/.git_B
+gitrepo/_C
+
+Diff:
+gitrepo/
+gitrepo/.git_B
+gitrepo/_C
+],
+[])
+
+AT_CLEANUP
--
2.41.0

27
add_readme-tests.patch Normal file
View File

@ -0,0 +1,27 @@
Index: tar-1.33/README-tests
===================================================================
--- /dev/null
+++ tar-1.33/README-tests
@@ -0,0 +1,22 @@
+Subpackage tar-tests
+====================
+
+The tar-tests package contains the testsuite which is included in tar sources.
+The testsuite is normally run during make phase (make check) and is also
+automatically run when the tar rpm is being build (in %check section of spec
+file).
+
+Normally, there is no reason to need the tar-tests package. It can however be
+used to verify, that tar functions properly in an installed system (e.g. to
+find issues in tar's dependencies, problems with incompatible libraries, etc.).
+
+Testsuite is installed into /var/lib/tests/tar
+
+To run the testsuite:
+
+cd /var/lib/tests/tar
+./testsuite --help # show options
+
+# needed for genfile binary used in tests
+./testsuite AUTOTEST_PATH=/var/lib/tests/tar/bin [other options]
+

14
bsc1202436.patch Normal file
View File

@ -0,0 +1,14 @@
diff --git a/src/extract.c b/src/extract.c
index 37ab2956..b70b6c2f 100644
--- a/src/extract.c
+++ b/src/extract.c
@@ -854,6 +854,9 @@ maybe_recoverable (char *file_name, bool regular, bool *interdir_made)
case EEXIST:
/* Remove an old file, if the options allow this. */
+ if (strlen(file_name) == 1 && *file_name == '.')
+ return RECOVER_NO;
+
switch (old_files_option)
{
case SKIP_OLD_FILES:

31
fix-CVE-2022-48303.patch Normal file
View File

@ -0,0 +1,31 @@
From 1d530107a24d71e798727d7f0afa0833473d1074 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matej=20Mu=C5=BEila?= <mmuzila@gmail.com>
Date: Wed, 11 Jan 2023 08:55:58 +0100
Subject: [PATCH] Fix savannah bug #62387
* src/list.c (from_header): Check for the end of field after leading byte
(0x80 or 0xff) of base-256 encoded header value
---
src/list.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/list.c b/src/list.c
index 9fafc425..bf41b581 100644
--- a/src/list.c
+++ b/src/list.c
@@ -895,6 +895,12 @@ from_header (char const *where0, size_t digs, char const *type,
<< (CHAR_BIT * sizeof (uintmax_t)
- LG_256 - (LG_256 - 2)));
value = (*where++ & ((1 << (LG_256 - 2)) - 1)) - signbit;
+ if (where == lim)
+ {
+ if (type && !silent)
+ ERROR ((0, 0, _("Archive base-256 value is invalid")));
+ return -1;
+ }
for (;;)
{
value = (value << LG_256) + (unsigned char) *where++;
--
2.38.1

View File

@ -0,0 +1,27 @@
Index: tar-1.34/tests/testsuite.at
===================================================================
--- tar-1.34.orig/tests/testsuite.at
+++ tar-1.34/tests/testsuite.at
@@ -204,6 +204,8 @@ m4_include([version.at])
m4_include([pipe.at])
+m4_include([go-testsuite-test-hang.at])
+
AT_BANNER([Options])
m4_include([options.at])
m4_include([options02.at])
Index: tar-1.34/suse-test.at
===================================================================
--- /dev/null
+++ tar-1.34/tests/go-testsuite-test-hang.at
@@ -0,0 +1,9 @@
+AT_SETUP([try extracting archive without hanging])
+AT_KEYWORDS([suse])
+
+AT_TAR_CHECK([
+# This command will fail, just don't hang
+tar xf ../../../pax-global-records.tar || exit 0
+])
+
+AT_CLEANUP

BIN
pax-global-records.tar Normal file

Binary file not shown.

View File

@ -0,0 +1,13 @@
Index: cpio-2.11/lib/rtapelib.c
===================================================================
--- cpio-2.11.orig/lib/rtapelib.c 2013-07-23 13:18:27.119431054 +0200
+++ cpio-2.11/lib/rtapelib.c 2013-07-23 13:19:35.728188104 +0200
@@ -710,7 +710,7 @@ rmt_ioctl__ (int handle, int operation,
|| (status = get_status (handle), status == -1))
return -1;
- if (status > sizeof (struct mtop))
+ if (status > sizeof (struct mtget))
{
errno = EOVERFLOW;
return -1;

BIN
tar-1.35.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

BIN
tar-1.35.tar.xz.sig Normal file

Binary file not shown.

12
tar-PIE.patch Normal file
View File

@ -0,0 +1,12 @@
Index: tar-1.34/tests/Makefile.am
===================================================================
--- tar-1.34.orig/tests/Makefile.am
+++ tar-1.34/tests/Makefile.am
@@ -317,6 +317,7 @@ installcheck-local: $(check_PROGRAMS)
check_PROGRAMS = genfile checkseekhole ckmtime
genfile_SOURCES = genfile.c argcv.c argcv.h
+genfile_LDFLAGS = -pie
checkseekhole_SOURCES = checkseekhole.c
localedir = $(datadir)/locale

View File

@ -0,0 +1,13 @@
Index: tar-1.29/scripts/backup-specs
===================================================================
--- tar-1.29.orig/scripts/backup-specs
+++ tar-1.29/scripts/backup-specs
@@ -6,7 +6,7 @@
ADMINISTRATOR="root@localhost"
# (Optional) Path to tar binary.
-TAR=/bin/tar
+TAR=/usr/bin/tar
# (Optional) Path to rsh binary or its equivalent. You may wish to
# set it to ssh as shown in the example below, to improve security.

View File

@ -0,0 +1,89 @@
diff --git a/src/extract.c b/src/extract.c
index 0261134f..f913575c 100644
--- a/src/extract.c
+++ b/src/extract.c
@@ -711,7 +711,7 @@ fixup_delayed_set_stat (char const *src, char const *dst)
directories were created, nonzero (issuing a diagnostic) otherwise.
Set *INTERDIR_MADE if at least one directory was created. */
static int
-make_directories (char *file_name)
+make_directories (char *file_name, bool *interdir_made)
{
char *cursor0 = file_name + FILE_SYSTEM_PREFIX_LEN (file_name);
char *cursor; /* points into the file name */
@@ -755,6 +755,7 @@ make_directories (char *file_name)
desired_mode, AT_SYMLINK_NOFOLLOW);
print_for_mkdir (file_name, desired_mode);
+ *interdir_made = true;
parent_end = NULL;
}
else
@@ -910,11 +911,8 @@ maybe_recoverable (char *file_name, bool regular, bool *interdir_made)
case ENOENT:
/* Attempt creating missing intermediate directories. */
- if (make_directories (file_name) == 0)
- {
- *interdir_made = true;
+ if (make_directories (file_name, interdir_made) == 0)
return RECOVER_OK;
- }
break;
default:
@@ -1109,7 +1107,7 @@ extract_dir (char *file_name, int typeflag)
|| old_files_option == NO_OVERWRITE_DIR_OLD_FILES
|| old_files_option == DEFAULT_OLD_FILES
|| old_files_option == OVERWRITE_OLD_FILES)
- {
+ {
struct stat st;
st.st_mode = 0;
@@ -1117,21 +1115,21 @@ extract_dir (char *file_name, int typeflag)
&& is_directory_link (file_name, &st))
return 0;
- if ((st.st_mode != 0 && fstatat_flags == 0)
- || deref_stat (file_name, &st) == 0)
- {
+ if ((st.st_mode != 0 && fstatat_flags == 0)
+ || deref_stat (file_name, &st) == 0)
+ {
current_mode = st.st_mode;
current_mode_mask = ALL_MODE_BITS;
if (S_ISDIR (current_mode))
- {
- if (interdir_made)
- {
- repair_delayed_set_stat (file_name, &st);
- return 0;
- }
- else if (old_files_option == NO_OVERWRITE_DIR_OLD_FILES)
{
+ if (interdir_made)
+ {
+ repair_delayed_set_stat (file_name, &st);
+ return 0;
+ }
+ else if (old_files_option == NO_OVERWRITE_DIR_OLD_FILES)
+ {
/* Temporarily change the directory mode to a safe
value, to be able to create files in it, should
the need be.
@@ -2007,11 +2005,12 @@ rename_directory (char *src, char *dst)
else
{
int e = errno;
+ bool interdir_made;
switch (e)
{
case ENOENT:
- if (make_directories (dst) == 0)
+ if (make_directories (dst, &interdir_made) == 0)
{
if (renameat (chdir_fd, src, chdir_fd, dst) == 0)
return true;

View File

@ -0,0 +1,29 @@
Index: tar-1.26/src/list.c
===================================================================
--- tar-1.26.orig/src/list.c 2011-02-16 23:12:16.000000000 +0100
+++ tar-1.26/src/list.c 2014-06-11 11:48:38.129824435 +0200
@@ -212,6 +212,14 @@ read_and (void (*do_something) (void))
if (!ignore_zeros_option)
{
+ /*
+ * According to POSIX tar specs, this is wrong, but on the web
+ * there are some tar specs that can trigger this, and some tar
+ * implementations create tars according to that spec. For now,
+ * let's not be pedantic about issuing the warning.
+ */
+#if 0
+
char buf[UINTMAX_STRSIZE_BOUND];
status = read_header (&current_header, &current_stat_info,
@@ -221,6 +229,9 @@ read_and (void (*do_something) (void))
WARNOPT (WARN_ALONE_ZERO_BLOCK,
(0, 0, _("A lone zero block at %s"),
STRINGIFY_BIGINT (current_block_ordinal (), buf)));
+#endif
+ status = read_header (&current_header, &current_stat_info,
+ read_header_auto);
break;
}
status = prev_status;

15
tar-wildcards.patch Normal file
View File

@ -0,0 +1,15 @@
Index: tar-1.25/src/names.c
===================================================================
--- tar-1.25.orig/src/names.c
+++ tar-1.25/src/names.c
@@ -970,10 +970,6 @@ collect_and_sort_names (void)
if (name->found_count || name->directory)
continue;
- if (name->matching_flags & EXCLUDE_WILDCARDS)
- /* NOTE: EXCLUDE_ANCHORED is not relevant here */
- /* FIXME: just skip regexps for now */
- continue;
chdir_do (name->change_dir);
if (name->name[0] == 0)

1030
tar.changes Normal file

File diff suppressed because it is too large Load Diff

234
tar.keyring Normal file
View File

@ -0,0 +1,234 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: SKS 1.1.0
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
mTibFyT3vk9Qs6TyOr9mosa+dA==
=mQUf
-----END PGP PUBLIC KEY BLOCK-----

216
tar.spec Normal file
View File

@ -0,0 +1,216 @@
#
# spec file for package tar
#
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
# For correct subpackages docs installation into tar doc directory
%global _docdir_fmt %{name}
Name: tar
Version: 1.35
Release: 0
Summary: GNU implementation of ((t)ape (ar)chiver)
License: GPL-3.0-or-later
Group: Productivity/Archiving/Backup
URL: https://www.gnu.org/software/tar/
Source0: https://ftp.gnu.org/gnu/tar/%{name}-%{version}.tar.xz
Source1: https://ftp.gnu.org/gnu/tar/%{name}-%{version}.tar.xz.sig
# http://wwwkeys.pgp.net:11371/pks/lookup?op=get&search=0x3602B07F55D0C732
Source2: %{name}.keyring
Source3: pax-global-records.tar
Patch0: %{name}-wildcards.patch
Patch1: %{name}-backup-spec-fix-paths.patch
Patch2: paxutils-rtapelib_mtget.patch
# don't print warning about zero blocks
# the patch is used in Fedora and Debian
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=235820
Patch3: %{name}-ignore_lone_zero_blocks.patch
Patch5: add_readme-tests.patch
Patch6: tar-PIE.patch
Patch7: tests-skip-time01-on-32bit-time_t.patch
Patch11: tar-fix-extract-unlink.patch
# PATCH-FIX-SUSE danilo.spinella@suse.com bsc#1202436
Patch12: go-testsuite-test-hang.patch
# PATCH-FIX-UPSTREAM danilo.spinella@suse.com bsc#1202436
Patch13: bsc1202436.patch
# PATCH-FIX-UPSTREAM danilo.spinella@suse.com bsc#1207753
# tar has a one-byte out-of-bounds read that results in use of
# uninitialized memory for a conditional jump
Patch16: fix-CVE-2022-48303.patch
Patch17: add_forgotten-tests.patch
BuildRequires: automake >= 1.15
BuildRequires: libacl-devel
BuildRequires: libselinux-devel
Recommends: %{name}-rmt = %{version}
Recommends: mt
Recommends: xz
Recommends: zstd
Provides: base:/bin/tar
%description
GNU Tar is an archiver program. It is used to create and manipulate files
that are actually collections of many other files; the program provides
users with an organized and systematic method of controlling a large amount
of data. Despite its name, that is an acronym of "tape archiver", GNU Tar
is able to direct its output to any available devices, files or other programs,
it may as well access remote devices or files.
%package backup-scripts
Summary: Backup scripts
Group: Productivity/Archiving/Backup
Requires: %{name} = %{version}
BuildArch: noarch
%description backup-scripts
Shell scripts for system backup/restore
%package tests
Summary: Tests for the package
Group: Development/Tools/Other
Requires: %{name} = %{version}
%description tests
Upstream testsuite for the package
%package rmt
Summary: Remote tape drive control server by GNU
Group: Productivity/Archiving/Backup
Requires(post): update-alternatives
Requires(postun): update-alternatives
Provides: rmt
%description rmt
Provides remote access to files and devices for tar, cpio
and similar backup utilities
%package doc
Summary: Documentation files for GNU tar
Group: Documentation/Man
Requires: %{name} = %{version}
BuildArch: noarch
%description doc
GNU Tar is an archiver program. It is used to create and manipulate files
that are actually collections of many other files; the program provides
users with an organized and systematic method of controlling a large amount
of data. Despite its name, that is an acronym of "tape archiver", GNU Tar
is able to direct its output to any available devices, files or other programs,
it may as well access remote devices or files.
%lang_package
%prep
%autosetup -p1
cp %{S:3} tests
%build
%define my_cflags -W -Wall -Wpointer-arith -Wstrict-prototypes -Wformat-security -Wno-unused-parameter -fPIE
export CFLAGS="%{optflags} %{my_cflags}"
export RSH=%{_bindir}/ssh
export DEFAULT_ARCHIVE_FORMAT="POSIX"
export DEFAULT_RMT_DIR=%{_bindir}
autoreconf -fi
%configure \
gl_cv_func_linkat_follow="yes" \
--enable-backup-scripts \
--disable-silent-rules \
--program-transform-name='s/^rmt$/gnurmt/'
%make_build LDFLAGS="-pie"
cd tests
%make_build genfile
mkdir bin
mv genfile bin
cd -
%check
%make_build check || { cat tests/testsuite.log; exit 1; }
%install
%make_install DESTDIR=%{buildroot}
mkdir %{buildroot}/bin
mv %{buildroot}%{_mandir}/man8/gnurmt.8 %{buildroot}%{_mandir}/man1/gnurmt.1
install -D -m 644 scripts/backup-specs %{buildroot}%{_sysconfdir}/backup/backup-specs
# For avoiding file conflicts with dump/restore
mv %{buildroot}%{_sbindir}/restore %{buildroot}%{_sbindir}/restore.sh
rm -f %{buildroot}%{_infodir}/dir
install -D -m 644 -t %{buildroot}%{_docdir}/%{name} README* ABOUT-NLS AUTHORS NEWS THANKS \
ChangeLog TODO
install -d -m 755 %{buildroot}%{_localstatedir}/lib/tests
cp -r tests %{buildroot}%{_localstatedir}/lib/tests/tar
rm %{buildroot}%{_localstatedir}/lib/tests/tar/*.{c,h,o}
rm %{buildroot}%{_localstatedir}/lib/tests/tar/package.m4
rm %{buildroot}%{_localstatedir}/lib/tests/tar/{atconfig,atlocal,Makefile}*
# Alternatives system
mkdir -p %{buildroot}%{_sysconfdir}/alternatives
ln -sf %{_sysconfdir}/alternatives/rmt %{buildroot}%{_bindir}/rmt
ln -sf %{_sysconfdir}/alternatives/rmt.1%{ext_man} %{buildroot}%{_mandir}/man1/rmt.1%{ext_man}
%if 0%{?suse_version} < 1550
mkdir -p %{buildroot}/bin
ln -s %{_bindir}/%{name} %{buildroot}/bin
%endif
%find_lang %{name}
%post rmt
%{_sbindir}/update-alternatives --force \
--install %{_bindir}/rmt rmt %{_bindir}/gnurmt 10 \
--slave %{_mandir}/man1/rmt.1%{ext_man} rmt.1%{ext_man} %{_mandir}/man1/gnurmt.1%{ext_man}
%postun rmt
if [ ! -f %{_bindir}/gnurmt ] ; then
"%{_sbindir}/update-alternatives" --remove rmt %{_bindir}/gnurmt
fi
%files backup-scripts
%{_sbindir}/backup
%{_sbindir}/restore.sh
%{_libexecdir}/backup.sh
%{_libexecdir}/dump-remind
%dir %{_sysconfdir}/backup
%config(noreplace) %{_sysconfdir}/backup/backup-specs
%files lang -f %{name}.lang
%files tests
%{_localstatedir}/lib/tests
%{_docdir}/%{name}/README-tests
%files rmt
%ghost %{_bindir}/rmt
%{_bindir}/gnurmt
%ghost %{_mandir}/man1/rmt.1%{ext_man}
%{_mandir}/man1/gnurmt.1%{?ext_man}
%ghost %{_sysconfdir}/alternatives/rmt
%ghost %{_sysconfdir}/alternatives/rmt.1%{ext_man}
%files doc
%dir %{_docdir}/%{name}
%{_docdir}/%{name}/NEWS
%{_docdir}/%{name}/README
%{_docdir}/%{name}/ABOUT-NLS
%{_docdir}/%{name}/AUTHORS
%{_docdir}/%{name}/THANKS
%{_docdir}/%{name}/ChangeLog
%{_docdir}/%{name}/TODO
%{_infodir}/%{name}.info*%{?ext_info}
%files
%license COPYING
%if 0%{?suse_version} < 1550
/bin/%{name}
%endif
%{_bindir}/%{name}
%{_mandir}/man1/%{name}.1%{?ext_man}
%changelog

View File

@ -0,0 +1,36 @@
Skip some parts of 'tests/time01.at' on some platforms.
This test fails if coreutils' touch was built with 64-bit time_t,
while tar was built with 32-bit time_t. This is currently the case
on i586, ppc and armv7l. Skip the failing last command on those
platforms.
The failure was seen since coreutils-9.0.
Discussed at:
https://lists.gnu.org/r/bug-tar/2021-10/msg00006.html
Remove this patch once tar(1) also builds with 64-bit time_t.
---
tests/time01.at | 8 ++++++++
1 file changed, 8 insertions(+)
Index: tar-1.34/tests/time01.at
===================================================================
--- tar-1.34.orig/tests/time01.at
+++ tar-1.34/tests/time01.at
@@ -61,6 +61,14 @@ do
done
tar -c -f archive.tar dir
+
+case "$( uname -m )" in
+ i686 | ppc | armv6l | armv7l)
+ # "SUSE: disabled for now on platforms with 32-bit time_t"
+ AT_SKIP_TEST
+ ;;
+esac
+
tar -d -f archive.tar dir
],
[0],