rpms/cpio/FC-4 cpio-2.6-checksum.patch, NONE, 1.1 cpio-2.6-chmodRaceC.patch, 1.1, 1.2 cpio-2.6-lfs.patch, 1.1, 1.2 cpio.spec, 1.27, 1.28
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Mon Oct 31 08:54:11 UTC 2005
- Previous message (by thread): rpms/cpio/devel cpio-2.6-checksum.patch, NONE, 1.1 cpio.spec, 1.28, 1.29
- Next message (by thread): rpms/jpilot/devel .cvsignore, 1.8, 1.9 jpilot.spec, 1.26, 1.27 sources, 1.8, 1.9 jpilot-0.99.8-typo.patch, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: pvrabec
Update of /cvs/dist/rpms/cpio/FC-4
In directory cvs.devel.redhat.com:/tmp/cvs-serv16563
Modified Files:
cpio-2.6-chmodRaceC.patch cpio-2.6-lfs.patch cpio.spec
Added Files:
cpio-2.6-checksum.patch
Log Message:
- fix checksum error on 64-bit machines (#171649)
- fix large file support, archive >4GiB, archive members <4GiB (#160056)
- fix race condition holes, use mode 0700 for dir creation
cpio-2.6-checksum.patch:
copyout.c | 2 +-
extern.h | 2 +-
global.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
--- NEW FILE cpio-2.6-checksum.patch ---
--- cpio-2.6/src/extern.h.checksum 2005-10-26 11:17:11.000000000 +0200
+++ cpio-2.6/src/extern.h 2005-10-26 11:15:42.000000000 +0200
@@ -66,7 +66,7 @@
extern int archive_des;
extern char *archive_name;
extern char *rsh_command_option;
-extern unsigned long crc;
+extern unsigned int crc;
extern int delayed_seek_count;
#ifdef DEBUG_CPIO
extern int debug_flag;
--- cpio-2.6/src/copyout.c.checksum 2005-10-26 11:17:11.000000000 +0200
+++ cpio-2.6/src/copyout.c 2005-10-26 11:20:01.000000000 +0200
@@ -311,7 +311,7 @@
file_hdr->c_gid, file_hdr->c_nlink, file_hdr->c_mtime,
file_hdr->c_filesize, file_hdr->c_dev_maj, file_hdr->c_dev_min,
file_hdr->c_rdev_maj, file_hdr->c_rdev_min, file_hdr->c_namesize,
- file_hdr->c_chksum);
+ file_hdr->c_chksum & 0xffffffff);
tape_buffered_write (ascii_header, out_des, 110L);
/* Write file name to output. */
--- cpio-2.6/src/global.c.checksum 2005-10-26 11:17:11.000000000 +0200
+++ cpio-2.6/src/global.c 2005-10-26 11:15:29.000000000 +0200
@@ -139,7 +139,7 @@
char *rsh_command_option = NULL;
/* CRC checksum. */
-unsigned long crc;
+unsigned int crc;
/* Input and output buffers. */
char *input_buffer, *output_buffer;
cpio-2.6-chmodRaceC.patch:
copyin.c | 70 ++++++++++++++++++++++++++++++++++++-------------------------
copypass.c | 35 +++++++++++++++++++++---------
2 files changed, 67 insertions(+), 38 deletions(-)
Index: cpio-2.6-chmodRaceC.patch
===================================================================
RCS file: /cvs/dist/rpms/cpio/FC-4/cpio-2.6-chmodRaceC.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- cpio-2.6-chmodRaceC.patch 25 Apr 2005 12:57:44 -0000 1.1
+++ cpio-2.6-chmodRaceC.patch 31 Oct 2005 08:54:05 -0000 1.2
@@ -1,18 +1,34 @@
---- cpio-2.6/src/copyin.c.chmodRaceC 2005-04-25 13:19:34.079310381 +0200
-+++ cpio-2.6/src/copyin.c 2005-04-25 14:09:32.514889697 +0200
-@@ -389,19 +389,26 @@
+--- cpio-2.6/src/copyin.c.chmodRaceC 2005-07-01 14:23:04.000000000 +0200
++++ cpio-2.6/src/copyin.c 2005-07-01 14:46:34.000000000 +0200
+@@ -184,11 +184,12 @@
+
+ static int
+ try_existing_file(struct new_cpio_header* 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)
+@@ -198,6 +199,7 @@
+ 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
+@@ -389,19 +391,20 @@
continue;
}
- if (close (out_file_des) < 0)
- error (0, errno, "%s", d->header.c_name);
-
-+ /*
-+ * Avoid race condition.
-+ * Set chown and chmod before closing the file desc.
-+ * pvrabec at redhat.com
-+ */
-+
/* File is now copied; set attributes. */
if (!no_chown_flag)
- if ((chown (d->header.c_name,
@@ -24,25 +40,19 @@
/* chown may have turned off some permissions we wanted. */
- if (chmod (d->header.c_name, (int) d->header.c_mode) < 0)
+ if (fchmod (out_file_des, (int) d->header.c_mode) < 0)
-+ error (0, errno, "%s", d->header.c_name);
+ error (0, errno, "%s", d->header.c_name);
+
+ if (close (out_file_des) < 0)
- error (0, errno, "%s", d->header.c_name);
++ error (0, errno, "%s", d->header.c_name);
+
if (retain_time_flag)
{
times.actime = times.modtime = d->header.c_mtime;
-@@ -557,6 +564,25 @@
+@@ -557,6 +560,19 @@
write (out_file_des, "", 1);
delayed_seek_count = 0;
}
+
-+ /*
-+ * Avoid race condition.
-+ * Set chown and chmod before closing the file desc.
-+ * pvrabec at redhat.com
-+ */
-+
+ /* File is now copied; set attributes. */
+ if (!no_chown_flag)
+ if ((fchown (out_file_des,
@@ -58,7 +68,7 @@
if (close (out_file_des) < 0)
error (0, errno, "%s", file_hdr->c_name);
-@@ -567,18 +593,6 @@
+@@ -567,18 +583,6 @@
file_hdr->c_name, crc, file_hdr->c_chksum);
}
@@ -77,7 +87,7 @@
if (retain_time_flag)
{
struct utimbuf times; /* For setting file times. */
-@@ -589,7 +603,7 @@
+@@ -589,7 +593,7 @@
if (utime (file_hdr->c_name, ×) < 0)
error (0, errno, "%s", file_hdr->c_name);
}
@@ -86,8 +96,81 @@
tape_skip_padding (in_file_des, file_hdr->c_filesize);
if (file_hdr->c_nlink > 1
&& (archive_format == arf_newascii || archive_format == arf_crcascii) )
+@@ -603,7 +607,7 @@
+ }
+
+ static void
+-copyin_directory(struct new_cpio_header* file_hdr, int existing_dir)
++copyin_directory(struct new_cpio_header* file_hdr, int existing_dir, mode_t existing_mode)
+ {
+ int res; /* Result of various function calls. */
+ #ifdef HPUX_CDF
+@@ -646,14 +650,23 @@
+ 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;
++ 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;
++ }
++
+ 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)
+ {
+@@ -742,12 +755,12 @@
+ 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)
+@@ -826,9 +839,10 @@
+ copyin_file (struct new_cpio_header* file_hdr, int in_file_des)
+ {
+ int existing_dir;
++ 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. */
+@@ -839,7 +853,7 @@
+ break;
+
+ case CP_IFDIR:
+- copyin_directory(file_hdr, existing_dir);
++ copyin_directory(file_hdr, existing_dir, existing_mode);
+ break;
+
+ case CP_IFCHR:
--- cpio-2.6/src/copypass.c.chmodRaceC 2004-09-06 14:09:04.000000000 +0200
-+++ cpio-2.6/src/copypass.c 2005-04-25 14:09:38.135076926 +0200
++++ cpio-2.6/src/copypass.c 2005-07-01 14:50:46.000000000 +0200
@@ -181,19 +181,25 @@
}
if (close (in_file_des) < 0)
@@ -111,11 +194,54 @@
/* chown may have turned off some permissions we wanted. */
- if (chmod (output_name.ds_string, in_file_stat.st_mode) < 0)
+ if (fchmod (out_file_des, in_file_stat.st_mode) < 0)
-+ error (0, errno, "%s", output_name.ds_string);
+ error (0, errno, "%s", output_name.ds_string);
+
+ if (close (out_file_des) < 0)
- error (0, errno, "%s", output_name.ds_string);
++ error (0, errno, "%s", output_name.ds_string);
+
if (reset_time_flag)
{
times.actime = in_file_stat.st_atime;
+@@ -240,15 +246,24 @@
+ 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)
+ {
+@@ -311,12 +326,12 @@
+
+ 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)
cpio-2.6-lfs.patch:
copyin.c | 2 +-
extern.h | 10 +++++-----
util.c | 50 +++++++++++++++++++++++++-------------------------
3 files changed, 31 insertions(+), 31 deletions(-)
Index: cpio-2.6-lfs.patch
===================================================================
RCS file: /cvs/dist/rpms/cpio/FC-4/cpio-2.6-lfs.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- cpio-2.6-lfs.patch 14 Jan 2005 13:39:53 -0000 1.1
+++ cpio-2.6-lfs.patch 31 Oct 2005 08:54:05 -0000 1.2
@@ -1,31 +1,43 @@
---- cpio-2.6/src/extern.h.lfs 2004-09-08 10:49:57.000000000 +0000
-+++ cpio-2.6/src/extern.h 2005-01-14 14:10:09.006784175 +0000
+--- cpio-2.6/src/copyin.c.lfs 2005-07-01 13:48:05.000000000 +0200
++++ cpio-2.6/src/copyin.c 2005-07-01 13:48:18.000000000 +0200
+@@ -106,7 +106,7 @@
+ header type. */
+
+ static void
+-tape_skip_padding (int in_file_des, int offset)
++tape_skip_padding (int in_file_des, unsigned long offset)
+ {
+ int pad;
+
+--- cpio-2.6/src/extern.h.lfs 2004-09-08 12:49:57.000000000 +0200
++++ cpio-2.6/src/extern.h 2005-07-01 13:47:20.000000000 +0200
@@ -161,13 +161,13 @@
void tape_empty_output_buffer P_((int out_des));
void disk_empty_output_buffer P_((int out_des));
void swahw_array P_((char *ptr, int count));
-void tape_buffered_write P_((char *in_buf, int out_des, long num_bytes));
-+void tape_buffered_write P_((char *in_buf, int out_des, off_t num_bytes));
++void tape_buffered_write P_((char *in_buf, int out_des, unsigned long num_bytes));
void tape_buffered_read P_((char *in_buf, int in_des, long num_bytes));
int tape_buffered_peek P_((char *peek_buf, int in_des, int num_bytes));
- void tape_toss_input P_((int in_des, long num_bytes));
+-void tape_toss_input P_((int in_des, long num_bytes));
-void copy_files_tape_to_disk P_((int in_des, int out_des, long num_bytes));
-void copy_files_disk_to_tape P_((int in_des, int out_des, long num_bytes, char *filename));
-void copy_files_disk_to_disk P_((int in_des, int out_des, long num_bytes, char *filename));
-+void copy_files_tape_to_disk P_((int in_des, int out_des, off_t num_bytes));
-+void copy_files_disk_to_tape P_((int in_des, int out_des, off_t num_bytes, char *filename));
-+void copy_files_disk_to_disk P_((int in_des, int out_des, off_t num_bytes, char *filename));
++void tape_toss_input P_((int in_des, unsigned long num_bytes));
++void copy_files_tape_to_disk P_((int in_des, int out_des, unsigned long num_bytes));
++void copy_files_disk_to_tape P_((int in_des, int out_des, unsigned long num_bytes, char *filename));
++void copy_files_disk_to_disk P_((int in_des, int out_des, unsigned long num_bytes, char *filename));
void warn_if_file_changed P_((char *file_name, unsigned long old_file_size,
unsigned long old_file_mtime));
void create_all_directories P_((char *name));
---- cpio-2.6/src/util.c.lfs 2004-09-08 10:44:49.000000000 +0000
-+++ cpio-2.6/src/util.c 2005-01-14 14:30:33.448133098 +0000
+--- cpio-2.6/src/util.c.lfs 2004-09-08 12:44:49.000000000 +0200
++++ cpio-2.6/src/util.c 2005-07-01 13:56:49.000000000 +0200
@@ -207,7 +207,7 @@
Exit with an error if end of file is reached. */
static int
-disk_fill_input_buffer (int in_des, int num_bytes)
-+disk_fill_input_buffer (int in_des, off_t num_bytes)
++disk_fill_input_buffer (int in_des, unsigned long num_bytes)
{
in_buff = input_buffer;
num_bytes = (num_bytes < DISK_IO_BLOCK_SIZE) ? num_bytes : DISK_IO_BLOCK_SIZE;
@@ -34,10 +46,10 @@
void
-tape_buffered_write (char *in_buf, int out_des, long num_bytes)
-+tape_buffered_write (char *in_buf, int out_des, off_t num_bytes)
++tape_buffered_write (char *in_buf, int out_des, unsigned long num_bytes)
{
- register long bytes_left = num_bytes; /* Bytes needing to be copied. */
-+ register off_t bytes_left = num_bytes; /* Bytes needing to be copied. */
++ register unsigned long bytes_left = num_bytes; /* Bytes needing to be copied. */
register long space_left; /* Room left in output buffer. */
while (bytes_left > 0)
@@ -46,22 +58,38 @@
void
-disk_buffered_write (char *in_buf, int out_des, long num_bytes)
-+disk_buffered_write (char *in_buf, int out_des, off_t num_bytes)
++disk_buffered_write (char *in_buf, int out_des, unsigned long num_bytes)
{
- register long bytes_left = num_bytes; /* Bytes needing to be copied. */
-+ register off_t bytes_left = num_bytes; /* Bytes needing to be copied. */
++ register unsigned long bytes_left = num_bytes; /* Bytes needing to be copied. */
register long space_left; /* Room left in output buffer. */
while (bytes_left > 0)
-@@ -407,9 +407,9 @@
- write_nuls_to_file (long num_bytes, int out_des,
+@@ -376,9 +376,9 @@
+ /* Skip the next NUM_BYTES bytes of file descriptor IN_DES. */
+
+ void
+-tape_toss_input (int in_des, long num_bytes)
++tape_toss_input (int in_des, unsigned long num_bytes)
+ {
+- register long bytes_left = num_bytes; /* Bytes needing to be copied. */
++ register unsigned long bytes_left = num_bytes; /* Bytes needing to be copied. */
+ register long space_left; /* Bytes to copy from input buffer. */
+
+ while (bytes_left > 0)
+@@ -404,12 +404,12 @@
+ }
+
+ static void
+-write_nuls_to_file (long num_bytes, int out_des,
++write_nuls_to_file (unsigned long num_bytes, int out_des,
void (*writer) (char *in_buf, int out_des, long num_bytes))
{
- long blocks;
-+ off_t blocks;
++ unsigned long blocks;
long extra_bytes;
- long i;
-+ off_t i;
++ unsigned long i;
blocks = num_bytes / 512;
extra_bytes = num_bytes % 512;
@@ -70,12 +98,12 @@
void
-copy_files_tape_to_disk (int in_des, int out_des, long num_bytes)
-+copy_files_tape_to_disk (int in_des, int out_des, off_t num_bytes)
++copy_files_tape_to_disk (int in_des, int out_des, unsigned long num_bytes)
{
- long size;
- long k;
-+ off_t size;
-+ off_t k;
++ unsigned long size;
++ unsigned long k;
while (num_bytes > 0)
{
@@ -84,16 +112,16 @@
void
-copy_files_disk_to_tape (int in_des, int out_des, long num_bytes,
-+copy_files_disk_to_tape (int in_des, int out_des, off_t num_bytes,
++copy_files_disk_to_tape (int in_des, int out_des, unsigned long num_bytes,
char *filename)
{
- long size;
- long k;
-+ off_t size;
-+ off_t k;
++ unsigned long size;
++ unsigned long k;
int rc;
- long original_num_bytes;
-+ off_t original_num_bytes;
++ unsigned long original_num_bytes;
original_num_bytes = num_bytes;
@@ -115,15 +143,15 @@
void
-copy_files_disk_to_disk (int in_des, int out_des, long num_bytes,
-+copy_files_disk_to_disk (int in_des, int out_des, off_t num_bytes,
++copy_files_disk_to_disk (int in_des, int out_des, unsigned long num_bytes,
char *filename)
{
- long size;
- long k;
- long original_num_bytes;
-+ off_t size;
-+ off_t k;
-+ off_t original_num_bytes;
++ unsigned long size;
++ unsigned long k;
++ unsigned long original_num_bytes;
int rc;
original_num_bytes = num_bytes;
Index: cpio.spec
===================================================================
RCS file: /cvs/dist/rpms/cpio/FC-4/cpio.spec,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- cpio.spec 17 May 2005 12:13:59 -0000 1.27
+++ cpio.spec 31 Oct 2005 08:54:05 -0000 1.28
@@ -6,7 +6,7 @@
Summary: A GNU archiving program.
Name: cpio
Version: 2.6
-Release: 7
+Release: 8.FC4
License: GPL
Group: Applications/Archiving
URL: http://www.gnu.org/software/cpio/
@@ -19,6 +19,7 @@
Patch18: cpio-2.6-chmodRaceC.patch
Patch19: cpio-2.6-dirTraversal.patch
Patch20: cpio-2.6-warnings.patch
+Patch21: cpio-2.6-checksum.patch
%ifnos linux
Prereq: /sbin/rmt
@@ -51,7 +52,7 @@
%patch18 -p1 -b .chmodRaceC
%patch19 -p1 -b .dirTraversal
%patch20 -p1 -b .warnings
-
+%patch21 -p1 -b .checksum
autoheader
%build
@@ -101,6 +102,11 @@
%{_infodir}/*.info*
%changelog
+* Mon Oct 31 2005 Peter Vrabec <pvrabec at redhat.com> 2.6-8.FC4
+- fix checksum error on 64-bit machines (#171649)
+- fix large file support, archive >4GiB, archive members <4GiB (#160056)
+- fix race condition holes, use mode 0700 for dir creation
+
* Tue May 17 2005 Peter Vrabec <pvrabec at redhat.com> 2.6-7
- fix #156314 (CAN-2005-1229) cpio directory traversal issue
- fix some gcc warnings
- Previous message (by thread): rpms/cpio/devel cpio-2.6-checksum.patch, NONE, 1.1 cpio.spec, 1.28, 1.29
- Next message (by thread): rpms/jpilot/devel .cvsignore, 1.8, 1.9 jpilot.spec, 1.26, 1.27 sources, 1.8, 1.9 jpilot-0.99.8-typo.patch, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-cvs-commits
mailing list