--- rm.c.orig 2008-07-25 15:05:23.000000000 -0430 +++ rm.c 2008-08-10 15:00:05.465754091 -0430 @@ -230,7 +230,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)) && + !(p->fts_statp->st_flags & (SF_APPEND|SF_IMMUTABLE|SF_NOUNLINK|UF_NOUNLINK)) && chflags(p->fts_accpath, p->fts_statp->st_flags &= ~(UF_APPEND|UF_IMMUTABLE)) < 0) goto err; @@ -249,7 +249,7 @@ rm_tree(char **argv) rval = 0; if (!uid && (p->fts_statp->st_flags & (UF_APPEND|UF_IMMUTABLE)) && - !(p->fts_statp->st_flags & (SF_APPEND|SF_IMMUTABLE))) + !(p->fts_statp->st_flags & (SF_APPEND|SF_IMMUTABLE|SF_NOUNLINK|UF_NOUNLINK))) rval = chflags(p->fts_accpath, p->fts_statp->st_flags &= ~(UF_APPEND|UF_IMMUTABLE)); if (rval == 0) { @@ -349,7 +349,7 @@ rm_file(char **argv) rval = 0; if (!uid && !S_ISWHT(sb.st_mode) && (sb.st_flags & (UF_APPEND|UF_IMMUTABLE)) && - !(sb.st_flags & (SF_APPEND|SF_IMMUTABLE))) + !(sb.st_flags & (SF_APPEND|SF_IMMUTABLE|SF_NOUNLINK|UF_NOUNLINK))) rval = chflags(f, sb.st_flags & ~(UF_APPEND|UF_IMMUTABLE)); if (rval == 0) { if (S_ISWHT(sb.st_mode))