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
b0b0c85b53
commit
9e52569907
@ -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