diff options
author | Jim Meyering <meyering@redhat.com> | 2009-11-07 08:09:12 +0100 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2009-11-07 08:43:00 +0100 |
commit | d9dbbb9a455f6bfc4e09d9f5f6c6c633f1b03c52 (patch) | |
tree | 54ab2f41b2d2de1918d2b18913df819d0b6cfbba /src | |
parent | 74cf4cb26dcecd36eb45dc00dbd4587d9dc24a2f (diff) | |
download | coreutils-d9dbbb9a455f6bfc4e09d9f5f6c6c633f1b03c52.tar.xz |
chcon, chgrp, chmod and chown now diagnose a directory cycle
* lib/xfts.c (cycle_warning_required): New function.
* lib/xfts.h: Declare it.
* src/chown-core.c (change_file_owner): Diagnose a cycle.
* src/chmod.c (process_file): Likewise.
* src/chcon.c (process_file): Likewise.
* NEWS (Bug fixes): Mention this.
Diffstat (limited to 'src')
-rw-r--r-- | src/chcon.c | 8 | ||||
-rw-r--r-- | src/chmod.c | 9 | ||||
-rw-r--r-- | src/chown-core.c | 8 |
3 files changed, 25 insertions, 0 deletions
diff --git a/src/chcon.c b/src/chcon.c index 2badefbbd..5e58cacbf 100644 --- a/src/chcon.c +++ b/src/chcon.c @@ -267,6 +267,14 @@ process_file (FTS *fts, FTSENT *ent) ok = false; break; + case FTS_DC: /* directory that causes cycles */ + if (cycle_warning_required (fts, ent)) + { + emit_cycle_warning (file_full_name); + return false; + } + break; + default: break; } diff --git a/src/chmod.c b/src/chmod.c index da350032f..1a0dafa70 100644 --- a/src/chmod.c +++ b/src/chmod.c @@ -228,6 +228,15 @@ process_file (FTS *fts, FTSENT *ent) error (0, 0, _("cannot operate on dangling symlink %s"), quote (file_full_name)); ok = false; + break; + + case FTS_DC: /* directory that causes cycles */ + if (cycle_warning_required (fts, ent)) + { + emit_cycle_warning (file_full_name); + return false; + } + break; default: break; diff --git a/src/chown-core.c b/src/chown-core.c index e7dacf68c..eaebe60f9 100644 --- a/src/chown-core.c +++ b/src/chown-core.c @@ -316,6 +316,14 @@ change_file_owner (FTS *fts, FTSENT *ent, ok = false; break; + case FTS_DC: /* directory that causes cycles */ + if (cycle_warning_required (fts, ent)) + { + emit_cycle_warning (file_full_name); + return false; + } + break; + default: break; } |