diff --git a/.cpio.metadata b/.cpio.metadata new file mode 100644 index 0000000..47407a4 --- /dev/null +++ b/.cpio.metadata @@ -0,0 +1 @@ +6f1934b0079dc1e85ddff89cabdf01adb3a74abb SOURCES/cpio-2.11.tar.bz2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..abfa2cd --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/cpio-2.11.tar.bz2 diff --git a/SOURCES/cpio-2.10-longnames-split.patch b/SOURCES/cpio-2.10-longnames-split.patch new file mode 100644 index 0000000..d4517b1 --- /dev/null +++ b/SOURCES/cpio-2.10-longnames-split.patch @@ -0,0 +1,20 @@ +diff --git a/src/tar.c b/src/tar.c +index 97d74bc..6de8961 100644 +--- a/src/tar.c ++++ b/src/tar.c +@@ -48,10 +48,12 @@ split_long_name (const char *name, size_t length) + { + size_t i; + +- if (length > TARPREFIXSIZE) +- length = TARPREFIXSIZE+2; ++ if (length > TARPREFIXSIZE + 1) ++ length = TARPREFIXSIZE + 1; ++ else if (ISSLASH (name[length - 1])) ++ length--; + for (i = length - 1; i > 0; i--) +- if (name[i] == '/') ++ if (ISSLASH (name[i])) + break; + return i; + } diff --git a/SOURCES/cpio-2.10-patternnamesigsegv.patch b/SOURCES/cpio-2.10-patternnamesigsegv.patch new file mode 100644 index 0000000..c3b9420 --- /dev/null +++ b/SOURCES/cpio-2.10-patternnamesigsegv.patch @@ -0,0 +1,41 @@ +diff -urNp cpio-2.10-orig/src/copyin.c cpio-2.10/src/copyin.c +--- cpio-2.10-orig/src/copyin.c 2010-02-22 12:57:59.000000000 +0100 ++++ cpio-2.10/src/copyin.c 2010-02-22 12:55:26.000000000 +0100 +@@ -944,20 +944,23 @@ read_pattern_file () + pattern_fp = fopen (pattern_file_name, "r"); + if (pattern_fp == NULL) + open_error (pattern_file_name); +- while (ds_fgetstr (pattern_fp, &pattern_name, '\n') != NULL) +- { +- if (new_num_patterns >= max_new_patterns) +- { +- max_new_patterns += 1; +- new_save_patterns = (char **) +- xrealloc ((char *) new_save_patterns, +- max_new_patterns * sizeof (char *)); +- } +- new_save_patterns[new_num_patterns] = xstrdup (pattern_name.ds_string); +- ++new_num_patterns; +- } +- if (ferror (pattern_fp) || fclose (pattern_fp) == EOF) +- close_error (pattern_file_name); ++ else ++ { ++ while (ds_fgetstr (pattern_fp, &pattern_name, '\n') != NULL) ++ { ++ if (new_num_patterns >= max_new_patterns) ++ { ++ max_new_patterns += 1; ++ new_save_patterns = (char **) ++ xrealloc ((char *) new_save_patterns, ++ max_new_patterns * sizeof (char *)); ++ } ++ new_save_patterns[new_num_patterns] = xstrdup (pattern_name.ds_string); ++ ++new_num_patterns; ++ } ++ if (ferror (pattern_fp) || fclose (pattern_fp) == EOF) ++ close_error (pattern_file_name); ++ } + + for (i = 0; i < num_patterns; ++i) + new_save_patterns[i] = save_patterns[i]; diff --git a/SOURCES/cpio-2.11-CVE-2014-9112.patch b/SOURCES/cpio-2.11-CVE-2014-9112.patch new file mode 100644 index 0000000..64fec9f --- /dev/null +++ b/SOURCES/cpio-2.11-CVE-2014-9112.patch @@ -0,0 +1,212 @@ +diff --git a/src/copyin.c b/src/copyin.c +index d505407..db8ee66 100644 +--- a/src/copyin.c ++++ b/src/copyin.c +@@ -124,10 +124,30 @@ tape_skip_padding (int in_file_des, off_t offset) + if (pad != 0) + tape_toss_input (in_file_des, pad); + } +- ++ ++static char * ++get_link_name (struct cpio_file_stat *file_hdr, int in_file_des) ++{ ++ char *link_name; ++ ++ if (file_hdr->c_filesize < 0 || file_hdr->c_filesize > SIZE_MAX-1) ++ { ++ error (0, 0, _("%s: stored filename length is out of range"), ++ file_hdr->c_name); ++ link_name = NULL; ++ } ++ else ++ { ++ link_name = xmalloc (file_hdr->c_filesize + 1); ++ tape_buffered_read (link_name, in_file_des, file_hdr->c_filesize); ++ link_name[file_hdr->c_filesize] = '\0'; ++ tape_skip_padding (in_file_des, file_hdr->c_filesize); ++ } ++ return link_name; ++} + + static void +-list_file(struct cpio_file_stat* file_hdr, int in_file_des) ++list_file (struct cpio_file_stat* file_hdr, int in_file_des) + { + if (verbose_flag) + { +@@ -136,21 +156,16 @@ list_file(struct cpio_file_stat* file_hdr, int in_file_des) + { + if (archive_format != arf_tar && archive_format != arf_ustar) + { +- char *link_name = NULL; /* Name of hard and symbolic links. */ +- +- link_name = (char *) xmalloc ((unsigned int) file_hdr->c_filesize + 1); +- link_name[file_hdr->c_filesize] = '\0'; +- tape_buffered_read (link_name, in_file_des, file_hdr->c_filesize); +- long_format (file_hdr, link_name); +- free (link_name); +- tape_skip_padding (in_file_des, file_hdr->c_filesize); +- return; ++ char *link_name = get_link_name (file_hdr, in_file_des); ++ if (link_name) ++ { ++ long_format (file_hdr, link_name); ++ free (link_name); ++ } + } + else +- { +- long_format (file_hdr, file_hdr->c_tar_linkname); +- return; +- } ++ long_format (file_hdr, file_hdr->c_tar_linkname); ++ return; + } + else + #endif +@@ -650,10 +665,7 @@ copyin_link(struct cpio_file_stat *file_hdr, int in_file_des) + + if (archive_format != arf_tar && archive_format != arf_ustar) + { +- link_name = (char *) xmalloc ((unsigned int) file_hdr->c_filesize + 1); +- link_name[file_hdr->c_filesize] = '\0'; +- tape_buffered_read (link_name, in_file_des, file_hdr->c_filesize); +- tape_skip_padding (in_file_des, file_hdr->c_filesize); ++ link_name = get_link_name (file_hdr, in_file_des); + } + else + { +diff --git a/tests/Makefile.am b/tests/Makefile.am +index b3e8e60..cf186da 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -52,6 +52,8 @@ TESTSUITE_AT = \ + setstat04.at\ + setstat05.at\ + symlink.at\ ++ symlink-bad-length.at\ ++ symlink-long.at\ + version.at + + TESTSUITE = $(srcdir)/testsuite +diff --git a/tests/symlink-bad-length.at b/tests/symlink-bad-length.at +new file mode 100644 +index 0000000..cbf4aa7 +--- /dev/null ++++ b/tests/symlink-bad-length.at +@@ -0,0 +1,49 @@ ++# Process this file with autom4te to create testsuite. -*- Autotest -*- ++# Copyright (C) 2014 Free Software Foundation, Inc. ++ ++# This program 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, or (at your option) ++# any later version. ++ ++# This program 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, write to the Free Software ++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ++# 02110-1301 USA. ++ ++# Cpio v2.11 did segfault with badly set symlink length. ++# References: ++# http://lists.gnu.org/archive/html/bug-cpio/2014-11/msg00007.html ++ ++AT_SETUP([symlink-bad-length]) ++AT_KEYWORDS([symlink-long copyout]) ++ ++AT_DATA([ARCHIVE.base64], ++[x3EjAIBAtIEtJy8nAQAAAHRUYW0FAAAADQBGSUxFAABzb21lIGNvbnRlbnQKAMdxIwBgQ/+hLScv ++JwEAAAB0VEhuBQD/////TElOSwAARklMRcdxAAAAAAAAAAAAAAEAAAAAAAAACwAAAAAAVFJBSUxF ++UiEhIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= ++]) ++ ++AT_CHECK([ ++base64 -d ARCHIVE.base64 > ARCHIVE || AT_SKIP_TEST ++cpio -ntv < ARCHIVE ++test $? -eq 2 ++], ++[0], ++[-rw-rw-r-- 1 10029 10031 13 Nov 25 13:52 FILE ++],[cpio: LINK: stored filename length is out of range ++cpio: premature end of file ++]) ++ ++AT_CLEANUP +diff --git a/tests/symlink-long.at b/tests/symlink-long.at +new file mode 100644 +index 0000000..d3def2d +--- /dev/null ++++ b/tests/symlink-long.at +@@ -0,0 +1,46 @@ ++# Process this file with autom4te to create testsuite. -*- Autotest -*- ++# Copyright (C) 2014 Free Software Foundation, Inc. ++ ++# This program 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, or (at your option) ++# any later version. ++ ++# This program 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, write to the Free Software ++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ++# 02110-1301 USA. ++ ++# Cpio v2.11.90 changed the way symlink name is read from archive. ++# References: ++# http://lists.gnu.org/archive/html/bug-cpio/2014-11/msg00007.html ++ ++AT_SETUP([symlink-long]) ++AT_KEYWORDS([symlink-long copyout]) ++ ++AT_CHECK([ ++ ++# len(dirname) > READBUFSIZE ++dirname= ++for i in {1..52}; do ++ dirname="xxxxxxxxx/$dirname" ++ mkdir "$dirname" ++done ++ln -s "$dirname" x || AT_SKIP_TEST ++ ++echo x | cpio -o > ar ++list=`cpio -tv < ar | sed 's|.*-> ||'` ++test "$list" = "$dirname" && echo success || echo fail ++], ++[0], ++[success ++],[2 blocks ++2 blocks ++]) ++ ++AT_CLEANUP +diff --git a/tests/testsuite.at b/tests/testsuite.at +index 8f3330b..590bdcb 100644 +--- a/tests/testsuite.at ++++ b/tests/testsuite.at +@@ -31,6 +31,8 @@ m4_include([version.at]) + + m4_include([inout.at]) + m4_include([symlink.at]) ++m4_include([symlink-bad-length.at]) ++m4_include([symlink-long.at]) + m4_include([interdir.at]) + + m4_include([setstat01.at]) diff --git a/SOURCES/cpio-2.11-arm-config-sub-guess.patch b/SOURCES/cpio-2.11-arm-config-sub-guess.patch new file mode 100644 index 0000000..e9d4651 --- /dev/null +++ b/SOURCES/cpio-2.11-arm-config-sub-guess.patch @@ -0,0 +1,1232 @@ +diff --git a/build-aux/config.guess b/build-aux/config.guess +index c2246a4..1804e9f 100755 +--- a/build-aux/config.guess ++++ b/build-aux/config.guess +@@ -1,14 +1,14 @@ + #! /bin/sh + # Attempt to guess a canonical system name. + # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +-# Free Software Foundation, Inc. ++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, ++# 2011, 2012, 2013 Free Software Foundation, Inc. + +-timestamp='2009-12-30' ++timestamp='2012-12-29' + + # This file 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 2 of the License, or ++# the Free Software Foundation; either version 3 of the License, or + # (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, but +@@ -17,26 +17,22 @@ timestamp='2009-12-30' + # General Public License for more details. + # + # You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +-# 02110-1301, USA. ++# along with this program; if not, see . + # + # As a special exception to the GNU General Public License, if you + # distribute this file as part of a program that contains a + # configuration script generated by Autoconf, you may include it under +-# the same distribution terms that you use for the rest of that program. +- +- +-# Originally written by Per Bothner. Please send patches (context +-# diff format) to and include a ChangeLog +-# entry. ++# the same distribution terms that you use for the rest of that ++# program. This Exception is an additional permission under section 7 ++# of the GNU General Public License, version 3 ("GPLv3"). + # +-# This script attempts to guess a canonical system name similar to +-# config.sub. If it succeeds, it prints the system name on stdout, and +-# exits with 0. Otherwise, it exits with 1. ++# Originally written by Per Bothner. + # + # You can get the latest version of this script from: + # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD ++# ++# Please send patches with a ChangeLog entry to config-patches@gnu.org. ++ + + me=`echo "$0" | sed -e 's,.*/,,'` + +@@ -57,8 +53,8 @@ GNU config.guess ($timestamp) + + Originally written by Per Bothner. + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +-Software Foundation, Inc. ++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, ++2012, 2013 Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +@@ -145,7 +141,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or +- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, ++ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward +@@ -181,7 +177,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + fi + ;; + *) +- os=netbsd ++ os=netbsd + ;; + esac + # The OS release +@@ -202,6 +198,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; ++ *:Bitrig:*:*) ++ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` ++ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} ++ exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} +@@ -224,7 +224,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) +- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on +@@ -270,7 +270,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` +- exit ;; ++ # Reset EXIT trap before exiting to avoid spurious non-zero exit code. ++ exitcode=$? ++ trap '' 0 ++ exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead +@@ -296,12 +299,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) +- echo powerpc-ibm-os400 ++ echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; +- arm:riscos:*:*|arm:RISCOS:*:*) ++ arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) +@@ -395,23 +398,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) +- echo m68k-atari-mint${UNAME_RELEASE} ++ echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} +- exit ;; ++ exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) +- echo m68k-atari-mint${UNAME_RELEASE} ++ echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) +- echo m68k-milan-mint${UNAME_RELEASE} +- exit ;; ++ echo m68k-milan-mint${UNAME_RELEASE} ++ exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) +- echo m68k-hades-mint${UNAME_RELEASE} +- exit ;; ++ echo m68k-hades-mint${UNAME_RELEASE} ++ exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) +- echo m68k-unknown-mint${UNAME_RELEASE} +- exit ;; ++ echo m68k-unknown-mint${UNAME_RELEASE} ++ exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; +@@ -481,8 +484,8 @@ EOF + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) +- # DG/UX returns AViiON for all architectures +- UNAME_PROCESSOR=`/usr/bin/uname -p` ++ # DG/UX returns AViiON for all architectures ++ UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ +@@ -495,7 +498,7 @@ EOF + else + echo i586-dg-dgux${UNAME_RELEASE} + fi +- exit ;; ++ exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; +@@ -552,7 +555,7 @@ EOF + echo rs6000-ibm-aix3.2 + fi + exit ;; +- *:AIX:*:[456]) ++ *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 +@@ -595,52 +598,52 @@ EOF + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` +- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` +- case "${sc_cpu_version}" in +- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 +- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 +- 532) # CPU_PA_RISC2_0 +- case "${sc_kernel_bits}" in +- 32) HP_ARCH="hppa2.0n" ;; +- 64) HP_ARCH="hppa2.0w" ;; ++ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` ++ case "${sc_cpu_version}" in ++ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 ++ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 ++ 532) # CPU_PA_RISC2_0 ++ case "${sc_kernel_bits}" in ++ 32) HP_ARCH="hppa2.0n" ;; ++ 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 +- esac ;; +- esac ++ esac ;; ++ esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build +- sed 's/^ //' << EOF >$dummy.c ++ sed 's/^ //' << EOF >$dummy.c + +- #define _HPUX_SOURCE +- #include +- #include ++ #define _HPUX_SOURCE ++ #include ++ #include + +- int main () +- { +- #if defined(_SC_KERNEL_BITS) +- long bits = sysconf(_SC_KERNEL_BITS); +- #endif +- long cpu = sysconf (_SC_CPU_VERSION); ++ int main () ++ { ++ #if defined(_SC_KERNEL_BITS) ++ long bits = sysconf(_SC_KERNEL_BITS); ++ #endif ++ long cpu = sysconf (_SC_CPU_VERSION); + +- switch (cpu) +- { +- case CPU_PA_RISC1_0: puts ("hppa1.0"); break; +- case CPU_PA_RISC1_1: puts ("hppa1.1"); break; +- case CPU_PA_RISC2_0: +- #if defined(_SC_KERNEL_BITS) +- switch (bits) +- { +- case 64: puts ("hppa2.0w"); break; +- case 32: puts ("hppa2.0n"); break; +- default: puts ("hppa2.0"); break; +- } break; +- #else /* !defined(_SC_KERNEL_BITS) */ +- puts ("hppa2.0"); break; +- #endif +- default: puts ("hppa1.0"); break; +- } +- exit (0); +- } ++ switch (cpu) ++ { ++ case CPU_PA_RISC1_0: puts ("hppa1.0"); break; ++ case CPU_PA_RISC1_1: puts ("hppa1.1"); break; ++ case CPU_PA_RISC2_0: ++ #if defined(_SC_KERNEL_BITS) ++ switch (bits) ++ { ++ case 64: puts ("hppa2.0w"); break; ++ case 32: puts ("hppa2.0n"); break; ++ default: puts ("hppa2.0"); break; ++ } break; ++ #else /* !defined(_SC_KERNEL_BITS) */ ++ puts ("hppa2.0"); break; ++ #endif ++ default: puts ("hppa1.0"); break; ++ } ++ exit (0); ++ } + EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa +@@ -731,22 +734,22 @@ EOF + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd +- exit ;; ++ exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi +- exit ;; ++ exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd +- exit ;; ++ exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd +- exit ;; ++ exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd +- exit ;; ++ exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; +@@ -770,14 +773,14 @@ EOF + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` +- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` +- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` +- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" +- exit ;; ++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` ++ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` ++ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" ++ exit ;; + 5000:UNIX_System_V:4.*:*) +- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` +- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` +- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" ++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` ++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` ++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} +@@ -789,30 +792,35 @@ EOF + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) +- case ${UNAME_MACHINE} in +- pc98) +- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; ++ UNAME_PROCESSOR=`/usr/bin/uname -p` ++ case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) +- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; ++ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; ++ *:MINGW64*:*) ++ echo ${UNAME_MACHINE}-pc-mingw64 ++ exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; ++ i*:MSYS*:*) ++ echo ${UNAME_MACHINE}-pc-msys ++ exit ;; + i*:windows32*:*) +- # uname -m includes "-pc" on this system. +- echo ${UNAME_MACHINE}-mingw32 ++ # uname -m includes "-pc" on this system. ++ echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) +- case ${UNAME_MACHINE} in ++ case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; +@@ -858,6 +866,13 @@ EOF + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; ++ aarch64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ aarch64_be:Linux:*:*) ++ UNAME_MACHINE=aarch64_be ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; +@@ -867,7 +882,7 @@ EOF + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; +- esac ++ esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} +@@ -879,20 +894,29 @@ EOF + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else +- echo ${UNAME_MACHINE}-unknown-linux-gnueabi ++ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ ++ | grep -q __ARM_PCS_VFP ++ then ++ echo ${UNAME_MACHINE}-unknown-linux-gnueabi ++ else ++ echo ${UNAME_MACHINE}-unknown-linux-gnueabihf ++ fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) +- echo cris-axis-linux-gnu ++ echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) +- echo crisv32-axis-linux-gnu ++ echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + frv:Linux:*:*) +- echo frv-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ hexagon:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu +@@ -934,7 +958,7 @@ EOF + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) +- echo or32-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu +@@ -960,7 +984,7 @@ EOF + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu +@@ -968,14 +992,17 @@ EOF + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; ++ tile*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) +- echo x86_64-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. +@@ -984,11 +1011,11 @@ EOF + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) +- # Unixware is an offshoot of SVR4, but it has its own version +- # number series starting with 2... +- # I am not positive that other SVR4 systems won't match this, ++ # Unixware is an offshoot of SVR4, but it has its own version ++ # number series starting with 2... ++ # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. +- # Use sysv4.2uw... so that sysv4* matches it. ++ # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) +@@ -1020,7 +1047,7 @@ EOF + fi + exit ;; + i*86:*:5:[678]*) +- # UnixWare 7.x, OpenUNIX and OpenServer 6. ++ # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; +@@ -1048,13 +1075,13 @@ EOF + exit ;; + pc:*:*:*) + # Left here for compatibility: +- # uname -m prints for DJGPP always 'pc', but it prints nothing about +- # the processor, so we play safe by assuming i586. ++ # uname -m prints for DJGPP always 'pc', but it prints nothing about ++ # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp +- exit ;; ++ exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; +@@ -1089,8 +1116,8 @@ EOF + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) +- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ +- && { echo i486-ncr-sysv4; exit; } ;; ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ +@@ -1133,10 +1160,10 @@ EOF + echo ns32k-sni-sysv + fi + exit ;; +- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort +- # says +- echo i586-unisys-sysv4 +- exit ;; ++ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort ++ # says ++ echo i586-unisys-sysv4 ++ exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm +@@ -1162,11 +1189,11 @@ EOF + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then +- echo mips-nec-sysv${UNAME_RELEASE} ++ echo mips-nec-sysv${UNAME_RELEASE} + else +- echo mips-unknown-sysv${UNAME_RELEASE} ++ echo mips-unknown-sysv${UNAME_RELEASE} + fi +- exit ;; ++ exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; +@@ -1179,6 +1206,9 @@ EOF + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; ++ x86_64:Haiku:*:*) ++ echo x86_64-unknown-haiku ++ exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; +@@ -1231,7 +1261,10 @@ EOF + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; +- NSE-?:NONSTOP_KERNEL:*:*) ++ NEO-?:NONSTOP_KERNEL:*:*) ++ echo neo-tandem-nsk${UNAME_RELEASE} ++ exit ;; ++ NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) +@@ -1276,13 +1309,13 @@ EOF + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) +- echo mips-sei-seiux${UNAME_RELEASE} ++ echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) +- UNAME_MACHINE=`(uname -p) 2>/dev/null` ++ UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; +@@ -1300,11 +1333,11 @@ EOF + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; ++ x86_64:VMkernel:*:*) ++ echo ${UNAME_MACHINE}-unknown-esx ++ exit ;; + esac + +-#echo '(No uname command or uname output not recognized.)' 1>&2 +-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 +- + eval $set_cc_for_build + cat >$dummy.c < + printf ("m68k-sony-newsos%s\n", + #ifdef NEWSOS4 +- "4" ++ "4" + #else +- "" ++ "" + #endif +- ); exit (0); ++ ); exit (0); + #endif + #endif + +diff --git a/build-aux/config.sub b/build-aux/config.sub +index c2d1257..52f04bc 100755 +--- a/build-aux/config.sub ++++ b/build-aux/config.sub +@@ -1,38 +1,33 @@ + #! /bin/sh + # Configuration validation subroutine script. + # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +-# Free Software Foundation, Inc. ++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, ++# 2011, 2012, 2013 Free Software Foundation, Inc. + +-timestamp='2010-01-22' ++timestamp='2012-12-29' + +-# This file is (in principle) common to ALL GNU software. +-# The presence of a machine in this file suggests that SOME GNU software +-# can handle that machine. It does not imply ALL GNU software can. +-# +-# This file 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 2 of the License, or ++# This file 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. + # +-# This program 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. ++# This program 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, write to the Free Software +-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +-# 02110-1301, USA. ++# along with this program; if not, see . + # + # As a special exception to the GNU General Public License, if you + # distribute this file as part of a program that contains a + # configuration script generated by Autoconf, you may include it under +-# the same distribution terms that you use for the rest of that program. ++# the same distribution terms that you use for the rest of that ++# program. This Exception is an additional permission under section 7 ++# of the GNU General Public License, version 3 ("GPLv3"). + + +-# Please send patches to . Submit a context +-# diff and a properly formatted GNU ChangeLog entry. ++# Please send patches with a ChangeLog entry to config-patches@gnu.org. + # + # Configuration subroutine to validate and canonicalize a configuration type. + # Supply the specified configuration type as an argument. +@@ -76,8 +71,8 @@ version="\ + GNU config.sub ($timestamp) + + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +-Software Foundation, Inc. ++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, ++2012, 2013 Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +@@ -124,13 +119,18 @@ esac + # Here we must recognize all the valid KERNEL-OS combinations. + maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` + case $maybe_os in +- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ +- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ ++ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ ++ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ ++ knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; ++ android-linux) ++ os=-linux-android ++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ++ ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] +@@ -153,12 +153,12 @@ case $os in + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ +- -apple | -axis | -knuth | -cray | -microblaze) ++ -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; +- -bluegene*) +- os=-cnk ++ -bluegene*) ++ os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= +@@ -174,10 +174,10 @@ case $os in + os=-chorusos + basic_machine=$1 + ;; +- -chorusrdb) +- os=-chorusrdb ++ -chorusrdb) ++ os=-chorusrdb + basic_machine=$1 +- ;; ++ ;; + -hiux*) + os=-hiuxwe2 + ;; +@@ -222,6 +222,12 @@ case $os in + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; ++ -lynx*178) ++ os=-lynxos178 ++ ;; ++ -lynx*5) ++ os=-lynxos5 ++ ;; + -lynx*) + os=-lynxos + ;; +@@ -246,20 +252,27 @@ case $basic_machine in + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ ++ | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ +- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ ++ | arc \ ++ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ ++ | avr | avr32 \ ++ | be32 | be64 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ ++ | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ ++ | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ ++ | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ +- | maxq | mb | microblaze | mcore | mep | metag \ ++ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ +@@ -282,29 +295,39 @@ case $basic_machine in + | moxie \ + | mt \ + | msp430 \ ++ | nds32 | nds32le | nds32be \ + | nios | nios2 \ + | ns16k | ns32k \ ++ | open8 \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ +- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ ++ | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ +- | rx \ ++ | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ +- | spu | strongarm \ +- | tahoe | thumb | tic4x | tic80 | tron \ ++ | spu \ ++ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ +- | v850 | v850e \ ++ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ +- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ ++ | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; +- m6811 | m68hc11 | m6812 | m68hc12 | picochip) +- # Motorola 68HC11/12. ++ c54x) ++ basic_machine=tic54x-unknown ++ ;; ++ c55x) ++ basic_machine=tic55x-unknown ++ ;; ++ c6x) ++ basic_machine=tic6x-unknown ++ ;; ++ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; +@@ -314,6 +337,21 @@ case $basic_machine in + basic_machine=mt-unknown + ;; + ++ strongarm | thumb | xscale) ++ basic_machine=arm-unknown ++ ;; ++ xgate) ++ basic_machine=$basic_machine-unknown ++ os=-none ++ ;; ++ xscaleeb) ++ basic_machine=armeb-unknown ++ ;; ++ ++ xscaleel) ++ basic_machine=armel-unknown ++ ;; ++ + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. +@@ -328,25 +366,30 @@ case $basic_machine in + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ ++ | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ ++ | be32-* | be64-* \ + | bfin-* | bs2000-* \ +- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ ++ | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ ++ | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ ++ | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ +- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ ++ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ ++ | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ +@@ -368,26 +411,29 @@ case $basic_machine in + | mmix-* \ + | mt-* \ + | msp430-* \ ++ | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ ++ | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ +- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ ++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ +- | romp-* | rs6000-* | rx-* \ ++ | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ +- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ +- | tahoe-* | thumb-* \ ++ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ ++ | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ +- | tile-* | tilegx-* \ ++ | tile*-* \ + | tron-* \ + | ubicom32-* \ +- | v850-* | v850e-* | vax-* \ ++ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ ++ | vax-* \ + | we32k-* \ +- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ ++ | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) +@@ -412,7 +458,7 @@ case $basic_machine in + basic_machine=a29k-amd + os=-udi + ;; +- abacus) ++ abacus) + basic_machine=abacus-unknown + ;; + adobe68k) +@@ -482,11 +528,20 @@ case $basic_machine in + basic_machine=powerpc-ibm + os=-cnk + ;; ++ c54x-*) ++ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ c55x-*) ++ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ c6x-*) ++ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; +- cegcc) ++ cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; +@@ -518,7 +573,7 @@ case $basic_machine in + basic_machine=craynv-cray + os=-unicosmp + ;; +- cr16) ++ cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; +@@ -676,7 +731,6 @@ case $basic_machine in + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +-# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 +@@ -734,9 +788,13 @@ case $basic_machine in + basic_machine=ns32k-utek + os=-sysv + ;; +- microblaze) ++ microblaze*) + basic_machine=microblaze-xilinx + ;; ++ mingw64) ++ basic_machine=x86_64-pc ++ os=-mingw64 ++ ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 +@@ -773,10 +831,18 @@ case $basic_machine in + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; ++ msys) ++ basic_machine=i386-pc ++ os=-msys ++ ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; ++ nacl) ++ basic_machine=le32-unknown ++ os=-nacl ++ ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 +@@ -841,6 +907,12 @@ case $basic_machine in + np1) + basic_machine=np1-gould + ;; ++ neo-tandem) ++ basic_machine=neo-tandem ++ ;; ++ nse-tandem) ++ basic_machine=nse-tandem ++ ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; +@@ -923,9 +995,10 @@ case $basic_machine in + ;; + power) basic_machine=power-ibm + ;; +- ppc) basic_machine=powerpc-unknown ++ ppc | ppcbe) basic_machine=powerpc-unknown + ;; +- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ppc-* | ppcbe-*) ++ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown +@@ -935,7 +1008,7 @@ case $basic_machine in + ;; + ppc64) basic_machine=powerpc64-unknown + ;; +- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown +@@ -950,7 +1023,11 @@ case $basic_machine in + basic_machine=i586-unknown + os=-pw32 + ;; +- rdos) ++ rdos | rdos64) ++ basic_machine=x86_64-pc ++ os=-rdos ++ ;; ++ rdos32) + basic_machine=i386-pc + os=-rdos + ;; +@@ -1019,6 +1096,9 @@ case $basic_machine in + basic_machine=i860-stratus + os=-sysv4 + ;; ++ strongarm-* | thumb-*) ++ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; + sun2) + basic_machine=m68000-sun + ;; +@@ -1075,25 +1155,8 @@ case $basic_machine in + basic_machine=t90-cray + os=-unicos + ;; +- tic54x | c54x*) +- basic_machine=tic54x-unknown +- os=-coff +- ;; +- tic55x | c55x*) +- basic_machine=tic55x-unknown +- os=-coff +- ;; +- tic6x | c6x*) +- basic_machine=tic6x-unknown +- os=-coff +- ;; +- # This must be matched before tile*. +- tilegx*) +- basic_machine=tilegx-unknown +- os=-linux-gnu +- ;; + tile*) +- basic_machine=tile-unknown ++ basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) +@@ -1163,6 +1226,9 @@ case $basic_machine in + xps | xps100) + basic_machine=xps100-honeywell + ;; ++ xscale-* | xscalee[bl]-*) ++ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ++ ;; + ymp) + basic_machine=ymp-cray + os=-unicos +@@ -1260,11 +1326,11 @@ esac + if [ x"$os" != x"" ] + then + case $os in +- # First match some system type aliases +- # that might get confused with valid system types. ++ # First match some system type aliases ++ # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. +- -auroraux) +- os=-auroraux ++ -auroraux) ++ os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` +@@ -1294,14 +1360,15 @@ case $os in + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ +- | -openbsd* | -solidbsd* \ ++ | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ +- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ +- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ ++ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ ++ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ ++ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ +@@ -1348,7 +1415,7 @@ case $os in + -opened*) + os=-openedition + ;; +- -os400*) ++ -os400*) + os=-os400 + ;; + -wince*) +@@ -1397,7 +1464,7 @@ case $os in + -sinix*) + os=-sysv4 + ;; +- -tpf*) ++ -tpf*) + os=-tpf + ;; + -triton*) +@@ -1442,8 +1509,8 @@ case $os in + -dicos*) + os=-dicos + ;; +- -nacl*) +- ;; ++ -nacl*) ++ ;; + -none) + ;; + *) +@@ -1466,10 +1533,10 @@ else + # system, and we'll never get to this point. + + case $basic_machine in +- score-*) ++ score-*) + os=-elf + ;; +- spu-*) ++ spu-*) + os=-elf + ;; + *-acorn) +@@ -1481,8 +1548,20 @@ case $basic_machine in + arm*-semi) + os=-aout + ;; +- c4x-* | tic4x-*) +- os=-coff ++ c4x-* | tic4x-*) ++ os=-coff ++ ;; ++ hexagon-*) ++ os=-elf ++ ;; ++ tic54x-*) ++ os=-coff ++ ;; ++ tic55x-*) ++ os=-coff ++ ;; ++ tic6x-*) ++ os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) +@@ -1502,14 +1581,11 @@ case $basic_machine in + ;; + m68000-sun) + os=-sunos3 +- # This also exists in the configure program, but was not the +- # default. +- # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; +- mep-*) ++ mep-*) + os=-elf + ;; + mips*-cisco) +@@ -1536,7 +1612,7 @@ case $basic_machine in + *-ibm) + os=-aix + ;; +- *-knuth) ++ *-knuth) + os=-mmixware + ;; + *-wec) diff --git a/SOURCES/cpio-2.11-crc-big-files.patch b/SOURCES/cpio-2.11-crc-big-files.patch new file mode 100644 index 0000000..27d02e7 --- /dev/null +++ b/SOURCES/cpio-2.11-crc-big-files.patch @@ -0,0 +1,118 @@ +From 610e732bda06aef9ff3b16df757ddc32d8368a1a Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff +Date: Mon, 20 Feb 2012 19:51:27 +0200 +Subject: [PATCH] Always use 32 bit CRC + +* src/cpiohdr.h (cpio_file_stat) : Change type to +uint32_t. +* src/extern.h (crc): Change type to uint32_t. +* src/global.c: Likewise. +* src/copyout.c (read_for_checksum): Return uint32_t. +* src/copyin.c: Fix printf formats. +--- + src/copyin.c | 8 ++++---- + src/copyout.c | 4 ++-- + src/cpiohdr.h | 2 +- + src/extern.h | 2 +- + src/global.c | 2 +- + 5 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/src/copyin.c b/src/copyin.c +index 29d0fb1..db8ee66 100644 +--- a/src/copyin.c ++++ b/src/copyin.c +@@ -193,7 +193,7 @@ list_file (struct cpio_file_stat* file_hdr, int in_file_des) + #endif + if (crc != file_hdr->c_chksum) + { +- error (0, 0, _("%s: checksum error (0x%lx, should be 0x%lx)"), ++ error (0, 0, _("%s: checksum error (0x%x, should be 0x%x)"), + file_hdr->c_name, crc, file_hdr->c_chksum); + } + } +@@ -540,7 +540,7 @@ copyin_regular_file (struct cpio_file_stat* file_hdr, int in_file_des) + if (archive_format == arf_crcascii) + { + if (crc != file_hdr->c_chksum) +- error (0, 0, _("%s: checksum error (0x%lx, should be 0x%lx)"), ++ error (0, 0, _("%s: checksum error (0x%x, should be 0x%x)"), + file_hdr->c_name, crc, file_hdr->c_chksum); + } + tape_skip_padding (in_file_des, file_hdr->c_filesize); +@@ -565,7 +565,7 @@ copyin_regular_file (struct cpio_file_stat* file_hdr, int in_file_des) + if (archive_format == arf_crcascii) + { + if (crc != file_hdr->c_chksum) +- error (0, 0, _("%s: checksum error (0x%lx, should be 0x%lx)"), ++ error (0, 0, _("%s: checksum error (0x%x, should be 0x%x)"), + file_hdr->c_name, crc, file_hdr->c_chksum); + } + +@@ -1454,7 +1454,7 @@ process_copy_in () + tape_skip_padding (in_file_des, file_hdr.c_filesize); + if (crc != file_hdr.c_chksum) + { +- error (0, 0, _("%s: checksum error (0x%lx, should be 0x%lx)"), ++ error (0, 0, _("%s: checksum error (0x%x, should be 0x%x)"), + file_hdr.c_name, crc, file_hdr.c_chksum); + } + /* Debian hack: -v and -V now work with --only-verify-crc. +diff --git a/src/copyout.c b/src/copyout.c +index 72f1989..03eaf88 100644 +--- a/src/copyout.c ++++ b/src/copyout.c +@@ -33,10 +33,10 @@ + /* Read FILE_SIZE bytes of FILE_NAME from IN_FILE_DES and + compute and return a checksum for them. */ + +-static unsigned long ++static uint32_t + read_for_checksum (int in_file_des, int file_size, char *file_name) + { +- unsigned long crc; ++ uint32_t crc; + char buf[BUFSIZ]; + int bytes_left; + int bytes_read; +diff --git a/src/cpiohdr.h b/src/cpiohdr.h +index bb1ad6b..1c11998 100644 +--- a/src/cpiohdr.h ++++ b/src/cpiohdr.h +@@ -123,7 +123,7 @@ struct cpio_file_stat /* Internal representation of a CPIO header */ + long c_rdev_maj; + long c_rdev_min; + size_t c_namesize; +- unsigned long c_chksum; ++ uint32_t c_chksum; + char *c_name; + char *c_tar_linkname; + }; +diff --git a/src/extern.h b/src/extern.h +index 4f94d40..3530bf6 100644 +--- a/src/extern.h ++++ b/src/extern.h +@@ -75,7 +75,7 @@ extern char *new_media_message_after_number; + extern int archive_des; + extern char *archive_name; + extern char *rsh_command_option; +-extern unsigned long crc; ++extern uint32_t crc; + extern int delayed_seek_count; + #ifdef DEBUG_CPIO + extern int debug_flag; +diff --git a/src/global.c b/src/global.c +index cff9720..336941e 100644 +--- a/src/global.c ++++ b/src/global.c +@@ -144,7 +144,7 @@ char *archive_name = NULL; + char *rsh_command_option = NULL; + + /* CRC checksum. */ +-unsigned long crc; ++uint32_t crc; + + /* Input and output buffers. */ + char *input_buffer, *output_buffer; +-- +2.9.3 + diff --git a/SOURCES/cpio-2.11-crc-fips-nit.patch b/SOURCES/cpio-2.11-crc-fips-nit.patch new file mode 100644 index 0000000..56efa35 --- /dev/null +++ b/SOURCES/cpio-2.11-crc-fips-nit.patch @@ -0,0 +1,13 @@ +diff --git a/src/main.c b/src/main.c +index 38fb3eb..9b9bf74 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -151,7 +151,7 @@ static struct argp_option options[] = { + {"pattern-file", 'E', N_("FILE"), 0, + N_("Read additional patterns specifying filenames to extract or list from FILE"), 210}, + {"only-verify-crc", ONLY_VERIFY_CRC_OPTION, 0, 0, +- N_("When reading a CRC format archive, only verify the CRC's of each file in the archive, don't actually extract the files"), 210}, ++ N_("When reading a CRC format archive, only verify the checksum of each file in the archive, don't actually extract the files"), 210}, + {"rename", 'r', 0, 0, + N_("Interactively rename files"), GRID+1 }, + {"rename-batch-file", RENAME_BATCH_FILE_OPTION, N_("FILE"), OPTION_HIDDEN, diff --git a/SOURCES/cpio-2.11-recovery.patch b/SOURCES/cpio-2.11-recovery.patch new file mode 100644 index 0000000..1109bba --- /dev/null +++ b/SOURCES/cpio-2.11-recovery.patch @@ -0,0 +1,104 @@ +From 5e1e4fae6a9eab069866eb46b2f91d60fae34efe Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff +Date: Thu, 11 Dec 2014 12:51:21 +0200 +Subject: [PATCH] Fix error recovery in copy-in mode + +(+ complete sync of symlink-bad-length.at test) + +* src/copyin.c (copyin_link): Fix null dereference. +(read_in_header): Fix error recovery (bug introduced by +27e0ae55). +* tests/symlink-bad-length.at: Test error recovery. +Catch various architecture-dependent error messages (suggested +by Pavel Raiskup). +--- + src/copyin.c | 10 ++++++---- + tests/symlink-bad-length.at | 16 ++++++++++++---- + 2 files changed, 18 insertions(+), 8 deletions(-) + +diff --git a/src/copyin.c b/src/copyin.c +index 29d0fb1..274bd49 100644 +--- a/src/copyin.c ++++ b/src/copyin.c +@@ -655,7 +655,7 @@ copyin_device (struct cpio_file_stat* file_hdr) + } + + static void +-copyin_link(struct cpio_file_stat *file_hdr, int in_file_des) ++copyin_link (struct cpio_file_stat *file_hdr, int in_file_des) + { + char *link_name = NULL; /* Name of hard and symbolic links. */ + int res; /* Result of various function calls. */ +@@ -666,6 +666,8 @@ copyin_link(struct cpio_file_stat *file_hdr, int in_file_des) + if (archive_format != arf_tar && archive_format != arf_ustar) + { + link_name = get_link_name (file_hdr, in_file_des); ++ if (!link_name) ++ return; + } + else + { +@@ -1020,7 +1022,7 @@ read_in_header (struct cpio_file_stat *file_hdr, int in_des) + + file_hdr->c_tar_linkname = NULL; + +- tape_buffered_read (magic.str, in_des, 6L); ++ tape_buffered_read (magic.str, in_des, sizeof (magic.str)); + while (1) + { + if (append_flag) +@@ -1065,8 +1067,8 @@ read_in_header (struct cpio_file_stat *file_hdr, int in_des) + break; + } + bytes_skipped++; +- memmove (magic.str, magic.str + 1, 5); +- tape_buffered_read (magic.str, in_des, 1L); ++ memmove (magic.str, magic.str + 1, sizeof (magic.str) - 1); ++ tape_buffered_read (magic.str + sizeof (magic.str) - 1, in_des, 1L); + } + } + +diff --git a/tests/symlink-bad-length.at b/tests/symlink-bad-length.at +index 84123a4..fd2c87e 100644 +--- a/tests/symlink-bad-length.at ++++ b/tests/symlink-bad-length.at +@@ -1,5 +1,5 @@ + # Process this file with autom4te to create testsuite. -*- Autotest -*- +-# Copyright (C) 2014 Free Software Foundation, Inc. ++# Copyright (C) 2014-2015, 2017 Free Software Foundation, Inc. + + # This program is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -35,18 +35,26 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + ]) + ++# The exact error message and exit status depend on the host architecture, ++# therefore strderr is filtered out and error code is not checked. ++ ++# So far the only case when cpio would exit with code 0 is when it skips ++# several bytes and encounters a valid record header. Perhaps it should ++# exit with code 2 (non-critical error), if at least one byte was skipped, ++# but that could hurt backward compatibility. ++ + AT_CHECK([ + base64 -d ARCHIVE.base64 > ARCHIVE || AT_SKIP_TEST +-TZ=UTC cpio -ntv < ARCHIVE 2>stderr +-rc=$? ++TZ=UTC cpio -ntv < ARCHIVE 2>stderr + cat stderr | grep -v \ + -e 'stored filename length is out of range' \ + -e 'premature end of file' \ + -e 'archive header has reverse byte-order' \ + -e 'memory exhausted' \ ++ -e 'skipped [[0-9][0-9]*] bytes of junk' \ ++ -e '[[0-9][0-9]*] block' \ + >&2 + echo >&2 STDERR +-test "$rc" -ne 0 + ], + [0], + [-rw-rw-r-- 1 10029 10031 13 Nov 25 2014 FILE +-- +2.9.3 + diff --git a/SOURCES/cpio-2.11-reproducible.patch b/SOURCES/cpio-2.11-reproducible.patch new file mode 100644 index 0000000..705b772 --- /dev/null +++ b/SOURCES/cpio-2.11-reproducible.patch @@ -0,0 +1,395 @@ +From d249aaececed97d8ed78508ddec27fc73112601f Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff +Date: Mon, 1 Dec 2014 15:02:38 +0200 +Subject: [PATCH 1/2] New options to create device and inode-independent + archives. + +* src/util.c (inode_val): New member trans_inode +(find_inode_val): New function. +(find_inode_file): Rewrite using the above. +(add_inode): Initialize the trans_inode member +depending on the value of renumber_inodes_option. +(get_inode_and_dev): New function. +(stat_to_cpio): Use get_inode_and_dev. +(arf_stores_inode_p): New function. +* src/extern.h (renumber_inodes_option) +(ignore_devno_option): New externs. +* src/global.c (renumber_inodes_option) +(ignore_devno_option): New variables. +* src/main.c: Add new options. + +* NEWS: Document changes. +* doc/cpio.1: Document new options. +* doc/cpio.texi: Likewise. +--- + NEWS | 14 +++++++++++ + doc/cpio.texi | 12 +++++++++ + src/extern.h | 8 ++++-- + src/global.c | 3 +++ + src/main.c | 34 +++++++++++++++++++++++-- + src/util.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- + 6 files changed, 138 insertions(+), 14 deletions(-) + +diff --git a/NEWS b/NEWS +index 1b068ba..c112d70 100644 +--- a/NEWS ++++ b/NEWS +@@ -5,6 +5,20 @@ See the end of file for copying conditions. + + Please send cpio bug reports to . + ++Downstream backports from newer versions ++* New options for copy-out mode: ++ ++** --ignore-devno ++Store 0 in the device number fields, instead of the actual device ++number. ++ ++** --renumber-inodes ++Renumber inodes when storing them in the archive. ++ ++** --device-independent or --reproducible ++Create reproducible archives. This is equivalent to ++--ignore-devno --renumber-inodes. ++ + Version 2.11 - Sergey Poznyakoff, 2010-03-10 + + * Fix mt build. +diff --git a/doc/cpio.texi b/doc/cpio.texi +index 1af808a..c9b62ee 100644 +--- a/doc/cpio.texi ++++ b/doc/cpio.texi +@@ -342,6 +342,11 @@ Set the I/O block size to @var{io-size} bytes. + @itemx --make-directories + Create leading directories where needed. + ++@item --device-independent ++@itemx --reproducible ++Create reproducible archives. This is equivalent to ++@option{--ignore-devno --renumber-inodes}. ++ + @item -E @var{file} + @itemx --pattern-file=@var{file} + Read additional patterns specifying filenames to extract or list from +@@ -419,6 +424,10 @@ of the remote host. The hostname can be preceded by a username and an @samp{@@} + access the remote tape drive as that user, if you have permission to do + so (typically an entry in that user's @file{~/.rhosts} file). + ++@item --ignore-devno ++Store 0 in the device number field of each archive member, instead of ++the actual device number. ++ + @item -k + Ignored; for compatibility with other versions of cpio. + +@@ -486,6 +495,9 @@ Do not print the number of blocks copied. + @itemx --rename + Interactively rename files. + ++@item --renumber-inodes ++Renumber inodes when storing them in the archive. ++ + @item -R @var{owner} + @itemx --owner @var{owner} + +diff --git a/src/extern.h b/src/extern.h +index 4f94d40..f3a6c47 100644 +--- a/src/extern.h ++++ b/src/extern.h +@@ -56,6 +56,8 @@ extern int only_verify_crc_flag; + extern int no_abs_paths_flag; + extern unsigned int warn_option; + extern mode_t newdir_umask; ++extern int renumber_inodes_option; ++extern int ignore_devno_option; + + /* Values for warn_option */ + #define CPIO_WARN_NONE 0 +@@ -171,8 +173,8 @@ void create_all_directories (char *name); + void prepare_append (int out_file_des); + char *find_inode_file (ino_t node_num, + unsigned long major_num, unsigned long minor_num); +-void add_inode (ino_t node_num, char *file_name, +- unsigned long major_num, unsigned long minor_num); ++struct inode_val *add_inode (ino_t node_num, char *file_name, ++ unsigned long major_num, unsigned long minor_num); + int open_archive (char *file); + void tape_offline (int tape_des); + void get_next_reel (int tape_des); +@@ -217,3 +219,5 @@ void delay_set_stat (char const *file_name, struct stat *st, + int repair_delayed_set_stat (struct cpio_file_stat *file_hdr); + void apply_delayed_set_stat (void); + ++int arf_stores_inode_p (enum archive_format arf); ++ +diff --git a/src/global.c b/src/global.c +index cff9720..fb074fb 100644 +--- a/src/global.c ++++ b/src/global.c +@@ -193,3 +193,6 @@ int (*xstat) (); + + /* Which copy operation to perform. (-i, -o, -p) */ + void (*copy_function) () = 0; ++ ++int renumber_inodes_option; ++int ignore_devno_option; +diff --git a/src/main.c b/src/main.c +index 9b9bf74..6945c7d 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -57,7 +57,10 @@ enum cpio_options { + FORCE_LOCAL_OPTION, + DEBUG_OPTION, + BLOCK_SIZE_OPTION, +- TO_STDOUT_OPTION ++ TO_STDOUT_OPTION, ++ RENUMBER_INODES_OPTION, ++ IGNORE_DEVNO_OPTION, ++ DEVICE_INDEPENDENT_OPTION + }; + + const char *program_authors[] = +@@ -175,6 +178,13 @@ static struct argp_option options[] = { + N_("Append to an existing archive."), GRID+1 }, + {NULL, 'O', N_("[[USER@]HOST:]FILE-NAME"), 0, + N_("Archive filename to use instead of standard output. Optional USER and HOST specify the user and host names in case of a remote archive"), GRID+1 }, ++ {"renumber-inodes", RENUMBER_INODES_OPTION, NULL, 0, ++ N_("Renumber inodes") }, ++ {"ignore-devno", IGNORE_DEVNO_OPTION, NULL, 0, ++ N_("Don't store device numbers") }, ++ {"device-independent", DEVICE_INDEPENDENT_OPTION, NULL, 0, ++ N_("Create device-independent (reproducible) archives") }, ++ {"reproducible", 0, NULL, OPTION_ALIAS }, + #undef GRID + + /* ********** */ +@@ -432,7 +442,19 @@ crc newc odc bin ustar tar (all-caps also recognized)"), arg); + error (PAXEXIT_FAILURE, 0, _("Mode already defined")); + copy_function = process_copy_pass; + break; +- ++ ++ case IGNORE_DEVNO_OPTION: ++ ignore_devno_option = 1; ++ break; ++ ++ case RENUMBER_INODES_OPTION: ++ renumber_inodes_option = 1; ++ break; ++ ++ case DEVICE_INDEPENDENT_OPTION: ++ ignore_devno_option = renumber_inodes_option = 1; ++ break; ++ + case RSH_COMMAND_OPTION: + rsh_command_option = arg; + break; +@@ -575,6 +597,8 @@ process_args (int argc, char *argv[]) + CHECK_USAGE(xstat != lstat, "--dereference", "--extract"); + CHECK_USAGE(append_flag, "--append", "--extract"); + CHECK_USAGE(output_archive_name, "-O", "--extract"); ++ CHECK_USAGE (renumber_inodes_option, "--renumber-inodes", "--extract"); ++ CHECK_USAGE (ignore_devno_option, "--ignore-devno", "--extract"); + if (to_stdout_option) + { + CHECK_USAGE(create_dir_flag, "--make-directories", "--to-stdout"); +@@ -630,6 +654,9 @@ process_args (int argc, char *argv[]) + archive_format = arf_binary; + if (output_archive_name) + archive_name = output_archive_name; ++ ++ if (!arf_stores_inode_p (archive_format)) ++ renumber_inodes_option = ignore_devno_option = 0; + } + else + { +@@ -655,6 +682,9 @@ process_args (int argc, char *argv[]) + CHECK_USAGE(no_abs_paths_flag, "--absolute-pathnames", + "--pass-through"); + CHECK_USAGE(to_stdout_option, "--to-stdout", "--pass-through"); ++ CHECK_USAGE (renumber_inodes_option, "--renumber-inodes", ++ "--pass-through"); ++ CHECK_USAGE (ignore_devno_option, "--ignore-devno", "--pass-through"); + + directory_name = argv[index]; + } +diff --git a/src/util.c b/src/util.c +index 2a821c7..ce45842 100644 +--- a/src/util.c ++++ b/src/util.c +@@ -689,6 +689,7 @@ struct inode_val + ino_t inode; + unsigned long major_num; + unsigned long minor_num; ++ ino_t trans_inode; + char *file_name; + }; + +@@ -712,8 +713,8 @@ inode_val_compare (const void *val1, const void *val2) + && ival1->minor_num == ival2->minor_num; + } + +-char * +-find_inode_file (ino_t node_num, unsigned long major_num, ++static struct inode_val * ++find_inode_val (ino_t node_num, unsigned long major_num, + unsigned long minor_num) + { + struct inode_val sample; +@@ -725,32 +726,78 @@ find_inode_file (ino_t node_num, unsigned long major_num, + sample.inode = node_num; + sample.major_num = major_num; + sample.minor_num = minor_num; +- ival = hash_lookup (hash_table, &sample); ++ return hash_lookup (hash_table, &sample); ++} ++ ++char * ++find_inode_file (ino_t node_num, unsigned long major_num, ++ unsigned long minor_num) ++{ ++ struct inode_val *ival = find_inode_val (node_num, major_num, minor_num); + return ival ? ival->file_name : NULL; + } + + /* Associate FILE_NAME with the inode NODE_NUM. (Insert into hash table.) */ + +-void ++static ino_t next_inode; ++ ++struct inode_val * + add_inode (ino_t node_num, char *file_name, unsigned long major_num, + unsigned long minor_num) + { + struct inode_val *temp; +- struct inode_val *e; ++ struct inode_val *e = NULL; + + /* Create new inode record. */ + temp = (struct inode_val *) xmalloc (sizeof (struct inode_val)); + temp->inode = node_num; + temp->major_num = major_num; + temp->minor_num = minor_num; +- temp->file_name = xstrdup (file_name); ++ temp->file_name = file_name ? xstrdup (file_name) : NULL; ++ ++ if (renumber_inodes_option) ++ temp->trans_inode = next_inode++; ++ else ++ temp->trans_inode = temp->inode; + + if (!((hash_table + || (hash_table = hash_initialize (0, 0, inode_val_hasher, + inode_val_compare, 0))) + && (e = hash_insert (hash_table, temp)))) + xalloc_die (); +- /* FIXME: e is not used */ ++ return e; ++} ++ ++static ino_t ++get_inode_and_dev (struct cpio_file_stat *hdr, struct stat *st) ++{ ++ if (renumber_inodes_option) ++ { ++ if (st->st_nlink > 1) ++ { ++ struct inode_val *ival = find_inode_val (st->st_ino, ++ major (st->st_dev), ++ minor (st->st_dev)); ++ if (!ival) ++ ival = add_inode (st->st_ino, NULL, ++ major (st->st_dev), minor (st->st_dev)); ++ hdr->c_ino = ival->trans_inode; ++ } ++ else ++ hdr->c_ino = next_inode++; ++ } ++ else ++ hdr->c_ino = st->st_ino; ++ if (ignore_devno_option) ++ { ++ hdr->c_dev_maj = 0; ++ hdr->c_dev_min = 0; ++ } ++ else ++ { ++ hdr->c_dev_maj = major (st->st_dev); ++ hdr->c_dev_min = minor (st->st_dev); ++ } + } + + +@@ -1220,9 +1267,8 @@ sparse_write (int fildes, char *buf, unsigned int nbyte) + void + stat_to_cpio (struct cpio_file_stat *hdr, struct stat *st) + { +- hdr->c_dev_maj = major (st->st_dev); +- hdr->c_dev_min = minor (st->st_dev); +- hdr->c_ino = st->st_ino; ++ get_inode_and_dev (hdr, st); ++ + /* For POSIX systems that don't define the S_IF macros, + we can't assume that S_ISfoo means the standard Unix + S_IFfoo bit(s) are set. So do it manually, with a +@@ -1618,3 +1664,18 @@ cpio_create_dir (struct cpio_file_stat *file_hdr, int existing_dir) + return 0; + } + ++/* Return true if the archive format ARF stores inode numbers */ ++int ++arf_stores_inode_p (enum archive_format arf) ++{ ++ switch (arf) ++ { ++ case arf_tar: ++ case arf_ustar: ++ return 0; ++ ++ default: ++ break; ++ } ++ return 1; ++} +-- +2.9.3 + + +From 8d468d9c5134415b187dc5738a7fdaec17f87cf5 Mon Sep 17 00:00:00 2001 +From: Pavel Raiskup +Date: Mon, 6 Feb 2017 08:43:18 +0100 +Subject: [PATCH 2/2] build: lint warnings in --device-independent + +Complements: 3945f9db44c935608caa5f0 + +* src/util.c (find_inode_val): Drop unused variable. +(get_inode_and_dev): Function doesn't return any value, drop the +return value in definition. +--- + src/util.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/util.c b/src/util.c +index ce45842..f3efc6c 100644 +--- a/src/util.c ++++ b/src/util.c +@@ -718,7 +718,6 @@ find_inode_val (ino_t node_num, unsigned long major_num, + unsigned long minor_num) + { + struct inode_val sample; +- struct inode_val *ival; + + if (!hash_table) + return NULL; +@@ -768,7 +767,7 @@ add_inode (ino_t node_num, char *file_name, unsigned long major_num, + return e; + } + +-static ino_t ++static void + get_inode_and_dev (struct cpio_file_stat *hdr, struct stat *st) + { + if (renumber_inodes_option) +-- +2.9.3 + diff --git a/SOURCES/cpio-2.11-ru-translation.patch b/SOURCES/cpio-2.11-ru-translation.patch new file mode 100644 index 0000000..f05ab7a --- /dev/null +++ b/SOURCES/cpio-2.11-ru-translation.patch @@ -0,0 +1,13 @@ +diff --git a/po/ru.po b/po/ru.po +index 8bb24e2..39110a3 100644 +--- a/po/ru.po ++++ b/po/ru.po +@@ -1132,7 +1132,7 @@ msgid "" + "You must specify one of -oipt options.\n" + "Try `%s --help' or `%s --usage' for more information.\n" + msgstr "" +-"Необходимо указать один из апарметров -oipt.\n" ++"Необходимо указать один из параметров -oipt.\n" + "Попробуйте указать `%s --help' или `%s --usage',\n" + "чтобы получить дополнительную информацию.\n" + diff --git a/SOURCES/cpio-2.11-stdio.in.patch b/SOURCES/cpio-2.11-stdio.in.patch new file mode 100644 index 0000000..f7016ba --- /dev/null +++ b/SOURCES/cpio-2.11-stdio.in.patch @@ -0,0 +1,13 @@ +diff -urNp cpio-2.11-orig/gnu/stdio.in.h cpio-2.11/gnu/stdio.in.h +--- cpio-2.11-orig/gnu/stdio.in.h 2010-03-10 10:27:03.000000000 +0100 ++++ cpio-2.11/gnu/stdio.in.h 2012-06-04 10:23:23.804471185 +0200 +@@ -139,7 +139,9 @@ _GL_WARN_ON_USE (fflush, "fflush is not + so any use of gets warrants an unconditional warning. Assume it is + always declared, since it is required by C89. */ + #undef gets ++#if HAVE_RAW_DECL_GETS + _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ++#endif + + #if @GNULIB_FOPEN@ + # if @REPLACE_FOPEN@ diff --git a/SOURCES/cpio-2.11-testsuite-CVE-2014-9112.patch b/SOURCES/cpio-2.11-testsuite-CVE-2014-9112.patch new file mode 100644 index 0000000..d59ad1f --- /dev/null +++ b/SOURCES/cpio-2.11-testsuite-CVE-2014-9112.patch @@ -0,0 +1,30 @@ +diff --git a/tests/symlink-bad-length.at b/tests/symlink-bad-length.at +index cbf4aa7..d8d250b 100644 +--- a/tests/symlink-bad-length.at ++++ b/tests/symlink-bad-length.at +@@ -37,13 +37,20 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + AT_CHECK([ + base64 -d ARCHIVE.base64 > ARCHIVE || AT_SKIP_TEST +-cpio -ntv < ARCHIVE +-test $? -eq 2 ++TZ=UTC cpio -ntv < ARCHIVE 2>stderr ++rc=$? ++cat stderr | grep -v \ ++ -e 'stored filename length is out of range' \ ++ -e 'premature end of file' \ ++ -e 'archive header has reverse byte-order' \ ++ -e 'memory exhausted' \ ++ >&2 ++echo >&2 STDERR ++test "$rc" -ne 0 + ], + [0], +-[-rw-rw-r-- 1 10029 10031 13 Nov 25 13:52 FILE +-],[cpio: LINK: stored filename length is out of range +-cpio: premature end of file ++[-rw-rw-r-- 1 10029 10031 13 Nov 25 2014 FILE ++],[STDERR + ]) + + AT_CLEANUP diff --git a/SOURCES/cpio-2.11-treat-read-errors.patch b/SOURCES/cpio-2.11-treat-read-errors.patch new file mode 100644 index 0000000..b01e60a --- /dev/null +++ b/SOURCES/cpio-2.11-treat-read-errors.patch @@ -0,0 +1,22 @@ +diff --git a/src/util.c b/src/util.c +index ab49890..7332891 100644 +--- a/src/util.c ++++ b/src/util.c +@@ -203,7 +203,7 @@ tape_fill_input_buffer (int in_des, int num_bytes) + get_next_reel (in_des); + input_size = rmtread (in_des, input_buffer, num_bytes); + } +- if (input_size < 0) ++ if (input_size == SAFE_READ_ERROR) + error (1, errno, _("read error")); + if (input_size == 0) + { +@@ -224,7 +224,7 @@ disk_fill_input_buffer (int in_des, off_t num_bytes) + in_buff = input_buffer; + num_bytes = (num_bytes < DISK_IO_BLOCK_SIZE) ? num_bytes : DISK_IO_BLOCK_SIZE; + input_size = read (in_des, input_buffer, num_bytes); +- if (input_size < 0) ++ if (input_size == SAFE_READ_ERROR) + { + input_size = 0; + return (-1); diff --git a/SOURCES/cpio-2.9-dev_number.patch b/SOURCES/cpio-2.9-dev_number.patch new file mode 100644 index 0000000..5eb751b --- /dev/null +++ b/SOURCES/cpio-2.9-dev_number.patch @@ -0,0 +1,23 @@ +diff -ruN cpio-2.9.90.orig/src/copyin.c cpio-2.9.90/src/copyin.c +--- cpio-2.9.90.orig/src/copyin.c 2008-07-11 13:20:27.000000000 +0200 ++++ cpio-2.9.90/src/copyin.c 2008-07-18 10:16:24.000000000 +0200 +@@ -1269,15 +1269,15 @@ + swab_array ((char *) short_hdr, 13); + } + +- file_hdr->c_dev_maj = major (short_hdr->c_dev); +- file_hdr->c_dev_min = minor (short_hdr->c_dev); ++ file_hdr->c_dev_maj = major ((unsigned short)short_hdr->c_dev); ++ file_hdr->c_dev_min = minor ((unsigned short)short_hdr->c_dev); + file_hdr->c_ino = short_hdr->c_ino; + file_hdr->c_mode = short_hdr->c_mode; + file_hdr->c_uid = short_hdr->c_uid; + file_hdr->c_gid = short_hdr->c_gid; + file_hdr->c_nlink = short_hdr->c_nlink; +- file_hdr->c_rdev_maj = major (short_hdr->c_rdev); +- file_hdr->c_rdev_min = minor (short_hdr->c_rdev); ++ file_hdr->c_rdev_maj = major ((unsigned short)short_hdr->c_rdev); ++ file_hdr->c_rdev_min = minor ((unsigned short)short_hdr->c_rdev); + file_hdr->c_mtime = (unsigned long) short_hdr->c_mtimes[0] << 16 + | short_hdr->c_mtimes[1]; + diff --git a/SOURCES/cpio-2.9-exitCode.patch b/SOURCES/cpio-2.9-exitCode.patch new file mode 100644 index 0000000..4a05ecf --- /dev/null +++ b/SOURCES/cpio-2.9-exitCode.patch @@ -0,0 +1,11 @@ +--- cpio-2.9/src/copyout.c.exitCode 2007-06-28 10:54:43.000000000 +0200 ++++ cpio-2.9/src/copyout.c 2007-07-16 16:23:05.000000000 +0200 +@@ -297,7 +297,7 @@ to_ascii (char *where, uintmax_t v, size + static void + field_width_error (const char *filename, const char *fieldname) + { +- error (0, 0, _("%s: field width not sufficient for storing %s"), ++ error (1, 0, _("%s: field width not sufficient for storing %s"), + filename, fieldname); + } + diff --git a/SOURCES/cpio-2.9-rh.patch b/SOURCES/cpio-2.9-rh.patch new file mode 100644 index 0000000..02b9be0 --- /dev/null +++ b/SOURCES/cpio-2.9-rh.patch @@ -0,0 +1,31 @@ +--- cpio-2.9/doc/cpio.info.rh 2007-06-28 15:25:08.000000000 +0200 ++++ cpio-2.9/doc/cpio.info 2007-07-16 15:10:20.000000000 +0200 +@@ -266,7 +266,8 @@ File: cpio.info, Node: Options, Prev: + Set the I/O block size to BLOCK-SIZE * 512 bytes. + + `-c' +- Use the old portable (ASCII) archive format. ++ Identical to "-H newc", use the new (SVR4) portable format. ++ If you wish the old portable (ASCII) archive format, use "-H odc" instead. + + `-C IO-SIZE' + `--io-size=IO-SIZE' +--- cpio-2.9/src/main.c.rh 2007-06-28 12:46:41.000000000 +0200 ++++ cpio-2.9/src/main.c 2007-07-16 15:09:10.000000000 +0200 +@@ -111,7 +111,7 @@ static struct argp_option options[] = { + {"block-size", BLOCK_SIZE_OPTION, N_("BLOCK-SIZE"), 0, + N_("Set the I/O block size to BLOCK-SIZE * 512 bytes"), GRID+1 }, + {NULL, 'c', NULL, 0, +- N_("Use the old portable (ASCII) archive format"), GRID+1 }, ++ N_("Identical to \"-H newc\", use the new (SVR4) portable format.If you wish the old portable (ASCII) archive format, use \"-H odc\" instead."), GRID+1 }, + {"dot", 'V', NULL, 0, + N_("Print a \".\" for each file processed"), GRID+1 }, + {"io-size", 'C', N_("NUMBER"), 0, +@@ -338,6 +338,7 @@ parse_opt (int key, char *arg, struct ar + case 'c': /* Use the old portable ASCII format. */ + if (archive_format != arf_unknown) + error (0, EXIT_FAILURE, _("Archive format multiply defined")); ++#define SVR4_COMPAT + #ifdef SVR4_COMPAT + archive_format = arf_newascii; /* -H newc. */ + #else diff --git a/SOURCES/cpio-2.9.90-defaultremoteshell.patch b/SOURCES/cpio-2.9.90-defaultremoteshell.patch new file mode 100644 index 0000000..6733c3b --- /dev/null +++ b/SOURCES/cpio-2.9.90-defaultremoteshell.patch @@ -0,0 +1,14 @@ +diff -urNp cpio-2.9.90-orig/lib/rtapelib.c cpio-2.9.90/lib/rtapelib.c +--- cpio-2.9.90-orig/lib/rtapelib.c 2007-08-12 09:57:15.000000000 +0200 ++++ cpio-2.9.90/lib/rtapelib.c 2009-03-09 18:06:43.000000000 +0100 +@@ -59,6 +59,10 @@ + # include + #endif + ++#ifndef REMOTE_SHELL ++# define REMOTE_SHELL "/usr/bin/ssh" ++#endif ++ + #include + #include + diff --git a/SOURCES/cpio.1 b/SOURCES/cpio.1 new file mode 100644 index 0000000..3449be9 --- /dev/null +++ b/SOURCES/cpio.1 @@ -0,0 +1,410 @@ +.TH CPIO 1L \" -*- nroff -*- +.SH NAME +cpio \- copy files to and from archives +.SH SYNOPSIS +\&\fBCopy-out mode\fR +.PP +In copy-out mode, cpio copies files into an archive. It reads a list +of filenames, one per line, on the standard input, and writes the +archive onto the standard output. A typical way to generate the list +of filenames is with the find command; you should give find the \-depth +option to minimize problems with permissions on directories that are +unreadable. see \*(lqOptions\*(rq. +.PP +.B cpio +{\-o|\-\-create} [\-0acvABLV] [\-C bytes] [\-H format] +[\-M message] [\-O [[user@]host:]archive] [\-F [[user@]host:]archive] +[\-\-file=[[user@]host:]archive] [\-\-format=format] [\-\-warning=FLAG] +[\-\-message=message][\-\-null] [\-\-reset\-access\-time] [\-\-verbose] +[\-\-dot] [\-\-append] [\-\-block\-size=blocks] [\-\-dereference] +[\-\-io\-size=bytes] [\-\-rsh\-command=command] [\-\-license] [\-\-usage] +[\-\-help] [\-\-version] +< name-list [> archive] +.PP +\&\fBCopy-in mode\fR +.PP +In copy-in mode, cpio copies files out of an archive or lists the +archive contents. It reads the archive from the standard input. Any +non-option command line arguments are shell globbing patterns; only +files in the archive whose names match one or more of those patterns are +copied from the archive. Unlike in the shell, an initial `\fB.\fR' in a +filename does match a wildcard at the start of a pattern, and a `\fB/\fR' in a +filename can match wildcards. If no patterns are given, all files are +extracted. see \*(lqOptions\*(rq. +.PP +.B cpio +{\-i|\-\-extract} [\-bcdfmnrtsuvBSV] [\-C bytes] [\-E file] [\-H format] +[\-M message] [\-R [user][:.][group]] [\-I [[user@]host:]archive] +[\-F [[user@]host:]archive] [\-\-file=[[user@]host:]archive] +[\-\-make-directories] [\-\-nonmatching] [\-\-preserve-modification-time] +[\-\-numeric-uid-gid] [\-\-rename] [\-t|\-\-list] [\-\-swap-bytes] [\-\-swap] +[\-\-dot] [\-\-warning=FLAG] [\-\-unconditional] [\-\-verbose] +[\-\-block-size=blocks] [\-\-swap-halfwords] [\-\-io-size=bytes] +[\-\-pattern-file=file] [\-\-format=format] [\-\-owner=[user][:.][group]] +[\-\-no-preserve-owner] [\-\-message=message] +[\-\-force\-local] [\-\-no\-absolute\-filenames] [\-\-absolute\-filenames] +[\-\-sparse] [\-\-only\-verify\-crc] [\-\-to\-stdout] [\-\-quiet] +[\-\-rsh-command=command] [\-\-license] [\-\-usage] [\-\-help] +[\-\-version] [pattern...] [< archive] +.PP +\&\fBCopy-pass mode\fR +.PP +In copy-pass mode, cpio copies files from one directory tree to +another, combining the copy-out and copy-in steps without actually +using an archive. It reads the list of files to copy from the standard +input; the directory into which it will copy them is given as a +non-option argument. see \*(lqOptions\*(rq. +.PP +.B cpio +{\-p|\-\-pass-through} [\-0adlmuvLV] [\-R [user][:.][group]] +[\-\-null] [\-\-reset-access-time] [\-\-make-directories] [\-\-link] [\-\-quiet] +[\-\-preserve-modification-time] [\-\-unconditional] [\-\-verbose] [\-\-dot] +[\-\-warning=FLAG] [\-\-dereference] [\-\-owner=[user][:.][group]] +[\-\-no-preserve-owner] [\-\-sparse] [\-\-license] [\-\-usage] [\-\-help] +[\-\-version] destination-directory < name-list +.PP +.SH DESCRIPTION +GNU cpio is a tool for creating and extracting archives, or copying +files from one place to another. It handles a number of cpio formats as +well as reading and writing tar files. +.PP +Following archive formats are supported: binary, old ASCII, new ASCII, crc, HPUX binary, HPUX old +ASCII, old tar, and POSIX.1 tar. The tar format is provided for compatibility with the tar program. By +default, cpio creates binary format archives, for compatibility with older cpio programs. When extracting +from archives, cpio automatically recognizes which kind of archive it is reading and can read archives created +on machines with a different byte-order. +.PP +.SH OPTIONS +.TP +`\fB\-0, \-\-null\fR' +Read a list of filenames terminated by a null character, instead +of a newline, so that files whose names contain newlines can be +archived. \s-1GNU\s0 find is one way to produce a list of +null-terminated filenames. This option may be used in copy-out +and copy-pass modes. +.TP +`\fB\-a, \-\-reset\-access\-time\fR' +Reset the access times of files after reading them, so that it +does not look like they have just been read. +.TP +`\fB\-A, \-\-append\fR' +Append to an existing archive. Only works in copy-out mode. The +archive must be a disk file specified with the \-O or \-F (\-file) +option. +.TP +`\fB\-b, \-\-swap\fR' +Swap both halfwords of words and bytes of halfwords in the data. +Equivalent to \-sS. This option may be used in copy-in mode. Use +this option to convert 32\-bit integers between big-endian and +little-endian machines. +.TP +`\fB\-B\fR' +Set the I/O block size to 5120 bytes. Initially the block size is +512 bytes. +.TP +`\fB\-\-block\-size=BLOCK\-SIZE\fR' +Set the I/O block size to BLOCK-SIZE * 512 bytes. +.TP +`\fB\-c\fR' +Identical to \*(lq\-H newc\*(rq, use the new (\s-1SVR4\s0) portable format. +If you wish the old portable (\s-1ASCII\s0) archive format, use \*(lq\-H odc\*(rq instead. +.TP +`\fB\-C \s-1IO\-SIZE\s0, \-\-io\-size=IO\-SIZE\fR' +Set the I/O block size to IO-SIZE bytes. +.TP +`\fB\-d, \-\-make\-directories\fR' +Create leading directories where needed. +.TP +`\fB\-\-device\-independent, \-\-reproducible\fR' +Create reproducible archives. This is equivalent to \fB\-\-ignore\-devno +\-\-renumber\-inodes\fR. +.TP +`\fB\-E \s-1FILE\s0, \-\-pattern\-file=FILE\fR' +Read additional patterns specifying filenames to extract or list +from \s-1FILE\s0. The lines of \s-1FILE\s0 are treated as if they had been +non-option arguments to cpio. This option is used in copy-in mode, +.TP +`\fB\-f, \-\-nonmatching\fR' +Only copy files that do not match any of the given patterns. +.TP +`\fB\-F, \-\-file=archive\fR' +Archive filename to use instead of standard input or output. To +use a tape drive on another machine as the archive, use a filename +that starts with `\fB\s-1HOSTNAME:\s0\fR'. The hostname can be preceded by a +username and an `\fB@\fR' to access the remote tape drive as that user, +if you have permission to do so (typically an entry in that user's +`\fB~/.rhosts\fR' file). +.TP +`\fB\-\-force\-local\fR' +With \-F, \-I, or \-O, take the archive file name to be a local file +even if it contains a colon, which would ordinarily indicate a +remote host name. +.TP +`\fB\-H \s-1FORMAT\s0, \-\-format=FORMAT\fR' +Use archive format \s-1FORMAT\s0. The valid formats are listed below; +the same names are also recognized in all\-caps. The default in +copy-in mode is to automatically detect the archive format, and in +copy-out mode is `\fBbin\fR'. +.TP +`bin' +The obsolete binary format. +.TP +`odc' +The old (\s-1POSIX\s0.1) portable format. +.TP +`newc' +The new (\s-1SVR4\s0) portable format, which supports file systems +having more than 65536 i\-nodes. +.TP +`crc' +The new (\s-1SVR4\s0) portable format with a checksum (Sum32) added. +.TP +`tar' +The old tar format. +.TP +`ustar' +The \s-1POSIX\s0.1 tar format. Also recognizes \s-1GNU\s0 tar archives, +which are similar but not identical. +.TP +`hpbin' +The obsolete binary format used by \s-1HPUX\s0's cpio (which stores +device files differently). +.TP +`hpodc' +The portable format used by \s-1HPUX\s0's cpio (which stores device +files differently). +.TP +`\fB\-i, \-\-extract\fR' +Run in copy-in mode. see \*(lqCopy\-in mode\*(rq. +.TP +`\fB\-I archive\fR' +Archive filename to use instead of standard input. To use a tape +drive on another machine as the archive, use a filename that +starts with `\fB\s-1HOSTNAME:\s0\fR'. The hostname can be preceded by a +username and an `\fB@\fR' to access the remote tape drive as that user, +if you have permission to do so (typically an entry in that user's +`\fB~/.rhosts\fR' file). +.TP +`\fB\-\-ignore\-devno\fR' +Store 0 in the device number field of each archive member, instead of the +actual device number. +.TP +`\fB\-k\fR' +Ignored; for compatibility with other versions of cpio. +.TP +`\fB\-l, \-\-link\fR' +Link files instead of copying them, when possible. +.TP +`\fB\-L, \-\-dereference\fR' +Copy the file that a symbolic link points to, rather than the +symbolic link itself. +.TP +`\fB\-m, \-\-preserve\-modification\-time\fR' +Retain previous file modification times when creating files. +.TP +`\fB\-M \s-1MESSAGE\s0, \-\-message=MESSAGE\fR' +Print \s-1MESSAGE\s0 when the end of a volume of the backup media (such +as a tape or a floppy disk) is reached, to prompt the user to +insert a new volume. If \s-1MESSAGE\s0 contains the string \*(lq%d\*(rq, it is +replaced by the current volume number (starting at 1). +.TP +`\fB\-n, \-\-numeric\-uid\-gid\fR' +Show numeric \s-1UID\s0 and \s-1GID\s0 instead of translating them into names +when using the `\fB\-\-verbose option\fR'. +.TP +`\fB\-\-no\-absolute\-filenames\fR' +Create all files relative to the current directory in copy-in +mode, even if they have an absolute file name in the archive. +.TP +`\fB\-\-absolute\-filenames\fR' (default) +Do not strip leading file name components that contain \*(lq..\*(rq +and leading slashes from file names in copy-in mode +.TP +`\fB\-\-no\-preserve\-owner\fR' +Do not change the ownership of the files; leave them owned by the +user extracting them. This is the default for non-root users, so +that users on System V don't inadvertently give away files. This +option can be used in copy-in mode and copy-pass mode +.TP +`\fB\-o, \-\-create\fR' +Run in copy-out mode. see \*(lqCopy\-out mode\*(rq. +.TP +`\fB\-O archive\fR' +Archive filename to use instead of standard output. To use a tape +drive on another machine as the archive, use a filename that +starts with `\fB\s-1HOSTNAME:\s0\fR'. The hostname can be preceded by a +username and an `\fB@\fR' to access the remote tape drive as that user, +if you have permission to do so (typically an entry in that user's +`\fB~/.rhosts\fR' file). +.TP +`\fB\-\-only\-verify\-crc\fR' +Verify the \s-1Sum32 checksum\s0's of each file in the archive, when reading a +\s-1crc\s0 format archive. Don't actually extract the files. +.TP +`\fB\-p, \-\-pass\-through\fR' +Run in copy-pass mode. see \*(lqCopy\-pass mode\*(rq. +.TP +`\fB\-\-quiet\fR' +Do not print the number of blocks copied. +.TP +`\fB\-r, \-\-rename\fR' +Interactively rename files. +.TP +`\fB\-\-renumber\-inodes\fR' +Renumber inodes when storing them in the archive. +.TP +`\fB\-R [user][:.][group], \-\-owner [user][:.][group]\fR' +Set the ownership of all files created to the specified user and/or +group in copy-out and copy-pass modes. Either the user, the +group, or both, must be present. If the group is omitted but the +\&\*(lq:\*(rq or \*(lq.\*(rq separator is given, use the given user's login group. +Only the super-user can change files' ownership. +.TP +`\fB\-\-rsh\-command=COMMAND\fR' +Notifies cpio that is should use \s-1COMMAND\s0 to communicate with remote +devices. +.TP +`\fB\-s, \-\-swap\-bytes\fR' +Swap the bytes of each halfword (pair of bytes) in the files.This +option can be used in copy-in mode. +.TP +`\fB\-S, \-\-swap\-halfwords\fR' +Swap the halfwords of each word (4 bytes) in the files. This +option may be used in copy-in mode. +.TP +`\fB\-\-sparse\fR' +Write files with large blocks of zeros as sparse files. This +option is used in copy-in and copy-pass modes. +.TP +`\fB\-t, \-\-list\fR' +Print a table of contents of the input. +.TP +`\fB\-\-to\-stdout\fR' +Extract files to standard output. This option may be used in +copy-in mode. +.TP +`\fB\-u, \-\-unconditional\fR' +Replace all files, without asking whether to replace existing +newer files with older files. +.TP +`\fB\-v, \-\-verbose\fR' +List the files processed, or with `\fB\-t\fR', give an `\fBls \-l\fR' style +table of contents listing. In a verbose table of contents of a +ustar archive, user and group names in the archive that do not +exist on the local system are replaced by the names that +correspond locally to the numeric \s-1UID\s0 and \s-1GID\s0 stored in the +archive. +.TP +`\fB\-V, \-\-dot\fR' +Print a `\fB.\fR' for each file processed. +.TP +`\fB\-W, \-\-warning\fR' +Control warning display. Currently FLAG is one of 'none', 'truncate', 'all'. Multiple options accumulate. +.TP +`\fB\-\-license\fR' +Print license and exit. +.TP +`\fB?, \-\-help\fR' +Give a help page similar to this manpage. +.TP +`\fB\-\-usage\fR' +Give a short usage message. +.TP +`\fB\-\-version\fR' +Print the cpio program version number and exit. + +.PP +.SH EXAMPLES +When creating an archive, cpio takes the list of files to be +processed from the standard input, and then sends the archive to the +standard output, or to the device defined by the `\fB\-F\fR' option. +Usually find or ls is used to provide this list to +the standard input. In the following example you can see the +possibilities for archiving the contents of a single directory. +.PP +.B % ls | cpio \-ov > directory.cpio +.PP +The `\fB\-o\fR' option creates the archive, and the `\fB\-v\fR' option prints the +names of the files archived as they are added. Notice that the options +can be put together after a single `\fB\-\fR' or can be placed separately on +the command line. The `\fB>\fR' redirects the cpio output to the file +`\fBdirectory.cpio\fR'. +.PP +If you wanted to archive an entire directory tree, the find command +can provide the file list to cpio: +.PP +.B % find . \-print \-depth | cpio \-ov > tree.cpio +.PP +This will take all the files in the current directory, the +directories below and place them in the archive tree.cpio. Again the +`\fB\-o\fR' creates an archive, and the `\fB\-v\fR' option shows you the name of the +files as they are archived. see \*(lqCopy\-out mode\*(rq. Using the `\fB.\fR' in +the find statement will give you more flexibility when doing restores, +as it will save file names with a relative path vice a hard wired, +absolute path. The `\fB\-depth\fR' option forces `\fBfind\fR' to print of the +entries in a directory before printing the directory itself. This +limits the effects of restrictive directory permissions by printing the +directory entries in a directory before the directory name itself. +.PP +Extracting an archive requires a bit more thought because cpio will +not create directories by default. Another characteristic, is it will +not overwrite existing files unless you tell it to. +.PP +.B % cpio \-iv < directory.cpio +.PP +This will retrieve the files archived in the file directory.cpio and +place them in the present directory. The `\fB\-i\fR' option extracts the +archive and the `\fB\-v\fR' shows the file names as they are extracted. If +you are dealing with an archived directory tree, you need to use the +`\fB\-d\fR' option to create directories as necessary, something like: +.PP +.B % cpio \-idv < tree.cpio +.PP +This will take the contents of the archive tree.cpio and extract it +to the current directory. If you try to extract the files on top of +files of the same name that already exist (and have the same or later +modification time) cpio will not extract the file unless told to do so +by the \-u option. see \*(lqCopy\-in mode\*(rq. +.PP +In copy-pass mode, cpio copies files from one directory tree to +another, combining the copy-out and copy-in steps without actually +using an archive. It reads the list of files to copy from the standard +input; the directory into which it will copy them is given as a +non-option argument. see \*(lqCopy\-pass mode\*(rq. +.PP +.B % find . \-depth \-print0 | cpio \-\-null \-pvd new-dir +.PP +The example shows copying the files of the present directory, and +sub-directories to a new directory called new\-dir. Some new options are +the `\fB\-print0\fR' available with \s-1GNU\s0 find, combined with the `\fB\-\-null\fR' +option of cpio. These two options act together to send file names +between find and cpio, even if special characters are embedded in the +file names. Another is `\fB\-p\fR', which tells cpio to pass the files it +finds to the directory `\fBnew-dir\fR'. + +.SH BUGS +The GNU folks, in general, abhor man pages, and create info documents instead. The maintainer of +.B cpio +falls +into this category. Thus this man page may not be complete, nor current, and was included in the Red Hat +CVS tree because man is a great tool :). +.PP +.SH REPORTING BUGS +Please report bugs via https://bugzilla.redhat.com. +.PP +.SH SEE ALSO +The full documentation for +.B cpio +is maintained as a Texinfo manual. If the +.B info +and +.B cpio +programs are properly installed at your site, the command +.IP +.B info cpio +.PP +should give you access to the complete manual. The online copy of the documentation +is available at the following address: +.PP +http://www.gnu.org/software/cpio/manual + diff --git a/SPECS/cpio.spec b/SPECS/cpio.spec new file mode 100644 index 0000000..71e1e81 --- /dev/null +++ b/SPECS/cpio.spec @@ -0,0 +1,509 @@ +Summary: A GNU archiving program +Name: cpio +Version: 2.11 +Release: 27%{?dist} +License: GPLv3+ +Group: Applications/Archiving +URL: http://www.gnu.org/software/cpio/ +Source: ftp://ftp.gnu.org/gnu/cpio/cpio-%{version}.tar.bz2 +# help2man generated manual page distributed only in RHEL/Fedora +Source1: cpio.1 +#We use SVR4 portable format as default . +Patch1: cpio-2.9-rh.patch +#fix warn_if_file_changed() and set exit code to 1 when cpio +# fails to store file > 4GB (#183224) +Patch2: cpio-2.9-exitCode.patch +#Support major/minor device numbers over 127 (bz#450109) +Patch3: cpio-2.9-dev_number.patch +#define default remote shell as /usr/bin/ssh(#452904) +Patch4: cpio-2.9.90-defaultremoteshell.patch +#fix segfault with nonexisting file with patternnames(#567022) +Patch5: cpio-2.10-patternnamesigsegv.patch +#fix rawhide buildfailure by updating gnulib's stdio.in.h +Patch6: cpio-2.11-stdio.in.patch +# fix bad file name splitting while creating ustar archive (#866467) +Patch7: cpio-2.10-longnames-split.patch +# cpio does Sum32 checksum, not CRC +Patch8: cpio-2.11-crc-fips-nit.patch + +# use the config.guess/config.sub files from actual automake-1.13 +# ~> #925189 +Patch9: cpio-2.11-arm-config-sub-guess.patch + +# "really" check for read() return value +Patch10: cpio-2.11-treat-read-errors.patch + +# Small typo in RU translation +# ~> #1075510 +# ~> downstream? +Patch11: cpio-2.11-ru-translation.patch + +Patch12: cpio-2.11-CVE-2014-9112.patch +Patch13: cpio-2.11-testsuite-CVE-2014-9112.patch + +# Correct crc checksum (rhbz#1415081) +# ~> upstream ccec71ec318f +Patch14: cpio-2.11-crc-big-files.patch + +# Reproducible archives (rhbz#1386662) +# ~> upstream 3945f9db4 + small warning patch. +Patch15: cpio-2.11-reproducible.patch + +# Don't segfault during recovery +# ~> upstream fd262d116c4564c1796 +Patch16: cpio-2.11-recovery.patch + +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info +Provides: bundled(gnulib) +Provides: /bin/cpio +BuildRequires: texinfo, autoconf, automake, gettext, rmt +Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +%description +GNU cpio copies files into or out of a cpio or tar archive. Archives +are files which contain a collection of other files plus information +about them, such as their file name, owner, timestamps, and access +permissions. The archive can be another file on the disk, a magnetic +tape, or a pipe. GNU cpio supports the following archive formats: binary, +old ASCII, new ASCII, crc, HPUX binary, HPUX old ASCII, old tar and POSIX.1 +tar. By default, cpio creates binary format archives, so that they are +compatible with older cpio programs. When it is extracting files from +archives, cpio automatically recognizes which kind of archive it is reading +and can read archives created on machines with a different byte-order. + +Install cpio if you need a program to manage file archives. + +%prep +%setup -q +%patch1 -p1 -b .rh +%patch2 -p1 -b .exitCode +%patch3 -p1 -b .dev_number +%patch4 -p1 -b .defaultremote +%patch5 -p1 -b .patternsegv +%patch6 -p1 -b .gnulib %{?_rawbuild} +%patch7 -p1 -b .longnames +%patch8 -p1 -b .sum32-fips +%patch9 -p1 -b .arm-config-guess-sub +%patch10 -p1 -b .safe-read-check +%patch11 -p1 -b .ru-translation +%patch12 -p1 -b .CVE-2014-9112 +%patch13 -p1 -b .CVE-2014-9112-test +%patch14 -p1 -b .crc-big-files +%patch15 -p1 -b .reproducible +%patch16 -p1 -b .recovery + +autoreconf -v + +%build + +CFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -pedantic -fno-strict-aliasing -Wall" %configure --with-rmt="%{_sysconfdir}/rmt" +make %{?_smp_mflags} +(cd po && make update-gmo) + + +%install +rm -rf ${RPM_BUILD_ROOT} + +make DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p" install + + +rm -f $RPM_BUILD_ROOT%{_libexecdir}/rmt +rm -f $RPM_BUILD_ROOT%{_infodir}/dir +rm -f $RPM_BUILD_ROOT%{_mandir}/man1/*.1* +install -c -p -m 0644 %{SOURCE1} ${RPM_BUILD_ROOT}%{_mandir}/man1 + +%find_lang %{name} + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%check +rm -f ${RPM_BUILD_ROOT}/test/testsuite +make check + + +%post +if [ -f %{_infodir}/cpio.info.gz ]; then + /sbin/install-info %{_infodir}/cpio.info.gz %{_infodir}/dir || : +fi + +%preun +if [ $1 = 0 ]; then + if [ -f %{_infodir}/cpio.info.gz ]; then + /sbin/install-info --delete %{_infodir}/cpio.info.gz %{_infodir}/dir || : + fi +fi + +%files -f %{name}.lang +%doc AUTHORS ChangeLog NEWS README THANKS TODO COPYING +%{_bindir}/* +%{_mandir}/man*/* +%{_infodir}/*.info* + +%changelog +* Mon Feb 06 2017 Pavel Raiskup - 2.11-27 +- don't segfault during recovery (rhbz#1318084) + +* Mon Feb 06 2017 Pavel Raiskup - 2.11-26 +- reproducible archives (rhbz#1386662) + +* Mon Feb 06 2017 Pavel Raiskup - 2.11-25 +- fix crc checksum for files ~200M+ (rhbz#1415081) + +* Wed Jul 08 2015 Pavel Raiskup - 2.11-24 +- fix for CVE-2014-9112 + +* Wed May 20 2015 Pavel Raiskup - 2.11-23 +- better check for read() error (rhbz#1138148) +- fix ru translation (rhbz#1075513) + +* Fri Jan 24 2014 Daniel Mach - 2.11-22 +- Mass rebuild 2014-01-24 + +* Fri Dec 27 2013 Daniel Mach - 2.11-21 +- Mass rebuild 2013-12-27 + +* Wed Mar 27 2013 Pavel Raiskup - 2.11-20 +- fix another bogus date in changelog +- update config.guess/config.sub for aarm64 build (#925189) +- run autoreconf instead of autoheader + +* Fri Mar 15 2013 Pavel Raiskup - 2.11-19 +- revert the fix for memory leak (at least for now) #921725 + +* Tue Mar 12 2013 Pavel Raiskup - 2.11-18 +- explicitly provide /bin/cpio for packages that are dependant on this file + +* Mon Mar 11 2013 Pavel Raiskup - 2.11-17 +- fix small memory leak in copyin.c (#919454) +- remove %%defattr and install 'cpio' to real %%{_bindir} +- CovScan: add %%{?_rawbuild} + +* Wed Feb 13 2013 Fedora Release Engineering - 2.11-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Mon Nov 05 2012 Pavel Raiskup - 2.11-15 +- disable the temporary O_SYNC fix (glibc is fixed - #872366) + +* Fri Nov 02 2012 Pavel Raiskup - 2.11-14 +- fix bad changelog entries +- allow to build in Fedora Rawhide (temporarily because of #872336) (the value + is guessed from from /usr/include/asm-generic/fcntl.h) + +* Mon Oct 22 2012 Pavel Raiskup 2.11-13 +- move RH-only manual page cpio.1 from look-aside cache into dist-git repository + +* Thu Oct 18 2012 Pavel Raiskup 2.11-12 +- fix for bad file name splitting while creating ustar archive (#866467) + +* Wed Aug 29 2012 Ondrej Vasik 2.11-11 +- add missing options to manpage (#852765) + +* Wed Jul 18 2012 Fedora Release Engineering - 2.11-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Mon Jun 04 2012 Ondrej Vasik 2.11-9 +- fix build failure in rawhide build system (gets undefined) + +* Wed May 30 2012 Ondrej Vasik 2.11-8 +- drop unnecessary patches: cpio-2.9-dir_perm.patch and + cpio-2.9-sys_umask.patch - reported by M.Castellini + +* Tue May 15 2012 Ondrej Vasik 2.11-7 +- add virtual provides for bundled(gnulib) copylib (#821749) + +* Thu Jan 12 2012 Fedora Release Engineering - 2.11-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Fri Oct 14 2011 Ondrej Vasik 2.11-5 +- update manpage to reflect new option, polish the style (#746209) + +* Mon Mar 07 2011 Ondrej Vasik 2.11-4 +- fix several typos and manpage syntax(Ville Skyttä, #682470) + +* Tue Feb 08 2011 Fedora Release Engineering - 2.11-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon May 31 2010 Ondrej Vasik 2.11-2 +- built with fno-strict-aliasing(#596153) + +* Thu Mar 11 2010 Ondrej Vasik 2.11-1 +- new upstream release 2.11 +- removed applied patches, run test suite + +* Wed Mar 10 2010 Ondrej Vasik 2.10-6 +- CVE-2010-0624 fix heap-based buffer overflow by expanding + a specially-crafted archive(#572150) +- comment patches + +* Thu Feb 25 2010 Ondrej Vasik 2.10-5 +- remove redundant setLocale patch +- fix segfault with nonexisting file with patternnames + (#567022) + +* Wed Jan 06 2010 Ondrej Vasik 2.10-4 +- do not fail with new POSIX 2008 utimens() glibc call + (#552320) + +* Thu Aug 06 2009 Ondrej Vasik 2.10-3 +- do process install-info only without --excludedocs(#515924) + +* Fri Jul 24 2009 Fedora Release Engineering - 2.10-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon Jun 22 2009 Ondrej Vasik 2.10-1 +- new upstream release 2.10 + +* Mon Mar 9 2009 Ondrej Vasik 2.9.90-5 +- define default remote shell as /usr/bin/ssh(#452904) +- use /etc/rmt as default rmt command + +* Tue Feb 24 2009 Fedora Release Engineering - 2.9.90-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Wed Feb 11 2009 Ondrej Vasik 2.9.90-3 +- make -d honor system umask(#484997) + +* Fri Jul 18 2008 Kamil Dudka 2.9.90-2 +- Support major/minor device numbers over 127 (bz#450109) + +* Tue Jun 03 2008 Ondrej Vasik 2.9.90-1 +- new upstream alpha version 2.9.90 + removed applied patches + +* Mon Mar 03 2008 Radek Brich 2.9-7 +- fix -dir_perm patch to restore permissions correctly even + in passthrough mode -- revert affected code to cpio 2.8 state + (bz#430835) + +* Thu Feb 14 2008 Radek Brich 2.9-6 +- when extracting archive created with 'find -depth', + restore the permissions of directories properly (bz#430835) +- fix for GCC 4.3 + +* Thu Nov 01 2007 Radek Brich 2.9-5 +- upstream patch for CVE-2007-4476 (stack crashing in safer_name_suffix) + +* Tue Sep 04 2007 Radek Brich 2.9-4 +- Updated license tag + +* Wed Aug 29 2007 Fedora Release Engineering - 2.9-3 +- Rebuild for selinux ppc32 issue. + +* Thu Jul 19 2007 Radek Brich 2.9-1.1 +- fix spec, rebuild + +* Thu Jul 19 2007 Radek Brich 2.9-1 +- update to 2.9, GPLv3 + +* Tue Feb 20 2007 Peter Vrabec 2.6-27 +- fix typo in changelog + +* Thu Feb 08 2007 Ruben Kerkhof 2.6-26 +- Preserve timestamps when installing files + +* Thu Feb 08 2007 Peter Vrabec 2.6-25 +- set cpio bindir properly + +* Wed Feb 07 2007 Peter Vrabec 2.6-24 +- fix spec file to meet Fedora standards (#225656) + +* Mon Jan 22 2007 Peter Vrabec 2.6-23 +- fix non-failsafe install-info use in scriptlets (#223682) + +* Sun Dec 10 2006 Peter Vrabec 2.6-22 +- fix rpmlint issue in spec file + +* Tue Dec 05 2006 Peter Vrabec 2.6-21 +- fix setlocale (#200478) + +* Sat Nov 25 2006 Peter Vrabec 2.6-20 +- cpio man page provided by RedHat + +* Tue Jul 18 2006 Peter Vrabec 2.6-19 +- fix cpio --help output (#197597) + +* Wed Jul 12 2006 Jesse Keating - 2.6-18.1 +- rebuild + +* Sat Jun 10 2006 Peter Vrabec 2.6-18 +- autoconf was added to BuildRequires, because autoheader is + used in prep phase (#194737) + +* Tue Mar 28 2006 Peter Vrabec 2.6-17 +- rebuild + +* Sat Mar 25 2006 Peter Vrabec 2.6-15 +- fix (#186339) on ppc and s390 + +* Thu Mar 23 2006 Peter Vrabec 2.6-14 +- init struct file_hdr (#186339) + +* Wed Mar 15 2006 Peter Vrabec 2.6-13 +- merge toAsciiError.patch with writeOutHeaderBufferOverflow.patch +- merge largeFileGrew.patch with lfs.patch +- fix large file support, cpio is able to store files<8GB + in 'old ascii' format (-H odc option) +- adjust warnings.patch + +* Tue Mar 14 2006 Peter Vrabec 2.6-12 +- fix warn_if_file_changed() and set exit code to #1 when + cpio fails to store file > 4GB (#183224) + +* Fri Feb 10 2006 Jesse Keating - 2.6-11.2.1 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 2.6-11.2 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Wed Nov 23 2005 Peter Vrabec 2.6-11 +- fix previous patch(writeOutHeaderBufferOverflow) + +* Wed Nov 23 2005 Peter Vrabec 2.6-10 +- write_out_header rewritten to fix buffer overflow(#172669) + +* Mon Oct 31 2005 Peter Vrabec 2.6-9 +- fix checksum error on 64-bit machines (#171649) + +* Fri Jul 01 2005 Peter Vrabec 2.6-8 +- fix large file support, archive >4GiB, archive members <4GiB (#160056) +- fix race condition holes, use mode 0700 for dir creation + +* Tue May 17 2005 Peter Vrabec 2.6-7 +- fix #156314 (CAN-2005-1229) cpio directory traversal issue +- fix some gcc warnings + +* Mon Apr 25 2005 Peter Vrabec 2.6-6 +- fix race condition (#155749) +- use find_lang macro + +* Thu Mar 17 2005 Peter Vrabec +- rebuild 2.6-5 + +* Mon Jan 24 2005 Peter Vrabec +- insecure file creation (#145721) + +* Mon Jan 17 2005 Peter Vrabec +- fix symlinks pack (#145225) + +* Fri Jan 14 2005 Peter Vrabec +- new fixed version of lfs patch (#144688) + +* Thu Jan 13 2005 Peter Vrabec +- upgrade to cpio-2.6 + +* Tue Nov 09 2004 Peter Vrabec +- fixed "cpio -oH ustar (or tar) saves bad mtime date after Jan 10 2004" (#114580) + +* Mon Nov 01 2004 Peter Vrabec +- support large files > 2GB (#105617) + +* Thu Oct 21 2004 Peter Vrabec +- fix dependencies in spec + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Sep 23 2003 Florian La Roche +- do not link against -lnsl + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Fri Feb 14 2003 Jeff Johnson 2.5-3 +- setlocale for i18n compliance (#79136). + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Mon Nov 18 2002 Jeff Johnson 2.5-1 +- update 2.5, restack and consolidate patches. +- don't apply (but include for now) freebsd and #56346 patches. +- add url (#54598). + +* Thu Nov 7 2002 Jeff Johnson 2.4.2-30 +- rebuild from CVS. + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Wed Jan 09 2002 Tim Powers +- automated rebuild + +* Thu Nov 22 2001 Bernhard Rosenkraenzer 2.4.2-25 +- Fix up extraction of multiply linked files when the first link is + excluded (Bug #56346) + +* Mon Oct 1 2001 Bernhard Rosenkraenzer 2.4.2-24 +- Merge and adapt patches from FreeBSD, this should fix FIFO handling + +* Tue Jun 26 2001 Bernhard Rosenkraenzer +- Add and adapt Debian patch (pl36), fixes #45285 and a couple of other issues + +* Sun Jun 24 2001 Elliot Lee +- Bump release + rebuild. + +* Tue Aug 8 2000 Jeff Johnson +- update man page with decription of -c behavior (#10581). + +* Wed Jul 12 2000 Prospector +- automatic rebuild + +* Thu Jun 29 2000 Preston Brown +- patch from HJ Lu for better error codes upon exit + +* Mon Jun 5 2000 Jeff Johnson +- FHS packaging. + +* Wed Feb 9 2000 Jeff Johnson +- missing defattr. + +* Mon Feb 7 2000 Bill Nottingham +- handle compressed manpages + +* Fri Dec 17 1999 Jeff Johnson +- revert the stdout patch (#3358), restoring original GNU cpio behavior + (#6376, #7538), the patch was dumb. + +* Tue Aug 31 1999 Jeff Johnson +- fix infinite loop unpacking empty files with hard links (#4208). +- stdout should contain progress information (#3358). + +* Sun Mar 21 1999 Crstian Gafton +- auto rebuild in the new build environment (release 12) + +* Sat Dec 5 1998 Jeff Johnson +- longlong dev wrong with "-o -H odc" headers (formerly "-oc"). + +* Thu Dec 03 1998 Cristian Gafton +- patch to compile on glibc 2.1, where strdup is a macro + +* Tue Jul 14 1998 Jeff Johnson +- Fiddle bindir/libexecdir to get RH install correct. +- Don't include /sbin/rmt -- use the rmt from dump package. +- Don't include /bin/mt -- use the mt from mt-st package. +- Add prereq's + +* Tue Jun 30 1998 Jeff Johnson +- fix '-c' to duplicate svr4 behavior (problem #438) +- install support programs & info pages + +* Mon Apr 27 1998 Prospector System +- translations modified for de, fr, tr + +* Fri Oct 17 1997 Donnie Barnes +- added BuildRoot +- removed "(used by RPM)" comment in Summary + +* Thu Jun 19 1997 Erik Troan +- built against glibc +- no longer statically linked as RPM doesn't use cpio for unpacking packages