From b384fd583912e525a0c37d4b623b922a5b093113f6d6223840070aee748e20b1 Mon Sep 17 00:00:00 2001 From: OBS User buildservice-autocommit Date: Thu, 18 Mar 2010 14:40:48 +0000 Subject: [PATCH 1/4] Updating link to change in openSUSE:Factory/cpio revision 24.0 OBS-URL: https://build.opensuse.org/package/show/Archiving/cpio?expand=0&rev=8e36a3e1d4b41ffb67e07dc3c17a2089 --- ready | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ready diff --git a/ready b/ready deleted file mode 100644 index 473a0f4..0000000 From abb8c85948a489327797ddbbd53e44fe91a0f27b53cafd99151fbf8d0ba10970 Mon Sep 17 00:00:00 2001 From: Michal Seben Date: Thu, 25 Mar 2010 13:18:28 +0000 Subject: [PATCH 2/4] Accepting request 35734 from home:mseben:branches:Archiving Copy from home:mseben:branches:Archiving/cpio via accept of submit request 35734 revision 8. Request was accepted with message: OBS-URL: https://build.opensuse.org/request/show/35734 OBS-URL: https://build.opensuse.org/package/show/Archiving/cpio?expand=0&rev=19 --- cpio-2.10-chmodRaceC.patch | 139 ----------- cpio-2.10-heap_overflow_in_rtapelib.patch | 52 ---- cpio-2.10-include_fatal_c.patch | 8 - cpio-2.10.tar.bz2 | 3 - cpio-2.11.tar.bz2 | 3 + ...patch => cpio-close_files_after_copy.patch | 24 +- ...e_dev.patch => cpio-default_tape_dev.patch | 27 +- ...-dev_number.patch => cpio-dev_number.patch | 0 ...2.10-dir_perm.patch => cpio-dir_perm.patch | 233 ++++-------------- ...ling.patch => cpio-eof_tape_handling.patch | 0 cpio-2.10-mt.patch => cpio-mt.patch | 179 +++++++------- ...nonblock.patch => cpio-open_nonblock.patch | 32 ++- ...t.patch => cpio-use_new_ascii_format.patch | 0 ..._sbin_rmt.patch => cpio-use_sbin_rmt.patch | 0 cpio.changes | 15 ++ cpio.spec | 30 +-- 16 files changed, 211 insertions(+), 534 deletions(-) delete mode 100644 cpio-2.10-chmodRaceC.patch delete mode 100644 cpio-2.10-heap_overflow_in_rtapelib.patch delete mode 100644 cpio-2.10-include_fatal_c.patch delete mode 100644 cpio-2.10.tar.bz2 create mode 100644 cpio-2.11.tar.bz2 rename cpio-2.10-close_files_after_copy.patch => cpio-close_files_after_copy.patch (58%) rename cpio-2.10-default_tape_dev.patch => cpio-default_tape_dev.patch (63%) rename cpio-2.10-dev_number.patch => cpio-dev_number.patch (100%) rename cpio-2.10-dir_perm.patch => cpio-dir_perm.patch (58%) rename cpio-2.10-eof_tape_handling.patch => cpio-eof_tape_handling.patch (100%) rename cpio-2.10-mt.patch => cpio-mt.patch (89%) rename cpio-2.10-open_nonblock.patch => cpio-open_nonblock.patch (50%) rename cpio-2.10-use_new_ascii_format.patch => cpio-use_new_ascii_format.patch (100%) rename cpio-2.10-use_sbin_rmt.patch => cpio-use_sbin_rmt.patch (100%) diff --git a/cpio-2.10-chmodRaceC.patch b/cpio-2.10-chmodRaceC.patch deleted file mode 100644 index a1dad8a..0000000 --- a/cpio-2.10-chmodRaceC.patch +++ /dev/null @@ -1,139 +0,0 @@ ---- src/copypass.c -+++ src/copypass.c -@@ -239,15 +239,23 @@ process_copy_pass () - cdf_flag = 1; - } - #endif -- res = mkdir (output_name.ds_string, in_file_stat.st_mode); -+ res = mkdir (output_name.ds_string, in_file_stat.st_mode & ~077); - - } - else -- res = 0; -+ { -+ if (!no_chown_flag && (out_file_stat.st_mode & 077) != 0 -+ && chmod (output_name.ds_string, out_file_stat.st_mode & 07700) < 0) -+ { -+ error (0, errno, "%s: chmod", output_name.ds_string); -+ continue; -+ } -+ res = 0; -+ } - if (res < 0 && create_dir_flag) - { - create_all_directories (output_name.ds_string); -- res = mkdir (output_name.ds_string, in_file_stat.st_mode); -+ res = mkdir (output_name.ds_string, in_file_stat.st_mode & ~077); - } - if (res < 0) - { -@@ -290,12 +298,12 @@ process_copy_pass () - - if (link_res < 0) - { -- res = mknod (output_name.ds_string, in_file_stat.st_mode, -+ res = mknod (output_name.ds_string, in_file_stat.st_mode & ~077, - in_file_stat.st_rdev); - if (res < 0 && create_dir_flag) - { - create_all_directories (output_name.ds_string); -- res = mknod (output_name.ds_string, in_file_stat.st_mode, -+ res = mknod (output_name.ds_string, in_file_stat.st_mode & ~077, - in_file_stat.st_rdev); - } - if (res < 0) ---- src/copyin.c -+++ src/copyin.c -@@ -186,11 +186,12 @@ list_file(struct cpio_file_stat* file_hd - - static int - try_existing_file (struct cpio_file_stat* file_hdr, int in_file_des, -- int *existing_dir) -+ int *existing_dir, mode_t *existing_mode) - { - struct stat file_stat; - - *existing_dir = false; -+ *existing_mode = 0; - if (lstat (file_hdr->c_name, &file_stat) == 0) - { - if (S_ISDIR (file_stat.st_mode) -@@ -200,6 +201,7 @@ try_existing_file (struct cpio_file_stat - we are trying to create, don't complain about - it. */ - *existing_dir = true; -+ *existing_mode = file_stat.st_mode; - return 0; - } - else if (!unconditional_flag -@@ -567,7 +569,7 @@ copyin_regular_file (struct cpio_file_st - } - - static void --copyin_directory (struct cpio_file_stat *file_hdr, int existing_dir) -+copyin_directory (struct cpio_file_stat *file_hdr, int existing_dir, mode_t existing_mode) - { - int res; /* Result of various function calls. */ - #ifdef HPUX_CDF -@@ -610,14 +612,22 @@ copyin_directory (struct cpio_file_stat - cdf_flag = 1; - } - #endif -- res = mkdir (file_hdr->c_name, file_hdr->c_mode); -+ res = mkdir (file_hdr->c_name, file_hdr->c_mode & ~077); - } - else -- res = 0; -+ { -+ if (!no_chown_flag && (existing_mode & 077) != 0 -+ && chmod (file_hdr->c_name, existing_mode & 07700) < 0) -+ { -+ error (0, errno, "%s: chmod", file_hdr->c_name); -+ return; -+ } -+ res = 0; -+ } - if (res < 0 && create_dir_flag) - { - create_all_directories (file_hdr->c_name); -- res = mkdir (file_hdr->c_name, file_hdr->c_mode); -+ res = mkdir (file_hdr->c_name, file_hdr->c_mode & ~077); - } - if (res < 0) - { -@@ -692,12 +702,12 @@ copyin_device (struct cpio_file_stat* fi - return; - } - -- res = mknod (file_hdr->c_name, file_hdr->c_mode, -+ res = mknod (file_hdr->c_name, file_hdr->c_mode & ~077, - makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min)); - if (res < 0 && create_dir_flag) - { - create_all_directories (file_hdr->c_name); -- res = mknod (file_hdr->c_name, file_hdr->c_mode, -+ res = mknod (file_hdr->c_name, file_hdr->c_mode & ~077, - makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min)); - } - if (res < 0) -@@ -772,9 +782,10 @@ static void - copyin_file (struct cpio_file_stat* file_hdr, int in_file_des) - { - int existing_dir=0; -+ mode_t existing_mode; - - if (!to_stdout_option -- && try_existing_file (file_hdr, in_file_des, &existing_dir) < 0) -+ && try_existing_file (file_hdr, in_file_des, &existing_dir, &existing_mode) < 0) - return; - - /* Do the real copy or link. */ -@@ -785,7 +796,7 @@ copyin_file (struct cpio_file_stat* file - break; - - case CP_IFDIR: -- copyin_directory (file_hdr, existing_dir); -+ copyin_directory(file_hdr, existing_dir, existing_mode); - break; - - case CP_IFCHR: diff --git a/cpio-2.10-heap_overflow_in_rtapelib.patch b/cpio-2.10-heap_overflow_in_rtapelib.patch deleted file mode 100644 index 41d0626..0000000 --- a/cpio-2.10-heap_overflow_in_rtapelib.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 9bc39283e4cc6ab9e5913ccbf766998eab4ff093 Mon Sep 17 00:00:00 2001 -From: Sergey Poznyakoff -Date: Mon, 01 Mar 2010 08:49:03 +0000 -Subject: Bugfixes in rtapelib - -* lib/rmt.h (rmtcreat): Use fcntl O_ macros insead of -their hardcoded values. -* lib/rtapelib.c (rmt_read__,rmt_ioctl__): Prevent -potential overflow. ---- -diff --git a/lib/rmt.h b/lib/rmt.h -index 50f037c..2ce9dc5 100644 ---- a/lib/rmt.h -+++ b/lib/rmt.h -@@ -61,7 +61,7 @@ extern bool force_local_option; - - #define rmtcreat(dev_name, mode, command) \ - (_remdev (dev_name) \ -- ? rmt_open__ (dev_name, 1 | O_CREAT, __REM_BIAS, command) \ -+ ? rmt_open__ (dev_name, O_CREAT | O_WRONLY, __REM_BIAS, command) \ - : creat (dev_name, mode)) - - #define rmtlstat(dev_name, muffer) \ -diff --git a/lib/rtapelib.c b/lib/rtapelib.c -index 02ad1e7..cb645db 100644 ---- a/lib/rtapelib.c -+++ b/lib/rtapelib.c -@@ -573,7 +573,8 @@ rmt_read__ (int handle, char *buffer, size_t length) - - sprintf (command_buffer, "R%lu\n", (unsigned long) length); - if (do_command (handle, command_buffer) == -1 -- || (status = get_status (handle)) == SAFE_READ_ERROR) -+ || (status = get_status (handle)) == SAFE_READ_ERROR -+ || status > length) - return SAFE_READ_ERROR; - - for (counter = 0; counter < status; counter += rlen, buffer += rlen) -@@ -709,6 +710,12 @@ rmt_ioctl__ (int handle, int operation, char *argument) - || (status = get_status (handle), status == -1)) - return -1; - -+ if (status > sizeof (struct mtop)) -+ { -+ errno = EOVERFLOW; -+ return -1; -+ } -+ - for (; status > 0; status -= counter, argument += counter) - { - counter = safe_read (READ_SIDE (handle), argument, status); --- -cgit v0.8.2.1 diff --git a/cpio-2.10-include_fatal_c.patch b/cpio-2.10-include_fatal_c.patch deleted file mode 100644 index f06443a..0000000 --- a/cpio-2.10-include_fatal_c.patch +++ /dev/null @@ -1,8 +0,0 @@ ---- lib/Makefile.am.orig 2009-07-09 09:41:26.000000000 +0200 -+++ lib/Makefile.am 2009-07-09 09:41:17.000000000 +0200 -@@ -37,4 +37,5 @@ - sysdep.c\ - system.h\ - error.c\ -+ ../src/fatal.c \ - names.c diff --git a/cpio-2.10.tar.bz2 b/cpio-2.10.tar.bz2 deleted file mode 100644 index 7d90290..0000000 --- a/cpio-2.10.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:def23150e4e081599ecb013736f4403617fefbb6f6e6806dc6a98129913d79d5 -size 951395 diff --git a/cpio-2.11.tar.bz2 b/cpio-2.11.tar.bz2 new file mode 100644 index 0000000..c96caee --- /dev/null +++ b/cpio-2.11.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb820bfd96e74fc6ce43104f06fe733178517e7f5d1cdee553773e8eff7d5bbd +size 1018483 diff --git a/cpio-2.10-close_files_after_copy.patch b/cpio-close_files_after_copy.patch similarity index 58% rename from cpio-2.10-close_files_after_copy.patch rename to cpio-close_files_after_copy.patch index be033b2..a819eac 100644 --- a/cpio-2.10-close_files_after_copy.patch +++ b/cpio-close_files_after_copy.patch @@ -2,22 +2,24 @@ Index: src/copyin.c =================================================================== --- src/copyin.c.orig +++ src/copyin.c -@@ -1565,6 +1565,19 @@ process_copy_in () - if (dot_flag) +@@ -1484,7 +1484,20 @@ process_copy_in () fputc ('\n', stderr); + apply_delayed_set_stat (); +- ++ + if (tty_in) -+ { -+ fclose(tty_in); -+ } ++ { ++ fclose(tty_in); ++ } + if (tty_out) -+ { -+ fclose(tty_out); -+ } ++ { ++ fclose(tty_out); ++ } + if (rename_in) -+ { -+ fclose(rename_in); -+ } ++ { ++ fclose(rename_in); ++ } + if (append_flag) return; diff --git a/cpio-2.10-default_tape_dev.patch b/cpio-default_tape_dev.patch similarity index 63% rename from cpio-2.10-default_tape_dev.patch rename to cpio-default_tape_dev.patch index d23c8ef..f977ccc 100644 --- a/cpio-2.10-default_tape_dev.patch +++ b/cpio-default_tape_dev.patch @@ -1,12 +1,17 @@ ---- src/mt.c +Index: src/mt.c +=================================================================== +--- src/mt.c.orig +++ src/mt.c -@@ -664,11 +664,20 @@ - { - tapedev = getenv ("TAPE"); - if (tapedev == NULL) +@@ -413,11 +413,18 @@ parse_opt (int key, char *arg, struct ar + { + tapedev = getenv ("TAPE"); + if (tapedev == NULL) -#ifdef DEFTAPE /* From sys/mtio.h. */ -- tapedev = DEFTAPE; +- tapedev = DEFTAPE; -#else +- error (MT_EXIT_INVOP, 0, _("no tape device specified")); +-#endif ++ +/* Suse doesn't have /dev/tape as link to /dev/nst0 any more. +Instead it uses udev and creates different names in /dev/tape/by-id/ directory. +If it is SCSI tape storage then it creates /dev/tape/by-id/scsi--nst @@ -18,10 +23,6 @@ +/* #ifdef DEFTAPE * From sys/mtio.h. * */ +# define DEFSUSETAPE "/dev/nst0" + tapedev = DEFSUSETAPE; -+/* #else - error (1, 0, _("no tape device specified")); --#endif -+#endif */ - } - - #ifdef MTDENS + } + break; + diff --git a/cpio-2.10-dev_number.patch b/cpio-dev_number.patch similarity index 100% rename from cpio-2.10-dev_number.patch rename to cpio-dev_number.patch diff --git a/cpio-2.10-dir_perm.patch b/cpio-dir_perm.patch similarity index 58% rename from cpio-2.10-dir_perm.patch rename to cpio-dir_perm.patch index 93654ce..4325e95 100644 --- a/cpio-2.10-dir_perm.patch +++ b/cpio-dir_perm.patch @@ -1,163 +1,13 @@ ---- cpio-2.9/src/copyin.c -+++ cpio-2.9/src/copyin.c -@@ -186,12 +186,11 @@ - - static int - try_existing_file (struct cpio_file_stat* file_hdr, int in_file_des, -- int *existing_dir, mode_t *existing_mode) -+ int *existing_dir) - { - struct stat file_stat; - - *existing_dir = false; -- *existing_mode = 0; - if (lstat (file_hdr->c_name, &file_stat) == 0) - { - if (S_ISDIR (file_stat.st_mode) -@@ -201,7 +200,6 @@ - we are trying to create, don't complain about - it. */ - *existing_dir = true; -- *existing_mode = file_stat.st_mode; - return 0; - } - else if (!unconditional_flag -@@ -569,7 +567,7 @@ - } - - static void --copyin_directory (struct cpio_file_stat *file_hdr, int existing_dir, mode_t existing_mode) -+copyin_directory (struct cpio_file_stat *file_hdr, int existing_dir) - { - int res; /* Result of various function calls. */ - #ifdef HPUX_CDF -@@ -612,22 +610,14 @@ - cdf_flag = 1; - } - #endif -- res = mkdir (file_hdr->c_name, file_hdr->c_mode & ~077); -+ res = mkdir (file_hdr->c_name, file_hdr->c_mode); - } - else -- { -- if (!no_chown_flag && (existing_mode & 077) != 0 -- && chmod (file_hdr->c_name, existing_mode & 07700) < 0) -- { -- error (0, errno, "%s: chmod", file_hdr->c_name); -- return; -- } -- res = 0; -- } -+ res = 0; - if (res < 0 && create_dir_flag) - { - create_all_directories (file_hdr->c_name); -- res = mkdir (file_hdr->c_name, file_hdr->c_mode & ~077); -+ res = mkdir (file_hdr->c_name, file_hdr->c_mode); - } - if (res < 0) - { -@@ -702,12 +692,12 @@ - return; - } - -- res = mknod (file_hdr->c_name, file_hdr->c_mode & ~077, -+ res = mknod (file_hdr->c_name, file_hdr->c_mode, - makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min)); - if (res < 0 && create_dir_flag) - { - create_all_directories (file_hdr->c_name); -- res = mknod (file_hdr->c_name, file_hdr->c_mode & ~077, -+ res = mknod (file_hdr->c_name, file_hdr->c_mode, - makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min)); - } - if (res < 0) -@@ -782,10 +772,9 @@ - copyin_file (struct cpio_file_stat* file_hdr, int in_file_des) - { - int existing_dir=0; -- mode_t existing_mode; - - if (!to_stdout_option -- && try_existing_file (file_hdr, in_file_des, &existing_dir, &existing_mode) < 0) -+ && try_existing_file (file_hdr, in_file_des, &existing_dir) < 0) - return; - - /* Do the real copy or link. */ -@@ -796,7 +785,7 @@ - break; - - case CP_IFDIR: -- copyin_directory(file_hdr, existing_dir, existing_mode); -+ copyin_directory (file_hdr, existing_dir); - break; - - case CP_IFCHR: -@@ -1576,8 +1565,6 @@ - if (dot_flag) - fputc ('\n', stderr); - -- apply_delayed_set_stat (); -- - if (append_flag) - return; - ---- cpio-2.9/src/copypass.c -+++ cpio-2.9/src/copypass.c -@@ -239,23 +239,15 @@ - cdf_flag = 1; - } - #endif -- res = mkdir (output_name.ds_string, in_file_stat.st_mode & ~077); -+ res = mkdir (output_name.ds_string, in_file_stat.st_mode); - - } - else -- { -- if (!no_chown_flag && (out_file_stat.st_mode & 077) != 0 -- && chmod (output_name.ds_string, out_file_stat.st_mode & 07700) < 0) -- { -- error (0, errno, "%s: chmod", output_name.ds_string); -- continue; -- } -- res = 0; -- } -+ res = 0; - if (res < 0 && create_dir_flag) - { - create_all_directories (output_name.ds_string); -- res = mkdir (output_name.ds_string, in_file_stat.st_mode & ~077); -+ res = mkdir (output_name.ds_string, in_file_stat.st_mode); - } - if (res < 0) - { -@@ -298,12 +290,12 @@ - - if (link_res < 0) - { -- res = mknod (output_name.ds_string, in_file_stat.st_mode & ~077, -+ res = mknod (output_name.ds_string, in_file_stat.st_mode, - in_file_stat.st_rdev); - if (res < 0 && create_dir_flag) - { - create_all_directories (output_name.ds_string); -- res = mknod (output_name.ds_string, in_file_stat.st_mode & ~077, -+ res = mknod (output_name.ds_string, in_file_stat.st_mode, - in_file_stat.st_rdev); - } - if (res < 0) -@@ -373,8 +365,6 @@ - if (dot_flag) - fputc ('\n', stderr); - -- apply_delayed_set_stat (); -- - if (!quiet_flag) - { - size_t blocks = (output_bytes + io_block_size - 1) / io_block_size; ---- cpio-2.9/src/extern.h -+++ cpio-2.9/src/extern.h -@@ -140,8 +140,8 @@ +Redhat-bugzilla: 430835 + +* revert make_path code to previous state, which worked better +* this can be dropped when permission issues are solved in upstream + + +diff -up cpio-2.9/src/extern.h.dir_perm cpio-2.9/src/extern.h +--- cpio-2.9/src/extern.h.dir_perm 2007-06-28 14:59:38.000000000 +0200 ++++ cpio-2.9/src/extern.h 2008-03-03 11:57:43.000000000 +0100 +@@ -140,8 +140,8 @@ void process_args (int argc, char *argv[ void initialize_buffers (void); /* makepath.c */ @@ -168,9 +18,36 @@ /* tar.c */ void write_out_tar_header (struct cpio_file_stat *file_hdr, int out_des); ---- cpio-2.9/src/makepath.c -+++ cpio-2.9/src/makepath.c -@@ -36,8 +36,10 @@ +diff -up cpio-2.9/src/util.c.dir_perm cpio-2.9/src/util.c +--- cpio-2.9/src/util.c.dir_perm 2007-06-28 15:04:51.000000000 +0200 ++++ cpio-2.9/src/util.c 2008-03-03 11:45:00.000000000 +0100 +@@ -618,14 +618,7 @@ create_all_directories (char *name) + error (2, 0, _("virtual memory exhausted")); + + if (dir[0] != '.' || dir[1] != '\0') +- { +- const char *fmt; +- if (warn_option & CPIO_WARN_INTERDIR) +- fmt = _("Creating intermediate directory `%s'"); +- else +- fmt = NULL; +- make_path (dir, -1, -1, fmt); +- } ++ make_path (dir, mode, 0700, -1, -1, (char *) NULL); + + free (dir); + } +diff -up cpio-2.9/src/makepath.c.dir_perm cpio-2.9/src/makepath.c +--- cpio-2.9/src/makepath.c.dir_perm 2007-06-28 15:09:47.000000000 +0200 ++++ cpio-2.9/src/makepath.c 2008-03-03 11:45:00.000000000 +0100 +@@ -29,15 +29,14 @@ + #include + #include + #include +-#include "cpiohdr.h" +-#include "dstring.h" +-#include "extern.h" + /* Ensure that the directory ARGPATH exists. Remove any trailing slashes from ARGPATH before calling this function. @@ -240,7 +117,7 @@ while (*slash == '/') slash++; while ((slash = strchr (slash, '/'))) -@@ -91,9 +112,10 @@ +@@ -91,9 +112,10 @@ make_path (char *argpath, *(slash -1) = '\0'; } #endif @@ -252,7 +129,7 @@ return 1; } else -@@ -101,18 +123,24 @@ +@@ -101,18 +123,24 @@ make_path (char *argpath, if (verbose_fmt_string != NULL) error (0, 0, verbose_fmt_string, dirpath); @@ -287,7 +164,7 @@ #ifdef HPUX_CDF if (iscdf) { -@@ -129,6 +157,7 @@ +@@ -129,6 +157,7 @@ make_path (char *argpath, else if (!S_ISDIR (stats.st_mode)) { error (0, 0, _("`%s' exists but is not a directory"), dirpath); @@ -295,7 +172,7 @@ return 1; } -@@ -143,7 +172,7 @@ +@@ -143,7 +172,7 @@ make_path (char *argpath, /* We're done making leading directories. Make the final component of the path. */ @@ -304,7 +181,7 @@ { /* In some cases, if the final component in dirpath was `.' then we just got an EEXIST error from that last mkdir(). If that's -@@ -153,24 +182,51 @@ +@@ -153,24 +182,51 @@ make_path (char *argpath, (!S_ISDIR (stats.st_mode) ) ) { error (0, errno, _("cannot make directory `%s'"), dirpath); @@ -368,7 +245,7 @@ } else { -@@ -179,10 +235,33 @@ +@@ -179,10 +235,33 @@ make_path (char *argpath, if (!S_ISDIR (stats.st_mode)) { error (0, 0, _("`%s' exists but is not a directory"), dirpath); @@ -402,21 +279,3 @@ + umask (oldmask); return retval; } ---- cpio-2.9/src/util.c -+++ cpio-2.9/src/util.c -@@ -618,14 +618,7 @@ - error (2, 0, _("virtual memory exhausted")); - - if (dir[0] != '.' || dir[1] != '\0') -- { -- const char *fmt; -- if (warn_option & CPIO_WARN_INTERDIR) -- fmt = _("Creating intermediate directory `%s'"); -- else -- fmt = NULL; -- make_path (dir, -1, -1, fmt); -- } -+ make_path (dir, mode, 0700, -1, -1, (char *) NULL); - - free (dir); - } diff --git a/cpio-2.10-eof_tape_handling.patch b/cpio-eof_tape_handling.patch similarity index 100% rename from cpio-2.10-eof_tape_handling.patch rename to cpio-eof_tape_handling.patch diff --git a/cpio-2.10-mt.patch b/cpio-mt.patch similarity index 89% rename from cpio-2.10-mt.patch rename to cpio-mt.patch index 1adbf7f..c2e1139 100644 --- a/cpio-2.10-mt.patch +++ b/cpio-mt.patch @@ -103,7 +103,7 @@ Index: src/Makefile.am =================================================================== --- src/Makefile.am.orig +++ src/Makefile.am -@@ -18,7 +18,7 @@ +@@ -19,7 +19,7 @@ INCLUDES=-I. -I.. -I$(top_srcdir)/gnu -I$(top_builddir)/gnu -I$(top_srcdir)/lib -I$(top_builddir)/lib @@ -116,16 +116,16 @@ Index: src/copyin.c =================================================================== --- src/copyin.c.orig +++ src/copyin.c -@@ -771,7 +771,7 @@ copyin_link(struct cpio_file_stat *file_ +@@ -689,7 +689,7 @@ copyin_link(struct cpio_file_stat *file_ static void - copyin_file (struct cpio_file_stat* file_hdr, int in_file_des) + copyin_file (struct cpio_file_stat *file_hdr, int in_file_des) { - int existing_dir; + int existing_dir=0; if (!to_stdout_option && try_existing_file (file_hdr, in_file_des, &existing_dir) < 0) -@@ -1360,6 +1360,7 @@ process_copy_in () +@@ -1278,6 +1278,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 +133,7 @@ Index: src/copyin.c newdir_umask = umask (0); /* Reset umask to preserve modes of created files */ -@@ -1468,8 +1469,10 @@ process_copy_in () +@@ -1386,8 +1387,10 @@ process_copy_in () for (i = 0; i < num_patterns && skip_file == copy_matching_files; i++) { @@ -149,7 +149,7 @@ Index: src/mt.c =================================================================== --- src/mt.c.orig +++ src/mt.c -@@ -17,6 +17,10 @@ +@@ -18,6 +18,10 @@ 02110-1301 USA */ @@ -160,7 +160,7 @@ Index: src/mt.c /* If -f is not given, the environment variable TAPE is used; if that is not set, a default device defined in sys/mtio.h is used. -@@ -51,9 +55,51 @@ +@@ -52,9 +56,51 @@ retension Rewind the tape, then wind it to the end of the reel, then rewind it again. erase Erase the tape. @@ -212,9 +212,9 @@ Index: src/mt.c #include #include -@@ -105,6 +151,85 @@ int atoi (); - void exit (); - #endif +@@ -90,6 +136,110 @@ + #define MT_EXIT_INVOP 1 + #define MT_EXIT_FAILURE 2 +#if defined(linux) || defined(__linux) +#define MTDATCOMP 1000 /* Random unused number. */ @@ -294,11 +294,36 @@ Index: src/mt.c + {-1, NULL}}; +#endif + ++char *cbnames[] = ++{ ++#ifdef MT_ST_BOOLEANS ++ "stoptions", ++#endif ++#ifdef MT_ST_WRITE_THRESHOLD ++ "stwrthreshold", ++#endif ++ NULL ++}; + - char *opnames[] = ++int count_bits[] = ++{ ++#ifdef MT_ST_BOOLEANS ++ MT_ST_BOOLEANS, ++#endif ++#ifdef MT_ST_WRITE_THRESHOLD ++ MT_ST_WRITE_THRESHOLD, ++#endif ++ 0 ++}; ++ ++#ifdef MT_TAPE_INFO ++ struct mt_tape_info tapes[] = MT_TAPE_INFO; ++#endif ++ + char const * const opnames[] = { - "eof", "weof", "fsf", "bsf", "fsr", "bsr", -@@ -114,6 +239,8 @@ char *opnames[] = + "eof", +@@ -108,6 +258,8 @@ char const * const opnames[] = #endif #ifdef MTEOM "eom", @@ -307,7 +332,7 @@ Index: src/mt.c #endif #ifdef MTRETEN "retension", -@@ -128,6 +255,39 @@ char *opnames[] = +@@ -122,6 +274,39 @@ char const * const opnames[] = #ifdef MTSEEK "seek", #endif @@ -347,7 +372,7 @@ Index: src/mt.c NULL }; -@@ -141,6 +301,8 @@ short operations[] = +@@ -144,6 +329,8 @@ short operations[] = #endif #ifdef MTEOM MTEOM, @@ -356,7 +381,7 @@ Index: src/mt.c #endif #ifdef MTRETEN MTRETEN, -@@ -155,9 +317,69 @@ short operations[] = +@@ -158,6 +345,39 @@ short operations[] = #ifdef MTSEEK MTSEEK, #endif @@ -393,63 +418,35 @@ Index: src/mt.c +#ifdef MTDENS + MTDENS, +#endif - 0 }; -+char *cbnames[] = -+{ -+#ifdef MT_ST_BOOLEANS -+ "stoptions", -+#endif -+#ifdef MT_ST_WRITE_THRESHOLD -+ "stwrthreshold", -+#endif -+ NULL -+}; -+ -+int count_bits[] = -+{ -+#ifdef MT_ST_BOOLEANS -+ MT_ST_BOOLEANS, -+#endif -+#ifdef MT_ST_WRITE_THRESHOLD -+ MT_ST_WRITE_THRESHOLD, -+#endif -+ 0 -+}; -+ -+#ifdef MT_TAPE_INFO -+ struct mt_tape_info tapes[] = MT_TAPE_INFO; -+#endif -+ -+ - struct option longopts[] = - { - {"file", 1, NULL, 'f'}, -@@ -200,10 +422,22 @@ void + ARGMATCH_VERIFY (opnames, operations); +@@ -286,10 +506,23 @@ void print_status (char *dev, int desc) { struct mtget status; -+#ifdef MT_TAPE_INFO -+ struct mt_tape_info *mt; -+#endif - +- ++ #ifdef MT_TAPE_INFO ++ struct mt_tape_info *mt; ++ #endif ++ if (rmtioctl (desc, MTIOCGET, (char*)&status) == -1) - error (2, errno, _("%s: rmtioctl failed"), dev); + error (MT_EXIT_FAILURE, errno, _("%s: rmtioctl failed"), dev); -+#ifdef MT_TAPE_INFO -+ for (mt = tapes; mt->t_type; mt++) -+ if (mt->t_type == status.mt_type) break; -+ if (mt->t_type != 0) -+ { -+ printf ("drive type = %s\n", mt->t_name); -+ } -+ else -+#endif ++ #ifdef MT_TAPE_INFO ++ for (mt = tapes; mt->t_type; mt++) ++ if (mt->t_type == status.mt_type) break; ++ if (mt->t_type != 0) ++ { ++ printf ("drive type = %s\n", mt->t_name); ++ } ++ 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); -@@ -217,7 +451,177 @@ print_status (char *dev, int desc) +@@ -303,7 +536,177 @@ print_status (char *dev, int desc) printf ("file number = %d\n", (int) status.mt_fileno); printf ("block number = %d\n", (int) status.mt_blkno); #endif @@ -606,7 +603,7 @@ Index: src/mt.c + printf("Compression off.\n"); + + return 1; - } ++} +#endif + +#ifdef MTTELL @@ -621,24 +618,24 @@ Index: src/mt.c + error (2, errno, "%s", dev); + printf("At block %ld.\n", position.mt_blkno); + -+} + } +#endif + void - usage (FILE *fp,int status) -@@ -276,7 +680,7 @@ main (int argc, char **argv) - if (optind == argc) - usage (stderr, 1); + fatal_exit () +@@ -314,7 +717,7 @@ fatal_exit () + int + main (int argc, char **argv) + { +- int tapedesc; ++ int tapedesc,i; -- i = argmatch (argv[optind], opnames); -+ i = argmatch (argv[optind], opnames,NULL,0); - if (i < 0) - { - argmatch_invalid ("tape operation", argv[optind], i); -@@ -308,10 +712,29 @@ main (int argc, char **argv) - #endif - } + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); +@@ -327,13 +730,32 @@ main (int argc, char **argv) + if (argp_parse (&argp, argc, argv, ARGP_IN_ORDER, NULL, NULL)) + exit (MT_EXIT_INVOP); +#ifdef MTDENS + if (operation == MTDENS) @@ -650,24 +647,28 @@ Index: src/mt.c + } +#endif + - if ( (operation == MTWEOF) + switch (operation) + { + case MTWEOF: #ifdef MTERASE - || (operation == MTERASE) + case MTERASE: #endif +- tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); +#ifdef MTWSM -+ || (operation == MTWSM) ++ case MTWSM: +#endif +#ifdef MTSETDRVBUFFER -+ || (operation == MTSETDRVBUFFER) ++ case MTSETDRVBUFFER: +#endif +#ifdef MTDATCOMP -+ || (operation == MTDATCOMP) ++ case MTDATCOMP: +#endif - ) - tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); - else -@@ -320,6 +743,17 @@ main (int argc, char **argv) - error (1, errno, _("%s: rmtopen failed"), tapedev); ++ tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); + break; + + default: +@@ -344,6 +766,17 @@ main (int argc, char **argv) + error (MT_EXIT_INVOP, errno, _("%s: rmtopen failed"), tapedev); check_type (tapedev, tapedesc); +#ifdef MTDATCOMP @@ -684,11 +685,11 @@ Index: src/mt.c if (operation == MTASF) { perform_operation (tapedev, tapedesc, MTREW, 1); -@@ -328,6 +762,7 @@ main (int argc, char **argv) +@@ -352,6 +785,7 @@ main (int argc, char **argv) perform_operation (tapedev, tapedesc, operation, count); if (operation == MTNOP) print_status (tapedev, tapedesc); + } if (rmtclose (tapedesc) == -1) - error (2, errno, _("%s: rmtclose failed"), tapedev); + error (MT_EXIT_FAILURE, errno, _("%s: rmtclose failed"), tapedev); diff --git a/cpio-2.10-open_nonblock.patch b/cpio-open_nonblock.patch similarity index 50% rename from cpio-2.10-open_nonblock.patch rename to cpio-open_nonblock.patch index 8f78ad0..8e4a076 100644 --- a/cpio-2.10-open_nonblock.patch +++ b/cpio-open_nonblock.patch @@ -1,20 +1,26 @@ ---- src/mt.c +Index: src/mt.c +=================================================================== +--- src/mt.c.orig +++ src/mt.c -@@ -694,9 +694,9 @@ - || (operation == MTDATCOMP) +@@ -723,11 +723,11 @@ main (int argc, char **argv) + #ifdef MTDATCOMP + case MTDATCOMP: #endif - ) -- tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); -+ tapedesc = rmtopen (tapedev, O_WRONLY | O_NONBLOCK, 0, rsh_command_option); - else -- tapedesc = rmtopen (tapedev, O_RDONLY, 0, rsh_command_option); -+ tapedesc = rmtopen (tapedev, O_RDONLY | O_NONBLOCK, 0, rsh_command_option); +- 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) - error (1, errno, _("%s: rmtopen failed"), tapedev); - check_type (tapedev, tapedesc); ---- src/util.c +Index: src/util.c +=================================================================== +--- src/util.c.orig +++ src/util.c -@@ -753,14 +753,14 @@ +@@ -767,14 +767,14 @@ open_archive (char *file) copy_in = process_copy_in; if (copy_function == copy_in) diff --git a/cpio-2.10-use_new_ascii_format.patch b/cpio-use_new_ascii_format.patch similarity index 100% rename from cpio-2.10-use_new_ascii_format.patch rename to cpio-use_new_ascii_format.patch diff --git a/cpio-2.10-use_sbin_rmt.patch b/cpio-use_sbin_rmt.patch similarity index 100% rename from cpio-2.10-use_sbin_rmt.patch rename to cpio-use_sbin_rmt.patch diff --git a/cpio.changes b/cpio.changes index bb19032..88b570a 100644 --- a/cpio.changes +++ b/cpio.changes @@ -1,3 +1,18 @@ +------------------------------------------------------------------- +Fri Mar 12 16:34:39 UTC 2010 - mseben@novell.com + +- updated to 2.11 + * Fix mt build. + * In copy-in mode, if directory attributes do not permit writing to it, + setting them is delayed until the end of run. This allows to + correctly extract files in such directories. + * In copy-in mode, permissions of a directory are restored if it + appears in the file list after files in it (e.g. in listings + produced by find . -depth). This fixes debian bug #458079. + * Fix possible memory overflow in the rmt client code (CVE-2010-0624). +- deprecated heap_overflow_in_rtapelib.patch,chmodRaceC.patch and + include_fatal_c.patch + ------------------------------------------------------------------- Wed Mar 3 09:29:23 UTC 2010 - mseben@novell.com diff --git a/cpio.spec b/cpio.spec index 0d2c23d..67a54a0 100644 --- a/cpio.spec +++ b/cpio.spec @@ -23,29 +23,24 @@ Url: http://www.gnu.org/software/cpio/cpio.html License: GPLv3 Group: Productivity/Archiving/Compression AutoReqProv: on -Version: 2.10 +Version: 2.11 Release: 6 Summary: A Backup and Archiving Utility Source: %{name}-%{version}.tar.bz2 -Patch2: %{name}-%{version}-use_new_ascii_format.patch -Patch3: %{name}-%{version}-mt.patch -Patch4: %{name}-%{version}-use_sbin_rmt.patch -Patch5: %{name}-%{version}-open_nonblock.patch -Patch7: %{name}-%{version}-chmodRaceC.patch +Patch2: %{name}-use_new_ascii_format.patch +#oouch what a ...?! pieces of code grabed from mt_st package to add missing functionality (e.g. density info) +Patch3: %{name}-mt.patch +Patch4: %{name}-use_sbin_rmt.patch +Patch5: %{name}-open_nonblock.patch #patch dir_perm reverts some things which were added by patch #7 chmodRaceC -Patch14: %{name}-%{version}-dir_perm.patch -Patch15: %{name}-%{version}-eof_tape_handling.patch +Patch14: %{name}-dir_perm.patch +Patch15: %{name}-eof_tape_handling.patch # make posibble to have device nodes with major number > 127 # Red Hat Bugzilla #450109 -Patch17: %{name}-%{version}-dev_number.patch -Patch18: %{name}-%{version}-default_tape_dev.patch -#PATCH-FIX-UPSTREAM include_fatal_c.patch fix undefined ref in mt build -Patch19: %{name}-%{version}-include_fatal_c.patch +Patch17: %{name}-dev_number.patch +Patch18: %{name}-default_tape_dev.patch #PATCH-FIX-UPSTREAM cpio-2.10-close_files_after_copy.patch -Patch20: %{name}-%{version}-close_files_after_copy.patch -#fix possible heap overflow in rtapelib.c bnc#579475 -Patch21: %{name}-%{version}-heap_overflow_in_rtapelib.patch -PreReq: %install_info_prereq +Patch20: %{name}-close_files_after_copy.patch PreReq: %install_info_prereq BuildRoot: %{_tmppath}/%{name}-%{version}-build Requires: %{name}-lang = %{version} @@ -76,14 +71,11 @@ Authors: %patch3 %patch4 %patch5 -%patch7 %patch14 -p1 %patch15 %patch17 %patch18 -%patch19 %patch20 -%patch21 -p1 #chmod 755 . #chmod u+w * #chmod a+r * From 4b644cb704573dcb41f1e2afc055626c86a75cda1eeda056ff4eca229257cc6e Mon Sep 17 00:00:00 2001 From: OBS User autobuild Date: Thu, 25 Mar 2010 23:54:27 +0000 Subject: [PATCH 3/4] Accepting request 35735 from Archiving checked in (request 35735) OBS-URL: https://build.opensuse.org/request/show/35735 OBS-URL: https://build.opensuse.org/package/show/Archiving/cpio?expand=0&rev=20 --- cpio-2.10-chmodRaceC.patch | 139 +++++++++++ ... => cpio-2.10-close_files_after_copy.patch | 24 +- ....patch => cpio-2.10-default_tape_dev.patch | 27 +- ...number.patch => cpio-2.10-dev_number.patch | 0 ...dir_perm.patch => cpio-2.10-dir_perm.patch | 233 ++++++++++++++---- ...patch => cpio-2.10-eof_tape_handling.patch | 0 cpio-2.10-heap_overflow_in_rtapelib.patch | 52 ++++ cpio-2.10-include_fatal_c.patch | 8 + cpio-mt.patch => cpio-2.10-mt.patch | 181 +++++++------- ...ock.patch => cpio-2.10-open_nonblock.patch | 32 +-- ...ch => cpio-2.10-use_new_ascii_format.patch | 0 ..._rmt.patch => cpio-2.10-use_sbin_rmt.patch | 0 cpio-2.10.tar.bz2 | 3 + cpio-2.11.tar.bz2 | 3 - cpio.changes | 15 -- cpio.spec | 30 ++- 16 files changed, 535 insertions(+), 212 deletions(-) create mode 100644 cpio-2.10-chmodRaceC.patch rename cpio-close_files_after_copy.patch => cpio-2.10-close_files_after_copy.patch (58%) rename cpio-default_tape_dev.patch => cpio-2.10-default_tape_dev.patch (63%) rename cpio-dev_number.patch => cpio-2.10-dev_number.patch (100%) rename cpio-dir_perm.patch => cpio-2.10-dir_perm.patch (58%) rename cpio-eof_tape_handling.patch => cpio-2.10-eof_tape_handling.patch (100%) create mode 100644 cpio-2.10-heap_overflow_in_rtapelib.patch create mode 100644 cpio-2.10-include_fatal_c.patch rename cpio-mt.patch => cpio-2.10-mt.patch (89%) rename cpio-open_nonblock.patch => cpio-2.10-open_nonblock.patch (50%) rename cpio-use_new_ascii_format.patch => cpio-2.10-use_new_ascii_format.patch (100%) rename cpio-use_sbin_rmt.patch => cpio-2.10-use_sbin_rmt.patch (100%) create mode 100644 cpio-2.10.tar.bz2 delete mode 100644 cpio-2.11.tar.bz2 diff --git a/cpio-2.10-chmodRaceC.patch b/cpio-2.10-chmodRaceC.patch new file mode 100644 index 0000000..a1dad8a --- /dev/null +++ b/cpio-2.10-chmodRaceC.patch @@ -0,0 +1,139 @@ +--- src/copypass.c ++++ src/copypass.c +@@ -239,15 +239,23 @@ process_copy_pass () + cdf_flag = 1; + } + #endif +- res = mkdir (output_name.ds_string, in_file_stat.st_mode); ++ res = mkdir (output_name.ds_string, in_file_stat.st_mode & ~077); + + } + else +- res = 0; ++ { ++ if (!no_chown_flag && (out_file_stat.st_mode & 077) != 0 ++ && chmod (output_name.ds_string, out_file_stat.st_mode & 07700) < 0) ++ { ++ error (0, errno, "%s: chmod", output_name.ds_string); ++ continue; ++ } ++ res = 0; ++ } + if (res < 0 && create_dir_flag) + { + create_all_directories (output_name.ds_string); +- res = mkdir (output_name.ds_string, in_file_stat.st_mode); ++ res = mkdir (output_name.ds_string, in_file_stat.st_mode & ~077); + } + if (res < 0) + { +@@ -290,12 +298,12 @@ process_copy_pass () + + if (link_res < 0) + { +- res = mknod (output_name.ds_string, in_file_stat.st_mode, ++ res = mknod (output_name.ds_string, in_file_stat.st_mode & ~077, + in_file_stat.st_rdev); + if (res < 0 && create_dir_flag) + { + create_all_directories (output_name.ds_string); +- res = mknod (output_name.ds_string, in_file_stat.st_mode, ++ res = mknod (output_name.ds_string, in_file_stat.st_mode & ~077, + in_file_stat.st_rdev); + } + if (res < 0) +--- src/copyin.c ++++ src/copyin.c +@@ -186,11 +186,12 @@ list_file(struct cpio_file_stat* file_hd + + static int + try_existing_file (struct cpio_file_stat* file_hdr, int in_file_des, +- int *existing_dir) ++ int *existing_dir, mode_t *existing_mode) + { + struct stat file_stat; + + *existing_dir = false; ++ *existing_mode = 0; + if (lstat (file_hdr->c_name, &file_stat) == 0) + { + if (S_ISDIR (file_stat.st_mode) +@@ -200,6 +201,7 @@ try_existing_file (struct cpio_file_stat + we are trying to create, don't complain about + it. */ + *existing_dir = true; ++ *existing_mode = file_stat.st_mode; + return 0; + } + else if (!unconditional_flag +@@ -567,7 +569,7 @@ copyin_regular_file (struct cpio_file_st + } + + static void +-copyin_directory (struct cpio_file_stat *file_hdr, int existing_dir) ++copyin_directory (struct cpio_file_stat *file_hdr, int existing_dir, mode_t existing_mode) + { + int res; /* Result of various function calls. */ + #ifdef HPUX_CDF +@@ -610,14 +612,22 @@ copyin_directory (struct cpio_file_stat + cdf_flag = 1; + } + #endif +- res = mkdir (file_hdr->c_name, file_hdr->c_mode); ++ res = mkdir (file_hdr->c_name, file_hdr->c_mode & ~077); + } + else +- res = 0; ++ { ++ if (!no_chown_flag && (existing_mode & 077) != 0 ++ && chmod (file_hdr->c_name, existing_mode & 07700) < 0) ++ { ++ error (0, errno, "%s: chmod", file_hdr->c_name); ++ return; ++ } ++ res = 0; ++ } + if (res < 0 && create_dir_flag) + { + create_all_directories (file_hdr->c_name); +- res = mkdir (file_hdr->c_name, file_hdr->c_mode); ++ res = mkdir (file_hdr->c_name, file_hdr->c_mode & ~077); + } + if (res < 0) + { +@@ -692,12 +702,12 @@ copyin_device (struct cpio_file_stat* fi + return; + } + +- res = mknod (file_hdr->c_name, file_hdr->c_mode, ++ res = mknod (file_hdr->c_name, file_hdr->c_mode & ~077, + makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min)); + if (res < 0 && create_dir_flag) + { + create_all_directories (file_hdr->c_name); +- res = mknod (file_hdr->c_name, file_hdr->c_mode, ++ res = mknod (file_hdr->c_name, file_hdr->c_mode & ~077, + makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min)); + } + if (res < 0) +@@ -772,9 +782,10 @@ static void + copyin_file (struct cpio_file_stat* file_hdr, int in_file_des) + { + int existing_dir=0; ++ mode_t existing_mode; + + if (!to_stdout_option +- && try_existing_file (file_hdr, in_file_des, &existing_dir) < 0) ++ && try_existing_file (file_hdr, in_file_des, &existing_dir, &existing_mode) < 0) + return; + + /* Do the real copy or link. */ +@@ -785,7 +796,7 @@ copyin_file (struct cpio_file_stat* file + break; + + case CP_IFDIR: +- copyin_directory (file_hdr, existing_dir); ++ copyin_directory(file_hdr, existing_dir, existing_mode); + break; + + case CP_IFCHR: diff --git a/cpio-close_files_after_copy.patch b/cpio-2.10-close_files_after_copy.patch similarity index 58% rename from cpio-close_files_after_copy.patch rename to cpio-2.10-close_files_after_copy.patch index a819eac..be033b2 100644 --- a/cpio-close_files_after_copy.patch +++ b/cpio-2.10-close_files_after_copy.patch @@ -2,24 +2,22 @@ Index: src/copyin.c =================================================================== --- src/copyin.c.orig +++ src/copyin.c -@@ -1484,7 +1484,20 @@ process_copy_in () +@@ -1565,6 +1565,19 @@ process_copy_in () + if (dot_flag) fputc ('\n', stderr); - apply_delayed_set_stat (); -- -+ + if (tty_in) -+ { -+ fclose(tty_in); -+ } ++ { ++ fclose(tty_in); ++ } + if (tty_out) -+ { -+ fclose(tty_out); -+ } ++ { ++ fclose(tty_out); ++ } + if (rename_in) -+ { -+ fclose(rename_in); -+ } ++ { ++ fclose(rename_in); ++ } + if (append_flag) return; diff --git a/cpio-default_tape_dev.patch b/cpio-2.10-default_tape_dev.patch similarity index 63% rename from cpio-default_tape_dev.patch rename to cpio-2.10-default_tape_dev.patch index f977ccc..d23c8ef 100644 --- a/cpio-default_tape_dev.patch +++ b/cpio-2.10-default_tape_dev.patch @@ -1,17 +1,12 @@ -Index: src/mt.c -=================================================================== ---- src/mt.c.orig +--- src/mt.c +++ src/mt.c -@@ -413,11 +413,18 @@ parse_opt (int key, char *arg, struct ar - { - tapedev = getenv ("TAPE"); - if (tapedev == NULL) +@@ -664,11 +664,20 @@ + { + tapedev = getenv ("TAPE"); + if (tapedev == NULL) -#ifdef DEFTAPE /* From sys/mtio.h. */ -- tapedev = DEFTAPE; +- tapedev = DEFTAPE; -#else -- error (MT_EXIT_INVOP, 0, _("no tape device specified")); --#endif -+ +/* Suse doesn't have /dev/tape as link to /dev/nst0 any more. +Instead it uses udev and creates different names in /dev/tape/by-id/ directory. +If it is SCSI tape storage then it creates /dev/tape/by-id/scsi--nst @@ -23,6 +18,10 @@ Index: src/mt.c +/* #ifdef DEFTAPE * From sys/mtio.h. * */ +# define DEFSUSETAPE "/dev/nst0" + tapedev = DEFSUSETAPE; - } - break; - ++/* #else + error (1, 0, _("no tape device specified")); +-#endif ++#endif */ + } + + #ifdef MTDENS diff --git a/cpio-dev_number.patch b/cpio-2.10-dev_number.patch similarity index 100% rename from cpio-dev_number.patch rename to cpio-2.10-dev_number.patch diff --git a/cpio-dir_perm.patch b/cpio-2.10-dir_perm.patch similarity index 58% rename from cpio-dir_perm.patch rename to cpio-2.10-dir_perm.patch index 4325e95..93654ce 100644 --- a/cpio-dir_perm.patch +++ b/cpio-2.10-dir_perm.patch @@ -1,13 +1,163 @@ -Redhat-bugzilla: 430835 - -* revert make_path code to previous state, which worked better -* this can be dropped when permission issues are solved in upstream - - -diff -up cpio-2.9/src/extern.h.dir_perm cpio-2.9/src/extern.h ---- cpio-2.9/src/extern.h.dir_perm 2007-06-28 14:59:38.000000000 +0200 -+++ cpio-2.9/src/extern.h 2008-03-03 11:57:43.000000000 +0100 -@@ -140,8 +140,8 @@ void process_args (int argc, char *argv[ +--- cpio-2.9/src/copyin.c ++++ cpio-2.9/src/copyin.c +@@ -186,12 +186,11 @@ + + static int + try_existing_file (struct cpio_file_stat* file_hdr, int in_file_des, +- int *existing_dir, mode_t *existing_mode) ++ int *existing_dir) + { + struct stat file_stat; + + *existing_dir = false; +- *existing_mode = 0; + if (lstat (file_hdr->c_name, &file_stat) == 0) + { + if (S_ISDIR (file_stat.st_mode) +@@ -201,7 +200,6 @@ + we are trying to create, don't complain about + it. */ + *existing_dir = true; +- *existing_mode = file_stat.st_mode; + return 0; + } + else if (!unconditional_flag +@@ -569,7 +567,7 @@ + } + + static void +-copyin_directory (struct cpio_file_stat *file_hdr, int existing_dir, mode_t existing_mode) ++copyin_directory (struct cpio_file_stat *file_hdr, int existing_dir) + { + int res; /* Result of various function calls. */ + #ifdef HPUX_CDF +@@ -612,22 +610,14 @@ + cdf_flag = 1; + } + #endif +- res = mkdir (file_hdr->c_name, file_hdr->c_mode & ~077); ++ res = mkdir (file_hdr->c_name, file_hdr->c_mode); + } + else +- { +- if (!no_chown_flag && (existing_mode & 077) != 0 +- && chmod (file_hdr->c_name, existing_mode & 07700) < 0) +- { +- error (0, errno, "%s: chmod", file_hdr->c_name); +- return; +- } +- res = 0; +- } ++ res = 0; + if (res < 0 && create_dir_flag) + { + create_all_directories (file_hdr->c_name); +- res = mkdir (file_hdr->c_name, file_hdr->c_mode & ~077); ++ res = mkdir (file_hdr->c_name, file_hdr->c_mode); + } + if (res < 0) + { +@@ -702,12 +692,12 @@ + return; + } + +- res = mknod (file_hdr->c_name, file_hdr->c_mode & ~077, ++ res = mknod (file_hdr->c_name, file_hdr->c_mode, + makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min)); + if (res < 0 && create_dir_flag) + { + create_all_directories (file_hdr->c_name); +- res = mknod (file_hdr->c_name, file_hdr->c_mode & ~077, ++ res = mknod (file_hdr->c_name, file_hdr->c_mode, + makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min)); + } + if (res < 0) +@@ -782,10 +772,9 @@ + copyin_file (struct cpio_file_stat* file_hdr, int in_file_des) + { + int existing_dir=0; +- mode_t existing_mode; + + if (!to_stdout_option +- && try_existing_file (file_hdr, in_file_des, &existing_dir, &existing_mode) < 0) ++ && try_existing_file (file_hdr, in_file_des, &existing_dir) < 0) + return; + + /* Do the real copy or link. */ +@@ -796,7 +785,7 @@ + break; + + case CP_IFDIR: +- copyin_directory(file_hdr, existing_dir, existing_mode); ++ copyin_directory (file_hdr, existing_dir); + break; + + case CP_IFCHR: +@@ -1576,8 +1565,6 @@ + if (dot_flag) + fputc ('\n', stderr); + +- apply_delayed_set_stat (); +- + if (append_flag) + return; + +--- cpio-2.9/src/copypass.c ++++ cpio-2.9/src/copypass.c +@@ -239,23 +239,15 @@ + cdf_flag = 1; + } + #endif +- res = mkdir (output_name.ds_string, in_file_stat.st_mode & ~077); ++ res = mkdir (output_name.ds_string, in_file_stat.st_mode); + + } + else +- { +- if (!no_chown_flag && (out_file_stat.st_mode & 077) != 0 +- && chmod (output_name.ds_string, out_file_stat.st_mode & 07700) < 0) +- { +- error (0, errno, "%s: chmod", output_name.ds_string); +- continue; +- } +- res = 0; +- } ++ res = 0; + if (res < 0 && create_dir_flag) + { + create_all_directories (output_name.ds_string); +- res = mkdir (output_name.ds_string, in_file_stat.st_mode & ~077); ++ res = mkdir (output_name.ds_string, in_file_stat.st_mode); + } + if (res < 0) + { +@@ -298,12 +290,12 @@ + + if (link_res < 0) + { +- res = mknod (output_name.ds_string, in_file_stat.st_mode & ~077, ++ res = mknod (output_name.ds_string, in_file_stat.st_mode, + in_file_stat.st_rdev); + if (res < 0 && create_dir_flag) + { + create_all_directories (output_name.ds_string); +- res = mknod (output_name.ds_string, in_file_stat.st_mode & ~077, ++ res = mknod (output_name.ds_string, in_file_stat.st_mode, + in_file_stat.st_rdev); + } + if (res < 0) +@@ -373,8 +365,6 @@ + if (dot_flag) + fputc ('\n', stderr); + +- apply_delayed_set_stat (); +- + if (!quiet_flag) + { + size_t blocks = (output_bytes + io_block_size - 1) / io_block_size; +--- cpio-2.9/src/extern.h ++++ cpio-2.9/src/extern.h +@@ -140,8 +140,8 @@ void initialize_buffers (void); /* makepath.c */ @@ -18,36 +168,9 @@ diff -up cpio-2.9/src/extern.h.dir_perm cpio-2.9/src/extern.h /* tar.c */ void write_out_tar_header (struct cpio_file_stat *file_hdr, int out_des); -diff -up cpio-2.9/src/util.c.dir_perm cpio-2.9/src/util.c ---- cpio-2.9/src/util.c.dir_perm 2007-06-28 15:04:51.000000000 +0200 -+++ cpio-2.9/src/util.c 2008-03-03 11:45:00.000000000 +0100 -@@ -618,14 +618,7 @@ create_all_directories (char *name) - error (2, 0, _("virtual memory exhausted")); - - if (dir[0] != '.' || dir[1] != '\0') -- { -- const char *fmt; -- if (warn_option & CPIO_WARN_INTERDIR) -- fmt = _("Creating intermediate directory `%s'"); -- else -- fmt = NULL; -- make_path (dir, -1, -1, fmt); -- } -+ make_path (dir, mode, 0700, -1, -1, (char *) NULL); - - free (dir); - } -diff -up cpio-2.9/src/makepath.c.dir_perm cpio-2.9/src/makepath.c ---- cpio-2.9/src/makepath.c.dir_perm 2007-06-28 15:09:47.000000000 +0200 -+++ cpio-2.9/src/makepath.c 2008-03-03 11:45:00.000000000 +0100 -@@ -29,15 +29,14 @@ - #include - #include - #include --#include "cpiohdr.h" --#include "dstring.h" --#include "extern.h" - +--- cpio-2.9/src/makepath.c ++++ cpio-2.9/src/makepath.c +@@ -36,8 +36,10 @@ /* Ensure that the directory ARGPATH exists. Remove any trailing slashes from ARGPATH before calling this function. @@ -117,7 +240,7 @@ diff -up cpio-2.9/src/makepath.c.dir_perm cpio-2.9/src/makepath.c while (*slash == '/') slash++; while ((slash = strchr (slash, '/'))) -@@ -91,9 +112,10 @@ make_path (char *argpath, +@@ -91,9 +112,10 @@ *(slash -1) = '\0'; } #endif @@ -129,7 +252,7 @@ diff -up cpio-2.9/src/makepath.c.dir_perm cpio-2.9/src/makepath.c return 1; } else -@@ -101,18 +123,24 @@ make_path (char *argpath, +@@ -101,18 +123,24 @@ if (verbose_fmt_string != NULL) error (0, 0, verbose_fmt_string, dirpath); @@ -164,7 +287,7 @@ diff -up cpio-2.9/src/makepath.c.dir_perm cpio-2.9/src/makepath.c #ifdef HPUX_CDF if (iscdf) { -@@ -129,6 +157,7 @@ make_path (char *argpath, +@@ -129,6 +157,7 @@ else if (!S_ISDIR (stats.st_mode)) { error (0, 0, _("`%s' exists but is not a directory"), dirpath); @@ -172,7 +295,7 @@ diff -up cpio-2.9/src/makepath.c.dir_perm cpio-2.9/src/makepath.c return 1; } -@@ -143,7 +172,7 @@ make_path (char *argpath, +@@ -143,7 +172,7 @@ /* We're done making leading directories. Make the final component of the path. */ @@ -181,7 +304,7 @@ diff -up cpio-2.9/src/makepath.c.dir_perm cpio-2.9/src/makepath.c { /* In some cases, if the final component in dirpath was `.' then we just got an EEXIST error from that last mkdir(). If that's -@@ -153,24 +182,51 @@ make_path (char *argpath, +@@ -153,24 +182,51 @@ (!S_ISDIR (stats.st_mode) ) ) { error (0, errno, _("cannot make directory `%s'"), dirpath); @@ -245,7 +368,7 @@ diff -up cpio-2.9/src/makepath.c.dir_perm cpio-2.9/src/makepath.c } else { -@@ -179,10 +235,33 @@ make_path (char *argpath, +@@ -179,10 +235,33 @@ if (!S_ISDIR (stats.st_mode)) { error (0, 0, _("`%s' exists but is not a directory"), dirpath); @@ -279,3 +402,21 @@ diff -up cpio-2.9/src/makepath.c.dir_perm cpio-2.9/src/makepath.c + umask (oldmask); return retval; } +--- cpio-2.9/src/util.c ++++ cpio-2.9/src/util.c +@@ -618,14 +618,7 @@ + error (2, 0, _("virtual memory exhausted")); + + if (dir[0] != '.' || dir[1] != '\0') +- { +- const char *fmt; +- if (warn_option & CPIO_WARN_INTERDIR) +- fmt = _("Creating intermediate directory `%s'"); +- else +- fmt = NULL; +- make_path (dir, -1, -1, fmt); +- } ++ make_path (dir, mode, 0700, -1, -1, (char *) NULL); + + free (dir); + } diff --git a/cpio-eof_tape_handling.patch b/cpio-2.10-eof_tape_handling.patch similarity index 100% rename from cpio-eof_tape_handling.patch rename to cpio-2.10-eof_tape_handling.patch diff --git a/cpio-2.10-heap_overflow_in_rtapelib.patch b/cpio-2.10-heap_overflow_in_rtapelib.patch new file mode 100644 index 0000000..41d0626 --- /dev/null +++ b/cpio-2.10-heap_overflow_in_rtapelib.patch @@ -0,0 +1,52 @@ +From 9bc39283e4cc6ab9e5913ccbf766998eab4ff093 Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff +Date: Mon, 01 Mar 2010 08:49:03 +0000 +Subject: Bugfixes in rtapelib + +* lib/rmt.h (rmtcreat): Use fcntl O_ macros insead of +their hardcoded values. +* lib/rtapelib.c (rmt_read__,rmt_ioctl__): Prevent +potential overflow. +--- +diff --git a/lib/rmt.h b/lib/rmt.h +index 50f037c..2ce9dc5 100644 +--- a/lib/rmt.h ++++ b/lib/rmt.h +@@ -61,7 +61,7 @@ extern bool force_local_option; + + #define rmtcreat(dev_name, mode, command) \ + (_remdev (dev_name) \ +- ? rmt_open__ (dev_name, 1 | O_CREAT, __REM_BIAS, command) \ ++ ? rmt_open__ (dev_name, O_CREAT | O_WRONLY, __REM_BIAS, command) \ + : creat (dev_name, mode)) + + #define rmtlstat(dev_name, muffer) \ +diff --git a/lib/rtapelib.c b/lib/rtapelib.c +index 02ad1e7..cb645db 100644 +--- a/lib/rtapelib.c ++++ b/lib/rtapelib.c +@@ -573,7 +573,8 @@ rmt_read__ (int handle, char *buffer, size_t length) + + sprintf (command_buffer, "R%lu\n", (unsigned long) length); + if (do_command (handle, command_buffer) == -1 +- || (status = get_status (handle)) == SAFE_READ_ERROR) ++ || (status = get_status (handle)) == SAFE_READ_ERROR ++ || status > length) + return SAFE_READ_ERROR; + + for (counter = 0; counter < status; counter += rlen, buffer += rlen) +@@ -709,6 +710,12 @@ rmt_ioctl__ (int handle, int operation, char *argument) + || (status = get_status (handle), status == -1)) + return -1; + ++ if (status > sizeof (struct mtop)) ++ { ++ errno = EOVERFLOW; ++ return -1; ++ } ++ + for (; status > 0; status -= counter, argument += counter) + { + counter = safe_read (READ_SIDE (handle), argument, status); +-- +cgit v0.8.2.1 diff --git a/cpio-2.10-include_fatal_c.patch b/cpio-2.10-include_fatal_c.patch new file mode 100644 index 0000000..f06443a --- /dev/null +++ b/cpio-2.10-include_fatal_c.patch @@ -0,0 +1,8 @@ +--- lib/Makefile.am.orig 2009-07-09 09:41:26.000000000 +0200 ++++ lib/Makefile.am 2009-07-09 09:41:17.000000000 +0200 +@@ -37,4 +37,5 @@ + sysdep.c\ + system.h\ + error.c\ ++ ../src/fatal.c \ + names.c diff --git a/cpio-mt.patch b/cpio-2.10-mt.patch similarity index 89% rename from cpio-mt.patch rename to cpio-2.10-mt.patch index c2e1139..1adbf7f 100644 --- a/cpio-mt.patch +++ b/cpio-2.10-mt.patch @@ -103,7 +103,7 @@ Index: src/Makefile.am =================================================================== --- src/Makefile.am.orig +++ src/Makefile.am -@@ -19,7 +19,7 @@ +@@ -18,7 +18,7 @@ INCLUDES=-I. -I.. -I$(top_srcdir)/gnu -I$(top_builddir)/gnu -I$(top_srcdir)/lib -I$(top_builddir)/lib @@ -116,16 +116,16 @@ Index: src/copyin.c =================================================================== --- src/copyin.c.orig +++ src/copyin.c -@@ -689,7 +689,7 @@ copyin_link(struct cpio_file_stat *file_ +@@ -771,7 +771,7 @@ copyin_link(struct cpio_file_stat *file_ static void - copyin_file (struct cpio_file_stat *file_hdr, int in_file_des) + copyin_file (struct cpio_file_stat* file_hdr, int in_file_des) { - int existing_dir; + int existing_dir=0; if (!to_stdout_option && try_existing_file (file_hdr, in_file_des, &existing_dir) < 0) -@@ -1278,6 +1278,7 @@ process_copy_in () +@@ -1360,6 +1360,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 +133,7 @@ Index: src/copyin.c newdir_umask = umask (0); /* Reset umask to preserve modes of created files */ -@@ -1386,8 +1387,10 @@ process_copy_in () +@@ -1468,8 +1469,10 @@ process_copy_in () for (i = 0; i < num_patterns && skip_file == copy_matching_files; i++) { @@ -149,7 +149,7 @@ Index: src/mt.c =================================================================== --- src/mt.c.orig +++ src/mt.c -@@ -18,6 +18,10 @@ +@@ -17,6 +17,10 @@ 02110-1301 USA */ @@ -160,7 +160,7 @@ Index: src/mt.c /* If -f is not given, the environment variable TAPE is used; if that is not set, a default device defined in sys/mtio.h is used. -@@ -52,9 +56,51 @@ +@@ -51,9 +55,51 @@ retension Rewind the tape, then wind it to the end of the reel, then rewind it again. erase Erase the tape. @@ -212,9 +212,9 @@ Index: src/mt.c #include #include -@@ -90,6 +136,110 @@ - #define MT_EXIT_INVOP 1 - #define MT_EXIT_FAILURE 2 +@@ -105,6 +151,85 @@ int atoi (); + void exit (); + #endif +#if defined(linux) || defined(__linux) +#define MTDATCOMP 1000 /* Random unused number. */ @@ -294,36 +294,11 @@ Index: src/mt.c + {-1, NULL}}; +#endif + -+char *cbnames[] = -+{ -+#ifdef MT_ST_BOOLEANS -+ "stoptions", -+#endif -+#ifdef MT_ST_WRITE_THRESHOLD -+ "stwrthreshold", -+#endif -+ NULL -+}; + -+int count_bits[] = -+{ -+#ifdef MT_ST_BOOLEANS -+ MT_ST_BOOLEANS, -+#endif -+#ifdef MT_ST_WRITE_THRESHOLD -+ MT_ST_WRITE_THRESHOLD, -+#endif -+ 0 -+}; -+ -+#ifdef MT_TAPE_INFO -+ struct mt_tape_info tapes[] = MT_TAPE_INFO; -+#endif -+ - char const * const opnames[] = + char *opnames[] = { - "eof", -@@ -108,6 +258,8 @@ char const * const opnames[] = + "eof", "weof", "fsf", "bsf", "fsr", "bsr", +@@ -114,6 +239,8 @@ char *opnames[] = #endif #ifdef MTEOM "eom", @@ -332,7 +307,7 @@ Index: src/mt.c #endif #ifdef MTRETEN "retension", -@@ -122,6 +274,39 @@ char const * const opnames[] = +@@ -128,6 +255,39 @@ char *opnames[] = #ifdef MTSEEK "seek", #endif @@ -372,7 +347,7 @@ Index: src/mt.c NULL }; -@@ -144,6 +329,8 @@ short operations[] = +@@ -141,6 +301,8 @@ short operations[] = #endif #ifdef MTEOM MTEOM, @@ -381,7 +356,7 @@ Index: src/mt.c #endif #ifdef MTRETEN MTRETEN, -@@ -158,6 +345,39 @@ short operations[] = +@@ -155,9 +317,69 @@ short operations[] = #ifdef MTSEEK MTSEEK, #endif @@ -418,35 +393,63 @@ Index: src/mt.c +#ifdef MTDENS + MTDENS, +#endif + 0 }; - ARGMATCH_VERIFY (opnames, operations); -@@ -286,10 +506,23 @@ void ++char *cbnames[] = ++{ ++#ifdef MT_ST_BOOLEANS ++ "stoptions", ++#endif ++#ifdef MT_ST_WRITE_THRESHOLD ++ "stwrthreshold", ++#endif ++ NULL ++}; ++ ++int count_bits[] = ++{ ++#ifdef MT_ST_BOOLEANS ++ MT_ST_BOOLEANS, ++#endif ++#ifdef MT_ST_WRITE_THRESHOLD ++ MT_ST_WRITE_THRESHOLD, ++#endif ++ 0 ++}; ++ ++#ifdef MT_TAPE_INFO ++ struct mt_tape_info tapes[] = MT_TAPE_INFO; ++#endif ++ ++ + struct option longopts[] = + { + {"file", 1, NULL, 'f'}, +@@ -200,10 +422,22 @@ void 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); ++#ifdef MT_TAPE_INFO ++ struct mt_tape_info *mt; ++#endif -+ #ifdef MT_TAPE_INFO -+ for (mt = tapes; mt->t_type; mt++) -+ if (mt->t_type == status.mt_type) break; -+ if (mt->t_type != 0) -+ { -+ printf ("drive type = %s\n", mt->t_name); -+ } -+ else -+ #endif -+ + if (rmtioctl (desc, MTIOCGET, (char*)&status) == -1) + error (2, errno, _("%s: rmtioctl failed"), dev); + ++#ifdef MT_TAPE_INFO ++ for (mt = tapes; mt->t_type; mt++) ++ if (mt->t_type == status.mt_type) break; ++ if (mt->t_type != 0) ++ { ++ printf ("drive type = %s\n", mt->t_name); ++ } ++ 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); -@@ -303,7 +536,177 @@ print_status (char *dev, int desc) +@@ -217,7 +451,177 @@ print_status (char *dev, int desc) printf ("file number = %d\n", (int) status.mt_fileno); printf ("block number = %d\n", (int) status.mt_blkno); #endif @@ -603,7 +606,7 @@ Index: src/mt.c + printf("Compression off.\n"); + + return 1; -+} + } +#endif + +#ifdef MTTELL @@ -618,24 +621,24 @@ Index: src/mt.c + error (2, errno, "%s", dev); + printf("At block %ld.\n", position.mt_blkno); + - } ++} +#endif + void - fatal_exit () -@@ -314,7 +717,7 @@ fatal_exit () - int - main (int argc, char **argv) - { -- int tapedesc; -+ int tapedesc,i; + usage (FILE *fp,int status) +@@ -276,7 +680,7 @@ main (int argc, char **argv) + if (optind == argc) + usage (stderr, 1); - setlocale (LC_ALL, ""); - bindtextdomain (PACKAGE, LOCALEDIR); -@@ -327,13 +730,32 @@ main (int argc, char **argv) - if (argp_parse (&argp, argc, argv, ARGP_IN_ORDER, NULL, NULL)) - exit (MT_EXIT_INVOP); +- i = argmatch (argv[optind], opnames); ++ i = argmatch (argv[optind], opnames,NULL,0); + if (i < 0) + { + argmatch_invalid ("tape operation", argv[optind], i); +@@ -308,10 +712,29 @@ main (int argc, char **argv) + #endif + } +#ifdef MTDENS + if (operation == MTDENS) @@ -647,28 +650,24 @@ Index: src/mt.c + } +#endif + - switch (operation) - { - case MTWEOF: + if ( (operation == MTWEOF) #ifdef MTERASE - case MTERASE: + || (operation == MTERASE) #endif -- tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); +#ifdef MTWSM -+ case MTWSM: ++ || (operation == MTWSM) +#endif +#ifdef MTSETDRVBUFFER -+ case MTSETDRVBUFFER: ++ || (operation == MTSETDRVBUFFER) +#endif +#ifdef MTDATCOMP -+ case MTDATCOMP: ++ || (operation == MTDATCOMP) +#endif -+ tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); - break; - - default: -@@ -344,6 +766,17 @@ main (int argc, char **argv) - error (MT_EXIT_INVOP, errno, _("%s: rmtopen failed"), tapedev); + ) + tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); + else +@@ -320,6 +743,17 @@ main (int argc, char **argv) + error (1, errno, _("%s: rmtopen failed"), tapedev); check_type (tapedev, tapedesc); +#ifdef MTDATCOMP @@ -685,11 +684,11 @@ Index: src/mt.c if (operation == MTASF) { perform_operation (tapedev, tapedesc, MTREW, 1); -@@ -352,6 +785,7 @@ main (int argc, char **argv) +@@ -328,6 +762,7 @@ main (int argc, char **argv) perform_operation (tapedev, tapedesc, operation, count); if (operation == MTNOP) print_status (tapedev, tapedesc); + } if (rmtclose (tapedesc) == -1) - error (MT_EXIT_FAILURE, errno, _("%s: rmtclose failed"), tapedev); + error (2, errno, _("%s: rmtclose failed"), tapedev); diff --git a/cpio-open_nonblock.patch b/cpio-2.10-open_nonblock.patch similarity index 50% rename from cpio-open_nonblock.patch rename to cpio-2.10-open_nonblock.patch index 8e4a076..8f78ad0 100644 --- a/cpio-open_nonblock.patch +++ b/cpio-2.10-open_nonblock.patch @@ -1,26 +1,20 @@ -Index: src/mt.c -=================================================================== ---- src/mt.c.orig +--- src/mt.c +++ src/mt.c -@@ -723,11 +723,11 @@ main (int argc, char **argv) - #ifdef MTDATCOMP - case MTDATCOMP: +@@ -694,9 +694,9 @@ + || (operation == MTDATCOMP) #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); - } - + ) +- tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); ++ tapedesc = rmtopen (tapedev, O_WRONLY | O_NONBLOCK, 0, rsh_command_option); + else +- tapedesc = rmtopen (tapedev, O_RDONLY, 0, rsh_command_option); ++ tapedesc = rmtopen (tapedev, O_RDONLY | O_NONBLOCK, 0, rsh_command_option); if (tapedesc == -1) -Index: src/util.c -=================================================================== ---- src/util.c.orig + error (1, errno, _("%s: rmtopen failed"), tapedev); + check_type (tapedev, tapedesc); +--- src/util.c +++ src/util.c -@@ -767,14 +767,14 @@ open_archive (char *file) +@@ -753,14 +753,14 @@ copy_in = process_copy_in; if (copy_function == copy_in) diff --git a/cpio-use_new_ascii_format.patch b/cpio-2.10-use_new_ascii_format.patch similarity index 100% rename from cpio-use_new_ascii_format.patch rename to cpio-2.10-use_new_ascii_format.patch diff --git a/cpio-use_sbin_rmt.patch b/cpio-2.10-use_sbin_rmt.patch similarity index 100% rename from cpio-use_sbin_rmt.patch rename to cpio-2.10-use_sbin_rmt.patch diff --git a/cpio-2.10.tar.bz2 b/cpio-2.10.tar.bz2 new file mode 100644 index 0000000..7d90290 --- /dev/null +++ b/cpio-2.10.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:def23150e4e081599ecb013736f4403617fefbb6f6e6806dc6a98129913d79d5 +size 951395 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.changes b/cpio.changes index 88b570a..bb19032 100644 --- a/cpio.changes +++ b/cpio.changes @@ -1,18 +1,3 @@ -------------------------------------------------------------------- -Fri Mar 12 16:34:39 UTC 2010 - mseben@novell.com - -- updated to 2.11 - * Fix mt build. - * In copy-in mode, if directory attributes do not permit writing to it, - setting them is delayed until the end of run. This allows to - correctly extract files in such directories. - * In copy-in mode, permissions of a directory are restored if it - appears in the file list after files in it (e.g. in listings - produced by find . -depth). This fixes debian bug #458079. - * Fix possible memory overflow in the rmt client code (CVE-2010-0624). -- deprecated heap_overflow_in_rtapelib.patch,chmodRaceC.patch and - include_fatal_c.patch - ------------------------------------------------------------------- Wed Mar 3 09:29:23 UTC 2010 - mseben@novell.com diff --git a/cpio.spec b/cpio.spec index 67a54a0..0d2c23d 100644 --- a/cpio.spec +++ b/cpio.spec @@ -23,24 +23,29 @@ Url: http://www.gnu.org/software/cpio/cpio.html License: GPLv3 Group: Productivity/Archiving/Compression AutoReqProv: on -Version: 2.11 +Version: 2.10 Release: 6 Summary: A Backup and Archiving Utility Source: %{name}-%{version}.tar.bz2 -Patch2: %{name}-use_new_ascii_format.patch -#oouch what a ...?! pieces of code grabed from mt_st package to add missing functionality (e.g. density info) -Patch3: %{name}-mt.patch -Patch4: %{name}-use_sbin_rmt.patch -Patch5: %{name}-open_nonblock.patch +Patch2: %{name}-%{version}-use_new_ascii_format.patch +Patch3: %{name}-%{version}-mt.patch +Patch4: %{name}-%{version}-use_sbin_rmt.patch +Patch5: %{name}-%{version}-open_nonblock.patch +Patch7: %{name}-%{version}-chmodRaceC.patch #patch dir_perm reverts some things which were added by patch #7 chmodRaceC -Patch14: %{name}-dir_perm.patch -Patch15: %{name}-eof_tape_handling.patch +Patch14: %{name}-%{version}-dir_perm.patch +Patch15: %{name}-%{version}-eof_tape_handling.patch # make posibble to have device nodes with major number > 127 # Red Hat Bugzilla #450109 -Patch17: %{name}-dev_number.patch -Patch18: %{name}-default_tape_dev.patch +Patch17: %{name}-%{version}-dev_number.patch +Patch18: %{name}-%{version}-default_tape_dev.patch +#PATCH-FIX-UPSTREAM include_fatal_c.patch fix undefined ref in mt build +Patch19: %{name}-%{version}-include_fatal_c.patch #PATCH-FIX-UPSTREAM cpio-2.10-close_files_after_copy.patch -Patch20: %{name}-close_files_after_copy.patch +Patch20: %{name}-%{version}-close_files_after_copy.patch +#fix possible heap overflow in rtapelib.c bnc#579475 +Patch21: %{name}-%{version}-heap_overflow_in_rtapelib.patch +PreReq: %install_info_prereq PreReq: %install_info_prereq BuildRoot: %{_tmppath}/%{name}-%{version}-build Requires: %{name}-lang = %{version} @@ -71,11 +76,14 @@ Authors: %patch3 %patch4 %patch5 +%patch7 %patch14 -p1 %patch15 %patch17 %patch18 +%patch19 %patch20 +%patch21 -p1 #chmod 755 . #chmod u+w * #chmod a+r * From 6600438bbd69c7d2751355b4d2260c7e3734b54f7e10cf79072a2344f0949444 Mon Sep 17 00:00:00 2001 From: OBS User buildservice-autocommit Date: Thu, 25 Mar 2010 23:54:28 +0000 Subject: [PATCH 4/4] Updating link to change in openSUSE:Factory/cpio revision 25.0 OBS-URL: https://build.opensuse.org/package/show/Archiving/cpio?expand=0&rev=ec6713ec3ebe5e0f61b02764b7cf96a9 --- cpio-2.10-chmodRaceC.patch | 139 ----------- cpio-2.10-heap_overflow_in_rtapelib.patch | 52 ---- cpio-2.10-include_fatal_c.patch | 8 - cpio-2.10.tar.bz2 | 3 - cpio-2.11.tar.bz2 | 3 + ...patch => cpio-close_files_after_copy.patch | 24 +- ...e_dev.patch => cpio-default_tape_dev.patch | 27 +- ...-dev_number.patch => cpio-dev_number.patch | 0 ...2.10-dir_perm.patch => cpio-dir_perm.patch | 233 ++++-------------- ...ling.patch => cpio-eof_tape_handling.patch | 0 cpio-2.10-mt.patch => cpio-mt.patch | 179 +++++++------- ...nonblock.patch => cpio-open_nonblock.patch | 32 ++- ...t.patch => cpio-use_new_ascii_format.patch | 0 ..._sbin_rmt.patch => cpio-use_sbin_rmt.patch | 0 cpio.changes | 15 ++ cpio.spec | 34 +-- 16 files changed, 213 insertions(+), 536 deletions(-) delete mode 100644 cpio-2.10-chmodRaceC.patch delete mode 100644 cpio-2.10-heap_overflow_in_rtapelib.patch delete mode 100644 cpio-2.10-include_fatal_c.patch delete mode 100644 cpio-2.10.tar.bz2 create mode 100644 cpio-2.11.tar.bz2 rename cpio-2.10-close_files_after_copy.patch => cpio-close_files_after_copy.patch (58%) rename cpio-2.10-default_tape_dev.patch => cpio-default_tape_dev.patch (63%) rename cpio-2.10-dev_number.patch => cpio-dev_number.patch (100%) rename cpio-2.10-dir_perm.patch => cpio-dir_perm.patch (58%) rename cpio-2.10-eof_tape_handling.patch => cpio-eof_tape_handling.patch (100%) rename cpio-2.10-mt.patch => cpio-mt.patch (89%) rename cpio-2.10-open_nonblock.patch => cpio-open_nonblock.patch (50%) rename cpio-2.10-use_new_ascii_format.patch => cpio-use_new_ascii_format.patch (100%) rename cpio-2.10-use_sbin_rmt.patch => cpio-use_sbin_rmt.patch (100%) diff --git a/cpio-2.10-chmodRaceC.patch b/cpio-2.10-chmodRaceC.patch deleted file mode 100644 index a1dad8a..0000000 --- a/cpio-2.10-chmodRaceC.patch +++ /dev/null @@ -1,139 +0,0 @@ ---- src/copypass.c -+++ src/copypass.c -@@ -239,15 +239,23 @@ process_copy_pass () - cdf_flag = 1; - } - #endif -- res = mkdir (output_name.ds_string, in_file_stat.st_mode); -+ res = mkdir (output_name.ds_string, in_file_stat.st_mode & ~077); - - } - else -- res = 0; -+ { -+ if (!no_chown_flag && (out_file_stat.st_mode & 077) != 0 -+ && chmod (output_name.ds_string, out_file_stat.st_mode & 07700) < 0) -+ { -+ error (0, errno, "%s: chmod", output_name.ds_string); -+ continue; -+ } -+ res = 0; -+ } - if (res < 0 && create_dir_flag) - { - create_all_directories (output_name.ds_string); -- res = mkdir (output_name.ds_string, in_file_stat.st_mode); -+ res = mkdir (output_name.ds_string, in_file_stat.st_mode & ~077); - } - if (res < 0) - { -@@ -290,12 +298,12 @@ process_copy_pass () - - if (link_res < 0) - { -- res = mknod (output_name.ds_string, in_file_stat.st_mode, -+ res = mknod (output_name.ds_string, in_file_stat.st_mode & ~077, - in_file_stat.st_rdev); - if (res < 0 && create_dir_flag) - { - create_all_directories (output_name.ds_string); -- res = mknod (output_name.ds_string, in_file_stat.st_mode, -+ res = mknod (output_name.ds_string, in_file_stat.st_mode & ~077, - in_file_stat.st_rdev); - } - if (res < 0) ---- src/copyin.c -+++ src/copyin.c -@@ -186,11 +186,12 @@ list_file(struct cpio_file_stat* file_hd - - static int - try_existing_file (struct cpio_file_stat* file_hdr, int in_file_des, -- int *existing_dir) -+ int *existing_dir, mode_t *existing_mode) - { - struct stat file_stat; - - *existing_dir = false; -+ *existing_mode = 0; - if (lstat (file_hdr->c_name, &file_stat) == 0) - { - if (S_ISDIR (file_stat.st_mode) -@@ -200,6 +201,7 @@ try_existing_file (struct cpio_file_stat - we are trying to create, don't complain about - it. */ - *existing_dir = true; -+ *existing_mode = file_stat.st_mode; - return 0; - } - else if (!unconditional_flag -@@ -567,7 +569,7 @@ copyin_regular_file (struct cpio_file_st - } - - static void --copyin_directory (struct cpio_file_stat *file_hdr, int existing_dir) -+copyin_directory (struct cpio_file_stat *file_hdr, int existing_dir, mode_t existing_mode) - { - int res; /* Result of various function calls. */ - #ifdef HPUX_CDF -@@ -610,14 +612,22 @@ copyin_directory (struct cpio_file_stat - cdf_flag = 1; - } - #endif -- res = mkdir (file_hdr->c_name, file_hdr->c_mode); -+ res = mkdir (file_hdr->c_name, file_hdr->c_mode & ~077); - } - else -- res = 0; -+ { -+ if (!no_chown_flag && (existing_mode & 077) != 0 -+ && chmod (file_hdr->c_name, existing_mode & 07700) < 0) -+ { -+ error (0, errno, "%s: chmod", file_hdr->c_name); -+ return; -+ } -+ res = 0; -+ } - if (res < 0 && create_dir_flag) - { - create_all_directories (file_hdr->c_name); -- res = mkdir (file_hdr->c_name, file_hdr->c_mode); -+ res = mkdir (file_hdr->c_name, file_hdr->c_mode & ~077); - } - if (res < 0) - { -@@ -692,12 +702,12 @@ copyin_device (struct cpio_file_stat* fi - return; - } - -- res = mknod (file_hdr->c_name, file_hdr->c_mode, -+ res = mknod (file_hdr->c_name, file_hdr->c_mode & ~077, - makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min)); - if (res < 0 && create_dir_flag) - { - create_all_directories (file_hdr->c_name); -- res = mknod (file_hdr->c_name, file_hdr->c_mode, -+ res = mknod (file_hdr->c_name, file_hdr->c_mode & ~077, - makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min)); - } - if (res < 0) -@@ -772,9 +782,10 @@ static void - copyin_file (struct cpio_file_stat* file_hdr, int in_file_des) - { - int existing_dir=0; -+ mode_t existing_mode; - - if (!to_stdout_option -- && try_existing_file (file_hdr, in_file_des, &existing_dir) < 0) -+ && try_existing_file (file_hdr, in_file_des, &existing_dir, &existing_mode) < 0) - return; - - /* Do the real copy or link. */ -@@ -785,7 +796,7 @@ copyin_file (struct cpio_file_stat* file - break; - - case CP_IFDIR: -- copyin_directory (file_hdr, existing_dir); -+ copyin_directory(file_hdr, existing_dir, existing_mode); - break; - - case CP_IFCHR: diff --git a/cpio-2.10-heap_overflow_in_rtapelib.patch b/cpio-2.10-heap_overflow_in_rtapelib.patch deleted file mode 100644 index 41d0626..0000000 --- a/cpio-2.10-heap_overflow_in_rtapelib.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 9bc39283e4cc6ab9e5913ccbf766998eab4ff093 Mon Sep 17 00:00:00 2001 -From: Sergey Poznyakoff -Date: Mon, 01 Mar 2010 08:49:03 +0000 -Subject: Bugfixes in rtapelib - -* lib/rmt.h (rmtcreat): Use fcntl O_ macros insead of -their hardcoded values. -* lib/rtapelib.c (rmt_read__,rmt_ioctl__): Prevent -potential overflow. ---- -diff --git a/lib/rmt.h b/lib/rmt.h -index 50f037c..2ce9dc5 100644 ---- a/lib/rmt.h -+++ b/lib/rmt.h -@@ -61,7 +61,7 @@ extern bool force_local_option; - - #define rmtcreat(dev_name, mode, command) \ - (_remdev (dev_name) \ -- ? rmt_open__ (dev_name, 1 | O_CREAT, __REM_BIAS, command) \ -+ ? rmt_open__ (dev_name, O_CREAT | O_WRONLY, __REM_BIAS, command) \ - : creat (dev_name, mode)) - - #define rmtlstat(dev_name, muffer) \ -diff --git a/lib/rtapelib.c b/lib/rtapelib.c -index 02ad1e7..cb645db 100644 ---- a/lib/rtapelib.c -+++ b/lib/rtapelib.c -@@ -573,7 +573,8 @@ rmt_read__ (int handle, char *buffer, size_t length) - - sprintf (command_buffer, "R%lu\n", (unsigned long) length); - if (do_command (handle, command_buffer) == -1 -- || (status = get_status (handle)) == SAFE_READ_ERROR) -+ || (status = get_status (handle)) == SAFE_READ_ERROR -+ || status > length) - return SAFE_READ_ERROR; - - for (counter = 0; counter < status; counter += rlen, buffer += rlen) -@@ -709,6 +710,12 @@ rmt_ioctl__ (int handle, int operation, char *argument) - || (status = get_status (handle), status == -1)) - return -1; - -+ if (status > sizeof (struct mtop)) -+ { -+ errno = EOVERFLOW; -+ return -1; -+ } -+ - for (; status > 0; status -= counter, argument += counter) - { - counter = safe_read (READ_SIDE (handle), argument, status); --- -cgit v0.8.2.1 diff --git a/cpio-2.10-include_fatal_c.patch b/cpio-2.10-include_fatal_c.patch deleted file mode 100644 index f06443a..0000000 --- a/cpio-2.10-include_fatal_c.patch +++ /dev/null @@ -1,8 +0,0 @@ ---- lib/Makefile.am.orig 2009-07-09 09:41:26.000000000 +0200 -+++ lib/Makefile.am 2009-07-09 09:41:17.000000000 +0200 -@@ -37,4 +37,5 @@ - sysdep.c\ - system.h\ - error.c\ -+ ../src/fatal.c \ - names.c diff --git a/cpio-2.10.tar.bz2 b/cpio-2.10.tar.bz2 deleted file mode 100644 index 7d90290..0000000 --- a/cpio-2.10.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:def23150e4e081599ecb013736f4403617fefbb6f6e6806dc6a98129913d79d5 -size 951395 diff --git a/cpio-2.11.tar.bz2 b/cpio-2.11.tar.bz2 new file mode 100644 index 0000000..c96caee --- /dev/null +++ b/cpio-2.11.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb820bfd96e74fc6ce43104f06fe733178517e7f5d1cdee553773e8eff7d5bbd +size 1018483 diff --git a/cpio-2.10-close_files_after_copy.patch b/cpio-close_files_after_copy.patch similarity index 58% rename from cpio-2.10-close_files_after_copy.patch rename to cpio-close_files_after_copy.patch index be033b2..a819eac 100644 --- a/cpio-2.10-close_files_after_copy.patch +++ b/cpio-close_files_after_copy.patch @@ -2,22 +2,24 @@ Index: src/copyin.c =================================================================== --- src/copyin.c.orig +++ src/copyin.c -@@ -1565,6 +1565,19 @@ process_copy_in () - if (dot_flag) +@@ -1484,7 +1484,20 @@ process_copy_in () fputc ('\n', stderr); + apply_delayed_set_stat (); +- ++ + if (tty_in) -+ { -+ fclose(tty_in); -+ } ++ { ++ fclose(tty_in); ++ } + if (tty_out) -+ { -+ fclose(tty_out); -+ } ++ { ++ fclose(tty_out); ++ } + if (rename_in) -+ { -+ fclose(rename_in); -+ } ++ { ++ fclose(rename_in); ++ } + if (append_flag) return; diff --git a/cpio-2.10-default_tape_dev.patch b/cpio-default_tape_dev.patch similarity index 63% rename from cpio-2.10-default_tape_dev.patch rename to cpio-default_tape_dev.patch index d23c8ef..f977ccc 100644 --- a/cpio-2.10-default_tape_dev.patch +++ b/cpio-default_tape_dev.patch @@ -1,12 +1,17 @@ ---- src/mt.c +Index: src/mt.c +=================================================================== +--- src/mt.c.orig +++ src/mt.c -@@ -664,11 +664,20 @@ - { - tapedev = getenv ("TAPE"); - if (tapedev == NULL) +@@ -413,11 +413,18 @@ parse_opt (int key, char *arg, struct ar + { + tapedev = getenv ("TAPE"); + if (tapedev == NULL) -#ifdef DEFTAPE /* From sys/mtio.h. */ -- tapedev = DEFTAPE; +- tapedev = DEFTAPE; -#else +- error (MT_EXIT_INVOP, 0, _("no tape device specified")); +-#endif ++ +/* Suse doesn't have /dev/tape as link to /dev/nst0 any more. +Instead it uses udev and creates different names in /dev/tape/by-id/ directory. +If it is SCSI tape storage then it creates /dev/tape/by-id/scsi--nst @@ -18,10 +23,6 @@ +/* #ifdef DEFTAPE * From sys/mtio.h. * */ +# define DEFSUSETAPE "/dev/nst0" + tapedev = DEFSUSETAPE; -+/* #else - error (1, 0, _("no tape device specified")); --#endif -+#endif */ - } - - #ifdef MTDENS + } + break; + diff --git a/cpio-2.10-dev_number.patch b/cpio-dev_number.patch similarity index 100% rename from cpio-2.10-dev_number.patch rename to cpio-dev_number.patch diff --git a/cpio-2.10-dir_perm.patch b/cpio-dir_perm.patch similarity index 58% rename from cpio-2.10-dir_perm.patch rename to cpio-dir_perm.patch index 93654ce..4325e95 100644 --- a/cpio-2.10-dir_perm.patch +++ b/cpio-dir_perm.patch @@ -1,163 +1,13 @@ ---- cpio-2.9/src/copyin.c -+++ cpio-2.9/src/copyin.c -@@ -186,12 +186,11 @@ - - static int - try_existing_file (struct cpio_file_stat* file_hdr, int in_file_des, -- int *existing_dir, mode_t *existing_mode) -+ int *existing_dir) - { - struct stat file_stat; - - *existing_dir = false; -- *existing_mode = 0; - if (lstat (file_hdr->c_name, &file_stat) == 0) - { - if (S_ISDIR (file_stat.st_mode) -@@ -201,7 +200,6 @@ - we are trying to create, don't complain about - it. */ - *existing_dir = true; -- *existing_mode = file_stat.st_mode; - return 0; - } - else if (!unconditional_flag -@@ -569,7 +567,7 @@ - } - - static void --copyin_directory (struct cpio_file_stat *file_hdr, int existing_dir, mode_t existing_mode) -+copyin_directory (struct cpio_file_stat *file_hdr, int existing_dir) - { - int res; /* Result of various function calls. */ - #ifdef HPUX_CDF -@@ -612,22 +610,14 @@ - cdf_flag = 1; - } - #endif -- res = mkdir (file_hdr->c_name, file_hdr->c_mode & ~077); -+ res = mkdir (file_hdr->c_name, file_hdr->c_mode); - } - else -- { -- if (!no_chown_flag && (existing_mode & 077) != 0 -- && chmod (file_hdr->c_name, existing_mode & 07700) < 0) -- { -- error (0, errno, "%s: chmod", file_hdr->c_name); -- return; -- } -- res = 0; -- } -+ res = 0; - if (res < 0 && create_dir_flag) - { - create_all_directories (file_hdr->c_name); -- res = mkdir (file_hdr->c_name, file_hdr->c_mode & ~077); -+ res = mkdir (file_hdr->c_name, file_hdr->c_mode); - } - if (res < 0) - { -@@ -702,12 +692,12 @@ - return; - } - -- res = mknod (file_hdr->c_name, file_hdr->c_mode & ~077, -+ res = mknod (file_hdr->c_name, file_hdr->c_mode, - makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min)); - if (res < 0 && create_dir_flag) - { - create_all_directories (file_hdr->c_name); -- res = mknod (file_hdr->c_name, file_hdr->c_mode & ~077, -+ res = mknod (file_hdr->c_name, file_hdr->c_mode, - makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min)); - } - if (res < 0) -@@ -782,10 +772,9 @@ - copyin_file (struct cpio_file_stat* file_hdr, int in_file_des) - { - int existing_dir=0; -- mode_t existing_mode; - - if (!to_stdout_option -- && try_existing_file (file_hdr, in_file_des, &existing_dir, &existing_mode) < 0) -+ && try_existing_file (file_hdr, in_file_des, &existing_dir) < 0) - return; - - /* Do the real copy or link. */ -@@ -796,7 +785,7 @@ - break; - - case CP_IFDIR: -- copyin_directory(file_hdr, existing_dir, existing_mode); -+ copyin_directory (file_hdr, existing_dir); - break; - - case CP_IFCHR: -@@ -1576,8 +1565,6 @@ - if (dot_flag) - fputc ('\n', stderr); - -- apply_delayed_set_stat (); -- - if (append_flag) - return; - ---- cpio-2.9/src/copypass.c -+++ cpio-2.9/src/copypass.c -@@ -239,23 +239,15 @@ - cdf_flag = 1; - } - #endif -- res = mkdir (output_name.ds_string, in_file_stat.st_mode & ~077); -+ res = mkdir (output_name.ds_string, in_file_stat.st_mode); - - } - else -- { -- if (!no_chown_flag && (out_file_stat.st_mode & 077) != 0 -- && chmod (output_name.ds_string, out_file_stat.st_mode & 07700) < 0) -- { -- error (0, errno, "%s: chmod", output_name.ds_string); -- continue; -- } -- res = 0; -- } -+ res = 0; - if (res < 0 && create_dir_flag) - { - create_all_directories (output_name.ds_string); -- res = mkdir (output_name.ds_string, in_file_stat.st_mode & ~077); -+ res = mkdir (output_name.ds_string, in_file_stat.st_mode); - } - if (res < 0) - { -@@ -298,12 +290,12 @@ - - if (link_res < 0) - { -- res = mknod (output_name.ds_string, in_file_stat.st_mode & ~077, -+ res = mknod (output_name.ds_string, in_file_stat.st_mode, - in_file_stat.st_rdev); - if (res < 0 && create_dir_flag) - { - create_all_directories (output_name.ds_string); -- res = mknod (output_name.ds_string, in_file_stat.st_mode & ~077, -+ res = mknod (output_name.ds_string, in_file_stat.st_mode, - in_file_stat.st_rdev); - } - if (res < 0) -@@ -373,8 +365,6 @@ - if (dot_flag) - fputc ('\n', stderr); - -- apply_delayed_set_stat (); -- - if (!quiet_flag) - { - size_t blocks = (output_bytes + io_block_size - 1) / io_block_size; ---- cpio-2.9/src/extern.h -+++ cpio-2.9/src/extern.h -@@ -140,8 +140,8 @@ +Redhat-bugzilla: 430835 + +* revert make_path code to previous state, which worked better +* this can be dropped when permission issues are solved in upstream + + +diff -up cpio-2.9/src/extern.h.dir_perm cpio-2.9/src/extern.h +--- cpio-2.9/src/extern.h.dir_perm 2007-06-28 14:59:38.000000000 +0200 ++++ cpio-2.9/src/extern.h 2008-03-03 11:57:43.000000000 +0100 +@@ -140,8 +140,8 @@ void process_args (int argc, char *argv[ void initialize_buffers (void); /* makepath.c */ @@ -168,9 +18,36 @@ /* tar.c */ void write_out_tar_header (struct cpio_file_stat *file_hdr, int out_des); ---- cpio-2.9/src/makepath.c -+++ cpio-2.9/src/makepath.c -@@ -36,8 +36,10 @@ +diff -up cpio-2.9/src/util.c.dir_perm cpio-2.9/src/util.c +--- cpio-2.9/src/util.c.dir_perm 2007-06-28 15:04:51.000000000 +0200 ++++ cpio-2.9/src/util.c 2008-03-03 11:45:00.000000000 +0100 +@@ -618,14 +618,7 @@ create_all_directories (char *name) + error (2, 0, _("virtual memory exhausted")); + + if (dir[0] != '.' || dir[1] != '\0') +- { +- const char *fmt; +- if (warn_option & CPIO_WARN_INTERDIR) +- fmt = _("Creating intermediate directory `%s'"); +- else +- fmt = NULL; +- make_path (dir, -1, -1, fmt); +- } ++ make_path (dir, mode, 0700, -1, -1, (char *) NULL); + + free (dir); + } +diff -up cpio-2.9/src/makepath.c.dir_perm cpio-2.9/src/makepath.c +--- cpio-2.9/src/makepath.c.dir_perm 2007-06-28 15:09:47.000000000 +0200 ++++ cpio-2.9/src/makepath.c 2008-03-03 11:45:00.000000000 +0100 +@@ -29,15 +29,14 @@ + #include + #include + #include +-#include "cpiohdr.h" +-#include "dstring.h" +-#include "extern.h" + /* Ensure that the directory ARGPATH exists. Remove any trailing slashes from ARGPATH before calling this function. @@ -240,7 +117,7 @@ while (*slash == '/') slash++; while ((slash = strchr (slash, '/'))) -@@ -91,9 +112,10 @@ +@@ -91,9 +112,10 @@ make_path (char *argpath, *(slash -1) = '\0'; } #endif @@ -252,7 +129,7 @@ return 1; } else -@@ -101,18 +123,24 @@ +@@ -101,18 +123,24 @@ make_path (char *argpath, if (verbose_fmt_string != NULL) error (0, 0, verbose_fmt_string, dirpath); @@ -287,7 +164,7 @@ #ifdef HPUX_CDF if (iscdf) { -@@ -129,6 +157,7 @@ +@@ -129,6 +157,7 @@ make_path (char *argpath, else if (!S_ISDIR (stats.st_mode)) { error (0, 0, _("`%s' exists but is not a directory"), dirpath); @@ -295,7 +172,7 @@ return 1; } -@@ -143,7 +172,7 @@ +@@ -143,7 +172,7 @@ make_path (char *argpath, /* We're done making leading directories. Make the final component of the path. */ @@ -304,7 +181,7 @@ { /* In some cases, if the final component in dirpath was `.' then we just got an EEXIST error from that last mkdir(). If that's -@@ -153,24 +182,51 @@ +@@ -153,24 +182,51 @@ make_path (char *argpath, (!S_ISDIR (stats.st_mode) ) ) { error (0, errno, _("cannot make directory `%s'"), dirpath); @@ -368,7 +245,7 @@ } else { -@@ -179,10 +235,33 @@ +@@ -179,10 +235,33 @@ make_path (char *argpath, if (!S_ISDIR (stats.st_mode)) { error (0, 0, _("`%s' exists but is not a directory"), dirpath); @@ -402,21 +279,3 @@ + umask (oldmask); return retval; } ---- cpio-2.9/src/util.c -+++ cpio-2.9/src/util.c -@@ -618,14 +618,7 @@ - error (2, 0, _("virtual memory exhausted")); - - if (dir[0] != '.' || dir[1] != '\0') -- { -- const char *fmt; -- if (warn_option & CPIO_WARN_INTERDIR) -- fmt = _("Creating intermediate directory `%s'"); -- else -- fmt = NULL; -- make_path (dir, -1, -1, fmt); -- } -+ make_path (dir, mode, 0700, -1, -1, (char *) NULL); - - free (dir); - } diff --git a/cpio-2.10-eof_tape_handling.patch b/cpio-eof_tape_handling.patch similarity index 100% rename from cpio-2.10-eof_tape_handling.patch rename to cpio-eof_tape_handling.patch diff --git a/cpio-2.10-mt.patch b/cpio-mt.patch similarity index 89% rename from cpio-2.10-mt.patch rename to cpio-mt.patch index 1adbf7f..c2e1139 100644 --- a/cpio-2.10-mt.patch +++ b/cpio-mt.patch @@ -103,7 +103,7 @@ Index: src/Makefile.am =================================================================== --- src/Makefile.am.orig +++ src/Makefile.am -@@ -18,7 +18,7 @@ +@@ -19,7 +19,7 @@ INCLUDES=-I. -I.. -I$(top_srcdir)/gnu -I$(top_builddir)/gnu -I$(top_srcdir)/lib -I$(top_builddir)/lib @@ -116,16 +116,16 @@ Index: src/copyin.c =================================================================== --- src/copyin.c.orig +++ src/copyin.c -@@ -771,7 +771,7 @@ copyin_link(struct cpio_file_stat *file_ +@@ -689,7 +689,7 @@ copyin_link(struct cpio_file_stat *file_ static void - copyin_file (struct cpio_file_stat* file_hdr, int in_file_des) + copyin_file (struct cpio_file_stat *file_hdr, int in_file_des) { - int existing_dir; + int existing_dir=0; if (!to_stdout_option && try_existing_file (file_hdr, in_file_des, &existing_dir) < 0) -@@ -1360,6 +1360,7 @@ process_copy_in () +@@ -1278,6 +1278,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 +133,7 @@ Index: src/copyin.c newdir_umask = umask (0); /* Reset umask to preserve modes of created files */ -@@ -1468,8 +1469,10 @@ process_copy_in () +@@ -1386,8 +1387,10 @@ process_copy_in () for (i = 0; i < num_patterns && skip_file == copy_matching_files; i++) { @@ -149,7 +149,7 @@ Index: src/mt.c =================================================================== --- src/mt.c.orig +++ src/mt.c -@@ -17,6 +17,10 @@ +@@ -18,6 +18,10 @@ 02110-1301 USA */ @@ -160,7 +160,7 @@ Index: src/mt.c /* If -f is not given, the environment variable TAPE is used; if that is not set, a default device defined in sys/mtio.h is used. -@@ -51,9 +55,51 @@ +@@ -52,9 +56,51 @@ retension Rewind the tape, then wind it to the end of the reel, then rewind it again. erase Erase the tape. @@ -212,9 +212,9 @@ Index: src/mt.c #include #include -@@ -105,6 +151,85 @@ int atoi (); - void exit (); - #endif +@@ -90,6 +136,110 @@ + #define MT_EXIT_INVOP 1 + #define MT_EXIT_FAILURE 2 +#if defined(linux) || defined(__linux) +#define MTDATCOMP 1000 /* Random unused number. */ @@ -294,11 +294,36 @@ Index: src/mt.c + {-1, NULL}}; +#endif + ++char *cbnames[] = ++{ ++#ifdef MT_ST_BOOLEANS ++ "stoptions", ++#endif ++#ifdef MT_ST_WRITE_THRESHOLD ++ "stwrthreshold", ++#endif ++ NULL ++}; + - char *opnames[] = ++int count_bits[] = ++{ ++#ifdef MT_ST_BOOLEANS ++ MT_ST_BOOLEANS, ++#endif ++#ifdef MT_ST_WRITE_THRESHOLD ++ MT_ST_WRITE_THRESHOLD, ++#endif ++ 0 ++}; ++ ++#ifdef MT_TAPE_INFO ++ struct mt_tape_info tapes[] = MT_TAPE_INFO; ++#endif ++ + char const * const opnames[] = { - "eof", "weof", "fsf", "bsf", "fsr", "bsr", -@@ -114,6 +239,8 @@ char *opnames[] = + "eof", +@@ -108,6 +258,8 @@ char const * const opnames[] = #endif #ifdef MTEOM "eom", @@ -307,7 +332,7 @@ Index: src/mt.c #endif #ifdef MTRETEN "retension", -@@ -128,6 +255,39 @@ char *opnames[] = +@@ -122,6 +274,39 @@ char const * const opnames[] = #ifdef MTSEEK "seek", #endif @@ -347,7 +372,7 @@ Index: src/mt.c NULL }; -@@ -141,6 +301,8 @@ short operations[] = +@@ -144,6 +329,8 @@ short operations[] = #endif #ifdef MTEOM MTEOM, @@ -356,7 +381,7 @@ Index: src/mt.c #endif #ifdef MTRETEN MTRETEN, -@@ -155,9 +317,69 @@ short operations[] = +@@ -158,6 +345,39 @@ short operations[] = #ifdef MTSEEK MTSEEK, #endif @@ -393,63 +418,35 @@ Index: src/mt.c +#ifdef MTDENS + MTDENS, +#endif - 0 }; -+char *cbnames[] = -+{ -+#ifdef MT_ST_BOOLEANS -+ "stoptions", -+#endif -+#ifdef MT_ST_WRITE_THRESHOLD -+ "stwrthreshold", -+#endif -+ NULL -+}; -+ -+int count_bits[] = -+{ -+#ifdef MT_ST_BOOLEANS -+ MT_ST_BOOLEANS, -+#endif -+#ifdef MT_ST_WRITE_THRESHOLD -+ MT_ST_WRITE_THRESHOLD, -+#endif -+ 0 -+}; -+ -+#ifdef MT_TAPE_INFO -+ struct mt_tape_info tapes[] = MT_TAPE_INFO; -+#endif -+ -+ - struct option longopts[] = - { - {"file", 1, NULL, 'f'}, -@@ -200,10 +422,22 @@ void + ARGMATCH_VERIFY (opnames, operations); +@@ -286,10 +506,23 @@ void print_status (char *dev, int desc) { struct mtget status; -+#ifdef MT_TAPE_INFO -+ struct mt_tape_info *mt; -+#endif - +- ++ #ifdef MT_TAPE_INFO ++ struct mt_tape_info *mt; ++ #endif ++ if (rmtioctl (desc, MTIOCGET, (char*)&status) == -1) - error (2, errno, _("%s: rmtioctl failed"), dev); + error (MT_EXIT_FAILURE, errno, _("%s: rmtioctl failed"), dev); -+#ifdef MT_TAPE_INFO -+ for (mt = tapes; mt->t_type; mt++) -+ if (mt->t_type == status.mt_type) break; -+ if (mt->t_type != 0) -+ { -+ printf ("drive type = %s\n", mt->t_name); -+ } -+ else -+#endif ++ #ifdef MT_TAPE_INFO ++ for (mt = tapes; mt->t_type; mt++) ++ if (mt->t_type == status.mt_type) break; ++ if (mt->t_type != 0) ++ { ++ printf ("drive type = %s\n", mt->t_name); ++ } ++ 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); -@@ -217,7 +451,177 @@ print_status (char *dev, int desc) +@@ -303,7 +536,177 @@ print_status (char *dev, int desc) printf ("file number = %d\n", (int) status.mt_fileno); printf ("block number = %d\n", (int) status.mt_blkno); #endif @@ -606,7 +603,7 @@ Index: src/mt.c + printf("Compression off.\n"); + + return 1; - } ++} +#endif + +#ifdef MTTELL @@ -621,24 +618,24 @@ Index: src/mt.c + error (2, errno, "%s", dev); + printf("At block %ld.\n", position.mt_blkno); + -+} + } +#endif + void - usage (FILE *fp,int status) -@@ -276,7 +680,7 @@ main (int argc, char **argv) - if (optind == argc) - usage (stderr, 1); + fatal_exit () +@@ -314,7 +717,7 @@ fatal_exit () + int + main (int argc, char **argv) + { +- int tapedesc; ++ int tapedesc,i; -- i = argmatch (argv[optind], opnames); -+ i = argmatch (argv[optind], opnames,NULL,0); - if (i < 0) - { - argmatch_invalid ("tape operation", argv[optind], i); -@@ -308,10 +712,29 @@ main (int argc, char **argv) - #endif - } + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); +@@ -327,13 +730,32 @@ main (int argc, char **argv) + if (argp_parse (&argp, argc, argv, ARGP_IN_ORDER, NULL, NULL)) + exit (MT_EXIT_INVOP); +#ifdef MTDENS + if (operation == MTDENS) @@ -650,24 +647,28 @@ Index: src/mt.c + } +#endif + - if ( (operation == MTWEOF) + switch (operation) + { + case MTWEOF: #ifdef MTERASE - || (operation == MTERASE) + case MTERASE: #endif +- tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); +#ifdef MTWSM -+ || (operation == MTWSM) ++ case MTWSM: +#endif +#ifdef MTSETDRVBUFFER -+ || (operation == MTSETDRVBUFFER) ++ case MTSETDRVBUFFER: +#endif +#ifdef MTDATCOMP -+ || (operation == MTDATCOMP) ++ case MTDATCOMP: +#endif - ) - tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); - else -@@ -320,6 +743,17 @@ main (int argc, char **argv) - error (1, errno, _("%s: rmtopen failed"), tapedev); ++ tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); + break; + + default: +@@ -344,6 +766,17 @@ main (int argc, char **argv) + error (MT_EXIT_INVOP, errno, _("%s: rmtopen failed"), tapedev); check_type (tapedev, tapedesc); +#ifdef MTDATCOMP @@ -684,11 +685,11 @@ Index: src/mt.c if (operation == MTASF) { perform_operation (tapedev, tapedesc, MTREW, 1); -@@ -328,6 +762,7 @@ main (int argc, char **argv) +@@ -352,6 +785,7 @@ main (int argc, char **argv) perform_operation (tapedev, tapedesc, operation, count); if (operation == MTNOP) print_status (tapedev, tapedesc); + } if (rmtclose (tapedesc) == -1) - error (2, errno, _("%s: rmtclose failed"), tapedev); + error (MT_EXIT_FAILURE, errno, _("%s: rmtclose failed"), tapedev); diff --git a/cpio-2.10-open_nonblock.patch b/cpio-open_nonblock.patch similarity index 50% rename from cpio-2.10-open_nonblock.patch rename to cpio-open_nonblock.patch index 8f78ad0..8e4a076 100644 --- a/cpio-2.10-open_nonblock.patch +++ b/cpio-open_nonblock.patch @@ -1,20 +1,26 @@ ---- src/mt.c +Index: src/mt.c +=================================================================== +--- src/mt.c.orig +++ src/mt.c -@@ -694,9 +694,9 @@ - || (operation == MTDATCOMP) +@@ -723,11 +723,11 @@ main (int argc, char **argv) + #ifdef MTDATCOMP + case MTDATCOMP: #endif - ) -- tapedesc = rmtopen (tapedev, O_WRONLY, 0, rsh_command_option); -+ tapedesc = rmtopen (tapedev, O_WRONLY | O_NONBLOCK, 0, rsh_command_option); - else -- tapedesc = rmtopen (tapedev, O_RDONLY, 0, rsh_command_option); -+ tapedesc = rmtopen (tapedev, O_RDONLY | O_NONBLOCK, 0, rsh_command_option); +- 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) - error (1, errno, _("%s: rmtopen failed"), tapedev); - check_type (tapedev, tapedesc); ---- src/util.c +Index: src/util.c +=================================================================== +--- src/util.c.orig +++ src/util.c -@@ -753,14 +753,14 @@ +@@ -767,14 +767,14 @@ open_archive (char *file) copy_in = process_copy_in; if (copy_function == copy_in) diff --git a/cpio-2.10-use_new_ascii_format.patch b/cpio-use_new_ascii_format.patch similarity index 100% rename from cpio-2.10-use_new_ascii_format.patch rename to cpio-use_new_ascii_format.patch diff --git a/cpio-2.10-use_sbin_rmt.patch b/cpio-use_sbin_rmt.patch similarity index 100% rename from cpio-2.10-use_sbin_rmt.patch rename to cpio-use_sbin_rmt.patch diff --git a/cpio.changes b/cpio.changes index bb19032..88b570a 100644 --- a/cpio.changes +++ b/cpio.changes @@ -1,3 +1,18 @@ +------------------------------------------------------------------- +Fri Mar 12 16:34:39 UTC 2010 - mseben@novell.com + +- updated to 2.11 + * Fix mt build. + * In copy-in mode, if directory attributes do not permit writing to it, + setting them is delayed until the end of run. This allows to + correctly extract files in such directories. + * In copy-in mode, permissions of a directory are restored if it + appears in the file list after files in it (e.g. in listings + produced by find . -depth). This fixes debian bug #458079. + * Fix possible memory overflow in the rmt client code (CVE-2010-0624). +- deprecated heap_overflow_in_rtapelib.patch,chmodRaceC.patch and + include_fatal_c.patch + ------------------------------------------------------------------- Wed Mar 3 09:29:23 UTC 2010 - mseben@novell.com diff --git a/cpio.spec b/cpio.spec index 0d2c23d..30570ce 100644 --- a/cpio.spec +++ b/cpio.spec @@ -1,5 +1,5 @@ # -# spec file for package cpio (Version 2.10) +# spec file for package cpio (Version 2.11) # # Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -23,29 +23,24 @@ Url: http://www.gnu.org/software/cpio/cpio.html License: GPLv3 Group: Productivity/Archiving/Compression AutoReqProv: on -Version: 2.10 -Release: 6 +Version: 2.11 +Release: 1 Summary: A Backup and Archiving Utility Source: %{name}-%{version}.tar.bz2 -Patch2: %{name}-%{version}-use_new_ascii_format.patch -Patch3: %{name}-%{version}-mt.patch -Patch4: %{name}-%{version}-use_sbin_rmt.patch -Patch5: %{name}-%{version}-open_nonblock.patch -Patch7: %{name}-%{version}-chmodRaceC.patch +Patch2: %{name}-use_new_ascii_format.patch +#oouch what a ...?! pieces of code grabed from mt_st package to add missing functionality (e.g. density info) +Patch3: %{name}-mt.patch +Patch4: %{name}-use_sbin_rmt.patch +Patch5: %{name}-open_nonblock.patch #patch dir_perm reverts some things which were added by patch #7 chmodRaceC -Patch14: %{name}-%{version}-dir_perm.patch -Patch15: %{name}-%{version}-eof_tape_handling.patch +Patch14: %{name}-dir_perm.patch +Patch15: %{name}-eof_tape_handling.patch # make posibble to have device nodes with major number > 127 # Red Hat Bugzilla #450109 -Patch17: %{name}-%{version}-dev_number.patch -Patch18: %{name}-%{version}-default_tape_dev.patch -#PATCH-FIX-UPSTREAM include_fatal_c.patch fix undefined ref in mt build -Patch19: %{name}-%{version}-include_fatal_c.patch +Patch17: %{name}-dev_number.patch +Patch18: %{name}-default_tape_dev.patch #PATCH-FIX-UPSTREAM cpio-2.10-close_files_after_copy.patch -Patch20: %{name}-%{version}-close_files_after_copy.patch -#fix possible heap overflow in rtapelib.c bnc#579475 -Patch21: %{name}-%{version}-heap_overflow_in_rtapelib.patch -PreReq: %install_info_prereq +Patch20: %{name}-close_files_after_copy.patch PreReq: %install_info_prereq BuildRoot: %{_tmppath}/%{name}-%{version}-build Requires: %{name}-lang = %{version} @@ -76,14 +71,11 @@ Authors: %patch3 %patch4 %patch5 -%patch7 %patch14 -p1 %patch15 %patch17 %patch18 -%patch19 %patch20 -%patch21 -p1 #chmod 755 . #chmod u+w * #chmod a+r *