rm, find -delete: fix removing symlinks with uchg/uappnd set.
Formerly, this tried to clear the flags on the symlink's target instead of the symlink itself. As before, this only happens for root or for the unlink(1) variant of rm. PR: bin/111226 (part of) Submitted by: Martin Kammerhofer Approved by: ed (mentor) MFC after: 3 weeks
This commit is contained in:
parent
f2db75739c
commit
6911f596a1
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=193087
@ -234,7 +234,7 @@ rm_tree(char **argv)
|
||||
else if (!uid &&
|
||||
(p->fts_statp->st_flags & (UF_APPEND|UF_IMMUTABLE)) &&
|
||||
!(p->fts_statp->st_flags & (SF_APPEND|SF_IMMUTABLE)) &&
|
||||
chflags(p->fts_accpath,
|
||||
lchflags(p->fts_accpath,
|
||||
p->fts_statp->st_flags &= ~(UF_APPEND|UF_IMMUTABLE)) < 0)
|
||||
goto err;
|
||||
continue;
|
||||
@ -253,7 +253,7 @@ rm_tree(char **argv)
|
||||
if (!uid &&
|
||||
(p->fts_statp->st_flags & (UF_APPEND|UF_IMMUTABLE)) &&
|
||||
!(p->fts_statp->st_flags & (SF_APPEND|SF_IMMUTABLE)))
|
||||
rval = chflags(p->fts_accpath,
|
||||
rval = lchflags(p->fts_accpath,
|
||||
p->fts_statp->st_flags &= ~(UF_APPEND|UF_IMMUTABLE));
|
||||
if (rval == 0) {
|
||||
/*
|
||||
@ -368,7 +368,7 @@ rm_file(char **argv)
|
||||
if (!uid && !S_ISWHT(sb.st_mode) &&
|
||||
(sb.st_flags & (UF_APPEND|UF_IMMUTABLE)) &&
|
||||
!(sb.st_flags & (SF_APPEND|SF_IMMUTABLE)))
|
||||
rval = chflags(f, sb.st_flags & ~(UF_APPEND|UF_IMMUTABLE));
|
||||
rval = lchflags(f, sb.st_flags & ~(UF_APPEND|UF_IMMUTABLE));
|
||||
if (rval == 0) {
|
||||
if (S_ISWHT(sb.st_mode))
|
||||
rval = undelete(f);
|
||||
|
@ -443,7 +443,7 @@ f_delete(PLAN *plan __unused, FTSENT *entry)
|
||||
if ((entry->fts_statp->st_flags & (UF_APPEND|UF_IMMUTABLE)) &&
|
||||
!(entry->fts_statp->st_flags & (SF_APPEND|SF_IMMUTABLE)) &&
|
||||
geteuid() == 0)
|
||||
chflags(entry->fts_accpath,
|
||||
lchflags(entry->fts_accpath,
|
||||
entry->fts_statp->st_flags &= ~(UF_APPEND|UF_IMMUTABLE));
|
||||
|
||||
/* rmdir directories, unlink everything else */
|
||||
|
Loading…
Reference in New Issue
Block a user