svn commit: r359588 - in stable/11/usr.sbin/pw: . tests
Baptiste Daroussin
bapt at FreeBSD.org
Fri Apr 3 05:06:17 UTC 2020
Author: bapt
Date: Fri Apr 3 05:06:08 2020
New Revision: 359588
URL: https://svnweb.freebsd.org/changeset/base/359588
Log:
MFC r359232:
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 <eric at erichanneken.com>
Modified:
stable/11/usr.sbin/pw/rm_r.c
stable/11/usr.sbin/pw/tests/pw_userdel_test.sh
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/usr.sbin/pw/rm_r.c
==============================================================================
--- stable/11/usr.sbin/pw/rm_r.c Fri Apr 3 02:39:46 2020 (r359587)
+++ stable/11/usr.sbin/pw/rm_r.c Fri Apr 3 05:06:08 2020 (r359588)
@@ -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);
}
Modified: stable/11/usr.sbin/pw/tests/pw_userdel_test.sh
==============================================================================
--- stable/11/usr.sbin/pw/tests/pw_userdel_test.sh Fri Apr 3 02:39:46 2020 (r359587)
+++ stable/11/usr.sbin/pw/tests/pw_userdel_test.sh Fri Apr 3 05:06:08 2020 (r359588)
@@ -67,10 +67,30 @@ home_not_a_dir_body() {
atf_check ${RPW} userdel foo -r
}
+atf_test_case home_shared
+home_shared_body() {
+ populate_root_etc_skel
+ mkdir ${HOME}/shared
+ atf_check ${RPW} useradd -n testuser1 -d /shared
+ atf_check ${RPW} useradd -n testuser2 -d /shared
+ atf_check ${RPW} userdel -n testuser1 -r
+ test -d ${HOME}/shared || atf_fail "Shared home has been removed"
+}
+
+atf_test_case home_regular_dir
+home_regular_dir_body() {
+ populate_root_etc_skel
+ atf_check ${RPW} useradd -n foo -d /foo
+ atf_check ${RPW} userdel -n foo -r
+ [ ! -d ${HOME}/foo ] || atf_fail "Home has not been removed"
+}
+
atf_init_test_cases() {
atf_add_test_case rmuser_seperate_group
atf_add_test_case user_do_not_try_to_delete_root_if_user_unknown
atf_add_test_case delete_files
atf_add_test_case delete_numeric_name
atf_add_test_case home_not_a_dir
+ atf_add_test_case home_shared
+ atf_add_test_case home_regular_dir
}
More information about the svn-src-stable-11
mailing list