From 857f4f069acff3f262d97198b366afdb13d1c56d Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Fri, 18 May 2007 03:24:39 +0000 Subject: [PATCH 01/13] Initialize branch F-7 for coreutils --- branch | 1 + 1 file changed, 1 insertion(+) create mode 100644 branch diff --git a/branch b/branch new file mode 100644 index 0000000..c48525c --- /dev/null +++ b/branch @@ -0,0 +1 @@ +F-7 From 576e6d19008ae053ceb0a952996dd733841be751 Mon Sep 17 00:00:00 2001 From: Tim Waugh Date: Wed, 13 Jun 2007 12:00:18 +0000 Subject: [PATCH 02/13] - Disambiguate futimens() from the glibc implementation (bug #242321). --- coreutils-futimens.patch | 47 ++++++++++++++++++++++++++++++++++++++++ coreutils.spec | 5 +++++ 2 files changed, 52 insertions(+) create mode 100644 coreutils-futimens.patch diff --git a/coreutils-futimens.patch b/coreutils-futimens.patch new file mode 100644 index 0000000..bb08384 --- /dev/null +++ b/coreutils-futimens.patch @@ -0,0 +1,47 @@ +--- coreutils-6.9/lib/utimens.h.futimens 2007-02-23 18:25:21.000000000 +0000 ++++ coreutils-6.9/lib/utimens.h 2007-06-13 11:40:37.000000000 +0100 +@@ -1,3 +1,3 @@ + #include +-int futimens (int, char const *, struct timespec const [2]); ++int gl_futimens (int, char const *, struct timespec const [2]); + int utimens (char const *, struct timespec const [2]); +--- coreutils-6.9/lib/utimens.c.futimens 2007-01-18 08:33:34.000000000 +0000 ++++ coreutils-6.9/lib/utimens.c 2007-06-13 11:40:37.000000000 +0100 +@@ -75,7 +75,7 @@ struct utimbuf + Return 0 on success, -1 (setting errno) on failure. */ + + int +-futimens (int fd ATTRIBUTE_UNUSED, ++gl_futimens (int fd ATTRIBUTE_UNUSED, + char const *file, struct timespec const timespec[2]) + { + /* Some Linux-based NFS clients are buggy, and mishandle time stamps +@@ -185,5 +185,5 @@ futimens (int fd ATTRIBUTE_UNUSED, + int + utimens (char const *file, struct timespec const timespec[2]) + { +- return futimens (-1, file, timespec); ++ return gl_futimens (-1, file, timespec); + } +--- coreutils-6.9/src/copy.c.futimens 2007-06-13 11:56:44.000000000 +0100 ++++ coreutils-6.9/src/copy.c 2007-06-13 11:57:00.000000000 +0100 +@@ -547,7 +547,7 @@ copy_reg (char const *src_name, char con + timespec[0] = get_stat_atime (src_sb); + timespec[1] = get_stat_mtime (src_sb); + +- if (futimens (dest_desc, dst_name, timespec) != 0) ++ if (gl_futimens (dest_desc, dst_name, timespec) != 0) + { + error (0, errno, _("preserving times for %s"), quote (dst_name)); + if (x->require_preserve) +--- coreutils-6.9/src/touch.c.futimens 2007-06-13 11:58:00.000000000 +0100 ++++ coreutils-6.9/src/touch.c 2007-06-13 11:58:06.000000000 +0100 +@@ -182,7 +182,7 @@ touch (const char *file) + t = timespec; + } + +- ok = (futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0); ++ ok = (gl_futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0); + + if (fd == STDIN_FILENO) + { diff --git a/coreutils.spec b/coreutils.spec index 46e68a6..3a606cc 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -17,6 +17,7 @@ Source202: coreutils-su-l.pamd Source203: coreutils-runuser-l.pamd # From upstream +Patch1: coreutils-futimens.patch # Our patches Patch100: coreutils-chgrp.patch @@ -81,6 +82,7 @@ the old GNU fileutils, sh-utils, and textutils packages. %setup -q # From upstream +%patch1 -p1 -b .futimens # Our patches %patch100 -p1 -b .chgrp @@ -266,6 +268,9 @@ fi /sbin/runuser %changelog +* Wed Jun 13 2007 Tim Waugh +- Disambiguate futimens() from the glibc implementation (bug #242321). + * Mon Apr 02 2007 Karsten Hopp 6.9-2 - /bin/mv in %%post requires libselinux From d13c865cca43c122399d7eebaf56e08e04707e28 Mon Sep 17 00:00:00 2001 From: Tim Waugh Date: Wed, 13 Jun 2007 13:30:00 +0000 Subject: [PATCH 03/13] - Fixed 'ls -x' output (bug #240298). --- coreutils-ls-x.patch | 109 +++++++++++++++++++++++++++++++++++++++++++ coreutils.spec | 3 ++ 2 files changed, 112 insertions(+) create mode 100644 coreutils-ls-x.patch diff --git a/coreutils-ls-x.patch b/coreutils-ls-x.patch new file mode 100644 index 0000000..de1de02 --- /dev/null +++ b/coreutils-ls-x.patch @@ -0,0 +1,109 @@ +--- coreutils-6.9/src/ls.c.ls-x 2007-06-13 14:27:36.000000000 +0100 ++++ coreutils-6.9/src/ls.c 2007-06-13 14:28:42.000000000 +0100 +@@ -4151,16 +4151,16 @@ + size_t pos = 0; + size_t cols = calculate_columns (false); + struct column_info const *line_fmt = &column_info[cols - 1]; +- size_t name_length = length_of_file_name_and_frills (cwd_file); ++ struct fileinfo const *f = sorted_file[0]; ++ size_t name_length = length_of_file_name_and_frills (f); + size_t max_name_length = line_fmt->col_arr[0]; + + /* Print first entry. */ +- print_file_name_and_frills (cwd_file); ++ print_file_name_and_frills (f); + + /* Now the rest. */ + for (filesno = 1; filesno < cwd_n_used; ++filesno) + { +- struct fileinfo const *f; + size_t col = filesno % cols; + + if (col == 0) +--- coreutils-6.9/tests/ls/Makefile.am.ls-x 2007-03-18 21:36:43.000000000 +0000 ++++ coreutils-6.9/tests/ls/Makefile.am 2007-06-13 14:28:42.000000000 +0100 +@@ -24,7 +24,7 @@ + stat-dtype \ + inode dangle file-type recursive dired infloop \ + rt-1 time-1 symlink-slash follow-slink no-arg m-option \ +- stat-vs-dirent ++ stat-vs-dirent x-option + + EXTRA_DIST = $(TESTS) + TESTS_ENVIRONMENT = \ +--- /dev/null 2007-06-13 08:43:51.993263382 +0100 ++++ coreutils-6.9/tests/ls/x-option 2007-06-13 14:28:42.000000000 +0100 +@@ -0,0 +1,59 @@ ++#!/bin/sh ++# Exercise the -x option. ++ ++# Copyright (C) 2007 Free Software Foundation, Inc. ++ ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++ ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ++# 02110-1301, USA. ++ ++if test "$VERBOSE" = yes; then ++ set -x ++ ls --version ++fi ++ ++. $srcdir/../envvar-check ++. $srcdir/../lang-default ++ ++pwd=`pwd` ++t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$ ++trap 'status=$?; cd "$pwd" && chmod -R u+rwx $t0 && rm -rf $t0 && exit $status' 0 ++trap '(exit $?); exit $?' 1 2 13 15 ++ ++framework_failure=0 ++mkdir -p $tmp || framework_failure=1 ++cd $tmp || framework_failure=1 ++mkdir subdir || framework_failure=1 ++touch subdir/b || framework_failure=1 ++touch subdir/a || framework_failure=1 ++ ++if test $framework_failure = 1; then ++ echo "$0: failure in testing framework" 1>&2 ++ (exit 1); exit 1 ++fi ++ ++fail=0 ++ ++# Coreutils 6.8 and 6.9 would output this in the wrong order. ++ls -x subdir > out || fail=1 ++ls -rx subdir >> out || fail=1 ++cat <<\EOF > exp || fail=1 ++a b ++b a ++EOF ++ ++cmp out exp || fail=1 ++test $fail = 1 && diff out exp 2> /dev/null ++ ++(exit $fail); exit $fail +--- coreutils-6.9/NEWS.ls-x 2007-03-22 21:19:45.000000000 +0000 ++++ coreutils-6.9/NEWS 2007-06-13 14:28:42.000000000 +0100 +@@ -13,6 +13,11 @@ + Using pr -m -s (i.e. merging files, with TAB as the output separator) + no longer inserts extraneous spaces between output columns. + ++** Bug fixes ++ ++ ls -x DIR would sometimes output the wrong string in place of the ++ first entry. [introduced in coreutils-6.8] ++ + + * Noteworthy changes in release 6.8 (2007-02-24) [not-unstable] + diff --git a/coreutils.spec b/coreutils.spec index 3a606cc..e82eb8b 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -18,6 +18,7 @@ Source203: coreutils-runuser-l.pamd # From upstream Patch1: coreutils-futimens.patch +Patch2: coreutils-ls-x.patch # Our patches Patch100: coreutils-chgrp.patch @@ -83,6 +84,7 @@ the old GNU fileutils, sh-utils, and textutils packages. # From upstream %patch1 -p1 -b .futimens +%patch2 -p1 -b .ls-x # Our patches %patch100 -p1 -b .chgrp @@ -269,6 +271,7 @@ fi %changelog * Wed Jun 13 2007 Tim Waugh +- Fixed 'ls -x' output (bug #240298). - Disambiguate futimens() from the glibc implementation (bug #242321). * Mon Apr 02 2007 Karsten Hopp 6.9-2 From e644251644f4149864c9454db43f7741bdf84ba8 Mon Sep 17 00:00:00 2001 From: Tim Waugh Date: Wed, 13 Jun 2007 13:51:49 +0000 Subject: [PATCH 04/13] 6.9-3 --- coreutils.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/coreutils.spec b/coreutils.spec index e82eb8b..b613ef9 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ Summary: The GNU core utilities: a set of tools commonly used in shell scripts Name: coreutils Version: 6.9 -Release: 2%{?dist} +Release: 3%{?dist} License: GPL Group: System Environment/Base Url: http://www.gnu.org/software/coreutils/ @@ -270,7 +270,7 @@ fi /sbin/runuser %changelog -* Wed Jun 13 2007 Tim Waugh +* Wed Jun 13 2007 Tim Waugh 6.9-3 - Fixed 'ls -x' output (bug #240298). - Disambiguate futimens() from the glibc implementation (bug #242321). From 38d2277a5a536909d8bfcca1d017ad7d049d5069 Mon Sep 17 00:00:00 2001 From: Tim Waugh Date: Wed, 13 Jun 2007 14:01:02 +0000 Subject: [PATCH 05/13] Fix x-option test. --- coreutils.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/coreutils.spec b/coreutils.spec index b613ef9..b7a73c4 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -115,6 +115,7 @@ the old GNU fileutils, sh-utils, and textutils packages. sed -i -e 's/basic-1//g' tests/stty/Makefile* chmod a+x tests/sort/sort-mb-tests +chmod a+x tests/ls/x-option %build %ifarch s390 s390x From caa9ac6d01f42cb4112af5039ad45d076353ebcb Mon Sep 17 00:00:00 2001 From: Ondrej Vasik Date: Thu, 25 Oct 2007 11:21:09 +0000 Subject: [PATCH 06/13] upstream patch - fixing cp -iu options(#248591) + runuser patch backport from F8(#241662) --- coreutils-5.2.1-runuser.patch | 8 --- coreutils-6.9-cp-i-u.patch | 110 ++++++++++++++++++++++++++++++++++ coreutils.spec | 9 ++- 3 files changed, 118 insertions(+), 9 deletions(-) create mode 100644 coreutils-6.9-cp-i-u.patch diff --git a/coreutils-5.2.1-runuser.patch b/coreutils-5.2.1-runuser.patch index 0fd6ae0..b64dbfe 100644 --- a/coreutils-5.2.1-runuser.patch +++ b/coreutils-5.2.1-runuser.patch @@ -304,14 +304,6 @@ shred.1 shuf.1 sleep.1 sort.1 split.1 stat.1 \ su.1 sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \ tty.1 unexpand.1 uniq.1 unlink.1 vdir.1 wc.1 \ -@@ -105,6 +105,7 @@ - readlink.1: $(common_dep) $(srcdir)/readlink.x ../src/readlink.c - rm.1: $(common_dep) $(srcdir)/rm.x ../src/rm.c - rmdir.1: $(common_dep) $(srcdir)/rmdir.x ../src/rmdir.c -+runuser.1: $(common_dep) $(srcdir)/runuser.x ../src/su.c - seq.1: $(common_dep) $(srcdir)/seq.x ../src/seq.c - sha1sum.1: $(common_dep) $(srcdir)/sha1sum.x ../src/md5sum.c - sha224sum.1: $(common_dep) $(srcdir)/sha224sum.x ../src/md5sum.c --- /dev/null 2007-01-09 09:38:07.860075128 +0000 +++ coreutils-6.7/man/runuser.x 2007-01-09 17:27:56.000000000 +0000 @@ -0,0 +1,4 @@ diff --git a/coreutils-6.9-cp-i-u.patch b/coreutils-6.9-cp-i-u.patch new file mode 100644 index 0000000..167cacc --- /dev/null +++ b/coreutils-6.9-cp-i-u.patch @@ -0,0 +1,110 @@ +When "cp -i --update old new" would do nothing because "new" is +newer than "old", cp would nonetheless prompt for whether it is +ok to overwrite "new". Then, regardless of the response (because +of the --update option), cp would do nothing. + +The following patch eliminates the unnecessary prompt in that case. + +diff --git a/src/copy.c b/src/copy.c +index b7bf73b..0e549d2 100644 +--- a/src/copy.c ++++ b/src/copy.c +@@ -1210,6 +1210,30 @@ copy_internal (char const *src_name, char const *dst_name, + return false; + } + ++ if (!S_ISDIR (src_mode) && x->update) ++ { ++ /* When preserving time stamps (but not moving within a file ++ system), don't worry if the destination time stamp is ++ less than the source merely because of time stamp ++ truncation. */ ++ int options = ((x->preserve_timestamps ++ && ! (x->move_mode ++ && dst_sb.st_dev == src_sb.st_dev)) ++ ? UTIMECMP_TRUNCATE_SOURCE ++ : 0); ++ ++ if (0 <= utimecmp (dst_name, &dst_sb, &src_sb, options)) ++ { ++ /* We're using --update and the destination is not older ++ than the source, so do not copy or move. Pretend the ++ rename succeeded, so the caller (if it's mv) doesn't ++ end up removing the source file. */ ++ if (rename_succeeded) ++ *rename_succeeded = true; ++ return true; ++ } ++ } ++ + /* When there is an existing destination file, we may end up + returning early, and hence not copying/moving the file. + This may be due to an interactive `negative' reply to the +@@ -1302,30 +1326,6 @@ copy_internal (char const *src_name, char const *dst_name, + return false; + } + } +- +- if (x->update) +- { +- /* When preserving time stamps (but not moving within a file +- system), don't worry if the destination time stamp is +- less than the source merely because of time stamp +- truncation. */ +- int options = ((x->preserve_timestamps +- && ! (x->move_mode +- && dst_sb.st_dev == src_sb.st_dev)) +- ? UTIMECMP_TRUNCATE_SOURCE +- : 0); +- +- if (0 <= utimecmp (dst_name, &dst_sb, &src_sb, options)) +- { +- /* We're using --update and the destination is not older +- than the source, so do not copy or move. Pretend the +- rename succeeded, so the caller (if it's mv) doesn't +- end up removing the source file. */ +- if (rename_succeeded) +- *rename_succeeded = true; +- return true; +- } +- } + } + + if (x->move_mode) +diff --git a/tests/mv/update b/tests/mv/update +index 0c06024..6c3d149 100755 +--- a/tests/mv/update ++++ b/tests/mv/update +@@ -1,7 +1,7 @@ + #!/bin/sh + # make sure --update works as advertised + +-# Copyright (C) 2001, 2004, 2006 Free Software Foundation, Inc. ++# Copyright (C) 2001, 2004, 2006-2007 Free Software Foundation, Inc. + + # This program is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -46,11 +46,16 @@ fi + + fail=0 + +-for cp_or_mv in cp mv; do +- # This is a no-op. +- $cp_or_mv --update old new || fail=1 +- case "`cat new`" in new) ;; *) fail=1 ;; esac +- case "`cat old`" in old) ;; *) fail=1 ;; esac ++for interactive in '' -i; do ++ for cp_or_mv in cp mv; do ++ # This is a no-op, with no prompt. ++ # With coreutils-6.9 and earlier, using --update with -i would ++ # mistakenly elicit a prompt. ++ $cp_or_mv $interactive --update old new < /dev/null > out 2>&1 || fail=1 ++ test -s out && fail=1 ++ case "`cat new`" in new) ;; *) fail=1 ;; esac ++ case "`cat old`" in old) ;; *) fail=1 ;; esac ++ done + done + + # This will actually perform the rename. +-- +1.5.3.rc1.16.g9d6f diff --git a/coreutils.spec b/coreutils.spec index b7a73c4..87a2751 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ Summary: The GNU core utilities: a set of tools commonly used in shell scripts Name: coreutils Version: 6.9 -Release: 3%{?dist} +Release: 4%{?dist} License: GPL Group: System Environment/Base Url: http://www.gnu.org/software/coreutils/ @@ -19,6 +19,7 @@ Source203: coreutils-runuser-l.pamd # From upstream Patch1: coreutils-futimens.patch Patch2: coreutils-ls-x.patch +Patch3: coreutils-6.9-cp-i-u.patch # Our patches Patch100: coreutils-chgrp.patch @@ -85,6 +86,7 @@ the old GNU fileutils, sh-utils, and textutils packages. # From upstream %patch1 -p1 -b .futimens %patch2 -p1 -b .ls-x +%patch3 -p1 -b .cp-i-u # Our patches %patch100 -p1 -b .chgrp @@ -271,6 +273,11 @@ fi /sbin/runuser %changelog +* Thu Oct 25 2007 Ondrej Vasik 6.9-4 +- applied upstream patch for cp and mv(bug #248591) +- Don't generate runuser.1 since we ship a complete manpage for it + (bug #241662). + * Wed Jun 13 2007 Tim Waugh 6.9-3 - Fixed 'ls -x' output (bug #240298). - Disambiguate futimens() from the glibc implementation (bug #242321). From 1cfc05a031f846cde4e952d760b6513e431b833c Mon Sep 17 00:00:00 2001 From: Ondrej Vasik Date: Tue, 30 Oct 2007 17:10:48 +0000 Subject: [PATCH 07/13] fix for runuser (#232652), for sort -R(#249315), for cp -a rewrite on NFS(#219900), License tag to GPLv2+ --- coreutils-6.9-requiresecuritycontext.patch | 160 +++++++++++++++++++++ coreutils-i18n.patch | 8 +- coreutils-selinux.patch | 5 +- coreutils.spec | 17 ++- 4 files changed, 182 insertions(+), 8 deletions(-) create mode 100644 coreutils-6.9-requiresecuritycontext.patch diff --git a/coreutils-6.9-requiresecuritycontext.patch b/coreutils-6.9-requiresecuritycontext.patch new file mode 100644 index 0000000..175a6ab --- /dev/null +++ b/coreutils-6.9-requiresecuritycontext.patch @@ -0,0 +1,160 @@ +diff -ur coreutils-6.9-orig/src/install.c coreutils-6.9/src/install.c +--- a/src/install.c 2007-10-30 12:34:07.000000000 +0100 ++++ b/src/install.c 2007-10-30 15:41:15.000000000 +0100 +@@ -174,6 +174,7 @@ + x->preserve_mode = false; + x->preserve_timestamps = false; + x->require_preserve = false; ++ x->require_preserve_context = false; + x->recursive = false; + x->sparse_mode = SPARSE_AUTO; + x->symbolic_link = false; +diff -ur coreutils-6.9-orig/src/mv.c coreutils-6.9/src/mv.c +--- a/src/mv.c 2007-10-30 12:34:07.000000000 +0100 ++++ b/src/mv.c 2007-10-30 15:34:37.000000000 +0100 +@@ -131,6 +131,7 @@ + x->preserve_timestamps = true; + x->preserve_security_context = selinux_enabled; + x->require_preserve = false; /* FIXME: maybe make this an option */ ++ x->require_preserve_context = false; + x->recursive = true; + x->sparse_mode = SPARSE_AUTO; /* FIXME: maybe make this an option */ + x->symbolic_link = false; +diff -ur coreutils-6.9-orig/src/copy.c coreutils-6.9/src/copy.c +--- coreutils-6.9-orig/src/copy.c 2007-10-30 12:34:07.000000000 +0100 ++++ coreutils-6.9/src/copy.c 2007-10-30 16:01:22.000000000 +0100 +@@ -306,25 +307,33 @@ + if (! *new_dst) + { + dest_desc = open (dst_name, O_WRONLY | O_TRUNC | O_BINARY); + + #ifdef WITH_SELINUX +- if (dest_desc >= 0 && selinux_enabled && +- (x->preserve_security_context || x->set_security_context)) ++ if (x->preserve_security_context && 0 <= dest_desc) + { +- security_context_t con; +- if(getfscreatecon(&con) == -1) ++ security_context_t con = NULL; ++ if(getfscreatecon(&con) < 0) + { +- return_val = false; +- goto close_src_desc; ++ if (x->require_preserve_context) ++ { ++ error(0, errno, _("failed to get file system create context")); ++ return_val = false; ++ goto close_src_desc; ++ } + } + + if (con) + { +- if(fsetfilecon(dest_desc, con) == -1) ++ if(fsetfilecon(dest_desc, con) < 0) + { +- return_val = false; +- freecon(con); +- goto close_src_desc; ++ if (x->require_preserve_context) ++ { ++ error(0, errno, _("failed to set security context of %s to %s"), ++ quote_n (0, dst_name), quote_n(1, con)); ++ return_val = false; ++ freecon(con); ++ goto close_src_desc; ++ } + } + freecon(con); + } +@@ -1577,10 +1587,10 @@ + { + if (setfscreatecon(con) < 0) + { +- error (0, errno, _("cannot set setfscreatecon %s"), quote (con)); +- if (x->require_preserve) { +- freecon(con); +- return 1; ++ error (0, errno, _("cannot set default file creation context to %s"), quote (con)); ++ if (x->require_preserve_context) { ++ freecon(con); ++ return false; + } + } + freecon(con); +@@ -1588,7 +1598,8 @@ + else { + if (( errno != ENOTSUP ) && ( errno != ENODATA )) { + error (0, errno, _("cannot lgetfilecon %s"), quote (src_name)); +- return 1; ++ if (x->require_preserve_context) ++ return false; + } + } + } +diff -ur coreutils-6.9-orig/src/copy.h coreutils-6.9/src/copy.h +--- coreutils-6.9-orig/src/copy.h 2007-10-30 12:34:07.000000000 +0100 ++++ coreutils-6.9/src/copy.h 2007-10-30 15:52:59.000000000 +0100 +@@ -150,6 +150,18 @@ + it be zero. */ + bool require_preserve; + ++ /* Useful only when preserve_security_context is true. ++ If true, a failed attempt to preserve a file's security context ++ propagates failure "out" to the caller. If false, a failure to ++ preserve a file's security context does not change the invoking ++ application's exit status. Give diagnostics for failed syscalls ++ regardless of this setting. For example, with "cp --preserve=context" ++ this flag is "true", while with "cp -a", it is false. That means ++ "cp -a" attempts to preserve any security context, but does not ++ fail if it is unable to do so. */ ++ bool require_preserve_context; ++ ++ + /* If true, copy directories recursively and copy special files + as themselves rather than copying their contents. */ + bool recursive; +diff -ur coreutils-6.9-orig/src/cp.c coreutils-6.9/src/cp.c +--- coreutils-6.9-orig/src/cp.c 2007-10-30 12:42:13.000000000 +0100 ++++ coreutils-6.9/src/cp.c 2007-10-30 16:00:33.000000000 +0100 +@@ -766,7 +766,7 @@ + x->preserve_security_context = false; + x->set_security_context = false; + #endif +- ++ x->require_preserve_context = false; + x->require_preserve = false; + x->recursive = false; + x->sparse_mode = SPARSE_AUTO; +@@ -844,6 +844,7 @@ + + case PRESERVE_CONTEXT: + x->preserve_security_context = on_off; ++ x->require_preserve_context = on_off; + break; + + case PRESERVE_ALL: +@@ -851,7 +834,10 @@ + x->preserve_timestamps = on_off; + x->preserve_ownership = on_off; + x->preserve_links = on_off; +- x->preserve_security_context = on_off; ++ if (selinux_enabled) { ++ x->preserve_security_context = on_off; ++ x->require_preserve_context = on_off; ++ } + break; + + default: +@@ -915,8 +916,9 @@ + x.preserve_ownership = true; + x.preserve_mode = true; + x.preserve_timestamps = true; +- x.preserve_security_context = true; +- x.require_preserve = true; ++ if (selinux_enabled) ++ x.preserve_security_context = true; ++ x.require_preserve = true; + x.recursive = true; + break; + diff --git a/coreutils-i18n.patch b/coreutils-i18n.patch index 44b0dd9..108cbc3 100644 --- a/coreutils-i18n.patch +++ b/coreutils-i18n.patch @@ -2196,7 +2196,7 @@ { struct keyfield const *key = keylist; -@@ -1875,6 +2265,177 @@ +@@ -1875,6 +2265,179 @@ return key->reverse ? -diff : diff; } @@ -2232,7 +2232,9 @@ + size_t lenb = limb <= textb ? 0 : limb - textb; + + /* Actually compare the fields. */ -+ if (key->numeric | key->general_numeric) ++ if (key->random) ++ diff = compare_random (texta, lena, textb, lenb); ++ else if (key->numeric | key->general_numeric) + { + char savea = *lima, saveb = *limb; + @@ -2373,7 +2375,7 @@ + /* Compare two lines A and B, returning negative, zero, or positive depending on whether A compares less than, equal to, or greater than B. */ - + @@ -2744,7 +3305,7 @@ initialize_exit_failure (SORT_FAILURE); diff --git a/coreutils-selinux.patch b/coreutils-selinux.patch index 7e4797d..baba88a 100644 --- a/coreutils-selinux.patch +++ b/coreutils-selinux.patch @@ -1717,7 +1717,7 @@ backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX"); --- /dev/null 2007-03-23 08:54:03.819414923 +0000 +++ coreutils-6.9/src/runcon.c 2007-03-23 11:59:21.000000000 +0000 -@@ -0,0 +1,253 @@ +@@ -0,0 +1,252 @@ +/* + * runcon [ context | + * ( [ -c ] [ -r role ] [-t type] [ -u user ] [ -l levelrange ] ) @@ -1803,7 +1803,6 @@ + textdomain (PACKAGE); + + while (1) { -+ int c; + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static struct option long_options[] = { @@ -1816,7 +1815,7 @@ + { "version", 0, &show_version, 1 }, + { 0, 0, 0, 0 } + }; -+ c = getopt_long(argc, argv, "r:t:u:l:c", long_options, &option_index); ++ int c = getopt_long(argc, argv, "+r:t:u:l:c", long_options, &option_index); + if ( c == -1 ) { + break; + } diff --git a/coreutils.spec b/coreutils.spec index 87a2751..aec429d 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,8 +1,8 @@ Summary: The GNU core utilities: a set of tools commonly used in shell scripts Name: coreutils Version: 6.9 -Release: 4%{?dist} -License: GPL +Release: 5%{?dist} +License: GPLv2+ Group: System Environment/Base Url: http://www.gnu.org/software/coreutils/ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -46,6 +46,9 @@ Patch916: coreutils-getfacl-exit-code.patch #SELINUX Patch Patch950: coreutils-selinux.patch +#SELINUX Patch fix to allow cp -a rewrite file on different filesystem +Patch951: coreutils-6.9-requiresecuritycontext.patch + BuildRequires: libselinux-devel >= 1.25.6-1 BuildRequires: libacl-devel @@ -111,6 +114,7 @@ the old GNU fileutils, sh-utils, and textutils packages. #SELinux %patch950 -p1 -b .selinux +%patch951 -p1 -b .require-preserve # Don't run basic-1 test, since it breaks when run in the background # (bug #102033). @@ -273,6 +277,15 @@ fi /sbin/runuser %changelog +* Tue Oct 30 2007 Ondrej Vasik 6.9-5 +- allow cp -a to rewrite file on different filesystem(#219900) + (based on upstream patch) +- modified coreutils-i18n.patch because of sort -R in + a non C locales(fix by Andreas Schwab) (#249315) +- applied upstream patch for runuser to coreutils-selinux.patch(#232652) +- License tag to GPLv2+ + + * Thu Oct 25 2007 Ondrej Vasik 6.9-4 - applied upstream patch for cp and mv(bug #248591) - Don't generate runuser.1 since we ship a complete manpage for it From ef39316a81baaadb4248a9dc873ba7c8f143100a Mon Sep 17 00:00:00 2001 From: Ondrej Vasik Date: Wed, 5 Dec 2007 13:53:39 +0000 Subject: [PATCH 08/13] Backport of some fixes(stat,ls,date,du,preserving sec. context) - see changelog for details --- coreutils-6.9-du-ls-upstream.patch | 98 +++++++++++ coreutils-6.9-statsecuritycontext.patch | 205 ++++++++++++++++++++++++ coreutils-getdateYYYYMMDD.patch | 124 ++++++++++++++ coreutils-selinux.patch | 26 ++- coreutils.spec | 18 ++- 5 files changed, 464 insertions(+), 7 deletions(-) create mode 100644 coreutils-6.9-du-ls-upstream.patch create mode 100644 coreutils-6.9-statsecuritycontext.patch create mode 100644 coreutils-getdateYYYYMMDD.patch diff --git a/coreutils-6.9-du-ls-upstream.patch b/coreutils-6.9-du-ls-upstream.patch new file mode 100644 index 0000000..ff285f2 --- /dev/null +++ b/coreutils-6.9-du-ls-upstream.patch @@ -0,0 +1,98 @@ +Fixes some small bugs (merged upstream patches) +Fixed RedHat Bugzillas: 250089(fix by jplans@redhat.com), 239266 + +diff -Naurp coreutils-5.2.1/lib/fts.c coreutils-5.2.1.new/lib/fts.c +--- coreutils-5.2.1/lib/fts.c 2003-12-20 10:05:23.000000000 -0800 ++++ coreutils-5.2.1.new/lib/fts.c 2007-06-14 11:38:00.696001000 -0700 +@@ -685,7 +685,7 @@ fts_read(sp) + /* If fts_build's call to fts_safe_changedir failed + because it was not able to fchdir into a + subdirectory, tell the caller. */ +- if (p->fts_errno) ++ if (p->fts_errno && p->fts_info != FTS_DNR) + p->fts_info = FTS_ERR; + LEAVE_DIR (sp, p, "2"); + return (p); + } +diff -ur coreutils-6.9-orig/src/du.c coreutils-6.9/src/du.c +--- coreutils-6.9-orig/src/du.c ++++ coreutils-6.9/src/du.c + duinfo_add (&dulvl[level].ent, &dui); + + /* Even if this directory is unreadable or we can't chdir into it, +- do let its size contribute to the total, ... */ ++ do let its size contribute to the total. */ + duinfo_add (&tot_dui, &dui); + +- /* ... but don't print out a total for it, since without the size(s) +- of any potential entries, it could be very misleading. */ +- if (ent->fts_info == FTS_DNR) +- return ok; +- + /* If we're not counting an entry, e.g., because it's a hard link + to a file we've already counted (and --count-links), then don't + print a line for it. */ +diff -urNp coreutils-6.9-orig/src/dircolors.hin coreutils-6.9/src/dircolors.hin +--- coreutils-6.9-orig/src/dircolors.hin 2007-03-18 22:36:43.000000000 +0100 ++++ coreutils-6.9/src/dircolors.hin 2007-11-02 12:27:03.000000000 +0100 +@@ -27,6 +27,7 @@ TERM cons25 + TERM console + TERM cygwin + TERM dtterm ++TERM eterm-color + TERM gnome + TERM konsole + TERM kterm +@@ -40,6 +40,7 @@ TERM rxvt-cygwin + TERM rxvt-cygwin-native + TERM rxvt-unicode + TERM screen ++TERM screen-256color + TERM screen-bce + TERM screen-w + TERM screen.linux +@@ -46,7 +47,9 @@ TERM screen-w + TERM screen.linux + TERM vt100 + TERM xterm ++TERM xterm-16color + TERM xterm-256color ++TERM xterm-88color + TERM xterm-color + TERM xterm-debian + +diff -ur a/src/ls.c b/src/ls.c +--- a/src/ls.c ++++ b/src/ls.c +@@ -1168,7 +1168,7 @@ main (int argc, char **argv) + { + /* Avoid following symbolic links when possible. */ + if (is_colored (C_ORPHAN) +- || is_colored (C_EXEC) ++ || (is_colored (C_EXEC) && color_symlink_as_referent) + || (is_colored (C_MISSING) && format == long_format)) + check_symlink_color = true; + +@@ -2570,7 +2574,8 @@ gobble_file (char const *name, enum file + || ((print_inode || format_needs_type) + && (type == symbolic_link || type == unknown) + && (dereference == DEREF_ALWAYS +- || (command_line_arg && dereference != DEREF_NEVER))) ++ || (command_line_arg && dereference != DEREF_NEVER) ++ || color_symlink_as_referent || check_symlink_color)) + /* Command line dereferences are already taken care of by the above + assertion that the inode number is not yet known. */ + || (print_inode && inode == NOT_AN_INODE_NUMBER) +@@ -2713,6 +2713,12 @@ gobble_file (char const *name, enum filetype type, ino_t inode, + free (linkname); + } + ++ /* When not distinguishing types of symlinks, pretend we know that ++ it is stat'able, so that it will be colored as a regular symlink, ++ and not as an orphan. */ ++ if (S_ISLNK (f->stat.st_mode) && !check_symlink_color) ++ f->linkok = true; ++ + if (S_ISLNK (f->stat.st_mode)) + f->filetype = symbolic_link; + else if (S_ISDIR (f->stat.st_mode)) diff --git a/coreutils-6.9-statsecuritycontext.patch b/coreutils-6.9-statsecuritycontext.patch new file mode 100644 index 0000000..062a95b --- /dev/null +++ b/coreutils-6.9-statsecuritycontext.patch @@ -0,0 +1,205 @@ +diff -urp coreutils-6.9-orig/src/stat.c coreutils-6.9/src/stat.c +--- coreutils-6.9-orig/src/stat.c 2007-12-04 16:26:39.000000000 +0100 ++++ coreutils-6.9/src/stat.c 2007-12-05 00:05:11.000000000 +0100 +@@ -55,12 +55,7 @@ + # include + #endif + +-#ifdef WITH_SELINUX + #include +-#define SECURITY_ID_T security_context_t +-#else +-#define SECURITY_ID_T char * +-#endif + + #include "system.h" + +@@ -179,6 +174,9 @@ static struct option const long_options[ + + char *program_name; + ++/* Whether to follow symbolic links; True for --dereference (-L). */ ++static bool follow_links = false; ++ + /* Whether to interpret backslash-escape sequences. + True for --printf=FMT, not for --format=FMT (-c). */ + static bool interpret_backslash_escapes; +@@ -402,10 +400,30 @@ out_uint_x (char *pformat, size_t prefix + printf (pformat, arg); + } + ++/* Very specialized function (modifies FORMAT), just so as to avoid ++ duplicating this code between both print_statfs and print_stat. */ ++static void ++out_file_context (char const *filename, char *pformat, size_t prefix_len) ++{ ++ char *scontext; ++ if ((follow_links ++ ? getfilecon (filename, &scontext) ++ : lgetfilecon (filename, &scontext)) < 0) ++ { ++ error (0, errno, _("failed to get security context of %s"), ++ quote (filename)); ++ scontext = NULL; ++ } ++ strcpy (pformat + prefix_len, "s"); ++ printf (pformat, (scontext ? scontext : "?")); ++ if (scontext) ++ freecon (scontext); ++} ++ + /* print statfs info */ + static void + print_statfs (char *pformat, size_t prefix_len, char m, char const *filename, +- void const *data, SECURITY_ID_T scontext) ++ void const *data) + { + STRUCT_STATVFS const *statfsbuf = data; + +@@ -481,8 +499,7 @@ print_statfs (char *pformat, size_t pref + out_int (pformat, prefix_len, statfsbuf->f_ffree); + break; + case 'C': +- strcat (pformat, "s"); +- printf(scontext); ++ out_file_context (filename, pformat, prefix_len); + break; + default: + fputc ('?', stdout); +@@ -493,7 +510,7 @@ print_statfs (char *pformat, size_t pref + /* print stat info */ + static void + print_stat (char *pformat, size_t prefix_len, char m, +- char const *filename, void const *data, SECURITY_ID_T scontext) ++ char const *filename, void const *data) + { + struct stat *statbuf = (struct stat *) data; + struct passwd *pw_ent; +@@ -607,8 +624,7 @@ print_stat (char *pformat, size_t prefix + out_uint (pformat, prefix_len, statbuf->st_ctime); + break; + case 'C': +- strcat (pformat, "s"); +- printf(pformat,scontext); ++ out_file_context(filename, pformat, prefix_len); + break; + default: + fputc ('?', stdout); +@@ -656,9 +672,8 @@ print_esc_char (char c) + + static void + print_it (char const *format, char const *filename, +- void (*print_func) (char *, size_t, char, char const *, void const *, +- SECURITY_ID_T ), +- void const *data, SECURITY_ID_T scontext) ++ void (*print_func) (char *, size_t, char, char const *, void const *), ++ void const *data) + { + /* Add 2 to accommodate our conversion of the stat `%s' format string + to the longer printf `%llu' one. */ +@@ -699,7 +714,7 @@ print_it (char const *format, char const + putchar ('%'); + break; + default: +- print_func (dest, len + 1, *fmt_char, filename, data, scontext); ++ print_func (dest, len + 1, *fmt_char, filename, data); + break; + } + break; +@@ -765,18 +780,6 @@ static bool + do_statfs (char const *filename, bool terse, bool secure, char const *format) + { + STRUCT_STATVFS statfsbuf; +- SECURITY_ID_T scontext = NULL; +-#ifdef WITH_SELINUX +- if(is_selinux_enabled()) { +- if (getfilecon(filename,&scontext)<0) { +- if (secure) { +- perror (filename); +- return false; +- } +- scontext = NULL; +- } +- } +-#endif + + if (STATFS (filename, &statfsbuf) != 0) + { +@@ -812,43 +815,23 @@ do_statfs (char const *filename, bool te + } + } + +- print_it (format, filename, print_statfs, &statfsbuf, scontext); +-#ifdef WITH_SELINUX +- if (scontext != NULL) +- freecon(scontext); +-#endif ++ print_it (format, filename, print_statfs, &statfsbuf); + return true; + } + + /* stat the file and print what we find */ + static bool +-do_stat (char const *filename, bool follow_links, bool terse, bool secure, ++do_stat (char const *filename, bool terse, bool secure, + char const *format) + { + struct stat statbuf; +- SECURITY_ID_T scontext = NULL; +- ++ + if ((follow_links ? stat : lstat) (filename, &statbuf) != 0) + { + error (0, errno, _("cannot stat %s"), quote (filename)); + return false; + } + +-#ifdef WITH_SELINUX +- if(is_selinux_enabled()) { +- int i; +- if (!follow_links) +- i=lgetfilecon(filename, &scontext); +- else +- i=getfilecon(filename, &scontext); +- if (i == -1 && secure) +- { +- perror (filename); +- return false; +- } +- } +-#endif +- + if (format == NULL) + { + if (terse) +@@ -893,11 +876,7 @@ do_stat (char const *filename, bool foll + } + } + } +- print_it (format, filename, print_stat, &statbuf, scontext); +-#ifdef WITH_SELINUX +- if (scontext) +- freecon(scontext); +-#endif ++ print_it (format, filename, print_stat, &statbuf); + return true; + } + +@@ -996,7 +975,6 @@ main (int argc, char *argv[]) + { + int c; + int i; +- bool follow_links = false; + bool fs = false; + bool terse = false; + bool secure = false; +@@ -1065,7 +1043,7 @@ main (int argc, char *argv[]) + for (i = optind; i < argc; i++) + ok &= (fs + ? do_statfs (argv[i], terse, secure, format) +- : do_stat (argv[i], follow_links, terse, secure, format)); ++ : do_stat (argv[i], terse, secure, format)); + + exit (ok ? EXIT_SUCCESS : EXIT_FAILURE); + } + diff --git a/coreutils-getdateYYYYMMDD.patch b/coreutils-getdateYYYYMMDD.patch new file mode 100644 index 0000000..63cd449 --- /dev/null +++ b/coreutils-getdateYYYYMMDD.patch @@ -0,0 +1,124 @@ +diff -urNp coreutils-6.9.orig/lib/getdate.y coreutils-6.9/lib/getdate.y +--- coreutils-6.9.orig/lib/getdate.y 2007-02-23 19:25:21.000000000 +0100 ++++ coreutils-6.9/lib/getdate.y 2007-11-23 10:27:13.000000000 +0100 +@@ -199,6 +199,42 @@ static int yylex (union YYSTYPE *, parse + static int yyerror (parser_control const *, char const *); + static long int time_zone_hhmm (textint, long int); + ++static void ++digits_to_date_time (parser_control *pc, textint text_int) ++{ ++ if (pc->dates_seen && ! pc->year.digits ++ && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits)) ++ pc->year = text_int; ++ else ++ { ++ if (4 < text_int.digits) ++ { ++ pc->dates_seen++; ++ pc->day = text_int.value % 100; ++ pc->month = (text_int.value / 100) % 100; ++ pc->year.value = text_int.value / 10000; ++ pc->year.digits = text_int.digits - 4; ++ } ++ else ++ { ++ pc->times_seen++; ++ if (text_int.digits <= 2) ++ { ++ pc->hour = text_int.value; ++ pc->minutes = 0; ++ } ++ else ++ { ++ pc->hour = text_int.value / 100; ++ pc->minutes = text_int.value % 100; ++ } ++ pc->seconds.tv_sec = 0; ++ pc->seconds.tv_nsec = 0; ++ pc->meridian = MER24; ++ } ++ } ++} ++ + %} + + /* We want a reentrant parser, even if the TZ manipulation and the calls to +@@ -268,6 +304,7 @@ item: + | rel + { pc->rels_seen = true; } + | number ++ | hybrid + ; + + time: +@@ -543,38 +580,23 @@ unsigned_seconds: + + number: + tUNUMBER ++ { digits_to_date_time (pc, $1); } ++ ; ++ ++hybrid: ++ tUNUMBER relunit_snumber + { +- if (pc->dates_seen && ! pc->year.digits +- && ! pc->rels_seen && (pc->times_seen || 2 < $1.digits)) +- pc->year = $1; +- else +- { +- if (4 < $1.digits) +- { +- pc->dates_seen++; +- pc->day = $1.value % 100; +- pc->month = ($1.value / 100) % 100; +- pc->year.value = $1.value / 10000; +- pc->year.digits = $1.digits - 4; +- } +- else +- { +- pc->times_seen++; +- if ($1.digits <= 2) +- { +- pc->hour = $1.value; +- pc->minutes = 0; +- } +- else +- { +- pc->hour = $1.value / 100; +- pc->minutes = $1.value % 100; +- } +- pc->seconds.tv_sec = 0; +- pc->seconds.tv_nsec = 0; +- pc->meridian = MER24; +- } +- } ++ /* Hybrid all-digit and relative offset, so that we accept e.g., ++ "YYYYMMDD +N days" as well as "YYYYMMDD N days". */ ++ digits_to_date_time (pc, $1); ++ pc->rel.ns += $2.ns; ++ pc->rel.seconds += $2.seconds; ++ pc->rel.minutes += $2.minutes; ++ pc->rel.hour += $2.hour; ++ pc->rel.day += $2.day; ++ pc->rel.month += $2.month; ++ pc->rel.year += $2.year; ++ pc->rels_seen = true; + } + ; + +diff -urNp coreutils-6.9.orig/tests/misc/date coreutils-6.9/tests/misc/date +--- coreutils-6.9.orig/tests/misc/date 2007-03-18 22:36:43.000000000 +0100 ++++ coreutils-6.9/tests/misc/date 2007-11-23 10:14:19.000000000 +0100 +@@ -135,6 +135,11 @@ my @Tests = + ['next-mo', "-d '$d1 next month' '+%Y-%m-%d %T'", {OUT=>"$dm $t0"}], + ['next-y', "-d '$d1 next year' '+%Y-%m-%d %T'", {OUT=>"$dy $t0"}], + ++ # This has always worked, ... ++ ['rel-1', "-d '20050101 1 day' +%F", {OUT=>"2005-01-02"}], ++ # ...but up to coreutils-6.9, this was rejected due to the "+". ++ ['rel-1p', "-d '20050101 +1 day' +%F", {OUT=>"2005-01-02"}], ++ + ['utc-0', "-u -d '08/01/97 6:00' '+%D,%H:%M'", {OUT=>"08/01/97,06:00"}, + {ENV => 'TZ=UTC+4'}], + diff --git a/coreutils-selinux.patch b/coreutils-selinux.patch index baba88a..c221d1e 100644 --- a/coreutils-selinux.patch +++ b/coreutils-selinux.patch @@ -2223,18 +2223,32 @@ +#endif case_GETOPT_HELP_CHAR; case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS); - default: -@@ -523,6 +613,10 @@ + default: +@@ -503,6 +591,7 @@ + static bool + change_attributes (char const *name) + { ++ bool ok = false; + /* chown must precede chmod because on some systems, + chown clears the set[ug]id bits for non-superusers, + resulting in incorrect permissions. +@@ -521,9 +610,14 @@ + else if (chmod (name, mode) != 0) + error (0, errno, _("cannot change permissions of %s"), quote (name)); else - return true; - +- return true; ++ ok = true; ++ +#ifdef WITH_SELINUX + if (use_default_selinux_context) -+ setdefaultfilecon(name); ++ setdefaultfilecon (name); +#endif - return false; + +- return false; ++ return ok; } + /* Set the timestamps of file TO to match those of file FROM. @@ -687,6 +781,11 @@ -T, --no-target-directory treat DEST as a normal file\n\ -v, --verbose print the name of each directory as it is created\n\ diff --git a/coreutils.spec b/coreutils.spec index aec429d..54ef673 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ Summary: The GNU core utilities: a set of tools commonly used in shell scripts Name: coreutils Version: 6.9 -Release: 5%{?dist} +Release: 6%{?dist} License: GPLv2+ Group: System Environment/Base Url: http://www.gnu.org/software/coreutils/ @@ -20,9 +20,11 @@ Source203: coreutils-runuser-l.pamd Patch1: coreutils-futimens.patch Patch2: coreutils-ls-x.patch Patch3: coreutils-6.9-cp-i-u.patch +Patch4: coreutils-6.9-du-ls-upstream.patch # Our patches Patch100: coreutils-chgrp.patch +Patch101: coreutils-getdateYYYYMMDD.patch # sh-utils Patch703: sh-utils-2.0.11-dateman.patch @@ -48,6 +50,7 @@ Patch916: coreutils-getfacl-exit-code.patch Patch950: coreutils-selinux.patch #SELINUX Patch fix to allow cp -a rewrite file on different filesystem Patch951: coreutils-6.9-requiresecuritycontext.patch +Patch952: coreutils-6.9-statsecuritycontext.patch BuildRequires: libselinux-devel >= 1.25.6-1 @@ -90,9 +93,11 @@ the old GNU fileutils, sh-utils, and textutils packages. %patch1 -p1 -b .futimens %patch2 -p1 -b .ls-x %patch3 -p1 -b .cp-i-u +%patch4 -p1 -b .du-ls # Our patches %patch100 -p1 -b .chgrp +%patch101 -p1 -b .getdate # sh-utils %patch703 -p1 -b .dateman @@ -115,6 +120,7 @@ the old GNU fileutils, sh-utils, and textutils packages. #SELinux %patch950 -p1 -b .selinux %patch951 -p1 -b .require-preserve +%patch952 -p1 -b .statsecuritycontext # Don't run basic-1 test, since it breaks when run in the background # (bug #102033). @@ -277,6 +283,16 @@ fi /sbin/runuser %changelog +* Wed Dec 05 2007 Ondrej Vasik 6.9-6 +- fixed bug in handling YYYYMMDD date format with relative + signed offset(#377821) +- fixed bug in selinux patch which caused bad preserving + of security context in install(#319231) +- added some upstream supported dircolors TERMs(#239266) +- fixed du output for unaccesible dirs(#250089) +- fix for wrong colored (broken) symlinks(#404511,#246567) +- fix for displaying of security context in stat(#41181) + * Tue Oct 30 2007 Ondrej Vasik 6.9-5 - allow cp -a to rewrite file on different filesystem(#219900) (based on upstream patch) From b842ca28994a40013d8cd5acc32a97d863d5e371 Mon Sep 17 00:00:00 2001 From: Ondrej Vasik Date: Tue, 4 Mar 2008 13:41:39 +0000 Subject: [PATCH 09/13] Various changes - backport from F8/Devel, see changelog for details --- coreutils-5.2.1-runuser.patch | 2 +- coreutils-6.9-longoptions.patch | 27 ++++++++++ coreutils-DIR_COLORS | 94 +++++++++++++++++++++++++++------ coreutils-DIR_COLORS.xterm | 56 ++++++++++++++++++-- coreutils-colorls.csh | 27 ++++++---- coreutils-colorls.sh | 45 ++++++++++------ coreutils-split-pam.patch | 27 ++++++++++ coreutils.spec | 17 +++++- 8 files changed, 249 insertions(+), 46 deletions(-) create mode 100644 coreutils-6.9-longoptions.patch diff --git a/coreutils-5.2.1-runuser.patch b/coreutils-5.2.1-runuser.patch index b64dbfe..88b1db1 100644 --- a/coreutils-5.2.1-runuser.patch +++ b/coreutils-5.2.1-runuser.patch @@ -330,7 +330,7 @@ +to set user ID, the command will fail. +.TP +-, \fB\-l\fR, \fB\-\-login\fR -+make the shell a login shell ++make the shell a login shell, uses runuser-l PAM file instead of default one. +.TP +\fB\-c\fR, \fB\-\-commmand\fR=\fICOMMAND\fR +pass a single COMMAND to the shell with \fB\-c\fR diff --git a/coreutils-6.9-longoptions.patch b/coreutils-6.9-longoptions.patch new file mode 100644 index 0000000..f66b96d --- /dev/null +++ b/coreutils-6.9-longoptions.patch @@ -0,0 +1,27 @@ +diff -urp coreutils-6.9-orig/src/echo.c coreutils-6.9/src/echo.c +--- coreutils-6.9-orig/src/echo.c ++++ coreutils-6.9/src/echo.c +@@ -163,6 +163,10 @@ main (int argc, char **argv) + { + case 'e': case 'E': case 'n': + break; ++ case '-': ++ /* end of short options(allows to print -n,-e or -E) */ ++ argc--; ++ argv++; + default: + goto just_echo; + } +diff -urp coreutils-6.9-orig/lib/long-options.c coreutils-6.9/lib/long-options.c +--- coreutils-6.9-orig/lib/long-options.c ++++ coreutils-6.9/lib/long-options.c +@@ -57,8 +57,7 @@ parse_long_options (int argc, + /* Don't print an error message for unrecognized options. */ + opterr = 0; + +- if (argc == 2 +- && (c = getopt_long (argc, argv, "+", long_options, NULL)) != -1) ++ while ((c = getopt_long (argc, argv, "+", long_options, NULL)) != -1) + { + switch (c) + { diff --git a/coreutils-DIR_COLORS b/coreutils-DIR_COLORS index 317c0e0..179b5e3 100644 --- a/coreutils-DIR_COLORS +++ b/coreutils-DIR_COLORS @@ -15,8 +15,9 @@ COLOR tty OPTIONS -F -T 0 # Below, there should be one TERM entry for each termtype that is colorizable -TERM linux -TERM console +TERM Eterm +TERM ansi +TERM color-xterm TERM con132x25 TERM con132x30 TERM con132x43 @@ -28,20 +29,34 @@ TERM con80x43 TERM con80x50 TERM con80x60 TERM cons25 -TERM xterm -TERM rxvt -TERM xterm-color -TERM color-xterm -TERM vt100 +TERM console +TERM cygwin TERM dtterm -TERM color_xterm -TERM ansi -TERM screen -TERM screen.linux -TERM kon -TERM kterm +TERM eterm-color TERM gnome TERM konsole +TERM kterm +TERM linux +TERM linux-c +TERM mach-color +TERM mlterm +TERM putty +TERM rxvt +TERM rxvt-cygwin +TERM rxvt-cygwin-native +TERM rxvt-unicode +TERM screen +TERM screen-256color +TERM screen-bce +TERM screen-w +TERM screen.linux +TERM vt100 +TERM xterm +TERM xterm-16color +TERM xterm-256color +TERM xterm-88color +TERM xterm-color +TERM xterm-debian # EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output) EIGHTBIT 1 @@ -78,24 +93,71 @@ EXEC 01;32 .bat 01;32 .sh 01;32 .csh 01;32 -.tar 01;31 # archives or compressed (bright red) +# archives or compressed (bright red) +.tar 01;31 .tgz 01;31 +.svgz 01;31 .arj 01;31 .taz 01;31 .lzh 01;31 +.lzma 01;31 .zip 01;31 .z 01;31 .Z 01;31 +.dz 01;31 .gz 01;31 .bz2 01;31 +.tbz2 01;31 .bz 01;31 .tz 01;31 +.deb 01;31 .rpm 01;31 +.jar 01;31 +.rar 01;31 +.ace 01;31 +.zoo 01;31 .cpio 01;31 -.jpg 01;35 # image formats +.7z 01;31 +.rz 01;31 +# image formats (magenta) +.jpg 01;35 +.jpeg 01;35 .gif 01;35 .bmp 01;35 +.pbm 01;35 +.pgm 01;35 +.ppm 01;35 +.tga 01;35 .xbm 01;35 .xpm 01;35 -.png 01;35 .tif 01;35 +.tiff 01;35 +.png 01;35 +.mng 01;35 +.pcx 01;35 +.mov 01;35 +.mpg 01;35 +.mpeg 01;35 +.m2v 01;35 +.mkv 01;35 +.ogm 01;35 +.mp4 01;35 +.m4v 01;35 +.mp4v 01;35 +.vob 01;35 +.qt 01;35 +.nuv 01;35 +.wmv 01;35 +.asf 01;35 +.rm 01;35 +.rmvb 01;35 +.flc 01;35 +.avi 01;35 +.fli 01;35 +.gl 01;35 +.dl 01;35 +.xcf 01;35 +.xwd 01;35 +.yuv 01;35 +.svg 01;35 + diff --git a/coreutils-DIR_COLORS.xterm b/coreutils-DIR_COLORS.xterm index 3fa9828..ae0f386 100644 --- a/coreutils-DIR_COLORS.xterm +++ b/coreutils-DIR_COLORS.xterm @@ -29,7 +29,11 @@ TERM con80x50 TERM con80x60 TERM cons25 TERM xterm +TERM xterm-16color +TERM xterm-88color +TERM xterm-256color TERM rxvt +TERM rxvt-unicode TERM xterm-color TERM color-xterm TERM vt100 @@ -71,24 +75,70 @@ EXEC 00;32 .bat 00;32 .sh 00;32 .csh 00;32 -.tar 00;31 # archives or compressed (red) +# archives or compressed (red) +.tar 00;31 .tgz 00;31 +.svgz 00;31 .arj 00;31 .taz 00;31 .lzh 00;31 +.lzma 00;31 .zip 00;31 .z 00;31 .Z 00;31 +.dz 00;31 .gz 00;31 .bz2 00;31 +.tbz2 00;31 .bz 00;31 .tz 00;31 +.deb 00;31 .rpm 00;31 +.jar 00;31 +.rar 00;31 +.ace 00;31 +.zoo 00;31 .cpio 00;31 -.jpg 00;35 # image formats +.7z 00;31 +.rz 00;31 +# image formats +.jpg 00;35 +.jpeg 00;35 .gif 00;35 .bmp 00;35 +.pbm 00;35 +.pgm 00;35 +.ppm 00;35 +.tga 00;35 .xbm 00;35 .xpm 00;35 -.png 00;35 .tif 00;35 +.tiff 00;35 +.png 00;35 +.mng 00;35 +.pcx 00;35 +.mov 00;35 +.mpg 00;35 +.mpeg 00;35 +.m2v 00;35 +.mkv 00;35 +.ogm 00;35 +.mp4 00;35 +.m4v 00;35 +.mp4v 00;35 +.vob 00;35 +.qt 00;35 +.nuv 00;35 +.wmv 00;35 +.asf 00;35 +.rm 00;35 +.rmvb 00;35 +.flc 00;35 +.avi 00;35 +.fli 00;35 +.gl 00;35 +.dl 00;35 +.xcf 00;35 +.xwd 00;35 +.yuv 00;35 +.svg 00;35 diff --git a/coreutils-colorls.csh b/coreutils-colorls.csh index f2e9b12..ea2be8b 100755 --- a/coreutils-colorls.csh +++ b/coreutils-colorls.csh @@ -1,4 +1,11 @@ # color-ls initialization +if ( $?LS_COLORS ) then + if ( "$LS_COLORS" != "" ) then + #do not override user specified LS_COLORS and use them + goto finish + endif +endif + alias ll 'ls -l' alias l. 'ls -d .*' @@ -7,11 +14,9 @@ if ($?TERM) then if ( -e "/etc/DIR_COLORS.$TERM" ) set COLORS="/etc/DIR_COLORS.$TERM" endif if ( -f ~/.dircolors ) set COLORS=~/.dircolors -if ($?TERM) then - if ( -f ~/.dircolors."$TERM" ) set COLORS=~/.dircolors."$TERM" -endif if ( -f ~/.dir_colors ) set COLORS=~/.dir_colors if ($?TERM) then + if ( -f ~/.dircolors."$TERM" ) set COLORS=~/.dircolors."$TERM" if ( -f ~/.dir_colors."$TERM" ) set COLORS=~/.dir_colors."$TERM" endif @@ -19,14 +24,16 @@ if ( ! -e "$COLORS" ) exit eval `dircolors -c $COLORS` -if ( "$LS_COLORS" == '' ) then - exit -endif +if ( "$LS_COLORS" == '' ) exit set color_none=`sed -n '/^COLOR.*none/Ip' < $COLORS` -if ( "$color_none" == '' ) then -alias ll 'ls -l --color=tty' -alias l. 'ls -d .* --color=tty' -alias ls 'ls --color=tty' +if ( "$color_none" != '' ) then + unset color_none + exit endif unset color_none + +finish: +alias ll 'ls -l --color=auto' +alias l. 'ls -d .* --color=auto' +alias ls 'ls --color=auto' diff --git a/coreutils-colorls.sh b/coreutils-colorls.sh index ff9ac6a..ed8a365 100755 --- a/coreutils-colorls.sh +++ b/coreutils-colorls.sh @@ -1,21 +1,36 @@ # color-ls initialization -alias ll='ls -l' 2>/dev/null -alias l.='ls -d .*' 2>/dev/null +#do not override user LS_COLORS, but use them. +if [ -z "$LS_COLORS" ]; then + + alias ll='ls -l' 2>/dev/null + alias l.='ls -d .*' 2>/dev/null -COLORS=/etc/DIR_COLORS -[ -e "/etc/DIR_COLORS.$TERM" ] && COLORS="/etc/DIR_COLORS.$TERM" -[ -e "$HOME/.dircolors" ] && COLORS="$HOME/.dircolors" -[ -e "$HOME/.dircolors.$TERM" ] && COLORS="$HOME/.dircolors.$TERM" -[ -e "$HOME/.dir_colors" ] && COLORS="$HOME/.dir_colors" -[ -e "$HOME/.dir_colors.$TERM" ] && COLORS="$HOME/.dir_colors.$TERM" -[ -e "$COLORS" ] || return -eval `dircolors --sh "$COLORS"` -[ -z "$LS_COLORS" ] && return + # Skip the rest for noninteractive shells. + [ -z "$PS1" ] && return -if ! egrep -qi "^COLOR.*none" $COLORS >/dev/null 2>/dev/null ; then - alias ll='ls -l --color=tty' 2>/dev/null - alias l.='ls -d .* --color=tty' 2>/dev/null - alias ls='ls --color=tty' 2>/dev/null + COLORS= + + for colors in "$HOME/.dir_colors.$TERM" "$HOME/.dircolors.$TERM" \ + "$HOME/.dir_colors" "$HOME/.dircolors"; do + [ -e "$colors" ] && COLORS="$colors" && break + done + + if [ -z "$COLORS" ]; then + for colors in "/etc/DIR_COLORS.$TERM" "/etc/DIR_COLORS" ; do + [ -e "$colors" ] && COLORS="$colors" && break + done + fi + + # Existence of $COLORS already checked above. + [ -n "$COLORS" ] || return + + eval `dircolors --sh "$COLORS" 2>/dev/null` + [ -z "$LS_COLORS" ] && return + egrep -qi "^COLOR.*none" $COLORS >/dev/null 2>/dev/null && return fi + +alias ll='ls -l --color=auto' 2>/dev/null +alias l.='ls -d .* --color=auto' 2>/dev/null +alias ls='ls --color=auto' 2>/dev/null diff --git a/coreutils-split-pam.patch b/coreutils-split-pam.patch index 4d36447..f8596b4 100644 --- a/coreutils-split-pam.patch +++ b/coreutils-split-pam.patch @@ -28,3 +28,30 @@ diff -uNrp -x '*~' coreutils-5.97-orig/src/su.c coreutils-5.97/src/su.c PAM_BAIL_P; #ifndef RUNUSER +diff -urp coreutils-6.9-orig/doc/coreutils.info coreutils-6.10/doc/coreutils.info +--- coreutils-6.9-orig/doc/coreutils.info ++++ coreutils-6.9/doc/coreutils.info +@@ -11006,7 +11006,8 @@ options::. + set, even for the super-user, as described above), and set `PATH' + to a compiled-in default value. Change to USER's home directory. + Prepend `-' to the shell's name, intended to make it read its +- login startup file(s). ++ login startup file(s). When this option is given, /etc/pam.d/su-l ++ PAM file is used instead of the default one. + + `-m' + `-p' +diff -urp coreutils-6.10-orig/doc/coreutils.texi coreutils-6.10/doc/coreutils.texi +--- coreutils-6.9-orig/doc/coreutils.texi ++++ coreutils-6.9/doc/coreutils.texi +@@ -13670,7 +13670,9 @@ the exit status of @var{command} otherwi + + @command{su} allows one user to temporarily become another user. It runs a + command (often an interactive shell) with the real and effective user +-ID, group ID, and supplemental groups of a given @var{user}. Synopsis: ++ID, group ID, and supplemental groups of a given @var{user}. When the -l ++option is given, the su-l PAM file is used instead of the default su PAM file. ++Synopsis: + + @example + su [@var{option}]@dots{} [@var{user} [@var{arg}]@dots{}] diff --git a/coreutils.spec b/coreutils.spec index 54ef673..336d1db 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ Summary: The GNU core utilities: a set of tools commonly used in shell scripts Name: coreutils Version: 6.9 -Release: 6%{?dist} +Release: 7%{?dist} License: GPLv2+ Group: System Environment/Base Url: http://www.gnu.org/software/coreutils/ @@ -25,6 +25,7 @@ Patch4: coreutils-6.9-du-ls-upstream.patch # Our patches Patch100: coreutils-chgrp.patch Patch101: coreutils-getdateYYYYMMDD.patch +Patch102: coreutils-6.9-longoptions.patch # sh-utils Patch703: sh-utils-2.0.11-dateman.patch @@ -98,6 +99,7 @@ the old GNU fileutils, sh-utils, and textutils packages. # Our patches %patch100 -p1 -b .chgrp %patch101 -p1 -b .getdate +%patch102 -p1 -b .longopts # sh-utils %patch703 -p1 -b .dateman @@ -283,6 +285,19 @@ fi /sbin/runuser %changelog +* Tue Mar 04 2008 Ondrej Vasik 6.9-7 +- su-l/runuser-l pam file usage a bit documented(#368721) +- added several missing colored TERMS(#239266) +- added several missing image/compressed file extensions +- some optimalizations of colorls.sh + (#430813, #430827, #430823, #430189, #433190) +- fix unability of echo to display certain strings( + added -- separator, #431005) , do not require only one + long_opt for certain commands like sleep, yes - but + use first usable (#431005) +- keep old csh/sh usermodified colorls shell scripts + (#432154) + * Wed Dec 05 2007 Ondrej Vasik 6.9-6 - fixed bug in handling YYYYMMDD date format with relative signed offset(#377821) From 98439f64664dc73386b34ff410651f4e34f8517c Mon Sep 17 00:00:00 2001 From: Ondrej Vasik Date: Tue, 11 Mar 2008 16:48:56 +0000 Subject: [PATCH 10/13] dd doubleclose + other way to keep user defined LS_COLORS --- coreutils-colorls.csh | 6 ++--- coreutils-colorls.sh | 4 ++-- coreutils-dddoubleclose.patch | 45 +++++++++++++++++++++++++++++++++++ coreutils.spec | 8 ++++++- 4 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 coreutils-dddoubleclose.patch diff --git a/coreutils-colorls.csh b/coreutils-colorls.csh index ea2be8b..7a41d8f 100755 --- a/coreutils-colorls.csh +++ b/coreutils-colorls.csh @@ -1,7 +1,7 @@ # color-ls initialization -if ( $?LS_COLORS ) then - if ( "$LS_COLORS" != "" ) then - #do not override user specified LS_COLORS and use them +if ( $?USER_LS_COLORS ) then + if ( "$USER_LS_COLORS" != "" ) then + #When USER_LS_COLORS set, do not override user specified LS_COLORS but use them goto finish endif endif diff --git a/coreutils-colorls.sh b/coreutils-colorls.sh index ed8a365..dbb853c 100755 --- a/coreutils-colorls.sh +++ b/coreutils-colorls.sh @@ -1,7 +1,7 @@ # color-ls initialization -#do not override user LS_COLORS, but use them. -if [ -z "$LS_COLORS" ]; then +#do not override user LS_COLORS, but use them when USER_LS_COLORS is set. +if [ -z "$USER_LS_COLORS" ]; then alias ll='ls -l' 2>/dev/null alias l.='ls -d .*' 2>/dev/null diff --git a/coreutils-dddoubleclose.patch b/coreutils-dddoubleclose.patch new file mode 100644 index 0000000..3e37027 --- /dev/null +++ b/coreutils-dddoubleclose.patch @@ -0,0 +1,45 @@ +diff -urNp coreutils-6.9-orig/src/dd.c coreutils-6.9/src/dd.c +--- coreutils-6.9-orig/src/dd.c ++++ coreutils-6.9/src/dd.c +@@ -391,6 +391,25 @@ static char const ebcdic_to_ascii[] = + '\070', '\071', '\372', '\373', '\374', '\375', '\376', '\377' + }; + ++/* True if we need to close the standard output *stream*. */ ++static bool close_stdout_required = true; ++ ++/* The only reason to close the standard output *stream* is if ++ parse_long_options fails (as it does for --help or --version). ++ In any other case, dd uses only the STDOUT_FILENO file descriptor, ++ and the "cleanup" function calls "close (STDOUT_FILENO)". ++ Closing the file descriptor and then letting the usual atexit-run ++ close_stdout function call "fclose (stdout)" would result in a ++ harmless failure of the close syscall (with errno EBADF). ++ This function serves solely to avoid the unnecessary close_stdout ++ call, once parse_long_options has succeeded. */ ++static void ++maybe_close_stdout (void) ++{ ++ if (close_stdout_required) ++ close_stdout (); ++} ++ + void + usage (int status) + { +@@ -1639,12 +1658,14 @@ main (int argc, char **argv) + textdomain (PACKAGE); + + /* Arrange to close stdout if parse_long_options exits. */ +- atexit (close_stdout); ++ atexit (maybe_close_stdout); + + page_size = getpagesize (); + + parse_long_options (argc, argv, PROGRAM_NAME, PACKAGE, VERSION, + usage, AUTHORS, (char const *) NULL); ++ close_stdout_required = false; ++ + if (getopt_long (argc, argv, "", NULL, NULL) != -1) + usage (EXIT_FAILURE); + diff --git a/coreutils.spec b/coreutils.spec index 336d1db..da2d9a5 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ Summary: The GNU core utilities: a set of tools commonly used in shell scripts Name: coreutils Version: 6.9 -Release: 7%{?dist} +Release: 8%{?dist} License: GPLv2+ Group: System Environment/Base Url: http://www.gnu.org/software/coreutils/ @@ -21,6 +21,7 @@ Patch1: coreutils-futimens.patch Patch2: coreutils-ls-x.patch Patch3: coreutils-6.9-cp-i-u.patch Patch4: coreutils-6.9-du-ls-upstream.patch +Patch5: coreutils-dddoubleclose.patch # Our patches Patch100: coreutils-chgrp.patch @@ -95,6 +96,7 @@ the old GNU fileutils, sh-utils, and textutils packages. %patch2 -p1 -b .ls-x %patch3 -p1 -b .cp-i-u %patch4 -p1 -b .du-ls +%patch5 -p1 -b .doubleclose # Our patches %patch100 -p1 -b .chgrp @@ -285,6 +287,10 @@ fi /sbin/runuser %changelog +* Tue Mar 11 2008 Ondrej Vasik 6.9-8 +- other way to keep user defined LS_COLORS(#430827) +- fixed harmless double close stdout in dd(#436368) + * Tue Mar 04 2008 Ondrej Vasik 6.9-7 - su-l/runuser-l pam file usage a bit documented(#368721) - added several missing colored TERMS(#239266) From 03f70d51e79a23337af937784fe8e6a17cb1d665 Mon Sep 17 00:00:00 2001 From: Ondrej Vasik Date: Tue, 25 Mar 2008 18:03:37 +0000 Subject: [PATCH 11/13] mv: never unlink a destination file before calling rename --- coreutils-6.9-longoptions.patch | 14 ---- coreutils-mvatomic.patch | 116 ++++++++++++++++++++++++++++++++ coreutils.spec | 15 ++++- 3 files changed, 128 insertions(+), 17 deletions(-) create mode 100644 coreutils-mvatomic.patch diff --git a/coreutils-6.9-longoptions.patch b/coreutils-6.9-longoptions.patch index f66b96d..c3500a5 100644 --- a/coreutils-6.9-longoptions.patch +++ b/coreutils-6.9-longoptions.patch @@ -1,17 +1,3 @@ -diff -urp coreutils-6.9-orig/src/echo.c coreutils-6.9/src/echo.c ---- coreutils-6.9-orig/src/echo.c -+++ coreutils-6.9/src/echo.c -@@ -163,6 +163,10 @@ main (int argc, char **argv) - { - case 'e': case 'E': case 'n': - break; -+ case '-': -+ /* end of short options(allows to print -n,-e or -E) */ -+ argc--; -+ argv++; - default: - goto just_echo; - } diff -urp coreutils-6.9-orig/lib/long-options.c coreutils-6.9/lib/long-options.c --- coreutils-6.9-orig/lib/long-options.c +++ coreutils-6.9/lib/long-options.c diff --git a/coreutils-mvatomic.patch b/coreutils-mvatomic.patch new file mode 100644 index 0000000..a82b9b7 --- /dev/null +++ b/coreutils-mvatomic.patch @@ -0,0 +1,116 @@ + src/copy.c | 5 +++-- + tests/mv/Makefile.am | 4 ++-- + tests/mv/atomic2 | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 68 insertions(+), 4 deletions(-) + create mode 100755 tests/mv/atomic2 + +diff --git a/src/copy.c b/src/copy.c +index fd31b5c..208a674 100644 +--- a/src/copy.c ++++ b/src/copy.c +@@ -1339,10 +1339,11 @@ copy_internal (char const *src_name, char const *dst_name, + new_dst = true; + } + else if (! S_ISDIR (dst_sb.st_mode) ++ /* Never unlink dst_name when in move mode. */ ++ && ! x->move_mode + && (x->unlink_dest_before_opening + || (x->preserve_links && 1 < dst_sb.st_nlink) +- || (!x->move_mode +- && x->dereference == DEREF_NEVER ++ || (x->dereference == DEREF_NEVER + && S_ISLNK (src_sb.st_mode)) + )) + { +diff --git a/tests/mv/Makefile.am b/tests/mv/Makefile.am +index c121911..92ec68e 100644 +--- a/tests/mv/Makefile.am ++++ b/tests/mv/Makefile.am +@@ -1,7 +1,6 @@ + # Make coreutils tests for "mv". -*-Makefile-*- + +-# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +-# Free Software Foundation, Inc. ++# Copyright (C) 1998-2008 Free Software Foundation, Inc. + + # This program is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -17,6 +16,7 @@ + # along with this program. If not, see . + + TESTS = \ ++ atomic2 \ + hard-verbose \ + backup-dir \ + dir2dir \ +diff --git a/tests/mv/atomic2 b/tests/mv/atomic2 +new file mode 100755 +index 0000000..d1029aa +--- /dev/null ++++ b/tests/mv/atomic2 +@@ -0,0 +1,63 @@ ++#!/bin/sh ++# ensure that mv doesn't first unlink a multi-hard-linked destination ++ ++# Copyright (C) 2008 Free Software Foundation, Inc. ++ ++# This program is free software: you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation, either version 3 of the License, or ++# (at your option) any later version. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++ ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++ ++if test "$VERBOSE" = yes; then ++ set -x ++ mv --version ++fi ++ ++pwd=`pwd` ++t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$ ++trap 'status=$?; cd "$pwd" && chmod -R u+rwx $t0 && rm -rf $t0 && exit $status' 0 ++trap '(exit $?); exit $?' 1 2 13 15 ++ ++# Before the fix, mv would unnecessarily unlink the destination symlink: ++# $ rm -f a b b2; touch a b; ln b b2; strace -e unlink /p/bin/mv a b ++# unlink("b") = 0 ++# ++# With the fix, it doesn't call unlink: ++# $ rm -f a b b2; touch a b; ln b b2; strace -e unlink ./mv a b ++# $ ++ ++touch a b || framework_failure=1 ++ln b b2 || framework_failure=1 ++if test $framework_failure = 1; then ++ echo "$0: failure in testing framework" 1>&2 ++ (exit 1); exit 1 ++fi ++ ++# Skip this test on systems without strace. ++strace -V < /dev/null > ver 2>&1 || skip=1 ++if test "$skip" = 1; then ++ echo "$0: no strace program, so skipping this test" 1>&2 ++ (exit 77); exit 77 ++fi ++ ++fail=0 ++ ++strace -qe unlink mv a b > out 2>&1 || fail=1 ++$EGREP 'unlink.*"b"' out && fail=1 ++ ++# Ensure that the source, "a", is gone. ++ls -dl a > /dev/null 2>&1 && fail=1 ++ ++# Ensure that the destination, "b", has link count 1. ++n_links=`stat --printf=%h b` || fail=1 ++test "$n_links" = 1 || fail=1 ++ ++(exit $fail); exit $fail +-- +1.5.5.rc0.7.g57e83 diff --git a/coreutils.spec b/coreutils.spec index da2d9a5..ddcb85c 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ Summary: The GNU core utilities: a set of tools commonly used in shell scripts Name: coreutils Version: 6.9 -Release: 8%{?dist} +Release: 9%{?dist} License: GPLv2+ Group: System Environment/Base Url: http://www.gnu.org/software/coreutils/ @@ -22,11 +22,12 @@ Patch2: coreutils-ls-x.patch Patch3: coreutils-6.9-cp-i-u.patch Patch4: coreutils-6.9-du-ls-upstream.patch Patch5: coreutils-dddoubleclose.patch +Patch6: coreutils-mvatomic.patch # Our patches Patch100: coreutils-chgrp.patch Patch101: coreutils-getdateYYYYMMDD.patch -Patch102: coreutils-6.9-longoptions.patch +#Patch102: coreutils-6.9-longoptions.patch # sh-utils Patch703: sh-utils-2.0.11-dateman.patch @@ -97,11 +98,12 @@ the old GNU fileutils, sh-utils, and textutils packages. %patch3 -p1 -b .cp-i-u %patch4 -p1 -b .du-ls %patch5 -p1 -b .doubleclose +%patch6 -p1 -b .mvatomic # Our patches %patch100 -p1 -b .chgrp %patch101 -p1 -b .getdate -%patch102 -p1 -b .longopts +#%patch102 -p1 -b .longopts # sh-utils %patch703 -p1 -b .dateman @@ -132,6 +134,7 @@ sed -i -e 's/basic-1//g' tests/stty/Makefile* chmod a+x tests/sort/sort-mb-tests chmod a+x tests/ls/x-option +chmod a+x tests/mv/atomic2 %build %ifarch s390 s390x @@ -287,6 +290,12 @@ fi /sbin/runuser %changelog +* Tue Mar 25 2008 Ondrej Vasik 6.9-9 +- mv: never unlink a destination file before calling rename + (upstream, #438076) +- defer usage of longoptions patch until final upstream + version (#43105) + * Tue Mar 11 2008 Ondrej Vasik 6.9-8 - other way to keep user defined LS_COLORS(#430827) - fixed harmless double close stdout in dd(#436368) From 460294865245b75366efb650a89784e0d6c8db4d Mon Sep 17 00:00:00 2001 From: Ondrej Vasik Date: Tue, 25 Mar 2008 18:18:51 +0000 Subject: [PATCH 12/13] fixed harmless warning in atomic2 test --- coreutils-mvatomic.patch | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/coreutils-mvatomic.patch b/coreutils-mvatomic.patch index a82b9b7..aa9fb2f 100644 --- a/coreutils-mvatomic.patch +++ b/coreutils-mvatomic.patch @@ -1,7 +1,7 @@ src/copy.c | 5 +++-- tests/mv/Makefile.am | 4 ++-- - tests/mv/atomic2 | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 68 insertions(+), 4 deletions(-) + tests/mv/atomic2 | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 69 insertions(+), 4 deletions(-) create mode 100755 tests/mv/atomic2 diff --git a/src/copy.c b/src/copy.c @@ -48,7 +48,7 @@ new file mode 100755 index 0000000..d1029aa --- /dev/null +++ b/tests/mv/atomic2 -@@ -0,0 +1,63 @@ +@@ -0,0 +1,64 @@ +#!/bin/sh +# ensure that mv doesn't first unlink a multi-hard-linked destination + @@ -85,6 +85,7 @@ index 0000000..d1029aa +# $ rm -f a b b2; touch a b; ln b b2; strace -e unlink ./mv a b +# $ + ++framework_failure=0 +touch a b || framework_failure=1 +ln b b2 || framework_failure=1 +if test $framework_failure = 1; then From 97620161ab448a61e606f8a6eea3d95c04fb9cb7 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 28 Jul 2010 12:10:44 +0000 Subject: [PATCH 13/13] dist-git conversion --- .cvsignore => .gitignore | 0 Makefile | 6 ------ branch | 1 - 3 files changed, 7 deletions(-) rename .cvsignore => .gitignore (100%) delete mode 100644 Makefile delete mode 100644 branch diff --git a/.cvsignore b/.gitignore similarity index 100% rename from .cvsignore rename to .gitignore diff --git a/Makefile b/Makefile deleted file mode 100644 index 5fd9be8..0000000 --- a/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# Makefile for source rpm: coreutils -# $Id$ -NAME := coreutils -SPECFILE = $(firstword $(wildcard *.spec)) - -include ../common/Makefile.common diff --git a/branch b/branch deleted file mode 100644 index c48525c..0000000 --- a/branch +++ /dev/null @@ -1 +0,0 @@ -F-7