From d47d4b13126ef8b7d336a4e55f0a462d956d0b904d44334b508bdf6aed1830a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=C4=9Bzslav=20=C4=8C=C3=AD=C5=BEek?= Date: Fri, 9 Oct 2015 11:20:18 +0000 Subject: [PATCH] Accepting request 337401 from home:kstreitova:branches:Archiving - update to 2.12 * Improved documentation * Manpages are installed by make install * New options for copy-out mode: --ignore-devno, --renumber-inodes, --device-independent, --reproducible * update * cpio-use_new_ascii_format.patch * cpio-mt.patch * cpio-eof_tape_handling.patch * cpio-pattern-file-sigsegv.patch * cpio-check_for_symlinks.patch * remove (no longer needed) * cpio-stdio.in.patch * 0001-Fix-memory-overrun-on-reading-improperly-created-lin.patch * add * cpio-2.12-util.c_no_return_in_nonvoid_fnc.patch to add missing return to the nonvoid get_inode_and_dev() function - use spec-cleaner OBS-URL: https://build.opensuse.org/request/show/337401 OBS-URL: https://build.opensuse.org/package/show/Archiving/cpio?expand=0&rev=56 --- ...un-on-reading-improperly-created-lin.patch | 234 ------------------ cpio-2.11.tar.bz2 | 3 - cpio-2.11.tar.bz2.sig | 7 - ...2.12-util.c_no_return_in_nonvoid_fnc.patch | 12 + cpio-2.12.tar.bz2 | 3 + cpio-2.12.tar.bz2.sig | 7 + cpio-check_for_symlinks.patch | 70 +++--- cpio-eof_tape_handling.patch | 156 ++++++------ cpio-mt.patch | 84 +++---- cpio-pattern-file-sigsegv.patch | 12 +- cpio-stdio.in.patch | 15 -- cpio-use_new_ascii_format.patch | 44 +++- cpio.changes | 22 ++ cpio.spec | 16 +- 14 files changed, 249 insertions(+), 436 deletions(-) delete mode 100644 0001-Fix-memory-overrun-on-reading-improperly-created-lin.patch delete mode 100644 cpio-2.11.tar.bz2 delete mode 100644 cpio-2.11.tar.bz2.sig create mode 100644 cpio-2.12-util.c_no_return_in_nonvoid_fnc.patch create mode 100644 cpio-2.12.tar.bz2 create mode 100644 cpio-2.12.tar.bz2.sig delete mode 100644 cpio-stdio.in.patch diff --git a/0001-Fix-memory-overrun-on-reading-improperly-created-lin.patch b/0001-Fix-memory-overrun-on-reading-improperly-created-lin.patch deleted file mode 100644 index 58327c0..0000000 --- a/0001-Fix-memory-overrun-on-reading-improperly-created-lin.patch +++ /dev/null @@ -1,234 +0,0 @@ -From 746f3ff670dcfcdd28fcc990e79cd6fccc7ae48d Mon Sep 17 00:00:00 2001 -From: Sergey Poznyakoff -Date: Mon, 1 Dec 2014 15:15:28 +0200 -Subject: [PATCH] Fix memory overrun on reading improperly created link - records. - -See http://lists.gnu.org/archive/html/bug-cpio/2014-11/msg00007.html - -* src/copyin.c (get_link_name): New function. -(list_file, copyin_link): use get_link_name - -* tests/symlink-bad-length.at: New file. -* tests/symlink-long.at: New file. -* tests/Makefile.am: Add new files. -* tests/testsuite.at: Likewise. ---- - src/copyin.c | 50 ++++++++++++++++++++++++++++----------------- - tests/Makefile.am | 2 ++ - tests/symlink-bad-length.at | 49 ++++++++++++++++++++++++++++++++++++++++++++ - tests/symlink-long.at | 46 +++++++++++++++++++++++++++++++++++++++++ - tests/testsuite.at | 2 ++ - 5 files changed, 130 insertions(+), 19 deletions(-) - create mode 100644 tests/symlink-bad-length.at - create mode 100644 tests/symlink-long.at - -Index: cpio-2.11/src/copyin.c -=================================================================== ---- cpio-2.11.orig/src/copyin.c 2014-12-01 16:59:33.863928107 +0100 -+++ cpio-2.11/src/copyin.c 2014-12-01 16:59:35.339946156 +0100 -@@ -124,10 +124,30 @@ tape_skip_padding (int in_file_des, off_ - 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) -+{ -+ off_t n = file_hdr->c_filesize + 1; -+ char *link_name; - -+ if (n == 0 || n > SIZE_MAX) -+ { -+ error (0, 0, _("%s: stored filename length too big"), file_hdr->c_name); -+ link_name = NULL; -+ } -+ else -+ { -+ link_name = xmalloc (n); -+ 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_hd - { - 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_ - - 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 - { -Index: cpio-2.11/tests/Makefile.am -=================================================================== ---- cpio-2.11.orig/tests/Makefile.am 2014-12-01 16:59:35.339946156 +0100 -+++ cpio-2.11/tests/Makefile.am 2014-12-01 17:00:02.491278156 +0100 -@@ -52,6 +52,8 @@ TESTSUITE_AT = \ - setstat04.at\ - setstat05.at\ - symlink.at\ -+ symlink-bad-length.at\ -+ symlink-long.at\ - version.at - - TESTSUITE = $(srcdir)/testsuite -Index: cpio-2.11/tests/symlink-bad-length.at -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ cpio-2.11/tests/symlink-bad-length.at 2014-12-01 16:59:35.339946156 +0100 -@@ -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 too big -+cpio: premature end of file -+]) -+ -+AT_CLEANUP -Index: cpio-2.11/tests/symlink-long.at -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ cpio-2.11/tests/symlink-long.at 2014-12-01 16:59:35.340946169 +0100 -@@ -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 -Index: cpio-2.11/tests/testsuite.at -=================================================================== ---- cpio-2.11.orig/tests/testsuite.at 2014-12-01 16:59:33.864928120 +0100 -+++ cpio-2.11/tests/testsuite.at 2014-12-01 16:59:35.340946169 +0100 -@@ -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/cpio-2.11.tar.bz2 b/cpio-2.11.tar.bz2 deleted file mode 100644 index c96caee..0000000 --- a/cpio-2.11.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bb820bfd96e74fc6ce43104f06fe733178517e7f5d1cdee553773e8eff7d5bbd -size 1018483 diff --git a/cpio-2.11.tar.bz2.sig b/cpio-2.11.tar.bz2.sig deleted file mode 100644 index 1ee75bd..0000000 --- a/cpio-2.11.tar.bz2.sig +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.9 (GNU/Linux) - -iD8DBQBLl5uDNgKwf1XQxzIRAn4uAJ9d8avkqDsyPc3llwzWxSKtWSSrjgCggdrN -RI9g+2/ng6bspf1ZS0+dYS4= -=Lp8g ------END PGP SIGNATURE----- diff --git a/cpio-2.12-util.c_no_return_in_nonvoid_fnc.patch b/cpio-2.12-util.c_no_return_in_nonvoid_fnc.patch new file mode 100644 index 0000000..a945b45 --- /dev/null +++ b/cpio-2.12-util.c_no_return_in_nonvoid_fnc.patch @@ -0,0 +1,12 @@ +Index: cpio-2.12/src/util.c +=================================================================== +--- cpio-2.12.orig/src/util.c ++++ cpio-2.12/src/util.c +@@ -812,6 +812,7 @@ get_inode_and_dev (struct cpio_file_stat + hdr->c_dev_maj = major (st->st_dev); + hdr->c_dev_min = minor (st->st_dev); + } ++ return 0; + } + + diff --git a/cpio-2.12.tar.bz2 b/cpio-2.12.tar.bz2 new file mode 100644 index 0000000..a59b62f --- /dev/null +++ b/cpio-2.12.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70998c5816ace8407c8b101c9ba1ffd3ebbecba1f5031046893307580ec1296e +size 1258605 diff --git a/cpio-2.12.tar.bz2.sig b/cpio-2.12.tar.bz2.sig new file mode 100644 index 0000000..78d0ac1 --- /dev/null +++ b/cpio-2.12.tar.bz2.sig @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.12 (GNU/Linux) + +iEYEABECAAYFAlX0Dh4ACgkQNgKwf1XQxzLTigCeO+MKFk1BRjca0CU1jaYwC5y7 +qOcAnAy9Th86/Do4aIy12NoJxlMDDF2X +=jXgF +-----END PGP SIGNATURE----- diff --git a/cpio-check_for_symlinks.patch b/cpio-check_for_symlinks.patch index 4b1522b..abcc7c2 100644 --- a/cpio-check_for_symlinks.patch +++ b/cpio-check_for_symlinks.patch @@ -1,8 +1,8 @@ -Index: cpio-2.11/src/copyin.c +Index: cpio-2.12/src/copyin.c =================================================================== ---- cpio-2.11.orig/src/copyin.c 2014-07-01 14:02:39.991007263 +0200 -+++ cpio-2.11/src/copyin.c 2014-07-22 16:05:28.171344584 +0200 -@@ -686,6 +686,51 @@ copyin_link(struct cpio_file_stat *file_ +--- cpio-2.12.orig/src/copyin.c ++++ cpio-2.12/src/copyin.c +@@ -695,6 +695,51 @@ copyin_link (struct cpio_file_stat *file free (link_name); } @@ -54,7 +54,7 @@ Index: cpio-2.11/src/copyin.c static void copyin_file (struct cpio_file_stat *file_hdr, int in_file_des) { -@@ -1463,6 +1508,23 @@ process_copy_in () +@@ -1474,6 +1519,23 @@ process_copy_in () { /* Copy the input file into the directory structure. */ @@ -78,10 +78,10 @@ Index: cpio-2.11/src/copyin.c /* Do we need to rename the file? */ if (rename_flag || rename_batch_file) { -Index: cpio-2.11/src/global.c +Index: cpio-2.12/src/global.c =================================================================== ---- cpio-2.11.orig/src/global.c 2014-07-17 16:33:09.768900927 +0200 -+++ cpio-2.11/src/global.c 2014-07-21 17:45:58.563494706 +0200 +--- cpio-2.12.orig/src/global.c ++++ cpio-2.12/src/global.c @@ -187,6 +187,9 @@ bool to_stdout_option = false; /* The name this program was run with. */ char *program_name; @@ -92,21 +92,19 @@ Index: cpio-2.11/src/global.c /* A pointer to either lstat or stat, depending on whether dereferencing of symlinks is done for input files. */ int (*xstat) (); -Index: cpio-2.11/src/main.c +Index: cpio-2.12/src/main.c =================================================================== ---- cpio-2.11.orig/src/main.c 2014-07-01 14:02:39.840005051 +0200 -+++ cpio-2.11/src/main.c 2014-07-17 20:33:47.839215571 +0200 -@@ -57,7 +57,8 @@ enum cpio_options { - FORCE_LOCAL_OPTION, +--- cpio-2.12.orig/src/main.c ++++ cpio-2.12/src/main.c +@@ -59,6 +59,7 @@ enum cpio_options { DEBUG_OPTION, BLOCK_SIZE_OPTION, -- TO_STDOUT_OPTION -+ TO_STDOUT_OPTION, -+ EXTRACT_OVER_SYMLINKS - }; - - const char *program_authors[] = -@@ -222,6 +223,8 @@ static struct argp_option options[] = { + TO_STDOUT_OPTION, ++ EXTRACT_OVER_SYMLINKS, + RENUMBER_INODES_OPTION, + IGNORE_DEVNO_OPTION, + DEVICE_INDEPENDENT_OPTION +@@ -243,6 +244,8 @@ static struct argp_option options[] = { N_("Create leading directories where needed"), GRID+1 }, {"no-preserve-owner", NO_PRESERVE_OWNER_OPTION, 0, 0, N_("Do not change the ownership of the files"), GRID+1 }, @@ -115,7 +113,7 @@ Index: cpio-2.11/src/main.c {"unconditional", 'u', NULL, 0, N_("Replace all files unconditionally"), GRID+1 }, {"sparse", SPARSE_OPTION, NULL, 0, -@@ -413,6 +416,10 @@ crc newc odc bin ustar tar (all-caps als +@@ -433,6 +436,10 @@ crc newc odc bin ustar tar (all-caps als no_chown_flag = true; break; @@ -125,28 +123,28 @@ Index: cpio-2.11/src/main.c + case 'o': /* Copy-out mode. */ if (copy_function != 0) - error (PAXEXIT_FAILURE, 0, _("Mode already defined")); -Index: cpio-2.11/src/extern.h + USAGE_ERROR ((0, 0, _("Mode already defined"))); +Index: cpio-2.12/src/extern.h =================================================================== ---- cpio-2.11.orig/src/extern.h 2014-07-01 14:02:39.907006032 +0200 -+++ cpio-2.11/src/extern.h 2014-07-17 17:11:20.948908806 +0200 -@@ -95,6 +95,7 @@ extern char input_is_special; +--- cpio-2.12.orig/src/extern.h ++++ cpio-2.12/src/extern.h +@@ -96,6 +96,7 @@ extern char input_is_special; extern char output_is_special; extern char input_is_seekable; extern char output_is_seekable; +extern bool extract_over_symlinks; extern int (*xstat) (); extern void (*copy_function) (); - -Index: cpio-2.11/doc/cpio.1 + extern char *change_directory_option; +Index: cpio-2.12/doc/cpio.1 =================================================================== ---- cpio-2.11.orig/doc/cpio.1 2009-02-14 19:15:50.000000000 +0100 -+++ cpio-2.11/doc/cpio.1 2014-07-21 23:00:33.878746855 +0200 -@@ -22,6 +22,7 @@ cpio \- copy files to and from archives - [\-\-owner=[user][:.][group]] [\-\-no-preserve-owner] [\-\-message=message] - [\-\-force\-local] [\-\-no\-absolute\-filenames] [\-\-sparse] - [\-\-only\-verify\-crc] [\-\-to\-stdout] [\-\-quiet] [\-\-rsh-command=command] -+[\-\-extract\-over\-symlinks] - [\-\-help] [\-\-version] [pattern...] [< archive] +--- cpio-2.12.orig/doc/cpio.1 ++++ cpio-2.12/doc/cpio.1 +@@ -50,6 +50,7 @@ cpio \- copy files to and from archives + [\fB\-\-force\-local\fR] [\fB\-\-no\-absolute\-filenames\fR] [\fB\-\-sparse\fR] + [\fB\-\-only\-verify\-crc\fR] [\fB\-\-to\-stdout\fR] [\fB\-\-quiet\fR] + [\fB\-\-rsh\-command=\fICOMMAND\fR] ++[\fB\-\-extract\-over\-symlinks\fR] + [\fIpattern\fR...] [\fB<\fR \fIarchive\fR] .B cpio diff --git a/cpio-eof_tape_handling.patch b/cpio-eof_tape_handling.patch index 0b9f701..340f1d6 100644 --- a/cpio-eof_tape_handling.patch +++ b/cpio-eof_tape_handling.patch @@ -1,77 +1,79 @@ ---- src/util.c -+++ src/util.c -@@ -188,8 +188,15 @@ tape_fill_input_buffer (int in_des, int - input_size = rmtread (in_des, input_buffer, num_bytes); - if (input_size == 0 && input_is_special) - { -- get_next_reel (in_des); -+ if (!tape_eof (in_des)) -+ get_next_reel (in_des); - input_size = rmtread (in_des, input_buffer, num_bytes); -+ if (input_size == 0) -+ { -+ if (tape_eod (in_des)) -+ get_next_reel (in_des); -+ input_size = rmtread (in_des, input_buffer, num_bytes); -+ } - } - if (input_size < 0) - error (1, errno, _("read error")); -@@ -354,8 +361,15 @@ tape_buffered_peek (char *peek_buf, int - { - if (input_is_special) - { -- get_next_reel (in_des); -+ if (!tape_eof (in_des)) -+ get_next_reel (in_des); - tmp_input_size = rmtread (in_des, append_buf, io_block_size); -+ if (tmp_input_size == 0) -+ { -+ if (tape_eod (in_des)) -+ get_next_reel (in_des); -+ tmp_input_size = rmtread (in_des, append_buf, io_block_size); -+ } - } - else - break; -@@ -828,6 +842,40 @@ tape_offline (int tape_des) - #endif - } - -+int -+tape_eof( int tape_des) -+{ -+ struct mtget status; -+ -+ if (rmtioctl (tape_des, MTIOCGET, (char*)&status) == -1) { -+ error (1, errno, "Cannot get tape status"); -+ return 0; -+ } -+ -+ if (GMT_EOF(status.mt_gstat)) { -+ return 1; -+ } -+ -+ return 0; -+} -+ -+int -+tape_eod( int tape_des) -+{ -+ struct mtget status; -+ -+ if (rmtioctl (tape_des, MTIOCGET, (char*)&status) == -1) { -+ error (1, errno, "Cannot get tape status"); -+ return 1; -+ } -+ -+ if (GMT_EOD(status.mt_gstat)) { -+ return 1; -+ } -+ -+ return 0; -+} -+ - /* The file on file descriptor TAPE_DES is assumed to be magnetic tape - (or floppy disk or other device) and the end of the medium - has been reached. Ask the user for to mount a new "tape" to continue +Index: src/util.c +=================================================================== +--- src/util.c.orig ++++ src/util.c +@@ -203,8 +203,15 @@ tape_fill_input_buffer (int in_des, int + input_size = rmtread (in_des, input_buffer, num_bytes); + if (input_size == 0 && input_is_special) + { +- get_next_reel (in_des); ++ if (!tape_eof (in_des)) ++ get_next_reel (in_des); + input_size = rmtread (in_des, input_buffer, num_bytes); ++ if (input_size == 0) ++ { ++ if (tape_eod (in_des)) ++ get_next_reel (in_des); ++ input_size = rmtread (in_des, input_buffer, num_bytes); ++ } + } + if (input_size == SAFE_READ_ERROR) + error (PAXEXIT_FAILURE, errno, _("read error")); +@@ -366,8 +373,15 @@ tape_buffered_peek (char *peek_buf, int + { + if (input_is_special) + { +- get_next_reel (in_des); ++ if (!tape_eof (in_des)) ++ get_next_reel (in_des); + tmp_input_size = rmtread (in_des, append_buf, io_block_size); ++ if (tmp_input_size == 0) ++ { ++ if (tape_eod (in_des)) ++ get_next_reel (in_des); ++ tmp_input_size = rmtread (in_des, append_buf, io_block_size); ++ } + } + else + break; +@@ -842,6 +856,40 @@ tape_offline (int tape_des) + #endif + } + ++int ++tape_eof( int tape_des) ++{ ++ struct mtget status; ++ ++ if (rmtioctl (tape_des, MTIOCGET, (char*)&status) == -1) { ++ error (1, errno, "Cannot get tape status"); ++ return 0; ++ } ++ ++ if (GMT_EOF(status.mt_gstat)) { ++ return 1; ++ } ++ ++ return 0; ++} ++ ++int ++tape_eod( int tape_des) ++{ ++ struct mtget status; ++ ++ if (rmtioctl (tape_des, MTIOCGET, (char*)&status) == -1) { ++ error (1, errno, "Cannot get tape status"); ++ return 1; ++ } ++ ++ if (GMT_EOD(status.mt_gstat)) { ++ return 1; ++ } ++ ++ return 0; ++} ++ + /* The file on file descriptor TAPE_DES is assumed to be magnetic tape + (or floppy disk or other device) and the end of the medium + has been reached. Ask the user for to mount a new "tape" to continue diff --git a/cpio-mt.patch b/cpio-mt.patch index c2e1139..5e3ba11 100644 --- a/cpio-mt.patch +++ b/cpio-mt.patch @@ -2,74 +2,88 @@ Index: doc/mt.1 =================================================================== --- doc/mt.1.orig +++ doc/mt.1 -@@ -76,9 +76,6 @@ Absolute space to file number - .IR count . +@@ -100,10 +100,6 @@ Absolute space to file number Equivalent to rewind followed by fsf .IR count . --.IP seek + .TP +-.B seek -Seek to block number -.IR count . - .IP eom +-.TP + .B eom Space to the end of the recorded media on the tape (for appending files onto tapes). -@@ -93,6 +90,69 @@ Rewind the tape, then wind it to the end - then rewind it again. - .IP erase +@@ -123,6 +119,82 @@ then rewind it again. + .TP + .B erase Erase the tape. -+.IP fss ++.TP ++.B fss +(SCSI tapes) Forward space +.I count +setmarks. -+.IP bss ++.TP ++.B bss +(SCSI tapes) Backward space +.I count +setmarks. -+.IP "wset" ++.TP ++.B "wset" +(SCSI tapes) Write +.I count +setmarks at current position (only SCSI tape). -+.IP "eod, seod" ++.TP ++.B "eod, seod" +Space to end of valid data. Used on streamer tape +drives to append data to the logical and of tape. -+.IP setblk ++.TP ++.B setblk +(SCSI tapes) Set the block size of the drive to +.I count +bytes per record. -+.IP setdensity ++.TP ++.B setdensity +(SCSI tapes) Set the tape density code to +.I count. +The proper codes to use with each drive should be looked up from the +drive documentation. -+.IP drvbuffer ++.TP ++.B drvbuffer +(SCSI tapes) Set the tape drive buffer code to +.I number. +The proper value for unbuffered operation is zero and "normal" buffered +operation one. The meanings of other values can be found in the drive +documentation or, in case of a SCSI-2 drive, from the SCSI-2 standard. -+.IP stoptions ++.TP ++.B stoptions +(SCSI tapes) Set the driver options bits to +.I count +for the device. +The bits can be set by oring the following values: 1 to enable write +buffering, 2 to enable asynchronous writes, 4 to enable read ahead, +8 to enable debugging output (if it has been compiled to the driver). -+.IP stwrthreshold ++.TP ++.B stwrthreshold +(SCSI tapes) The write threshold for the tape device is set to +.I count +kilobytes. The value must be smaller than or equal to the driver +buffer size. -+.IP seek ++.TP ++.B seek +(SCSI tapes) Seek to the +.I count +block on the tape. This operation is available on some +Tandberg and Wangtek streamers and some SCSI-2 tape drives. -+.IP tell ++.TP ++.B tell +(SCSI tapes) Tell the current block on tape. This operation is available on some +Tandberg and Wangtek streamers and some SCSI-2 tape drives. -+.IP densities ++.TP ++.B densities +(SCSI tapes) Write explanation of some common density codes to +standard output. -+.IP datcompression ++.TP ++.B datcompression +(some SCSI-2 DAT tapes) Inquire or set the compression status +(on/off). If the +.I count @@ -86,12 +100,12 @@ Index: lib/system.h =================================================================== --- lib/system.h.orig +++ lib/system.h -@@ -431,10 +431,11 @@ char *getenv (); +@@ -438,10 +438,11 @@ char *getenv (); #if HAVE_LOCALE_H # include -#endif -+#else ++#else #if !HAVE_SETLOCALE # define setlocale(category, locale) /* empty */ #endif @@ -99,24 +113,11 @@ Index: lib/system.h #include #ifdef TIME_WITH_SYS_TIME -Index: src/Makefile.am -=================================================================== ---- src/Makefile.am.orig -+++ src/Makefile.am -@@ -19,7 +19,7 @@ - - INCLUDES=-I. -I.. -I$(top_srcdir)/gnu -I$(top_builddir)/gnu -I$(top_srcdir)/lib -I$(top_builddir)/lib - --bin_PROGRAMS=cpio @CPIO_MT_PROG@ -+bin_PROGRAMS=cpio mt - EXTRA_PROGRAMS=mt - - cpio_SOURCES = \ Index: src/copyin.c =================================================================== --- src/copyin.c.orig +++ src/copyin.c -@@ -689,7 +689,7 @@ copyin_link(struct cpio_file_stat *file_ +@@ -698,7 +698,7 @@ copyin_link (struct cpio_file_stat *file static void copyin_file (struct cpio_file_stat *file_hdr, int in_file_des) { @@ -125,7 +126,7 @@ Index: src/copyin.c if (!to_stdout_option && try_existing_file (file_hdr, in_file_des, &existing_dir) < 0) -@@ -1278,6 +1278,7 @@ process_copy_in () +@@ -1287,6 +1287,7 @@ process_copy_in () int in_file_des; /* Input file descriptor. */ char skip_file; /* Flag for use with patterns. */ int i; /* Loop index variable. */ @@ -133,7 +134,7 @@ Index: src/copyin.c newdir_umask = umask (0); /* Reset umask to preserve modes of created files */ -@@ -1386,8 +1387,10 @@ process_copy_in () +@@ -1397,8 +1398,10 @@ process_copy_in () for (i = 0; i < num_patterns && skip_file == copy_matching_files; i++) { @@ -187,7 +188,7 @@ Index: src/mt.c + enable asynchronous writes, 4 to enable read ahead, 8 + to enable debugging output (if it has been compiled to + the driver). -+ stwrthreshold ++ stwrthreshold + (SCSI tapes) The write threshold for the tape device + is set to COUNT kilobytes. The value must be smaller + than or equal to the driver buffer size. @@ -425,11 +426,10 @@ Index: src/mt.c print_status (char *dev, int desc) { struct mtget status; -- + #ifdef MT_TAPE_INFO + struct mt_tape_info *mt; + #endif -+ + if (rmtioctl (desc, MTIOCGET, (char*)&status) == -1) error (MT_EXIT_FAILURE, errno, _("%s: rmtioctl failed"), dev); @@ -442,7 +442,7 @@ Index: src/mt.c + } + else + #endif -+ ++ printf ("drive type = %d\n", (int) status.mt_type); #if defined(hpux) || defined(__hpux) printf ("drive status (high) = %d\n", (int) status.mt_dsreg1); diff --git a/cpio-pattern-file-sigsegv.patch b/cpio-pattern-file-sigsegv.patch index 2716b05..cdf2990 100644 --- a/cpio-pattern-file-sigsegv.patch +++ b/cpio-pattern-file-sigsegv.patch @@ -1,17 +1,17 @@ -Index: cpio-2.11/src/copyin.c +Index: cpio-2.12/src/copyin.c =================================================================== ---- cpio-2.11.orig/src/copyin.c 2010-08-10 16:45:19.000000000 +0200 -+++ cpio-2.11/src/copyin.c 2010-08-10 16:45:34.000000000 +0200 -@@ -862,6 +862,8 @@ read_pattern_file () +--- cpio-2.12.orig/src/copyin.c ++++ cpio-2.12/src/copyin.c +@@ -871,6 +871,8 @@ read_pattern_file () pattern_fp = fopen (pattern_file_name, "r"); if (pattern_fp == NULL) - open_error (pattern_file_name); + open_fatal (pattern_file_name); + else + { while (ds_fgetstr (pattern_fp, &pattern_name, '\n') != NULL) { if (new_num_patterns >= max_new_patterns) -@@ -876,6 +878,7 @@ read_pattern_file () +@@ -885,6 +887,7 @@ read_pattern_file () } if (ferror (pattern_fp) || fclose (pattern_fp) == EOF) close_error (pattern_file_name); diff --git a/cpio-stdio.in.patch b/cpio-stdio.in.patch deleted file mode 100644 index cae7903..0000000 --- a/cpio-stdio.in.patch +++ /dev/null @@ -1,15 +0,0 @@ -Index: cpio-2.11/gnu/stdio.in.h -=================================================================== ---- cpio-2.11.orig/gnu/stdio.in.h -+++ cpio-2.11/gnu/stdio.in.h -@@ -138,8 +138,10 @@ _GL_WARN_ON_USE (fflush, "fflush is not - /* It is very rare that the developer ever has full control of stdin, - so any use of gets warrants an unconditional warning. Assume it is - always declared, since it is required by C89. */ -+#if HAVE_RAW_DECL_GETS - #undef gets - _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); -+#endif - - #if @GNULIB_FOPEN@ - # if @REPLACE_FOPEN@ diff --git a/cpio-use_new_ascii_format.patch b/cpio-use_new_ascii_format.patch index 76d9b8c..5119b5c 100644 --- a/cpio-use_new_ascii_format.patch +++ b/cpio-use_new_ascii_format.patch @@ -2,24 +2,54 @@ Index: doc/cpio.info =================================================================== --- doc/cpio.info.orig +++ doc/cpio.info -@@ -266,7 +266,8 @@ File: cpio.info, Node: Options, Prev: - Set the I/O block size to BLOCK-SIZE * 512 bytes. +@@ -216,7 +216,8 @@ option, e.g.: + '-B' + Set the I/O block size to 5120 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 NUMBER' + '--io-size=NUMBER' + Set the I/O block size to the given NUMBER of bytes. +@@ -296,7 +297,8 @@ option. + '-B' + Set the I/O block size to 5120 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 NUMBER' + '--io-size=NUMBER' + Set the I/O block size to the given NUMBER of bytes. +@@ -406,7 +408,8 @@ option. + '-B' + Set the I/O block size to 5120 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 NUMBER' + '--io-size=NUMBER' + Set the I/O block size to the given NUMBER of bytes. +@@ -554,7 +557,8 @@ option is valid. - `-c' + '-c' + [*note copy-in::,*note copy-out::,*note copy-pass::] - 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' + '-C IO-SIZE' + '--io-size=IO-SIZE' Index: src/main.c =================================================================== --- src/main.c.orig +++ src/main.c -@@ -339,6 +339,7 @@ parse_opt (int key, char *arg, struct ar +@@ -329,6 +329,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")); + USAGE_ERROR ((0, 0, _("Archive format multiply defined"))); +#define SVR4_COMPAT #ifdef SVR4_COMPAT archive_format = arf_newascii; /* -H newc. */ diff --git a/cpio.changes b/cpio.changes index 6c194c4..97c587d 100644 --- a/cpio.changes +++ b/cpio.changes @@ -1,3 +1,25 @@ +------------------------------------------------------------------- +Thu Oct 8 11:57:19 UTC 2015 - kstreitova@suse.com + +- update to 2.12 + * Improved documentation + * Manpages are installed by make install + * New options for copy-out mode: --ignore-devno, + --renumber-inodes, --device-independent, --reproducible + * update + * cpio-use_new_ascii_format.patch + * cpio-mt.patch + * cpio-eof_tape_handling.patch + * cpio-pattern-file-sigsegv.patch + * cpio-check_for_symlinks.patch + * remove (no longer needed) + * cpio-stdio.in.patch + * 0001-Fix-memory-overrun-on-reading-improperly-created-lin.patch + * add + * cpio-2.12-util.c_no_return_in_nonvoid_fnc.patch to add missing + return to the nonvoid get_inode_and_dev() function +- use spec-cleaner + ------------------------------------------------------------------- Mon Mar 16 18:54:59 UTC 2015 - mpluskal@suse.com diff --git a/cpio.spec b/cpio.spec index e1e4796..35e99f6 100644 --- a/cpio.spec +++ b/cpio.spec @@ -17,7 +17,7 @@ Name: cpio -Version: 2.11 +Version: 2.12 Release: 0 Summary: A Backup and Archiving Utility License: GPL-3.0 @@ -39,11 +39,10 @@ Patch18: cpio-default_tape_dev.patch #PATCH-FIX-UPSTREAM cpio-2.10-close_files_after_copy.patch Patch20: cpio-close_files_after_copy.patch Patch21: cpio-pattern-file-sigsegv.patch -Patch22: cpio-stdio.in.patch Patch23: paxutils-rtapelib_mtget.patch Patch24: cpio-check_for_symlinks.patch Patch25: cpio-fix_truncation_check.patch -Patch26: 0001-Fix-memory-overrun-on-reading-improperly-created-lin.patch +Patch26: cpio-2.12-util.c_no_return_in_nonvoid_fnc.patch BuildRequires: autoconf BuildRequires: automake Requires(post): %{install_info_prereq} @@ -76,7 +75,6 @@ provided by cpio, install the 'dump' package as well. %patch18 %patch20 %patch21 -p1 -%patch22 -p1 %patch23 -p1 %patch24 -p1 %patch25 -p1 @@ -93,7 +91,7 @@ LDFLAGS="-pie" \ ./configure \ --with-rmt="%{_sysconfdir}/rmt" \ --enable-mt \ - --prefix=/usr \ + --prefix=%{_prefix} \ --mandir=%{_mandir} \ --infodir=%{_infodir} \ --libdir=%{_libdir} \ @@ -102,7 +100,7 @@ make %{?_smp_mflags} %install mkdir -p %{buildroot}/{usr/bin,bin} -make prefix=%{buildroot}/usr infodir=%{buildroot}/%{_infodir} mandir=%{buildroot}/%{_mandir} install +make prefix=%{buildroot}%{_prefix} infodir=%{buildroot}/%{_infodir} mandir=%{buildroot}/%{_mandir} install #UsrMerge ln -sf %{_bindir}/cpio %{buildroot}/bin #EndUsrMerge @@ -121,9 +119,9 @@ ln -sf %{_bindir}/cpio %{buildroot}/bin #EndUsrMerge %{_bindir}/cpio %{_bindir}/mt -%doc %{_infodir}/cpio.info.gz -%doc %{_mandir}/man1/cpio.1.gz -%doc %{_mandir}/man1/mt.1.gz +%{_infodir}/cpio.info.gz +%{_mandir}/man1/cpio.1.gz +%{_mandir}/man1/mt.1.gz #/usr/share/locale/*/LC_MESSAGES/cpio.mo %files lang -f %{name}.lang