diff --git a/0001-solve-the-first-defined-here-error.patch b/0001-solve-the-first-defined-here-error.patch deleted file mode 100644 index 479b135b6724cea346e9d035ea379d881329fe80..0000000000000000000000000000000000000000 --- a/0001-solve-the-first-defined-here-error.patch +++ /dev/null @@ -1,188 +0,0 @@ -From 32435d2343e01eef826406b054f6681dee37b425 Mon Sep 17 00:00:00 2001 -From: pangqing -Date: Thu, 10 Mar 2022 13:32:46 +0800 -Subject: [PATCH] solve the first defined here error - ---- - doc/cpio.texi | 12 ++++++++---- - lib/rtapelib.c | 4 ++++ - src/copyin.c | 41 ++++++++++++++++++++++------------------- - src/copyout.c | 2 +- - src/global.c | 3 --- - src/main.c | 5 +++-- - src/tar.c | 8 +++++--- - tests/CVE-2019-14866.at | 1 - - tests/testsuite | 1 - - 9 files changed, 43 insertions(+), 34 deletions(-) - ---- a/doc/cpio.texi 2023-04-29 02:03:58.000000000 +0800 -+++ b/doc/cpio.texi 2023-05-03 00:06:29.427914193 +0800 -@@ -271,7 +271,8 @@ - @item -B - Set the I/O block size to 5120 bytes. - @item -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. - @item -C @var{number} - @itemx --io-size=@var{number} - Set the I/O block size to the given @var{number} of bytes. -@@ -354,7 +355,8 @@ - @item -B - Set the I/O block size to 5120 bytes. - @item -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. - @item -C @var{number} - @itemx --io-size=@var{number} - Set the I/O block size to the given @var{number} of bytes. -@@ -465,7 +467,8 @@ - @item -B - Set the I/O block size to 5120 bytes. - @item -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. - @item -C @var{number} - @itemx --io-size=@var{number} - Set the I/O block size to the given @var{number} of bytes. -@@ -614,7 +617,8 @@ - - @item -c - [@ref{copy-in},@ref{copy-out},@ref{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. - - @item -C @var{io-size} - @itemx --io-size=@var{io-size} ---- a/lib/rtapelib.c 2023-04-27 18:39:40.000000000 +0800 -+++ b/lib/rtapelib.c 2023-05-03 00:06:29.428914193 +0800 -@@ -59,6 +59,10 @@ - # include - #endif - -+#ifndef REMOTE_SHELL -+# define REMOTE_SHELL "/usr/bin/ssh" -+#endif -+ - #include - #include - ---- a/src/copyin.c 2023-04-29 03:31:27.000000000 +0800 -+++ b/src/copyin.c 2023-05-03 00:06:29.434914193 +0800 -@@ -948,7 +948,8 @@ - - pattern_fp = fopen (pattern_file_name, "r"); - if (pattern_fp == NULL) -- open_fatal (pattern_file_name); -+ open_error (pattern_file_name); -+ else { - while (ds_fgetstr (pattern_fp, &pattern_name, '\n') != NULL) - { - if (new_num_patterns == max_new_patterns) -@@ -963,6 +964,7 @@ - - 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]; -@@ -1287,15 +1289,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]; - file_hdr->c_filesize = (unsigned long) short_hdr->c_filesizes[0] << 16 ---- a/src/copyout.c 2023-04-29 02:35:54.000000000 +0800 -+++ b/src/copyout.c 2023-05-03 00:06:29.432914193 +0800 -@@ -287,7 +287,7 @@ - { - char valbuf[UINTMAX_STRSIZE_BOUND + 1]; - char maxbuf[UINTMAX_STRSIZE_BOUND + 1]; -- error (0, 0, _("%s: value %s %s out of allowed range 0..%s"), -+ error (1, 0, _("%s: value %s %s out of allowed range 0..%s"), - filename, fieldname, - STRINGIFY_BIGINT (value, valbuf), - STRINGIFY_BIGINT (MAX_VAL_WITH_DIGITS (width - nul, LG_8), ---- a/src/main.c 2023-04-29 02:35:54.000000000 +0800 -+++ b/src/main.c 2023-05-03 00:06:29.433914193 +0800 -@@ -124,7 +124,7 @@ - {"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, -@@ -167,7 +167,7 @@ - {"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, -@@ -331,6 +331,7 @@ - case 'c': /* Use the old portable ASCII format. */ - if (archive_format != arf_unknown) - USAGE_ERROR ((0, 0, _("Archive format multiply defined"))); -+#define SVR4_COMPAT - #ifdef SVR4_COMPAT - archive_format = arf_newascii; /* -H newc. */ - #else ---- a/src/tar.c 2023-04-29 02:35:54.000000000 +0800 -+++ b/src/tar.c 2023-05-03 00:06:29.433914193 +0800 -@@ -48,10 +48,12 @@ - { - 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; - } ---- a/tests/CVE-2019-14866.at 2023-04-29 02:03:58.000000000 +0800 -+++ b/tests/CVE-2019-14866.at 2023-05-03 00:06:29.429914193 +0800 -@@ -30,6 +30,5 @@ - [0], - [], - [cpio: file: value size 17179869184 out of allowed range 0..8589934591 --2 blocks - ]) - AT_CLEANUP ---- a/tests/testsuite 2023-05-02 02:04:12.000000000 +0800 -+++ b/tests/testsuite 2023-05-03 00:06:29.431914193 +0800 -@@ -2927,7 +2927,6 @@ - at_status=$? at_failed=false - $at_check_filter - echo >>"$at_stderr"; printf "%s\n" "cpio: file: value size 17179869184 out of allowed range 0..8589934591 --2 blocks - " | \ - $at_diff - "$at_stderr" || at_failed=: - at_fn_diff_devnull "$at_stdout" || at_failed=: diff --git a/cpio-2.10-longnames-split.patch b/cpio-2.10-longnames-split.patch new file mode 100644 index 0000000000000000000000000000000000000000..6f4ba6e42a0700b635cb6141a70dbcbf1d636876 --- /dev/null +++ b/cpio-2.10-longnames-split.patch @@ -0,0 +1,27 @@ +From: Pavel Raiskup +Date: Mon, 14 Sep 2015 09:49:12 +0200 +Subject: [PATCH 6/7] Fix for splitting long file names while creating ustar + archive + +Resolves: #866467 + +diff --git a/src/tar.c b/src/tar.c +index a2ce171..e2b5f45 100644 +--- a/src/tar.c ++++ b/src/tar.c +@@ -49,10 +49,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/cpio-2.11-crc-fips-nit.patch b/cpio-2.11-crc-fips-nit.patch new file mode 100644 index 0000000000000000000000000000000000000000..bd447b54dfa3241688d9abaac5bb1c4ba070f389 --- /dev/null +++ b/cpio-2.11-crc-fips-nit.patch @@ -0,0 +1,19 @@ +From: Pavel Raiskup +Date: Mon, 14 Sep 2015 09:51:12 +0200 +Subject: [PATCH 7/7] Note that cpio uses Sum32 checksum only + +Related to Package Wrangler and FIPS check. + +diff --git a/src/main.c b/src/main.c +index a875a13..13cdfcf 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -167,7 +167,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/cpio-2.14-dev_number.patch b/cpio-2.14-dev_number.patch new file mode 100644 index 0000000000000000000000000000000000000000..4a115e26c84dd2c27d0764ea42c1ebeb4ff56a94 --- /dev/null +++ b/cpio-2.14-dev_number.patch @@ -0,0 +1,28 @@ +From: Kamil Dudka +Date: Mon, 14 Sep 2015 09:37:15 +0200 +Subject: [PATCH 3/7] Support major/minor device numbers over 127 (bz#450109) + +diff --git a/src/copyin.c b/src/copyin.c +index 2e72356..5d88a23 100644 +--- a/src/copyin.c ++++ b/src/copyin.c +@@ -1287,15 +1287,15 @@ read_in_binary (struct cpio_file_stat *file_hdr, + 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]; + file_hdr->c_filesize = (unsigned long) short_hdr->c_filesizes[0] << 16 diff --git a/cpio-2.14-exitCode.patch b/cpio-2.14-exitCode.patch new file mode 100644 index 0000000000000000000000000000000000000000..8c300a512cbbe07556e4d2efbc1673145f816c9d --- /dev/null +++ b/cpio-2.14-exitCode.patch @@ -0,0 +1,39 @@ +Subject: [PATCH 2/7] set exit code to 1 when cpio fails to store file > 4GB + (#183224) + +diff --git a/src/copyout.c b/src/copyout.c +index fa999bd..6e82f4c 100644 +--- a/src/copyout.c ++++ b/src/copyout.c +@@ -287,7 +287,7 @@ field_width_error (const char *filename, const char *fieldname, + { + char valbuf[UINTMAX_STRSIZE_BOUND + 1]; + char maxbuf[UINTMAX_STRSIZE_BOUND + 1]; +- error (0, 0, _("%s: value %s %s out of allowed range 0..%s"), ++ error (1, 0, _("%s: value %s %s out of allowed range 0..%s"), + filename, fieldname, + STRINGIFY_BIGINT (value, valbuf), + STRINGIFY_BIGINT (MAX_VAL_WITH_DIGITS (width - nul, LG_8), +diff --git a/tests/CVE-2019-14866.at b/tests/CVE-2019-14866.at +index 530365a..5a4e15c 100644 +--- a/tests/CVE-2019-14866.at ++++ b/tests/CVE-2019-14866.at +@@ -30,6 +30,5 @@ fi + [0], + [], + [cpio: file: value size 17179869184 out of allowed range 0..8589934591 +-2 blocks + ]) + AT_CLEANUP +diff --git a/tests/testsuite b/tests/testsuite +index 10531d1..d69dad9 100755 +--- a/tests/testsuite ++++ b/tests/testsuite +@@ -2927,7 +2927,6 @@ fi + at_status=$? at_failed=false + $at_check_filter + echo >>"$at_stderr"; printf "%s\n" "cpio: file: value size 17179869184 out of allowed range 0..8589934591 +-2 blocks + " | \ + $at_diff - "$at_stderr" || at_failed=: + at_fn_diff_devnull "$at_stdout" || at_failed=: diff --git a/cpio-2.14-patternnamesigsegv.patch b/cpio-2.14-patternnamesigsegv.patch new file mode 100644 index 0000000000000000000000000000000000000000..6e3ac1df33c3a4162cb30dd9340858ec6159fca6 --- /dev/null +++ b/cpio-2.14-patternnamesigsegv.patch @@ -0,0 +1,40 @@ +From: =?UTF-8?q?Ond=C5=99ej=20Va=C5=A1=C3=ADk?= +Date: Mon, 14 Sep 2015 09:47:05 +0200 +Subject: [PATCH 5/7] fix segfault with nonexisting file with patternnames + (#567022) + +diff --git a/src/copyin.c b/src/copyin.c +index 5d88a23..f2babb7 100644 +--- a/src/copyin.c ++++ b/src/copyin.c +@@ -948,21 +948,24 @@ read_pattern_file (void) + + pattern_fp = fopen (pattern_file_name, "r"); + if (pattern_fp == NULL) +- open_fatal (pattern_file_name); +- while (ds_fgetstr (pattern_fp, &pattern_name, '\n') != NULL) ++ open_error (pattern_file_name); ++ else ++ { ++ while (ds_fgetstr (pattern_fp, &pattern_name, '\n') != NULL) + { + if (new_num_patterns == max_new_patterns) +- new_save_patterns = x2nrealloc (new_save_patterns, ++ new_save_patterns = x2nrealloc (new_save_patterns, + &max_new_patterns, + sizeof (new_save_patterns[0])); + new_save_patterns[new_num_patterns] = xstrdup (pattern_name.ds_string); + ++new_num_patterns; + } + +- ds_free (&pattern_name); ++ ds_free (&pattern_name); + +- if (ferror (pattern_fp) || fclose (pattern_fp) == EOF) +- close_error (pattern_file_name); ++ 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/cpio-2.14-use_new_ascii_format.patch b/cpio-2.14-use_new_ascii_format.patch new file mode 100644 index 0000000000000000000000000000000000000000..ff4c7cdad9acd627997475ed7c1d45787c9b94a0 --- /dev/null +++ b/cpio-2.14-use_new_ascii_format.patch @@ -0,0 +1,69 @@ +From: Pavel Raiskup +Date: Mon, 14 Sep 2015 09:27:21 +0200 +Subject: [PATCH 1/7] make '-c' equivalent to '-H newc' + +diff --git a/doc/cpio.texi b/doc/cpio.texi +index edf0c12..bef7ba5 100644 +--- a/doc/cpio.texi ++++ b/doc/cpio.texi +@@ -271,7 +271,8 @@ Sets the I/O block size to @var{block-size} * 512 bytes. + @item -B + Set the I/O block size to 5120 bytes. + @item -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. + @item -C @var{number} + @itemx --io-size=@var{number} + Set the I/O block size to the given @var{number} of bytes. +@@ -354,7 +355,8 @@ Equivalent to @option{-sS}. + @item -B + Set the I/O block size to 5120 bytes. + @item -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. + @item -C @var{number} + @itemx --io-size=@var{number} + Set the I/O block size to the given @var{number} of bytes. +@@ -465,7 +467,8 @@ Sets the I/O block size to @var{block-size} * 512 bytes. + @item -B + Set the I/O block size to 5120 bytes. + @item -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. + @item -C @var{number} + @itemx --io-size=@var{number} + Set the I/O block size to the given @var{number} of bytes. +@@ -614,7 +617,8 @@ block size is 512 bytes. + + @item -c + [@ref{copy-in},@ref{copy-out},@ref{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. + + @item -C @var{io-size} + @itemx --io-size=@var{io-size} +diff --git a/src/main.c b/src/main.c +index b27bd17..542a71f 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -124,7 +124,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, +@@ -331,6 +331,7 @@ parse_opt (int key, char *arg, struct argp_state *state) + case 'c': /* Use the old portable ASCII format. */ + if (archive_format != arf_unknown) + USAGE_ERROR ((0, 0, _("Archive format multiply defined"))); ++#define SVR4_COMPAT + #ifdef SVR4_COMPAT + archive_format = arf_newascii; /* -H newc. */ + #else diff --git a/cpio-2.14.tar.bz2 b/cpio-2.14.tar.bz2 deleted file mode 100644 index 6eb607629164590bc99202280de1ba98d03b33ee..0000000000000000000000000000000000000000 Binary files a/cpio-2.14.tar.bz2 and /dev/null differ diff --git a/cpio-2.15.tar.bz2 b/cpio-2.15.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..a6e1bba89547ca93d56c90b54f7576b07af30301 Binary files /dev/null and b/cpio-2.15.tar.bz2 differ diff --git a/cpio-2.9.90-defaultremoteshell.patch b/cpio-2.9.90-defaultremoteshell.patch new file mode 100644 index 0000000000000000000000000000000000000000..01dbd5da73f76fa62039f57fc3bb7119fdef3826 --- /dev/null +++ b/cpio-2.9.90-defaultremoteshell.patch @@ -0,0 +1,20 @@ +From: =?UTF-8?q?Ond=C5=99ej=20Va=C5=A1=C3=ADk?= +Date: Mon, 14 Sep 2015 09:39:13 +0200 +Subject: [PATCH 4/7] define default remote shell as /usr/bin/ssh(#452904), use + /etc/rmt as default rmt command + +diff --git a/lib/rtapelib.c b/lib/rtapelib.c +index 7213031..7d0bd52 100644 +--- a/lib/rtapelib.c ++++ b/lib/rtapelib.c +@@ -59,6 +59,10 @@ + # include + #endif + ++#ifndef REMOTE_SHELL ++# define REMOTE_SHELL "/usr/bin/ssh" ++#endif ++ + #include + #include + diff --git a/cpio-open_nonblock.patch b/cpio-open_nonblock.patch new file mode 100644 index 0000000000000000000000000000000000000000..c0aca5e4d5db883e50ab084b37619525248786ea --- /dev/null +++ b/cpio-open_nonblock.patch @@ -0,0 +1,68 @@ +From: Alexey Svistunov +Date: 2017-02-17 16:07:00 +0300 +Subject: open device with O_NONBLOCK option +References: https://savannah.gnu.org/patch/?9263, bnc#94449 +Upstream: submitted + +When running the 2.6 kernel, "mt -f /dev/nst0 status" blocks if there is +no media in the drive. The same occurs for other commands. + +When running the 2.4.24 kernel, "mt -f /dev/nst0 status" does not block +when there is no tape in the drive. + +This behavior change is documented for the 2.6 kernel (see +kernel-source-2.6.3/Documentation/scsi/st.txt for the full doc): + +If the open option O_NONBLOCK is used, open succeeds even if the +drive is not ready. If O_NONBLOCK is not used, the driver waits for +the drive to become ready. If this does not happen in ST_BLOCK_SECONDS +seconds, open fails with the errno value EIO. With O_NONBLOCK the +device can be opened for writing even if there is a write protected +tape in the drive (commands trying to write something return error if +attempted). + +It appears that the use of O_NONBLOCK is safe with pre-2.6 kernels. +Suggest adding the use of O_NONBLOCK when opening the device. As it is, +for long-running commands such as "fsf", one cannot tell if the command is +progressing or if it's blocking waiting for media. + +Index: a/src/mt.c +=================================================================== +--- a/src/mt.c.orig ++++ a/src/mt.c +@@ -332,11 +332,11 @@ main (int argc, char **argv) + #ifdef MTERASE + case MTERASE: + #endif +- tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); ++ tapedesc = rmtopen (tapedev, O_WRONLY | O_NONBLOCK, 0, rsh_command_option); + break; + + default: +- tapedesc = rmtopen (tapedev, O_RDONLY, 0, rsh_command_option); ++ tapedesc = rmtopen (tapedev, O_RDONLY | O_NONBLOCK, 0, rsh_command_option); + } + + if (tapedesc == -1) +Index: a/src/util.c +=================================================================== +--- a/src/util.c.orig ++++ a/src/util.c +@@ -799,14 +799,14 @@ open_archive (char *file) + copy_in = process_copy_in; + + if (copy_function == copy_in) +- fd = rmtopen (file, O_RDONLY | O_BINARY, MODE_RW, rsh_command_option); ++ fd = rmtopen (file, O_RDONLY | O_BINARY | O_NONBLOCK, MODE_RW, rsh_command_option); + else + { + if (!append_flag) +- fd = rmtopen (file, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, MODE_RW, ++ fd = rmtopen (file, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY | O_NONBLOCK, MODE_RW, + rsh_command_option); + else +- fd = rmtopen (file, O_RDWR | O_BINARY, MODE_RW, rsh_command_option); ++ fd = rmtopen (file, O_RDWR | O_BINARY | O_NONBLOCK, MODE_RW, rsh_command_option); + } + + return fd; diff --git a/cpio.1 b/cpio.1 deleted file mode 100644 index 670277c8904509edddf52d5bbc92d61e31e75da0..0000000000000000000000000000000000000000 --- a/cpio.1 +++ /dev/null @@ -1,438 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was (partly) generated by help2man from -.\" cpio --help/cpio --version output and partly patched by downstream -.\" package maintainers. -.TH CPIO 1L \" -*- nroff -*- -.SH NAME -cpio \- copy files to and from archives -.SH __WARNING__ -.PP -The cpio utility is considered LEGACY based on POSIX specification. Users are -encouraged to use other archiving tools for archive creation. - -If you decided to use cpio, you should almost always force cpio to use the -ustar format in copy-out mode by the -H option (cpio -o -H ustar). This is -because the ustar format is well defined in POSIX specification and thus -readable by wide range of other archiving tools (including tar e.g.). - -By default, GNU cpio uses (for historical reasons) the very old binary format -('bin') which has significant problems nowadays, e.g. with storing big inode -numbers (see the Red Hat bug #952313). - -Note also that these days the modern 'pax' archive format should be considered -as the default -- but this format is not implemented in GNU cpio. You should, -again, consider using other archivers (e.g. 'tar --format=pax'). - -.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] [\-D DIR] -[\-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] -[\-D DIR] -[\-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] -[\-\-ignore\-devno] [\-\-renumber\-inodes] [\-\-device\-independent] -[\-\-reproducible] -[\-\-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]] [\-D DIR] -[\-\-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 -.SS "Main operation mode:" -.TP -\fB\-i\fR, \fB\-\-extract\fR -Extract files from an archive (run in copy\-in -mode) -.TP -\fB\-o\fR, \fB\-\-create\fR -Create the archive (run in copy\-out mode) -.TP -\fB\-p\fR, \fB\-\-pass\-through\fR -Run in copy\-pass mode -.TP -\fB\-t\fR, \fB\-\-list\fR -Print a table of contents of the input -.SS "Operation modifiers valid in any mode:" -.TP -\fB\-\-block\-size\fR=\fI\,BLOCK\-SIZE\/\fR -Set the I/O block size to BLOCK\-SIZE * 512 -bytes -.TP -\fB\-B\fR -Set the I/O block size to 5120 bytes. -Initially the block size is 512 bytes. -.TP -\fB\-c\fR -Identical to "\-H newc", use the new (SVR4) -portable format. If you wish the old portable -(ASCII) archive format, use "\-H odc" instead. -.TP -\fB\-C\fR, \fB\-\-io\-size\fR=\fI\,NUMBER\/\fR -Set the I/O block size to the given NUMBER of -bytes -.TP -\fB\-D\fR, \fB\-\-directory\fR=\fI\,DIR\/\fR -Change to directory DIR -.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\fR, \fB\-\-format\fR=\fI\,FORMAT\/\fR -Use given archive FORMAT. -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\-\-quiet\fR -Do not print the number of blocks copied -.TP -\fB\-R\fR, \fB\-\-owner\fR=\fI\,[USER][\/\fR:.][GROUP] -Set the ownership of all files created to the -specified USER and/or GROUP. -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 in copy\-in mode. -.TP -\fB\-v\fR, \fB\-\-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\fR, \fB\-\-dot\fR -Print a "." for each file processed -.TP -\fB\-W\fR, \fB\-\-warning\fR=\fI\,FLAG\/\fR -Control warning display. Currently FLAG is one of -\&'none', 'truncate', 'all'. Multiple options -accumulate. -.SS "Operation modifiers valid in copy-in and copy-out modes:" -.TP -\fB\-F\fR, \fB\-\-file\fR=\fI\,[[USER\/\fR@]HOST:]FILE\-NAME -Use this FILE\-NAME instead of standard input or -output. Optional USER and HOST specify the user -and host names in case of a remote archive -.TP -\fB\-M\fR, \fB\-\-message\fR=\fI\,STRING\/\fR -Print \s-1STRING\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-1STRING\s0 contains the string \*(lq%d\*(rq, it is -replaced by the current volume number (starting at 1). -.TP -\fB\-\-rsh\-command\fR=\fI\,COMMAND\/\fR -Use COMMAND instead of rsh -(typically /usr/bin/ssh) -.SS "Operation modifiers valid only in copy-in mode:" -.TP -\fB\-b\fR, \fB\-\-swap\fR -Swap both halfwords of words and bytes of -halfwords in the data. Equivalent to \fB\-sS\fR -Use this option to convert 32\-bit integers between big-endian and little-endian -machines. -.TP -\fB\-f\fR, \fB\-\-nonmatching\fR -Only copy files that do not match any of the given -patterns -.TP -\fB\-I\fR [[USER@]HOST:]FILE\-NAME -Archive filename to use instead of standard input. -Optional USER and HOST specify the user and host -names in case of a remote archive -.TP -\fB\-n\fR, \fB\-\-numeric\-uid\-gid\fR -In the verbose table of contents listing, show -numeric UID and GID -.TP -\fB\-r\fR, \fB\-\-rename\fR -Interactively rename files -.TP -\fB\-s\fR, \fB\-\-swap\-bytes\fR -Swap the bytes of each halfword in the files -.TP -\fB\-S\fR, \fB\-\-swap\-halfwords\fR -Swap the halfwords of each word (4 bytes) in the -files -.TP -\fB\-\-to\-stdout\fR -Extract files to standard output -.TP -\fB\-E\fR, \fB\-\-pattern\-file\fR=\fI\,FILE\/\fR -Read additional patterns specifying filenames to -extract or list from FILE -.TP -\fB\-\-only\-verify\-crc\fR -When reading a CRC format archive, only verify the -checksum of each file in the archive, don't -actually extract the files -.SS "Operation modifiers valid only in copy-out mode:" -.TP -\fB\-A\fR, \fB\-\-append\fR -Append to an existing archive. -The archive must be a disk file specified with the \-O or \-F (\-file) option. -.TP -\fB\-\-device\-independent\fR, \fB\-\-reproducible\fR -Create device\-independent (reproducible) archives -.TP -\fB\-\-ignore\-devno\fR -Don't store device numbers -.TP -\fB\-O\fR [[USER@]HOST:]FILE\-NAME -Archive filename to use instead of standard -output. Optional USER and HOST specify the user -and host names in case of a remote archive -.TP -\fB\-\-renumber\-inodes\fR -Renumber inodes -.SS "Operation modifiers valid only in copy-pass mode:" -.TP -\fB\-l\fR, \fB\-\-link\fR -Link files instead of copying them, when -possible -.SS "Operation modifiers valid in copy-in and copy-out modes:" -.TP -\fB\-\-absolute\-filenames\fR -Do not strip file system prefix components from -the file names -.TP -\fB\-\-no\-absolute\-filenames\fR -Create all files relative to the current -directory -.SS "Operation modifiers valid in copy-out and copy-pass modes:" -.TP -\fB\-0\fR, \fB\-\-null\fR -Filenames in the list are delimited by null -characters instead of newlines, 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. -.TP -\fB\-a\fR, \fB\-\-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\-L\fR, \fB\-\-dereference\fR -Dereference symbolic links (copy the files -that they point to instead of copying the links). -.SS "Operation modifiers valid in copy-in and copy-pass modes:" -.TP -\fB\-d\fR, \fB\-\-make\-directories\fR -Create leading directories where needed -.TP -\fB\-m\fR, \fB\-\-preserve\-modification\-time\fR -Retain previous file modification times when -creating files -.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\-\-sparse\fR -Write files with large blocks of zeros as sparse -files -.TP -\fB\-u\fR, \fB\-\-unconditional\fR -Replace all files unconditionally -.TP -\-?, \fB\-\-help\fR -give this help list -.TP -\fB\-\-usage\fR -give a short usage message -.TP -\fB\-\-version\fR -print program version -.PP -Mandatory or optional arguments to long options are also mandatory or optional -for any corresponding short options. - -.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 AUTHOR -Written by Phil Nelson, David MacKenzie, John Oleynick, -and Sergey Poznyakoff. -.SH "REPORTING BUGS" -Report bugs to . -Report bugs in this manual page via https://bugzilla.redhat.com. -.SH COPYRIGHT -Copyright \(co 2015 Free Software Foundation, Inc. -License GPLv3+: GNU GPL version 3 or later . -.br -This is free software: you are free to change and redistribute it. -There is NO WARRANTY, to the extent permitted by law. -.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/cpio.spec b/cpio.spec index a02078bd09a42d8195a065141bf4e7abf5a7c80c..43e9d4ac4e20496e92b49800331aa23620f0f737 100644 --- a/cpio.spec +++ b/cpio.spec @@ -1,22 +1,39 @@ %define anolis_release 1 Summary: A GNU archiving program Name: cpio -Version: 2.14 +Version: 2.15 Release: %{anolis_release}%{?dist} License: GPLv3+ URL: http://www.gnu.org/software/cpio/ Source: https://ftp.gnu.org/gnu/cpio/cpio-%{version}.tar.bz2 -Source1: cpio.1 -Patch1: 0001-solve-the-first-defined-here-error.patch +Patch1001: cpio-2.14-use_new_ascii_format.patch +# fix warn_if_file_changed() and set exit code to 1 when cpio fails to store +# file > 4GB +# http://lists.gnu.org/archive/html/bug-cpio/2006-11/msg00000.html +Patch1002: cpio-2.14-exitCode.patch +# Support major/minor device numbers over 127 +# http://lists.gnu.org/archive/html/bug-cpio/2008-07/msg00000.html +Patch1003: cpio-2.14-dev_number.patch +# Define default remote shell as /usr/bin/ssh +Patch1004: cpio-2.9.90-defaultremoteshell.patch +# Fix segfault with nonexisting file with patternnames +# http://savannah.gnu.org/bugs/index.php?28954 +# We have slightly different solution than upstream. +Patch1005: cpio-2.14-patternnamesigsegv.patch +# Fix bad file name splitting while creating ustar archive +# (fix backported from tar's source) +Patch1006: cpio-2.10-longnames-split.patch +# Cpio does Sum32 checksum, not CRC (downstream) +Patch1007: cpio-2.11-crc-fips-nit.patch +#PATCH-FIX-UPSTREAM cpio-2.12 cpio-open_nonblock.patch, +#https://savannah.gnu.org/patch/?9263 -- open device with O_NONBLOCK option +Patch1008: cpio-open_nonblock.patch Provides: bundled(gnulib) Provides: bundled(paxutils) Provides: /bin/cpio BuildRequires: gcc BuildRequires: texinfo -BuildRequires: autoconf -BuildRequires: automake BuildRequires: gettext -BuildRequires: gettext-devel BuildRequires: rmt %description @@ -45,42 +62,29 @@ The %{name}-doc package contains documentation files for %{name}. %prep %autosetup -p1 - %build -autoreconf -fi export CFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -pedantic -fno-strict-aliasing -Wall $CFLAGS" %configure --with-rmt="%{_sysconfdir}/rmt" %make_build -(cd po && make update-gmo) - %install %make_install rm -f $RPM_BUILD_ROOT%{_libexecdir}/rmt -rm -f $RPM_BUILD_ROOT%{_mandir}/man1/*.1* -install -c -p -m 0644 %{SOURCE1} ${RPM_BUILD_ROOT}%{_mandir}/man1 %generate_compatibility_deps - %find_lang %{name} %check rm -f test/testsuite -make check || { - echo "### TESTSUITE.LOG ###" - cat tests/testsuite.log - exit 1 -} - +%make_build check %files -f %{name}.lang %dir %{abidir} %license COPYING %{_bindir}/* %{abidir}/*-option.list - %{_mandir}/man*/* %{_infodir}/*.info* @@ -88,6 +92,11 @@ make check || { %doc AUTHORS ChangeLog NEWS README THANKS TODO %changelog +* Thu Feb 08 2024 Funda Wang - 2.15-1 +- New version 2.15 +- Use upstream man page +- Reorganize patches so that we could track them from other distros + * Tue May 02 2023 Funda Wang - 2.14-1 - New version 2.14