summaryrefslogtreecommitdiffstats
path: root/usr.bin/find
diff options
context:
space:
mode:
authoravg <avg@FreeBSD.org>2009-05-19 14:23:54 +0000
committeravg <avg@FreeBSD.org>2009-05-19 14:23:54 +0000
commit960bfa71a8a6e8c40490879e82649ed63a54d4a8 (patch)
treea06959b26a50fc91f24df7c7798d54296726df29 /usr.bin/find
parent89d59b82b380fc829a85cee601c9e2b7f5ed04d6 (diff)
downloadFreeBSD-src-960bfa71a8a6e8c40490879e82649ed63a54d4a8.zip
FreeBSD-src-960bfa71a8a6e8c40490879e82649ed63a54d4a8.tar.gz
find: do not silently disable -L when -delete is used
First of all, current behavior is not documented and confusing, and it can be very dangerous in the following sequence: find -L . -type l find -L . -type l -delete (the second line is even suggested by find(1)). Instead simply refuse to proceed when -L and -delete are both used. A descriptive error message is provided. The following command can be safely used to remove broken links: find -L . -type l -print0 | xargs rm -0 To do: update find(1) PR: bin/90687 Obtained from: Anatoli Klassen <anatoli@aksoft.net> Approved by: jhb (mentor)
Diffstat (limited to 'usr.bin/find')
-rw-r--r--usr.bin/find/function.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/usr.bin/find/function.c b/usr.bin/find/function.c
index c3c90f8..2641264 100644
--- a/usr.bin/find/function.c
+++ b/usr.bin/find/function.c
@@ -427,11 +427,13 @@ f_delete(PLAN *plan __unused, FTSENT *entry)
/* sanity check */
if (isdepth == 0 || /* depth off */
- (ftsoptions & FTS_NOSTAT) || /* not stat()ing */
- !(ftsoptions & FTS_PHYSICAL) || /* physical off */
- (ftsoptions & FTS_LOGICAL)) /* or finally, logical on */
+ (ftsoptions & FTS_NOSTAT)) /* not stat()ing */
errx(1, "-delete: insecure options got turned on");
+ if (!(ftsoptions & FTS_PHYSICAL) || /* physical off */
+ (ftsoptions & FTS_LOGICAL)) /* or finally, logical on */
+ errx(1, "-delete: forbidden when symlinks are followed");
+
/* Potentially unsafe - do not accept relative paths whatsoever */
if (strchr(entry->fts_accpath, '/') != NULL)
errx(1, "-delete: %s: relative path potentially not safe",
@@ -462,8 +464,6 @@ c_delete(OPTION *option, char ***argvp __unused)
{
ftsoptions &= ~FTS_NOSTAT; /* no optimise */
- ftsoptions |= FTS_PHYSICAL; /* disable -follow */
- ftsoptions &= ~FTS_LOGICAL; /* disable -follow */
isoutput = 1; /* possible output */
isdepth = 1; /* -depth implied */
OpenPOWER on IntegriCloud