From 3920ec2f846f7ebb004929a0bccbef481f867f11 Mon Sep 17 00:00:00 2001 From: Baptiste Daroussin Date: Mon, 23 Mar 2020 08:23:22 +0000 Subject: pw: do not removed home directories if not owned When deleting a user, if its home directory does not belong to it, it should not be removed. This is the promise that the manpage makes, the tool should ensure that it respects that promise. Add a regression test about it PR: 244967 Submitted by: Eric Hanneken MFC after: 3 days --- pw/rm_r.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pw/rm_r.c b/pw/rm_r.c index 940266d..66298a2 100644 --- a/pw/rm_r.c +++ b/pw/rm_r.c @@ -71,5 +71,8 @@ rm_r(int rootfd, const char *path, uid_t uid) closedir(d); if (fstatat(rootfd, path, &st, AT_SYMLINK_NOFOLLOW) != 0) return; - unlinkat(rootfd, path, S_ISDIR(st.st_mode) ? AT_REMOVEDIR : 0); + if (S_ISLNK(st.st_mode)) + unlinkat(rootfd, path, 0); + else if (st.st_uid == uid) + unlinkat(rootfd, path, AT_REMOVEDIR); } -- cgit v1.2.3-56-ge451