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 *