]> git.ipfire.org Git - thirdparty/coreutils.git/commit
ls: fix capability coloring
authorPádraig Brady <P@draigBrady.com>
Sun, 8 Nov 2009 03:45:27 +0000 (03:45 +0000)
committerPádraig Brady <P@draigBrady.com>
Mon, 9 Nov 2009 08:16:20 +0000 (08:16 +0000)
commit10d97b31910b0030f7716474a48b3fc8e00dd216
treee89d1f6ad580bd597196101b869c57fa98cb1294
parent56b85e035b77e48e7ec241b54da3f9c9d19e77d5
ls: fix capability coloring

Capability checking was incorrectly done on just the base name
rather than on the whole path.  Consequently there could be both
false positives and negatives when coloring files with capabilities.
Also capability checking was not done at all in certain cases for
non executable files.  Note passing absolute rather than relative
names to cap_get_file() reduces the has_capability() overhead
from around 33% to 30%.  I.E. ls --color is now around 3% faster.

* src/ls.c (struct fileinfo): Add a has_capability member.
(print_color_indicator): Refactor to pass just a fileinfo pointer
and a flag to say if we're dealing with a symlink target.
(print_name_with_quoting): Likewise.
(gobble_file): Set has_capability in the fileinfo struct.  Also do
a capability check even if executable coloring is disabled.
Ditto for SETUID and SETUID coloring.
Comment on how expensive has_capability() is.
(print_long_format): Adjust to refactored print_name_with_quoting.
(quote_name): Likewise.
(print_file_name_and_frills): Likewise.
* tests/ls/capability: Test the various false positive and negatives.
* THANKS: Add reporter (Ivan Labath).
* NEWS: Mention the fix.
NEWS
THANKS
src/ls.c
tests/ls/capability