From: Jim Meyering Date: Fri, 7 Sep 2007 08:37:08 +0000 (+0200) Subject: chmod: don't ignore a dangling symlink X-Git-Tag: v6.9.89~143 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=500eccdbe4d55b0cbf48cf264aa4232abd7c23df;p=platform%2Fupstream%2Fcoreutils.git chmod: don't ignore a dangling symlink * NEWS: Mention the bug fix. * src/chmod.c (process_file): Handle the case of FTS_SLNONE, i.e., give a diagnostic saying we cannot operate on such a file. * tests/chmod/thru-dangling: Compare new stderr output with expected. --- diff --git a/ChangeLog b/ChangeLog index c09128b..a8c606b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-09-07 Jim Meyering + + chmod: don't ignore a dangling symlink + * NEWS: Mention the bug fix. + * src/chmod.c (process_file): Handle the case of FTS_SLNONE, + i.e., give a diagnostic saying we cannot operate on such a file. + * tests/chmod/thru-dangling: Compare new stderr output with expected. + 2007-09-07 Bob Proulx Add a test: demonstrate that chmod ignores a dangling symlink diff --git a/NEWS b/NEWS index 6a0f18d..93a632c 100644 --- a/NEWS +++ b/NEWS @@ -70,6 +70,10 @@ GNU coreutils NEWS -*- outline -*- ** Bug fixes + chmod no longer ignores a dangling symlink. Now, chmod fails + with a diagnostic saying that it cannot operate on such a file. + [bug introduced in coreutils-5.1.0] + cp attempts to read a regular file, even if stat says it is empty. Before, "cp /proc/cpuinfo c" would create an empty file when the kernel reports stat.st_size == 0, while "cat /proc/cpuinfo > c" would "work", diff --git a/src/chmod.c b/src/chmod.c index a670554..a22e5c1 100644 --- a/src/chmod.c +++ b/src/chmod.c @@ -1,5 +1,5 @@ /* chmod -- change permission modes of files - Copyright (C) 89, 90, 91, 1995-2006 Free Software Foundation, Inc. + Copyright (C) 89, 90, 91, 1995-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 @@ -220,6 +220,11 @@ process_file (FTS *fts, FTSENT *ent) ok = false; break; + case FTS_SLNONE: + error (0, 0, _("cannot operate on dangling symlink %s"), + quote (file_full_name)); + ok = false; + default: break; } diff --git a/tests/chmod/thru-dangling b/tests/chmod/thru-dangling index d972a8a..7a82db8 100755 --- a/tests/chmod/thru-dangling +++ b/tests/chmod/thru-dangling @@ -40,6 +40,10 @@ fi fail=0 # This operation cannot succeed since the symbolic link dangles. -chmod 644 dangle && fail=1 +chmod 644 dangle 2> out && fail=1 + +echo "chmod: cannot operate on dangling symlink \`dangle'" > exp +cmp out exp || fail=1 +test $fail = 1 && diff out exp 2> /dev/null (exit $fail); exit $fail