From a5efa210b291630d838878b8d5e7d2ab0bf8b384 Mon Sep 17 00:00:00 2001 From: Enji Cooper Date: Thu, 23 Mar 2017 03:28:24 +0000 Subject: Rename tests from to _test to match the FreeBSD test suite naming scheme usr.bin/diff/diff_test was renamed to usr.bin/diff/netbsd_diff_test to avoid collisions with the renamed FreeBSD test. MFC after: 1 week Sponsored by: Dell EMC Isilon --- pw/tests/Makefile | 20 +- pw/tests/pw_config.sh | 26 --- pw/tests/pw_config_test.sh | 26 +++ pw/tests/pw_etcdir.sh | 18 -- pw/tests/pw_etcdir_test.sh | 18 ++ pw/tests/pw_groupadd.sh | 26 --- pw/tests/pw_groupadd_test.sh | 26 +++ pw/tests/pw_groupdel.sh | 24 --- pw/tests/pw_groupdel_test.sh | 24 +++ pw/tests/pw_groupmod.sh | 118 ------------ pw/tests/pw_groupmod_test.sh | 118 ++++++++++++ pw/tests/pw_lock.sh | 42 ----- pw/tests/pw_lock_test.sh | 42 +++++ pw/tests/pw_useradd.sh | 422 ------------------------------------------- pw/tests/pw_useradd_test.sh | 422 +++++++++++++++++++++++++++++++++++++++++++ pw/tests/pw_userdel.sh | 76 -------- pw/tests/pw_userdel_test.sh | 76 ++++++++ pw/tests/pw_usermod.sh | 299 ------------------------------ pw/tests/pw_usermod_test.sh | 299 ++++++++++++++++++++++++++++++ pw/tests/pw_usernext.sh | 45 ----- pw/tests/pw_usernext_test.sh | 45 +++++ 21 files changed, 1106 insertions(+), 1106 deletions(-) delete mode 100755 pw/tests/pw_config.sh create mode 100755 pw/tests/pw_config_test.sh delete mode 100755 pw/tests/pw_etcdir.sh create mode 100755 pw/tests/pw_etcdir_test.sh delete mode 100755 pw/tests/pw_groupadd.sh create mode 100755 pw/tests/pw_groupadd_test.sh delete mode 100755 pw/tests/pw_groupdel.sh create mode 100755 pw/tests/pw_groupdel_test.sh delete mode 100755 pw/tests/pw_groupmod.sh create mode 100755 pw/tests/pw_groupmod_test.sh delete mode 100755 pw/tests/pw_lock.sh create mode 100755 pw/tests/pw_lock_test.sh delete mode 100755 pw/tests/pw_useradd.sh create mode 100755 pw/tests/pw_useradd_test.sh delete mode 100755 pw/tests/pw_userdel.sh create mode 100755 pw/tests/pw_userdel_test.sh delete mode 100755 pw/tests/pw_usermod.sh create mode 100755 pw/tests/pw_usermod_test.sh delete mode 100755 pw/tests/pw_usernext.sh create mode 100755 pw/tests/pw_usernext_test.sh diff --git a/pw/tests/Makefile b/pw/tests/Makefile index b284db2..6d07759 100644 --- a/pw/tests/Makefile +++ b/pw/tests/Makefile @@ -8,16 +8,16 @@ PROGS+= crypt WARNS?= 6 LIBADD+= crypt -ATF_TESTS_SH= pw_etcdir \ - pw_lock \ - pw_config \ - pw_groupadd \ - pw_groupdel \ - pw_groupmod \ - pw_useradd \ - pw_userdel \ - pw_usermod \ - pw_usernext +ATF_TESTS_SH= pw_etcdir_test \ + pw_lock_test \ + pw_config_test \ + pw_groupadd_test \ + pw_groupdel_test \ + pw_groupmod_test \ + pw_useradd_test \ + pw_userdel_test \ + pw_usermod_test \ + pw_usernext_test .for tp in ${ATF_TESTS_SH} TEST_METADATA.${tp}+= required_user="root" diff --git a/pw/tests/pw_config.sh b/pw/tests/pw_config.sh deleted file mode 100755 index fb6489a..0000000 --- a/pw/tests/pw_config.sh +++ /dev/null @@ -1,26 +0,0 @@ -# $FreeBSD$ - -# Import helper functions -. $(atf_get_srcdir)/helper_functions.shin - -atf_test_case generate_config -generate_config_body() { - atf_check -s exit:0 \ - ${PW} useradd -D -C ${HOME}/foo.conf - atf_check -o file:$(atf_get_srcdir)/pw.conf \ - cat ${HOME}/foo.conf -} - -atf_test_case modify_config_uid_gid_boundaries -modify_config_uid_gid_boundaries_body() { - atf_check -s exit:0 \ - ${PW} useradd -D -C ${HOME}/foo.conf \ - -u 2000,5000 -i 2100,6000 - atf_check -o file:$(atf_get_srcdir)/pw-modified.conf \ - cat ${HOME}/foo.conf -} - -atf_init_test_cases() { - atf_add_test_case generate_config - atf_add_test_case modify_config_uid_gid_boundaries -} diff --git a/pw/tests/pw_config_test.sh b/pw/tests/pw_config_test.sh new file mode 100755 index 0000000..fb6489a --- /dev/null +++ b/pw/tests/pw_config_test.sh @@ -0,0 +1,26 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + +atf_test_case generate_config +generate_config_body() { + atf_check -s exit:0 \ + ${PW} useradd -D -C ${HOME}/foo.conf + atf_check -o file:$(atf_get_srcdir)/pw.conf \ + cat ${HOME}/foo.conf +} + +atf_test_case modify_config_uid_gid_boundaries +modify_config_uid_gid_boundaries_body() { + atf_check -s exit:0 \ + ${PW} useradd -D -C ${HOME}/foo.conf \ + -u 2000,5000 -i 2100,6000 + atf_check -o file:$(atf_get_srcdir)/pw-modified.conf \ + cat ${HOME}/foo.conf +} + +atf_init_test_cases() { + atf_add_test_case generate_config + atf_add_test_case modify_config_uid_gid_boundaries +} diff --git a/pw/tests/pw_etcdir.sh b/pw/tests/pw_etcdir.sh deleted file mode 100755 index b237789..0000000 --- a/pw/tests/pw_etcdir.sh +++ /dev/null @@ -1,18 +0,0 @@ -# $FreeBSD$ - -# When the '-V directory' option is provided, the directory must exist -atf_test_case etcdir_must_exist -etcdir_must_exist_head() { - atf_set "descr" "When the '-V directory' option is provided, the directory must exist" -} - -etcdir_must_exist_body() { - local fakedir="/this_directory_does_not_exist" - atf_check -e inline:"pw: no such directory \`$fakedir'\n" \ - -s exit:72 -x pw -V ${fakedir} usershow root -} - -atf_init_test_cases() { - atf_add_test_case etcdir_must_exist -} - diff --git a/pw/tests/pw_etcdir_test.sh b/pw/tests/pw_etcdir_test.sh new file mode 100755 index 0000000..b237789 --- /dev/null +++ b/pw/tests/pw_etcdir_test.sh @@ -0,0 +1,18 @@ +# $FreeBSD$ + +# When the '-V directory' option is provided, the directory must exist +atf_test_case etcdir_must_exist +etcdir_must_exist_head() { + atf_set "descr" "When the '-V directory' option is provided, the directory must exist" +} + +etcdir_must_exist_body() { + local fakedir="/this_directory_does_not_exist" + atf_check -e inline:"pw: no such directory \`$fakedir'\n" \ + -s exit:72 -x pw -V ${fakedir} usershow root +} + +atf_init_test_cases() { + atf_add_test_case etcdir_must_exist +} + diff --git a/pw/tests/pw_groupadd.sh b/pw/tests/pw_groupadd.sh deleted file mode 100755 index 5fa7bef..0000000 --- a/pw/tests/pw_groupadd.sh +++ /dev/null @@ -1,26 +0,0 @@ -# $FreeBSD$ - -# Import helper functions -. $(atf_get_srcdir)/helper_functions.shin - -atf_test_case group_add_gid_too_large -group_add_gid_too_large_body() { - populate_etc_skel - atf_check -s exit:64 -e inline:"pw: Bad id '9999999999999': too large\n" \ - ${PW} groupadd -n test1 -g 9999999999999 -} - -atf_test_case group_add_already_exists -group_add_already_exists_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} groupadd foo - atf_check -s exit:65 \ - -e inline:"pw: group name \`foo' already exists\n" \ - ${PW} groupadd foo -} - -atf_init_test_cases() { - atf_add_test_case group_add_gid_too_large - atf_add_test_case group_add_already_exists -} diff --git a/pw/tests/pw_groupadd_test.sh b/pw/tests/pw_groupadd_test.sh new file mode 100755 index 0000000..5fa7bef --- /dev/null +++ b/pw/tests/pw_groupadd_test.sh @@ -0,0 +1,26 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + +atf_test_case group_add_gid_too_large +group_add_gid_too_large_body() { + populate_etc_skel + atf_check -s exit:64 -e inline:"pw: Bad id '9999999999999': too large\n" \ + ${PW} groupadd -n test1 -g 9999999999999 +} + +atf_test_case group_add_already_exists +group_add_already_exists_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} groupadd foo + atf_check -s exit:65 \ + -e inline:"pw: group name \`foo' already exists\n" \ + ${PW} groupadd foo +} + +atf_init_test_cases() { + atf_add_test_case group_add_gid_too_large + atf_add_test_case group_add_already_exists +} diff --git a/pw/tests/pw_groupdel.sh b/pw/tests/pw_groupdel.sh deleted file mode 100755 index 88cc0e0..0000000 --- a/pw/tests/pw_groupdel.sh +++ /dev/null @@ -1,24 +0,0 @@ -# $FreeBSD$ - -# Import helper functions -. $(atf_get_srcdir)/helper_functions.shin - - -# Test to make sure we do not accidentially delete wheel when trying to delete -# an unknown group -atf_test_case group_do_not_delete_wheel_if_group_unknown -group_do_not_delete_wheel_if_group_unknown_head() { - atf_set "descr" "Make sure we do not consider gid 0 an unknown group" -} -group_do_not_delete_wheel_if_group_unknown_body() { - populate_etc_skel - atf_check -s exit:0 -o inline:"wheel:*:0:root\n" -x ${PW} groupshow wheel - atf_check -e inline:"pw: Bad id 'I_do_not_exist': invalid\n" -s exit:64 -x \ - ${PW} groupdel -g I_do_not_exist - atf_check -s exit:0 -o inline:"wheel:*:0:root\n" -x ${PW} groupshow wheel -} - - -atf_init_test_cases() { - atf_add_test_case group_do_not_delete_wheel_if_group_unknown -} diff --git a/pw/tests/pw_groupdel_test.sh b/pw/tests/pw_groupdel_test.sh new file mode 100755 index 0000000..88cc0e0 --- /dev/null +++ b/pw/tests/pw_groupdel_test.sh @@ -0,0 +1,24 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + + +# Test to make sure we do not accidentially delete wheel when trying to delete +# an unknown group +atf_test_case group_do_not_delete_wheel_if_group_unknown +group_do_not_delete_wheel_if_group_unknown_head() { + atf_set "descr" "Make sure we do not consider gid 0 an unknown group" +} +group_do_not_delete_wheel_if_group_unknown_body() { + populate_etc_skel + atf_check -s exit:0 -o inline:"wheel:*:0:root\n" -x ${PW} groupshow wheel + atf_check -e inline:"pw: Bad id 'I_do_not_exist': invalid\n" -s exit:64 -x \ + ${PW} groupdel -g I_do_not_exist + atf_check -s exit:0 -o inline:"wheel:*:0:root\n" -x ${PW} groupshow wheel +} + + +atf_init_test_cases() { + atf_add_test_case group_do_not_delete_wheel_if_group_unknown +} diff --git a/pw/tests/pw_groupmod.sh b/pw/tests/pw_groupmod.sh deleted file mode 100755 index 5806925..0000000 --- a/pw/tests/pw_groupmod.sh +++ /dev/null @@ -1,118 +0,0 @@ -# $FreeBSD$ - -# Import helper functions -. $(atf_get_srcdir)/helper_functions.shin - - -# Test adding & removing a user from a group -atf_test_case groupmod_user -groupmod_user_body() { - populate_etc_skel - atf_check -s exit:0 ${PW} addgroup test - atf_check -s exit:0 ${PW} groupmod test -m root - atf_check -s exit:0 -o match:"^test:\*:1001:root$" \ - grep "^test:\*:.*:root$" $HOME/group - atf_check -s exit:0 ${PW} groupmod test -d root - atf_check -s exit:0 -o match:"^test:\*:1001:$" \ - grep "^test:\*:.*:$" $HOME/group -} - - -# Test adding and removing a user that does not exist -atf_test_case groupmod_invalid_user -groupmod_invalid_user_body() { - populate_etc_skel - atf_check -s exit:0 ${PW} addgroup test - atf_check -s exit:67 -e match:"does not exist" ${PW} groupmod test -m foo - atf_check -s exit:0 ${PW} groupmod test -d foo -} - -atf_test_case groupmod_bug_193704 -groupmod_bug_193704_head() { - atf_set "descr" "Regression test for the #193704 bug" -} -groupmod_bug_193704_body() { - populate_etc_skel - atf_check -s exit:0 -x ${PW} groupadd test - atf_check -s exit:0 -x ${PW} groupmod test -l newgroupname - atf_check -s exit:65 -e match:"^pw: unknown group" -x ${PW} groupshow test -} - -atf_test_case usermod_bug_185666 -usermod_bug_185666_head() { - atf_set "descr" "Regression test for the #185666 bug" -} - -usermod_bug_185666_body() { - populate_etc_skel - atf_check -s exit:0 -x ${PW} useradd testuser - atf_check -s exit:0 -x ${PW} groupadd testgroup - atf_check -s exit:0 -x ${PW} groupadd testgroup2 - atf_check -s exit:0 -x ${PW} usermod testuser -G testgroup - atf_check -o inline:"testuser:*:1001:\n" -x ${PW} groupshow testuser - atf_check -o inline:"testgroup:*:1002:testuser\n" -x ${PW} groupshow testgroup - atf_check -o inline:"testgroup2:*:1003:\n" -x ${PW} groupshow testgroup2 - atf_check -s exit:0 -x ${PW} usermod testuser -G testgroup2 - atf_check -o inline:"testuser:*:1001:\n" -x ${PW} groupshow testuser - atf_check -o inline:"testgroup:*:1002:\n" -x ${PW} groupshow testgroup - atf_check -o inline:"testgroup2:*:1003:testuser\n" -x ${PW} groupshow testgroup2 -} - -atf_test_case do_not_duplicate_group_on_gid_change -do_not_duplicate_group_on_gid_change_head() { - atf_set "descr" "Do not duplicate group on gid change" -} - -do_not_duplicate_group_on_gid_change_body() { - populate_etc_skel - atf_check -s exit:0 -x ${PW} groupadd testgroup - atf_check -s exit:0 -x ${PW} groupmod testgroup -g 12345 - # use grep to see if the entry has not be duplicated - atf_check -o inline:"testgroup:*:12345:\n" -s exit:0 -x grep "^testgroup" ${HOME}/group -} - -atf_test_case groupmod_rename -groupmod_rename_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} groupadd foo - atf_check -s exit:0 ${PW} groupmod foo -l bar - atf_check -s exit:0 -o match:"^bar:.*" \ - grep "^bar:.*" ${HOME}/group -} - -atf_test_case groupmod_members -groupmod_members_body() { - populate_etc_skel - - for i in user1 user2 user3 user4; do - atf_check -s exit:0 ${PW} useradd $i - done - - atf_check -s exit:0 ${PW} groupadd foo -M "user1, user2" - atf_check -o inline:"foo:*:1005:user1,user2\n" -s exit:0 \ - ${PW} groupshow foo - atf_check -s exit:0 ${PW} groupmod foo -m "user3, user4" - atf_check -o inline:"foo:*:1005:user1,user2,user3,user4\n" -s exit:0 \ - ${PW} groupshow foo - atf_check -s exit:0 ${PW} groupmod foo -M "user1, user4" - atf_check -o inline:"foo:*:1005:user1,user4\n" -s exit:0 \ - ${PW} groupshow foo - # what about duplicates - atf_check -s exit:0 ${PW} groupmod foo -m "user1, user2, user3, user4" - atf_check -o inline:"foo:*:1005:user1,user4,user2,user3\n" -s exit:0 \ - ${PW} groupshow foo - atf_check -s exit:0 ${PW} groupmod foo -d "user1, user3" - atf_check -o inline:"foo:*:1005:user4,user2\n" -s exit:0 \ - ${PW} groupshow foo -} - -atf_init_test_cases() { - atf_add_test_case groupmod_user - atf_add_test_case groupmod_invalid_user - atf_add_test_case groupmod_bug_193704 - atf_add_test_case usermod_bug_185666 - atf_add_test_case do_not_duplicate_group_on_gid_change - atf_add_test_case groupmod_rename - atf_add_test_case groupmod_members -} diff --git a/pw/tests/pw_groupmod_test.sh b/pw/tests/pw_groupmod_test.sh new file mode 100755 index 0000000..5806925 --- /dev/null +++ b/pw/tests/pw_groupmod_test.sh @@ -0,0 +1,118 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + + +# Test adding & removing a user from a group +atf_test_case groupmod_user +groupmod_user_body() { + populate_etc_skel + atf_check -s exit:0 ${PW} addgroup test + atf_check -s exit:0 ${PW} groupmod test -m root + atf_check -s exit:0 -o match:"^test:\*:1001:root$" \ + grep "^test:\*:.*:root$" $HOME/group + atf_check -s exit:0 ${PW} groupmod test -d root + atf_check -s exit:0 -o match:"^test:\*:1001:$" \ + grep "^test:\*:.*:$" $HOME/group +} + + +# Test adding and removing a user that does not exist +atf_test_case groupmod_invalid_user +groupmod_invalid_user_body() { + populate_etc_skel + atf_check -s exit:0 ${PW} addgroup test + atf_check -s exit:67 -e match:"does not exist" ${PW} groupmod test -m foo + atf_check -s exit:0 ${PW} groupmod test -d foo +} + +atf_test_case groupmod_bug_193704 +groupmod_bug_193704_head() { + atf_set "descr" "Regression test for the #193704 bug" +} +groupmod_bug_193704_body() { + populate_etc_skel + atf_check -s exit:0 -x ${PW} groupadd test + atf_check -s exit:0 -x ${PW} groupmod test -l newgroupname + atf_check -s exit:65 -e match:"^pw: unknown group" -x ${PW} groupshow test +} + +atf_test_case usermod_bug_185666 +usermod_bug_185666_head() { + atf_set "descr" "Regression test for the #185666 bug" +} + +usermod_bug_185666_body() { + populate_etc_skel + atf_check -s exit:0 -x ${PW} useradd testuser + atf_check -s exit:0 -x ${PW} groupadd testgroup + atf_check -s exit:0 -x ${PW} groupadd testgroup2 + atf_check -s exit:0 -x ${PW} usermod testuser -G testgroup + atf_check -o inline:"testuser:*:1001:\n" -x ${PW} groupshow testuser + atf_check -o inline:"testgroup:*:1002:testuser\n" -x ${PW} groupshow testgroup + atf_check -o inline:"testgroup2:*:1003:\n" -x ${PW} groupshow testgroup2 + atf_check -s exit:0 -x ${PW} usermod testuser -G testgroup2 + atf_check -o inline:"testuser:*:1001:\n" -x ${PW} groupshow testuser + atf_check -o inline:"testgroup:*:1002:\n" -x ${PW} groupshow testgroup + atf_check -o inline:"testgroup2:*:1003:testuser\n" -x ${PW} groupshow testgroup2 +} + +atf_test_case do_not_duplicate_group_on_gid_change +do_not_duplicate_group_on_gid_change_head() { + atf_set "descr" "Do not duplicate group on gid change" +} + +do_not_duplicate_group_on_gid_change_body() { + populate_etc_skel + atf_check -s exit:0 -x ${PW} groupadd testgroup + atf_check -s exit:0 -x ${PW} groupmod testgroup -g 12345 + # use grep to see if the entry has not be duplicated + atf_check -o inline:"testgroup:*:12345:\n" -s exit:0 -x grep "^testgroup" ${HOME}/group +} + +atf_test_case groupmod_rename +groupmod_rename_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} groupadd foo + atf_check -s exit:0 ${PW} groupmod foo -l bar + atf_check -s exit:0 -o match:"^bar:.*" \ + grep "^bar:.*" ${HOME}/group +} + +atf_test_case groupmod_members +groupmod_members_body() { + populate_etc_skel + + for i in user1 user2 user3 user4; do + atf_check -s exit:0 ${PW} useradd $i + done + + atf_check -s exit:0 ${PW} groupadd foo -M "user1, user2" + atf_check -o inline:"foo:*:1005:user1,user2\n" -s exit:0 \ + ${PW} groupshow foo + atf_check -s exit:0 ${PW} groupmod foo -m "user3, user4" + atf_check -o inline:"foo:*:1005:user1,user2,user3,user4\n" -s exit:0 \ + ${PW} groupshow foo + atf_check -s exit:0 ${PW} groupmod foo -M "user1, user4" + atf_check -o inline:"foo:*:1005:user1,user4\n" -s exit:0 \ + ${PW} groupshow foo + # what about duplicates + atf_check -s exit:0 ${PW} groupmod foo -m "user1, user2, user3, user4" + atf_check -o inline:"foo:*:1005:user1,user4,user2,user3\n" -s exit:0 \ + ${PW} groupshow foo + atf_check -s exit:0 ${PW} groupmod foo -d "user1, user3" + atf_check -o inline:"foo:*:1005:user4,user2\n" -s exit:0 \ + ${PW} groupshow foo +} + +atf_init_test_cases() { + atf_add_test_case groupmod_user + atf_add_test_case groupmod_invalid_user + atf_add_test_case groupmod_bug_193704 + atf_add_test_case usermod_bug_185666 + atf_add_test_case do_not_duplicate_group_on_gid_change + atf_add_test_case groupmod_rename + atf_add_test_case groupmod_members +} diff --git a/pw/tests/pw_lock.sh b/pw/tests/pw_lock.sh deleted file mode 100755 index 5ec1b09..0000000 --- a/pw/tests/pw_lock.sh +++ /dev/null @@ -1,42 +0,0 @@ -# $FreeBSD$ - -# Import helper functions -. $(atf_get_srcdir)/helper_functions.shin - -# Test locking and unlocking a user account -atf_test_case user_locking cleanup -user_locking_body() { - populate_etc_skel - ${PW} useradd test || atf_fail "Creating test user" - ${PW} lock test || atf_fail "Locking the user" - atf_check -s exit:0 -o match:"^test:\*LOCKED\*\*:1001:" \ - grep "^test:\*LOCKED\*\*:1001:" $HOME/master.passwd - ${PW} unlock test || atf_fail "Locking the user" - atf_check -s exit:0 -o match:"^test:\*:1001:" \ - grep "^test:\*:1001:" $HOME/master.passwd -} - -atf_test_case numeric_locking cleanup -numeric_locking_body() { - populate_etc_skel - ${PW} useradd test || atf_fail "Creating test user" - ${PW} lock 1001 || atf_fail "Locking the user" - atf_check -s exit:0 -o match:"^test:\*LOCKED\*\*:1001:" \ - grep "^test:\*LOCKED\*\*:1001:" $HOME/master.passwd - ${PW} unlock 1001 || atf_fail "Unlocking the user" - atf_check -s exit:0 -o match:"^test:\*:1001:" \ - grep "^test:\*:1001:" $HOME/master.passwd - # Now numeric names - ${PW} useradd -n 1001 || atf_fail "Creating test user" - ${PW} lock 1001 || atf_fail "Locking the user" - atf_check -s exit:0 -o match:"^1001:\*LOCKED\*\*:1002:" \ - grep "^1001:\*LOCKED\*\*:1002:" $HOME/master.passwd - ${PW} unlock 1001 || atf_fail "Unlocking the user" - atf_check -s exit:0 -o match:"^1001:\*:1002:" \ - grep "^1001:\*:1002:" $HOME/master.passwd -} - -atf_init_test_cases() { - atf_add_test_case user_locking - atf_add_test_case numeric_locking -} diff --git a/pw/tests/pw_lock_test.sh b/pw/tests/pw_lock_test.sh new file mode 100755 index 0000000..5ec1b09 --- /dev/null +++ b/pw/tests/pw_lock_test.sh @@ -0,0 +1,42 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + +# Test locking and unlocking a user account +atf_test_case user_locking cleanup +user_locking_body() { + populate_etc_skel + ${PW} useradd test || atf_fail "Creating test user" + ${PW} lock test || atf_fail "Locking the user" + atf_check -s exit:0 -o match:"^test:\*LOCKED\*\*:1001:" \ + grep "^test:\*LOCKED\*\*:1001:" $HOME/master.passwd + ${PW} unlock test || atf_fail "Locking the user" + atf_check -s exit:0 -o match:"^test:\*:1001:" \ + grep "^test:\*:1001:" $HOME/master.passwd +} + +atf_test_case numeric_locking cleanup +numeric_locking_body() { + populate_etc_skel + ${PW} useradd test || atf_fail "Creating test user" + ${PW} lock 1001 || atf_fail "Locking the user" + atf_check -s exit:0 -o match:"^test:\*LOCKED\*\*:1001:" \ + grep "^test:\*LOCKED\*\*:1001:" $HOME/master.passwd + ${PW} unlock 1001 || atf_fail "Unlocking the user" + atf_check -s exit:0 -o match:"^test:\*:1001:" \ + grep "^test:\*:1001:" $HOME/master.passwd + # Now numeric names + ${PW} useradd -n 1001 || atf_fail "Creating test user" + ${PW} lock 1001 || atf_fail "Locking the user" + atf_check -s exit:0 -o match:"^1001:\*LOCKED\*\*:1002:" \ + grep "^1001:\*LOCKED\*\*:1002:" $HOME/master.passwd + ${PW} unlock 1001 || atf_fail "Unlocking the user" + atf_check -s exit:0 -o match:"^1001:\*:1002:" \ + grep "^1001:\*:1002:" $HOME/master.passwd +} + +atf_init_test_cases() { + atf_add_test_case user_locking + atf_add_test_case numeric_locking +} diff --git a/pw/tests/pw_useradd.sh b/pw/tests/pw_useradd.sh deleted file mode 100755 index b1ff8d4..0000000 --- a/pw/tests/pw_useradd.sh +++ /dev/null @@ -1,422 +0,0 @@ -# $FreeBSD$ - -# Import helper functions -. $(atf_get_srcdir)/helper_functions.shin - -# Test add user -atf_test_case user_add -user_add_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd test - atf_check -s exit:0 -o match:"^test:.*" \ - grep "^test:.*" $HOME/master.passwd -} - -# Test add user with option -N -atf_test_case user_add_noupdate -user_add_noupdate_body() { - populate_etc_skel - - atf_check -s exit:0 -o match:"^test:.*" ${PW} useradd test -N - atf_check -s exit:1 -o empty grep "^test:.*" $HOME/master.passwd -} - -# Test add user with comments -atf_test_case user_add_comments -user_add_comments_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd test -c "Test User,work,123,456" - atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ - grep "^test:.*:Test User,work,123,456:" $HOME/master.passwd -} - -# Test add user with comments and option -N -atf_test_case user_add_comments_noupdate -user_add_comments_noupdate_body() { - populate_etc_skel - - atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ - ${PW} useradd test -c "Test User,work,123,456" -N - atf_check -s exit:1 -o empty grep "^test:.*" $HOME/master.passwd -} - -# Test add user with invalid comments -atf_test_case user_add_comments_invalid -user_add_comments_invalid_body() { - populate_etc_skel - - atf_check -s exit:65 -e match:"invalid character" \ - ${PW} useradd test -c "Test User,work,123:456,456" - atf_check -s exit:1 -o empty \ - grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd -} - -# Test add user with invalid comments and option -N -atf_test_case user_add_comments_invalid_noupdate -user_add_comments_invalid_noupdate_body() { - populate_etc_skel - - atf_check -s exit:65 -e match:"invalid character" \ - ${PW} useradd test -c "Test User,work,123:456,456" -N - atf_check -s exit:1 -o empty grep "^test:.*" $HOME/master.passwd -} - -# Test add user with alternate homedir -atf_test_case user_add_homedir -user_add_homedir_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd test -d /foo/bar - atf_check -s exit:0 -o match:"^test:\*:.*::0:0:User &:/foo/bar:.*" \ - ${PW} usershow test -} - -# Test add user with account expiration as an epoch date -atf_test_case user_add_account_expiration_epoch -user_add_account_expiration_epoch_body() { - populate_etc_skel - - DATE=`date -j -v+1d "+%s"` - atf_check -s exit:0 ${PW} useradd test -e ${DATE} - atf_check -s exit:0 -o match:"^test:\*:.*::0:${DATE}:.*" \ - ${PW} usershow test -} - -# Test add user with account expiration as a DD-MM-YYYY date -atf_test_case user_add_account_expiration_date_numeric -user_add_account_expiration_date_numeric_body() { - populate_etc_skel - - DATE=`date -j -v+1d "+%d-%m-%Y"` - EPOCH=`date -j -f "%d-%m-%Y %H:%M:%S" "${DATE} 00:00:00" "+%s"` - atf_check -s exit:0 ${PW} useradd test -e ${DATE} - atf_check -s exit:0 -o match:"^test:\*:.*::0:${EPOCH}:User &:.*" \ - ${PW} usershow test -} - -# Test add user with account expiration as a DD-MM-YYYY date -atf_test_case user_add_account_expiration_date_month -user_add_account_expiration_date_month_body() { - populate_etc_skel - - DATE=`date -j -v+1d "+%d-%b-%Y"` - EPOCH=`date -j -f "%d-%b-%Y %H:%M:%S" "${DATE} 00:00:00" "+%s"` - atf_check -s exit:0 ${PW} useradd test -e ${DATE} - atf_check -s exit:0 -o match:"^test:\*:.*::0:${EPOCH}:User &:.*" \ - ${PW} usershow test -} - -# Test add user with account expiration as a relative date -atf_test_case user_add_account_expiration_date_relative -user_add_account_expiration_date_relative_body() { - populate_etc_skel - - EPOCH=`date -j -v+13m "+%s"` - BUF=`expr $EPOCH + 5` - atf_check -s exit:0 ${PW} useradd test -e +13o - TIME=`${PW} usershow test | awk -F ':' '{print $7}'` - [ ! -z $TIME -a $TIME -ge $EPOCH -a $TIME -lt $BUF ] || \ - atf_fail "Expiration time($TIME) was not within $EPOCH - $BUF seconds." -} - -# Test add user with password expiration as an epoch date -atf_test_case user_add_password_expiration_epoch -user_add_password_expiration_epoch_body() { - populate_etc_skel - - DATE=`date -j -v+1d "+%s"` - atf_check -s exit:0 ${PW} useradd test -p ${DATE} - atf_check -s exit:0 -o match:"^test:\*:.*::${DATE}:0:.*" \ - ${PW} usershow test -} - -# Test add user with password expiration as a DD-MM-YYYY date -atf_test_case user_add_password_expiration_date_numeric -user_add_password_expiration_date_numeric_body() { - populate_etc_skel - - DATE=`date -j -v+1d "+%d-%m-%Y"` - EPOCH=`date -j -f "%d-%m-%Y %H:%M:%S" "${DATE} 00:00:00" "+%s"` - atf_check -s exit:0 ${PW} useradd test -p ${DATE} - atf_check -s exit:0 -o match:"^test:\*:.*::${EPOCH}:0:User &:.*" \ - ${PW} usershow test -} - -# Test add user with password expiration as a DD-MMM-YYYY date -atf_test_case user_add_password_expiration_date_month -user_add_password_expiration_date_month_body() { - populate_etc_skel - - DATE=`date -j -v+1d "+%d-%b-%Y"` - EPOCH=`date -j -f "%d-%b-%Y %H:%M:%S" "${DATE} 00:00:00" "+%s"` - atf_check -s exit:0 ${PW} useradd test -p ${DATE} - atf_check -s exit:0 -o match:"^test:\*:.*::${EPOCH}:0:User &:.*" \ - ${PW} usershow test -} - -# Test add user with password expiration as a relative date -atf_test_case user_add_password_expiration_date_relative -user_add_password_expiration_date_relative_body() { - populate_etc_skel - - EPOCH=`date -j -v+13m "+%s"` - BUF=`expr $EPOCH + 5` - atf_check -s exit:0 ${PW} useradd test -p +13o - TIME=`${PW} usershow test | awk -F ':' '{print $6}'` - [ ! -z $TIME -a $TIME -ge $EPOCH -a $TIME -lt $BUF ] || \ - atf_fail "Expiration time($TIME) was not within $EPOCH - $BUF seconds." -} - -atf_test_case user_add_name_too_long -user_add_name_too_long_body() { - populate_etc_skel - atf_check -e match:"too long" -s exit:64 \ - ${PW} useradd name_very_vert_very_very_very_long -} - -atf_test_case user_add_expiration -user_add_expiration_body() { - populate_etc_skel - - atf_check -s exit:0 \ - ${PW} useradd foo -e 20-03-2037 - atf_check -o inline:"foo:*:1001:1001::0:2121120000:User &:/home/foo:/bin/sh\n" \ - -s exit:0 grep "^foo" ${HOME}/master.passwd - atf_check -s exit:0 ${PW} userdel foo - atf_check -s exit:0 \ - ${PW} useradd foo -e 20-03-37 - atf_check -o inline:"foo:*:1001:1001::0:2121120000:User &:/home/foo:/bin/sh\n" \ - -s exit:0 grep "^foo" ${HOME}/master.passwd - atf_check -s exit:0 ${PW} userdel foo - atf_check -s exit:0 \ - ${PW} useradd foo -e 20-Mar-2037 - atf_check -o inline:"foo:*:1001:1001::0:2121120000:User &:/home/foo:/bin/sh\n" \ - -s exit:0 grep "^foo" ${HOME}/master.passwd - atf_check -s exit:0 ${PW} userdel foo - atf_check -e inline:"pw: Invalid date\n" -s exit:1 \ - ${PW} useradd foo -e 20-Foo-2037 - atf_check -e inline:"pw: Invalid date\n" -s exit:1 \ - ${PW} useradd foo -e 20-13-2037 - atf_check -s exit:0 ${PW} useradd foo -e "12:00 20-03-2037" - atf_check -s exit:0 ${PW} userdel foo - atf_check -e inline:"pw: Invalid date\n" -s exit:1 \ - ${PW} useradd foo -e "12 20-03-2037" - atf_check -s exit:0 ${PW} useradd foo -e "20-03-2037 12:00" - atf_check -s exit:0 ${PW} userdel foo -} - -atf_test_case user_add_invalid_user_entry -user_add_invalid_user_entry_body() { - touch ${HOME}/master.passwd - touch ${HOME}/group - - pwd_mkdb -p -d ${HOME} ${HOME}/master.passwd || \ - atf_fail "generate passwd from master.passwd" - atf_check -s exit:0 ${PW} useradd foo - echo "foo1:*:1002" >> ${HOME}/master.passwd - atf_check -s exit:1 -e match:"Invalid user entry" ${PW} useradd foo2 -} - -atf_test_case user_add_invalid_group_entry -user_add_invalid_group_entry_body() { - touch ${HOME}/master.passwd - touch ${HOME}/group - - pwd_mkdb -p -d ${HOME} ${HOME}/master.passwd || \ - atf_fail "generate passwd from master.passwd" - atf_check -s exit:0 ${PW} useradd foo - echo 'foo1:*:1002' >> group - atf_check -s exit:1 -e match:"Invalid group entry" ${PW} useradd foo2 -} - -atf_test_case user_add_password_from_h -user_add_password_from_h_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo -h 0 <<-EOF - $(echo mypassword) - EOF - passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` - atf_check -s exit:0 -o inline:$passhash \ - $(atf_get_srcdir)/crypt $passhash "mypassword" -} - -atf_test_case user_add_R -user_add_R_body() { - populate_root_etc_skel - - atf_check -s exit:0 ${RPW} useradd foo - atf_check -s exit:0 ${RPW} useradd bar -m - test -d ${HOME}/home || atf_fail "Home parent directory not created" - test -d ${HOME}/home/bar || atf_fail "Directory not created" - atf_check -s exit:0 ${RPW} userdel bar - test -d ${HOME}/home/bar || atf_fail "Directory removed" - atf_check -s exit:0 ${RPW} useradd bar - atf_check -s exit:0 ${RPW} userdel bar -r - [ ! -d ${HOME}/home/bar ] || atf_fail "Directory not removed" -} - -atf_test_case user_add_R_symlink -user_add_R_symlink_body() { - populate_root_etc_skel - - mkdir ${HOME}/usr - atf_check -s exit:0 ${RPW} useradd foo -m - test -d ${HOME}/usr/home || atf_fail "Home parent directory not created" - test -h ${HOME}/home || atf_fail "/home directory is not a symlink" - atf_check -s exit:0 -o inline:"usr/home\n" readlink ${HOME}/home -} - -atf_test_case user_add_skel -user_add_skel_body() { - populate_root_etc_skel - - mkdir ${HOME}/skel - echo "a" > ${HOME}/skel/.a - echo "b" > ${HOME}/skel/b - mkdir ${HOME}/skel/c - mkdir ${HOME}/skel/c/d - mkdir ${HOME}/skel/dot.plop - echo "c" > ${HOME}/skel/c/d/dot.c - mkdir ${HOME}/home - ln -sf /nonexistent ${HOME}/skel/c/foo - atf_check -s exit:0 ${RPW} useradd foo -k /skel -m - test -d ${HOME}/home/foo || atf_fail "Directory not created" - test -f ${HOME}/home/foo/.a || atf_fail "File not created" - atf_check -o file:${HOME}/skel/.a -s exit:0 cat ${HOME}/home/foo/.a - atf_check -o file:${HOME}/skel/b -s exit:0 cat ${HOME}/home/foo/b - test -d ${HOME}/home/foo/c || atf_fail "Dotted directory in skel not copied" - test -d ${HOME}/home/foo/.plop || atf_fail "Directory in skell not created" - atf_check -o inline:"/nonexistent\n" -s ignore readlink -f ${HOME}/home/foo/c/foo - atf_check -o file:${HOME}/skel/c/d/dot.c -s exit:0 cat ${HOME}/home/foo/c/d/.c -} - -atf_test_case user_add_uid0 -user_add_uid0_body() { - populate_etc_skel - atf_check -e inline:"pw: WARNING: new account \`foo' has a uid of 0 (superuser access!)\n" \ - -s exit:0 ${PW} useradd foo -u 0 -g 0 -d /root -s /bin/sh -c "Bourne-again Superuser" -o - atf_check \ - -o inline:"foo:*:0:0::0:0:Bourne-again Superuser:/root:/bin/sh\n" \ - -s exit:0 ${PW} usershow foo -} - -atf_test_case user_add_uid_too_large -user_add_uid_too_large_body() { - populate_etc_skel - atf_check -s exit:64 -e inline:"pw: Bad id '9999999999999': too large\n" \ - ${PW} useradd -n test1 -u 9999999999999 -} - -atf_test_case user_add_bad_shell -user_add_bad_shell_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo -s sh - atf_check -s exit:78 -e ignore ${PW} useradd bar -s badshell -} - -atf_test_case user_add_already_exists -user_add_already_exists_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - atf_check -s exit:65 \ - -e inline:"pw: login name \`foo' already exists\n" \ - ${PW} useradd foo -} - -atf_test_case user_add_w_error -user_add_w_error_body() { - populate_etc_skel - - atf_check -s exit:1 -e match:"pw: Invalid value for default password" \ - ${PW} useradd foo -w invalid_value -} - -atf_test_case user_add_w_no -user_add_w_no_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo -w no - atf_check -s exit:0 -o match:"^foo:\*" grep "^foo:" $HOME/master.passwd -} - -atf_test_case user_add_w_none -user_add_w_none_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo -w none - atf_check -s exit:0 -o match:"^foo::" grep "^foo:" $HOME/master.passwd -} - -atf_test_case user_add_w_random -user_add_w_random_body() { - populate_etc_skel - - password=`${PW} useradd foo -w random | cat` - passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` - atf_check -s exit:0 -o inline:$passhash \ - $(atf_get_srcdir)/crypt $passhash "$password" -} - -atf_test_case user_add_w_yes -user_add_w_yes_body() { - populate_etc_skel - password=`${PW} useradd foo -w random | cat` - passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` - atf_check -s exit:0 -o inline:$passhash \ - $(atf_get_srcdir)/crypt $passhash "$password" -} - -atf_test_case user_add_with_pw_conf -user_add_with_pw_conf_body() -{ - populate_etc_skel - atf_check -s exit:0 \ - ${PW} useradd -D -C ${HOME}/pw.conf \ - -u 2000,32767 -i 2000,32767 - atf_check -s exit:0 \ - -o inline:"minuid = 2000\nmaxuid = 32767\nmingid = 2000\nmaxgid = 32767\n" \ - grep "^m.*id =" ${HOME}/pw.conf - atf_check -s exit:0 \ - ${PW} useradd foo -C ${HOME}/pw.conf -} - -atf_init_test_cases() { - atf_add_test_case user_add - atf_add_test_case user_add_noupdate - atf_add_test_case user_add_comments - atf_add_test_case user_add_comments_noupdate - atf_add_test_case user_add_comments_invalid - atf_add_test_case user_add_comments_invalid_noupdate - atf_add_test_case user_add_homedir - atf_add_test_case user_add_account_expiration_epoch - atf_add_test_case user_add_account_expiration_date_numeric - atf_add_test_case user_add_account_expiration_date_month - atf_add_test_case user_add_account_expiration_date_relative - atf_add_test_case user_add_password_expiration_epoch - atf_add_test_case user_add_password_expiration_date_numeric - atf_add_test_case user_add_password_expiration_date_month - atf_add_test_case user_add_password_expiration_date_relative - atf_add_test_case user_add_name_too_long - atf_add_test_case user_add_expiration - atf_add_test_case user_add_invalid_user_entry - atf_add_test_case user_add_invalid_group_entry - atf_add_test_case user_add_password_from_h - atf_add_test_case user_add_R - atf_add_test_case user_add_R_symlink - atf_add_test_case user_add_skel - atf_add_test_case user_add_uid0 - atf_add_test_case user_add_uid_too_large - atf_add_test_case user_add_bad_shell - atf_add_test_case user_add_already_exists - atf_add_test_case user_add_w_error - atf_add_test_case user_add_w_no - atf_add_test_case user_add_w_none - atf_add_test_case user_add_w_random - atf_add_test_case user_add_w_yes - atf_add_test_case user_add_with_pw_conf -} diff --git a/pw/tests/pw_useradd_test.sh b/pw/tests/pw_useradd_test.sh new file mode 100755 index 0000000..b1ff8d4 --- /dev/null +++ b/pw/tests/pw_useradd_test.sh @@ -0,0 +1,422 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + +# Test add user +atf_test_case user_add +user_add_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd test + atf_check -s exit:0 -o match:"^test:.*" \ + grep "^test:.*" $HOME/master.passwd +} + +# Test add user with option -N +atf_test_case user_add_noupdate +user_add_noupdate_body() { + populate_etc_skel + + atf_check -s exit:0 -o match:"^test:.*" ${PW} useradd test -N + atf_check -s exit:1 -o empty grep "^test:.*" $HOME/master.passwd +} + +# Test add user with comments +atf_test_case user_add_comments +user_add_comments_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd test -c "Test User,work,123,456" + atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ + grep "^test:.*:Test User,work,123,456:" $HOME/master.passwd +} + +# Test add user with comments and option -N +atf_test_case user_add_comments_noupdate +user_add_comments_noupdate_body() { + populate_etc_skel + + atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ + ${PW} useradd test -c "Test User,work,123,456" -N + atf_check -s exit:1 -o empty grep "^test:.*" $HOME/master.passwd +} + +# Test add user with invalid comments +atf_test_case user_add_comments_invalid +user_add_comments_invalid_body() { + populate_etc_skel + + atf_check -s exit:65 -e match:"invalid character" \ + ${PW} useradd test -c "Test User,work,123:456,456" + atf_check -s exit:1 -o empty \ + grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd +} + +# Test add user with invalid comments and option -N +atf_test_case user_add_comments_invalid_noupdate +user_add_comments_invalid_noupdate_body() { + populate_etc_skel + + atf_check -s exit:65 -e match:"invalid character" \ + ${PW} useradd test -c "Test User,work,123:456,456" -N + atf_check -s exit:1 -o empty grep "^test:.*" $HOME/master.passwd +} + +# Test add user with alternate homedir +atf_test_case user_add_homedir +user_add_homedir_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd test -d /foo/bar + atf_check -s exit:0 -o match:"^test:\*:.*::0:0:User &:/foo/bar:.*" \ + ${PW} usershow test +} + +# Test add user with account expiration as an epoch date +atf_test_case user_add_account_expiration_epoch +user_add_account_expiration_epoch_body() { + populate_etc_skel + + DATE=`date -j -v+1d "+%s"` + atf_check -s exit:0 ${PW} useradd test -e ${DATE} + atf_check -s exit:0 -o match:"^test:\*:.*::0:${DATE}:.*" \ + ${PW} usershow test +} + +# Test add user with account expiration as a DD-MM-YYYY date +atf_test_case user_add_account_expiration_date_numeric +user_add_account_expiration_date_numeric_body() { + populate_etc_skel + + DATE=`date -j -v+1d "+%d-%m-%Y"` + EPOCH=`date -j -f "%d-%m-%Y %H:%M:%S" "${DATE} 00:00:00" "+%s"` + atf_check -s exit:0 ${PW} useradd test -e ${DATE} + atf_check -s exit:0 -o match:"^test:\*:.*::0:${EPOCH}:User &:.*" \ + ${PW} usershow test +} + +# Test add user with account expiration as a DD-MM-YYYY date +atf_test_case user_add_account_expiration_date_month +user_add_account_expiration_date_month_body() { + populate_etc_skel + + DATE=`date -j -v+1d "+%d-%b-%Y"` + EPOCH=`date -j -f "%d-%b-%Y %H:%M:%S" "${DATE} 00:00:00" "+%s"` + atf_check -s exit:0 ${PW} useradd test -e ${DATE} + atf_check -s exit:0 -o match:"^test:\*:.*::0:${EPOCH}:User &:.*" \ + ${PW} usershow test +} + +# Test add user with account expiration as a relative date +atf_test_case user_add_account_expiration_date_relative +user_add_account_expiration_date_relative_body() { + populate_etc_skel + + EPOCH=`date -j -v+13m "+%s"` + BUF=`expr $EPOCH + 5` + atf_check -s exit:0 ${PW} useradd test -e +13o + TIME=`${PW} usershow test | awk -F ':' '{print $7}'` + [ ! -z $TIME -a $TIME -ge $EPOCH -a $TIME -lt $BUF ] || \ + atf_fail "Expiration time($TIME) was not within $EPOCH - $BUF seconds." +} + +# Test add user with password expiration as an epoch date +atf_test_case user_add_password_expiration_epoch +user_add_password_expiration_epoch_body() { + populate_etc_skel + + DATE=`date -j -v+1d "+%s"` + atf_check -s exit:0 ${PW} useradd test -p ${DATE} + atf_check -s exit:0 -o match:"^test:\*:.*::${DATE}:0:.*" \ + ${PW} usershow test +} + +# Test add user with password expiration as a DD-MM-YYYY date +atf_test_case user_add_password_expiration_date_numeric +user_add_password_expiration_date_numeric_body() { + populate_etc_skel + + DATE=`date -j -v+1d "+%d-%m-%Y"` + EPOCH=`date -j -f "%d-%m-%Y %H:%M:%S" "${DATE} 00:00:00" "+%s"` + atf_check -s exit:0 ${PW} useradd test -p ${DATE} + atf_check -s exit:0 -o match:"^test:\*:.*::${EPOCH}:0:User &:.*" \ + ${PW} usershow test +} + +# Test add user with password expiration as a DD-MMM-YYYY date +atf_test_case user_add_password_expiration_date_month +user_add_password_expiration_date_month_body() { + populate_etc_skel + + DATE=`date -j -v+1d "+%d-%b-%Y"` + EPOCH=`date -j -f "%d-%b-%Y %H:%M:%S" "${DATE} 00:00:00" "+%s"` + atf_check -s exit:0 ${PW} useradd test -p ${DATE} + atf_check -s exit:0 -o match:"^test:\*:.*::${EPOCH}:0:User &:.*" \ + ${PW} usershow test +} + +# Test add user with password expiration as a relative date +atf_test_case user_add_password_expiration_date_relative +user_add_password_expiration_date_relative_body() { + populate_etc_skel + + EPOCH=`date -j -v+13m "+%s"` + BUF=`expr $EPOCH + 5` + atf_check -s exit:0 ${PW} useradd test -p +13o + TIME=`${PW} usershow test | awk -F ':' '{print $6}'` + [ ! -z $TIME -a $TIME -ge $EPOCH -a $TIME -lt $BUF ] || \ + atf_fail "Expiration time($TIME) was not within $EPOCH - $BUF seconds." +} + +atf_test_case user_add_name_too_long +user_add_name_too_long_body() { + populate_etc_skel + atf_check -e match:"too long" -s exit:64 \ + ${PW} useradd name_very_vert_very_very_very_long +} + +atf_test_case user_add_expiration +user_add_expiration_body() { + populate_etc_skel + + atf_check -s exit:0 \ + ${PW} useradd foo -e 20-03-2037 + atf_check -o inline:"foo:*:1001:1001::0:2121120000:User &:/home/foo:/bin/sh\n" \ + -s exit:0 grep "^foo" ${HOME}/master.passwd + atf_check -s exit:0 ${PW} userdel foo + atf_check -s exit:0 \ + ${PW} useradd foo -e 20-03-37 + atf_check -o inline:"foo:*:1001:1001::0:2121120000:User &:/home/foo:/bin/sh\n" \ + -s exit:0 grep "^foo" ${HOME}/master.passwd + atf_check -s exit:0 ${PW} userdel foo + atf_check -s exit:0 \ + ${PW} useradd foo -e 20-Mar-2037 + atf_check -o inline:"foo:*:1001:1001::0:2121120000:User &:/home/foo:/bin/sh\n" \ + -s exit:0 grep "^foo" ${HOME}/master.passwd + atf_check -s exit:0 ${PW} userdel foo + atf_check -e inline:"pw: Invalid date\n" -s exit:1 \ + ${PW} useradd foo -e 20-Foo-2037 + atf_check -e inline:"pw: Invalid date\n" -s exit:1 \ + ${PW} useradd foo -e 20-13-2037 + atf_check -s exit:0 ${PW} useradd foo -e "12:00 20-03-2037" + atf_check -s exit:0 ${PW} userdel foo + atf_check -e inline:"pw: Invalid date\n" -s exit:1 \ + ${PW} useradd foo -e "12 20-03-2037" + atf_check -s exit:0 ${PW} useradd foo -e "20-03-2037 12:00" + atf_check -s exit:0 ${PW} userdel foo +} + +atf_test_case user_add_invalid_user_entry +user_add_invalid_user_entry_body() { + touch ${HOME}/master.passwd + touch ${HOME}/group + + pwd_mkdb -p -d ${HOME} ${HOME}/master.passwd || \ + atf_fail "generate passwd from master.passwd" + atf_check -s exit:0 ${PW} useradd foo + echo "foo1:*:1002" >> ${HOME}/master.passwd + atf_check -s exit:1 -e match:"Invalid user entry" ${PW} useradd foo2 +} + +atf_test_case user_add_invalid_group_entry +user_add_invalid_group_entry_body() { + touch ${HOME}/master.passwd + touch ${HOME}/group + + pwd_mkdb -p -d ${HOME} ${HOME}/master.passwd || \ + atf_fail "generate passwd from master.passwd" + atf_check -s exit:0 ${PW} useradd foo + echo 'foo1:*:1002' >> group + atf_check -s exit:1 -e match:"Invalid group entry" ${PW} useradd foo2 +} + +atf_test_case user_add_password_from_h +user_add_password_from_h_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo -h 0 <<-EOF + $(echo mypassword) + EOF + passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` + atf_check -s exit:0 -o inline:$passhash \ + $(atf_get_srcdir)/crypt $passhash "mypassword" +} + +atf_test_case user_add_R +user_add_R_body() { + populate_root_etc_skel + + atf_check -s exit:0 ${RPW} useradd foo + atf_check -s exit:0 ${RPW} useradd bar -m + test -d ${HOME}/home || atf_fail "Home parent directory not created" + test -d ${HOME}/home/bar || atf_fail "Directory not created" + atf_check -s exit:0 ${RPW} userdel bar + test -d ${HOME}/home/bar || atf_fail "Directory removed" + atf_check -s exit:0 ${RPW} useradd bar + atf_check -s exit:0 ${RPW} userdel bar -r + [ ! -d ${HOME}/home/bar ] || atf_fail "Directory not removed" +} + +atf_test_case user_add_R_symlink +user_add_R_symlink_body() { + populate_root_etc_skel + + mkdir ${HOME}/usr + atf_check -s exit:0 ${RPW} useradd foo -m + test -d ${HOME}/usr/home || atf_fail "Home parent directory not created" + test -h ${HOME}/home || atf_fail "/home directory is not a symlink" + atf_check -s exit:0 -o inline:"usr/home\n" readlink ${HOME}/home +} + +atf_test_case user_add_skel +user_add_skel_body() { + populate_root_etc_skel + + mkdir ${HOME}/skel + echo "a" > ${HOME}/skel/.a + echo "b" > ${HOME}/skel/b + mkdir ${HOME}/skel/c + mkdir ${HOME}/skel/c/d + mkdir ${HOME}/skel/dot.plop + echo "c" > ${HOME}/skel/c/d/dot.c + mkdir ${HOME}/home + ln -sf /nonexistent ${HOME}/skel/c/foo + atf_check -s exit:0 ${RPW} useradd foo -k /skel -m + test -d ${HOME}/home/foo || atf_fail "Directory not created" + test -f ${HOME}/home/foo/.a || atf_fail "File not created" + atf_check -o file:${HOME}/skel/.a -s exit:0 cat ${HOME}/home/foo/.a + atf_check -o file:${HOME}/skel/b -s exit:0 cat ${HOME}/home/foo/b + test -d ${HOME}/home/foo/c || atf_fail "Dotted directory in skel not copied" + test -d ${HOME}/home/foo/.plop || atf_fail "Directory in skell not created" + atf_check -o inline:"/nonexistent\n" -s ignore readlink -f ${HOME}/home/foo/c/foo + atf_check -o file:${HOME}/skel/c/d/dot.c -s exit:0 cat ${HOME}/home/foo/c/d/.c +} + +atf_test_case user_add_uid0 +user_add_uid0_body() { + populate_etc_skel + atf_check -e inline:"pw: WARNING: new account \`foo' has a uid of 0 (superuser access!)\n" \ + -s exit:0 ${PW} useradd foo -u 0 -g 0 -d /root -s /bin/sh -c "Bourne-again Superuser" -o + atf_check \ + -o inline:"foo:*:0:0::0:0:Bourne-again Superuser:/root:/bin/sh\n" \ + -s exit:0 ${PW} usershow foo +} + +atf_test_case user_add_uid_too_large +user_add_uid_too_large_body() { + populate_etc_skel + atf_check -s exit:64 -e inline:"pw: Bad id '9999999999999': too large\n" \ + ${PW} useradd -n test1 -u 9999999999999 +} + +atf_test_case user_add_bad_shell +user_add_bad_shell_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo -s sh + atf_check -s exit:78 -e ignore ${PW} useradd bar -s badshell +} + +atf_test_case user_add_already_exists +user_add_already_exists_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + atf_check -s exit:65 \ + -e inline:"pw: login name \`foo' already exists\n" \ + ${PW} useradd foo +} + +atf_test_case user_add_w_error +user_add_w_error_body() { + populate_etc_skel + + atf_check -s exit:1 -e match:"pw: Invalid value for default password" \ + ${PW} useradd foo -w invalid_value +} + +atf_test_case user_add_w_no +user_add_w_no_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo -w no + atf_check -s exit:0 -o match:"^foo:\*" grep "^foo:" $HOME/master.passwd +} + +atf_test_case user_add_w_none +user_add_w_none_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo -w none + atf_check -s exit:0 -o match:"^foo::" grep "^foo:" $HOME/master.passwd +} + +atf_test_case user_add_w_random +user_add_w_random_body() { + populate_etc_skel + + password=`${PW} useradd foo -w random | cat` + passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` + atf_check -s exit:0 -o inline:$passhash \ + $(atf_get_srcdir)/crypt $passhash "$password" +} + +atf_test_case user_add_w_yes +user_add_w_yes_body() { + populate_etc_skel + password=`${PW} useradd foo -w random | cat` + passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` + atf_check -s exit:0 -o inline:$passhash \ + $(atf_get_srcdir)/crypt $passhash "$password" +} + +atf_test_case user_add_with_pw_conf +user_add_with_pw_conf_body() +{ + populate_etc_skel + atf_check -s exit:0 \ + ${PW} useradd -D -C ${HOME}/pw.conf \ + -u 2000,32767 -i 2000,32767 + atf_check -s exit:0 \ + -o inline:"minuid = 2000\nmaxuid = 32767\nmingid = 2000\nmaxgid = 32767\n" \ + grep "^m.*id =" ${HOME}/pw.conf + atf_check -s exit:0 \ + ${PW} useradd foo -C ${HOME}/pw.conf +} + +atf_init_test_cases() { + atf_add_test_case user_add + atf_add_test_case user_add_noupdate + atf_add_test_case user_add_comments + atf_add_test_case user_add_comments_noupdate + atf_add_test_case user_add_comments_invalid + atf_add_test_case user_add_comments_invalid_noupdate + atf_add_test_case user_add_homedir + atf_add_test_case user_add_account_expiration_epoch + atf_add_test_case user_add_account_expiration_date_numeric + atf_add_test_case user_add_account_expiration_date_month + atf_add_test_case user_add_account_expiration_date_relative + atf_add_test_case user_add_password_expiration_epoch + atf_add_test_case user_add_password_expiration_date_numeric + atf_add_test_case user_add_password_expiration_date_month + atf_add_test_case user_add_password_expiration_date_relative + atf_add_test_case user_add_name_too_long + atf_add_test_case user_add_expiration + atf_add_test_case user_add_invalid_user_entry + atf_add_test_case user_add_invalid_group_entry + atf_add_test_case user_add_password_from_h + atf_add_test_case user_add_R + atf_add_test_case user_add_R_symlink + atf_add_test_case user_add_skel + atf_add_test_case user_add_uid0 + atf_add_test_case user_add_uid_too_large + atf_add_test_case user_add_bad_shell + atf_add_test_case user_add_already_exists + atf_add_test_case user_add_w_error + atf_add_test_case user_add_w_no + atf_add_test_case user_add_w_none + atf_add_test_case user_add_w_random + atf_add_test_case user_add_w_yes + atf_add_test_case user_add_with_pw_conf +} diff --git a/pw/tests/pw_userdel.sh b/pw/tests/pw_userdel.sh deleted file mode 100755 index d03501a..0000000 --- a/pw/tests/pw_userdel.sh +++ /dev/null @@ -1,76 +0,0 @@ -# $FreeBSD$ - -# Import helper functions -. $(atf_get_srcdir)/helper_functions.shin - - -# Test that a user can be deleted when another user is part of this -# user's default group and does not go into an infinate loop. -# PR: 191427 -atf_test_case rmuser_seperate_group cleanup -rmuser_seperate_group_head() { - atf_set "timeout" "30" -} -rmuser_seperate_group_body() { - populate_etc_skel - ${PW} useradd test || atf_fail "Creating test user" - ${PW} groupmod test -M 'test,root' || \ - atf_fail "Modifying the group" - ${PW} userdel test || atf_fail "Delete the test user" -} - - -atf_test_case user_do_not_try_to_delete_root_if_user_unknown -user_do_not_try_to_delete_root_if_user_unknown_head() { - atf_set "descr" \ - "Make sure not to try to remove root if deleting an unknown user" -} -user_do_not_try_to_delete_root_if_user_unknown_body() { - populate_etc_skel - atf_check -e inline:"pw: Bad id 'plop': invalid\n" -s exit:64 -x \ - ${PW} userdel -u plop -} - -atf_test_case delete_files -delete_files_body() { - populate_root_etc_skel - - mkdir -p ${HOME}/skel - touch ${HOME}/skel/a - mkdir -p ${HOME}/home - mkdir -p ${HOME}/var/mail - echo "foo wedontcare" > ${HOME}/etc/opiekeys - atf_check -s exit:0 ${RPW} useradd foo -k /skel -m - test -d ${HOME}/home || atf_fail "Fail to create home directory" - test -f ${HOME}/var/mail/foo || atf_fail "Mail file not created" - atf_check -s exit:0 ${RPW} userdel foo -r - atf_check -s exit:0 -o inline:"#oo wedontcare\n" cat ${HOME}/etc/opiekeys - if test -f ${HOME}/var/mail/foo; then - atf_fail "Mail file not removed" - fi -} - -atf_test_case delete_numeric_name -delete_numeric_name_body() { - populate_etc_skel - - atf_check ${PW} useradd -n foo -u 4001 - atf_check -e inline:"pw: no such user \`4001'\n" -s exit:67 \ - ${PW} userdel -n 4001 -} - -atf_test_case home_not_a_dir -home_not_a_dir_body() { - populate_root_etc_skel - touch ${HOME}/foo - atf_check ${RPW} useradd foo -d /foo - atf_check ${RPW} userdel foo -r -} - -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 -} diff --git a/pw/tests/pw_userdel_test.sh b/pw/tests/pw_userdel_test.sh new file mode 100755 index 0000000..d03501a --- /dev/null +++ b/pw/tests/pw_userdel_test.sh @@ -0,0 +1,76 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + + +# Test that a user can be deleted when another user is part of this +# user's default group and does not go into an infinate loop. +# PR: 191427 +atf_test_case rmuser_seperate_group cleanup +rmuser_seperate_group_head() { + atf_set "timeout" "30" +} +rmuser_seperate_group_body() { + populate_etc_skel + ${PW} useradd test || atf_fail "Creating test user" + ${PW} groupmod test -M 'test,root' || \ + atf_fail "Modifying the group" + ${PW} userdel test || atf_fail "Delete the test user" +} + + +atf_test_case user_do_not_try_to_delete_root_if_user_unknown +user_do_not_try_to_delete_root_if_user_unknown_head() { + atf_set "descr" \ + "Make sure not to try to remove root if deleting an unknown user" +} +user_do_not_try_to_delete_root_if_user_unknown_body() { + populate_etc_skel + atf_check -e inline:"pw: Bad id 'plop': invalid\n" -s exit:64 -x \ + ${PW} userdel -u plop +} + +atf_test_case delete_files +delete_files_body() { + populate_root_etc_skel + + mkdir -p ${HOME}/skel + touch ${HOME}/skel/a + mkdir -p ${HOME}/home + mkdir -p ${HOME}/var/mail + echo "foo wedontcare" > ${HOME}/etc/opiekeys + atf_check -s exit:0 ${RPW} useradd foo -k /skel -m + test -d ${HOME}/home || atf_fail "Fail to create home directory" + test -f ${HOME}/var/mail/foo || atf_fail "Mail file not created" + atf_check -s exit:0 ${RPW} userdel foo -r + atf_check -s exit:0 -o inline:"#oo wedontcare\n" cat ${HOME}/etc/opiekeys + if test -f ${HOME}/var/mail/foo; then + atf_fail "Mail file not removed" + fi +} + +atf_test_case delete_numeric_name +delete_numeric_name_body() { + populate_etc_skel + + atf_check ${PW} useradd -n foo -u 4001 + atf_check -e inline:"pw: no such user \`4001'\n" -s exit:67 \ + ${PW} userdel -n 4001 +} + +atf_test_case home_not_a_dir +home_not_a_dir_body() { + populate_root_etc_skel + touch ${HOME}/foo + atf_check ${RPW} useradd foo -d /foo + atf_check ${RPW} userdel foo -r +} + +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 +} diff --git a/pw/tests/pw_usermod.sh b/pw/tests/pw_usermod.sh deleted file mode 100755 index 6a13130..0000000 --- a/pw/tests/pw_usermod.sh +++ /dev/null @@ -1,299 +0,0 @@ -# $FreeBSD$ - -# Import helper functions -. $(atf_get_srcdir)/helper_functions.shin - -# Test modifying a user -atf_test_case user_mod -user_mod_body() { - populate_etc_skel - - atf_check -s exit:67 -e match:"no such user" ${PW} usermod test - atf_check -s exit:0 ${PW} useradd test - atf_check -s exit:0 ${PW} usermod test - atf_check -s exit:0 -o match:"^test:.*" \ - grep "^test:.*" $HOME/master.passwd -} - -# Test modifying a user with option -N -atf_test_case user_mod_noupdate -user_mod_noupdate_body() { - populate_etc_skel - - atf_check -s exit:67 -e match:"no such user" ${PW} usermod test -N - atf_check -s exit:0 ${PW} useradd test - atf_check -s exit:0 -o match:"^test:.*" ${PW} usermod test -N - atf_check -s exit:0 -o match:"^test:.*" \ - grep "^test:.*" $HOME/master.passwd -} - -# Test modifying a user with comments -atf_test_case user_mod_comments -user_mod_comments_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456" - atf_check -s exit:0 ${PW} usermod test -c "Test User,work,123,456" - atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ - grep "^test:.*:Test User,work,123,456:" $HOME/master.passwd -} - -# Test modifying a user with comments with option -N -atf_test_case user_mod_comments_noupdate -user_mod_comments_noupdate_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456" - atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ - ${PW} usermod test -c "Test User,work,123,456" -N - atf_check -s exit:0 -o match:"^test:.*:Test User,home,123,456:" \ - grep "^test:.*:Test User,home,123,456:" $HOME/master.passwd -} - -# Test modifying a user with invalid comments -atf_test_case user_mod_comments_invalid -user_mod_comments_invalid_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd test - atf_check -s exit:65 -e match:"invalid character" \ - ${PW} usermod test -c "Test User,work,123:456,456" - atf_check -s exit:1 -o empty \ - grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd - atf_check -s exit:0 -o match:"^test:\*" \ - grep "^test:\*" $HOME/master.passwd -} - -# Test modifying a user with invalid comments with option -N -atf_test_case user_mod_comments_invalid_noupdate -user_mod_comments_invalid_noupdate_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd test - atf_check -s exit:65 -e match:"invalid character" \ - ${PW} usermod test -c "Test User,work,123:456,456" -N - atf_check -s exit:1 -o empty \ - grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd - atf_check -s exit:0 -o match:"^test:\*" \ - grep "^test:\*" $HOME/master.passwd -} - -# Test modifying a user name with -l -atf_test_case user_mod_name -user_mod_name_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - atf_check -s exit:0 ${PW} usermod foo -l "bar" - atf_check -s exit:0 -o match:"^bar:.*" \ - grep "^bar:.*" $HOME/master.passwd -} - -# Test modifying a user name with -l with option -N -atf_test_case user_mod_name_noupdate -user_mod_name_noupdate_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - atf_check -s exit:0 -o match:"^bar:.*" ${PW} usermod foo -l "bar" -N - atf_check -s exit:0 -o match:"^foo:.*" \ - grep "^foo:.*" $HOME/master.passwd -} - -atf_test_case user_mod_rename_multigroups -user_mod_rename_multigroups_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} groupadd test1 - atf_check -s exit:0 ${PW} groupadd test2 - atf_check -s exit:0 ${PW} useradd foo -G test1,test2 - atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1 - atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2 - atf_check -s exit:0 ${PW} usermod foo -l bar - atf_check -o match:"bar" -s exit:0 ${PW} groupshow test1 - atf_check -o match:"bar" -s exit:0 ${PW} groupshow test2 -} - -atf_test_case user_mod_nogroups -user_mod_nogroups_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} groupadd test1 - atf_check -s exit:0 ${PW} groupadd test2 - atf_check -s exit:0 ${PW} groupadd test3 - atf_check -s exit:0 ${PW} groupadd test4 - atf_check -s exit:0 ${PW} useradd foo -G test1,test2 - atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1 - atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2 - atf_check -s exit:0 ${PW} usermod foo -G test3,test4 - atf_check -s exit:0 -o inline:"test3\ntest4\n" \ - awk -F\: '$4 == "foo" { print $1 }' ${HOME}/group -} - -atf_test_case user_mod_rename -user_mod_rename_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - atf_check -s exit:0 ${PW} usermod foo -l bar - atf_check -s exit:0 -o match:"^bar:.*" \ - grep "^bar:.*" ${HOME}/master.passwd -} - -atf_test_case user_mod_rename_too_long -user_mod_rename_too_long_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - atf_check -s exit:64 -e match:"too long" ${PW} usermod foo \ - -l name_very_very_very_very_very_long -} - -atf_test_case user_mod_h -user_mod_h_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - atf_check -s exit:0 ${PW} usermod foo -h 0 <<- EOF - $(echo a) - EOF - passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` - atf_check -s exit:0 -o inline:$passhash \ - $(atf_get_srcdir)/crypt $passhash "a" - atf_check -s exit:0 ${PW} usermod foo -h - <<- EOF - $(echo b) - EOF - atf_check -s exit:0 -o match:"^foo:\*:.*" \ - grep "^foo" ${HOME}/master.passwd - atf_check -e inline:"pw: Bad file descriptor 'a': invalid\n" \ - -s exit:64 ${PW} usermod foo -h a <<- EOF - $(echo a) - EOF -} - -atf_test_case user_mod_H -user_mod_H_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - atf_check -s exit:0 ${PW} usermod foo -H 0 <<- EOF - $(echo a) - EOF - atf_check -s exit:0 -o match:"^foo:a:.*" \ - grep "^foo" ${HOME}/master.passwd - atf_check -s exit:64 -e inline:"pw: -H expects a file descriptor\n" \ - ${PW} usermod foo -H - -} - -atf_test_case user_mod_renamehome -user_mod_renamehome_body() { - populate_root_etc_skel - - mkdir -p ${HOME}/home - atf_check -s exit:0 ${RPW} useradd foo -m - test -d ${HOME}/home/foo || atf_fail "Directory not created" - atf_check -s exit:0 ${RPW} usermod foo -l bar -d /home/bar -m - test -d ${HOME}/home/bar || atf_fail "Directory not created" -} - -atf_test_case user_mod_uid -user_mod_uid_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - atf_check -s exit:0 ${PW} usermod foo -u 5000 -} - -atf_test_case user_mod_w_error -user_mod_w_error_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - atf_check -s exit:1 -e match:"pw: Invalid value for default password" \ - ${PW} usermod foo -w invalid_value -} - -atf_test_case user_mod_w_no -user_mod_w_no_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - atf_check -s exit:0 ${PW} usermod foo -w no - atf_check -s exit:0 -o match:"^foo:\*" grep "^foo:" $HOME/master.passwd -} - -atf_test_case user_mod_w_none -user_mod_w_none_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - atf_check -s exit:0 ${PW} usermod foo -w none - atf_check -s exit:0 -o match:"^foo::" grep "^foo:" $HOME/master.passwd -} - -atf_test_case user_mod_w_random -user_mod_w_random_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - password=`${PW} usermod foo -w random | cat` - passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` - atf_check -s exit:0 -o inline:$passhash \ - $(atf_get_srcdir)/crypt $passhash "$password" -} - -atf_test_case user_mod_w_yes -user_mod_w_yes_body() { - populate_etc_skel - - atf_check -s exit:0 ${PW} useradd foo - atf_check -s exit:0 ${PW} usermod foo -w yes - passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` - atf_check -s exit:0 -o inline:$passhash \ - $(atf_get_srcdir)/crypt $passhash "foo" -} - -atf_test_case user_mod_m -user_mod_m_body() { - populate_root_etc_skel - - mkdir -p ${HOME}/home - mkdir -p ${HOME}/skel - echo "entry" > ${HOME}/skel/.file - atf_check -s exit:0 ${RPW} useradd foo - ! test -d ${HOME}/home/foo || atf_fail "Directory should not have been created" - atf_check -s exit:0 ${RPW} usermod foo -m -k /skel - test -d ${HOME}/home/foo || atf_fail "Directory should have been created" - test -f ${HOME}/home/foo/.file || atf_fail "Skell files not added" - echo "entry" > ${HOME}/skel/.file2 - atf_check -s exit:0 ${RPW} usermod foo -m -k /skel - test -f ${HOME}/home/foo/.file2 || atf_fail "Skell files not added" - echo > ${HOME}/home/foo/.file2 - atf_check -s exit:0 ${RPW} usermod foo -m -k /skel - atf_check -s exit:0 -o inline:"\n" cat ${HOME}/home/foo/.file2 -} - - -atf_init_test_cases() { - atf_add_test_case user_mod - atf_add_test_case user_mod_noupdate - atf_add_test_case user_mod_comments - atf_add_test_case user_mod_comments_noupdate - atf_add_test_case user_mod_comments_invalid - atf_add_test_case user_mod_comments_invalid_noupdate - atf_add_test_case user_mod_nogroups - atf_add_test_case user_mod_rename - atf_add_test_case user_mod_name_noupdate - atf_add_test_case user_mod_rename_too_long - atf_add_test_case user_mod_rename_multigroups - atf_add_test_case user_mod_h - atf_add_test_case user_mod_H - atf_add_test_case user_mod_renamehome - atf_add_test_case user_mod_uid - atf_add_test_case user_mod_w_error - atf_add_test_case user_mod_w_no - atf_add_test_case user_mod_w_none - atf_add_test_case user_mod_w_random - atf_add_test_case user_mod_w_yes - atf_add_test_case user_mod_m -} diff --git a/pw/tests/pw_usermod_test.sh b/pw/tests/pw_usermod_test.sh new file mode 100755 index 0000000..6a13130 --- /dev/null +++ b/pw/tests/pw_usermod_test.sh @@ -0,0 +1,299 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + +# Test modifying a user +atf_test_case user_mod +user_mod_body() { + populate_etc_skel + + atf_check -s exit:67 -e match:"no such user" ${PW} usermod test + atf_check -s exit:0 ${PW} useradd test + atf_check -s exit:0 ${PW} usermod test + atf_check -s exit:0 -o match:"^test:.*" \ + grep "^test:.*" $HOME/master.passwd +} + +# Test modifying a user with option -N +atf_test_case user_mod_noupdate +user_mod_noupdate_body() { + populate_etc_skel + + atf_check -s exit:67 -e match:"no such user" ${PW} usermod test -N + atf_check -s exit:0 ${PW} useradd test + atf_check -s exit:0 -o match:"^test:.*" ${PW} usermod test -N + atf_check -s exit:0 -o match:"^test:.*" \ + grep "^test:.*" $HOME/master.passwd +} + +# Test modifying a user with comments +atf_test_case user_mod_comments +user_mod_comments_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456" + atf_check -s exit:0 ${PW} usermod test -c "Test User,work,123,456" + atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ + grep "^test:.*:Test User,work,123,456:" $HOME/master.passwd +} + +# Test modifying a user with comments with option -N +atf_test_case user_mod_comments_noupdate +user_mod_comments_noupdate_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456" + atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ + ${PW} usermod test -c "Test User,work,123,456" -N + atf_check -s exit:0 -o match:"^test:.*:Test User,home,123,456:" \ + grep "^test:.*:Test User,home,123,456:" $HOME/master.passwd +} + +# Test modifying a user with invalid comments +atf_test_case user_mod_comments_invalid +user_mod_comments_invalid_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd test + atf_check -s exit:65 -e match:"invalid character" \ + ${PW} usermod test -c "Test User,work,123:456,456" + atf_check -s exit:1 -o empty \ + grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd + atf_check -s exit:0 -o match:"^test:\*" \ + grep "^test:\*" $HOME/master.passwd +} + +# Test modifying a user with invalid comments with option -N +atf_test_case user_mod_comments_invalid_noupdate +user_mod_comments_invalid_noupdate_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd test + atf_check -s exit:65 -e match:"invalid character" \ + ${PW} usermod test -c "Test User,work,123:456,456" -N + atf_check -s exit:1 -o empty \ + grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd + atf_check -s exit:0 -o match:"^test:\*" \ + grep "^test:\*" $HOME/master.passwd +} + +# Test modifying a user name with -l +atf_test_case user_mod_name +user_mod_name_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + atf_check -s exit:0 ${PW} usermod foo -l "bar" + atf_check -s exit:0 -o match:"^bar:.*" \ + grep "^bar:.*" $HOME/master.passwd +} + +# Test modifying a user name with -l with option -N +atf_test_case user_mod_name_noupdate +user_mod_name_noupdate_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + atf_check -s exit:0 -o match:"^bar:.*" ${PW} usermod foo -l "bar" -N + atf_check -s exit:0 -o match:"^foo:.*" \ + grep "^foo:.*" $HOME/master.passwd +} + +atf_test_case user_mod_rename_multigroups +user_mod_rename_multigroups_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} groupadd test1 + atf_check -s exit:0 ${PW} groupadd test2 + atf_check -s exit:0 ${PW} useradd foo -G test1,test2 + atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1 + atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2 + atf_check -s exit:0 ${PW} usermod foo -l bar + atf_check -o match:"bar" -s exit:0 ${PW} groupshow test1 + atf_check -o match:"bar" -s exit:0 ${PW} groupshow test2 +} + +atf_test_case user_mod_nogroups +user_mod_nogroups_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} groupadd test1 + atf_check -s exit:0 ${PW} groupadd test2 + atf_check -s exit:0 ${PW} groupadd test3 + atf_check -s exit:0 ${PW} groupadd test4 + atf_check -s exit:0 ${PW} useradd foo -G test1,test2 + atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1 + atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2 + atf_check -s exit:0 ${PW} usermod foo -G test3,test4 + atf_check -s exit:0 -o inline:"test3\ntest4\n" \ + awk -F\: '$4 == "foo" { print $1 }' ${HOME}/group +} + +atf_test_case user_mod_rename +user_mod_rename_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + atf_check -s exit:0 ${PW} usermod foo -l bar + atf_check -s exit:0 -o match:"^bar:.*" \ + grep "^bar:.*" ${HOME}/master.passwd +} + +atf_test_case user_mod_rename_too_long +user_mod_rename_too_long_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + atf_check -s exit:64 -e match:"too long" ${PW} usermod foo \ + -l name_very_very_very_very_very_long +} + +atf_test_case user_mod_h +user_mod_h_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + atf_check -s exit:0 ${PW} usermod foo -h 0 <<- EOF + $(echo a) + EOF + passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` + atf_check -s exit:0 -o inline:$passhash \ + $(atf_get_srcdir)/crypt $passhash "a" + atf_check -s exit:0 ${PW} usermod foo -h - <<- EOF + $(echo b) + EOF + atf_check -s exit:0 -o match:"^foo:\*:.*" \ + grep "^foo" ${HOME}/master.passwd + atf_check -e inline:"pw: Bad file descriptor 'a': invalid\n" \ + -s exit:64 ${PW} usermod foo -h a <<- EOF + $(echo a) + EOF +} + +atf_test_case user_mod_H +user_mod_H_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + atf_check -s exit:0 ${PW} usermod foo -H 0 <<- EOF + $(echo a) + EOF + atf_check -s exit:0 -o match:"^foo:a:.*" \ + grep "^foo" ${HOME}/master.passwd + atf_check -s exit:64 -e inline:"pw: -H expects a file descriptor\n" \ + ${PW} usermod foo -H - +} + +atf_test_case user_mod_renamehome +user_mod_renamehome_body() { + populate_root_etc_skel + + mkdir -p ${HOME}/home + atf_check -s exit:0 ${RPW} useradd foo -m + test -d ${HOME}/home/foo || atf_fail "Directory not created" + atf_check -s exit:0 ${RPW} usermod foo -l bar -d /home/bar -m + test -d ${HOME}/home/bar || atf_fail "Directory not created" +} + +atf_test_case user_mod_uid +user_mod_uid_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + atf_check -s exit:0 ${PW} usermod foo -u 5000 +} + +atf_test_case user_mod_w_error +user_mod_w_error_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + atf_check -s exit:1 -e match:"pw: Invalid value for default password" \ + ${PW} usermod foo -w invalid_value +} + +atf_test_case user_mod_w_no +user_mod_w_no_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + atf_check -s exit:0 ${PW} usermod foo -w no + atf_check -s exit:0 -o match:"^foo:\*" grep "^foo:" $HOME/master.passwd +} + +atf_test_case user_mod_w_none +user_mod_w_none_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + atf_check -s exit:0 ${PW} usermod foo -w none + atf_check -s exit:0 -o match:"^foo::" grep "^foo:" $HOME/master.passwd +} + +atf_test_case user_mod_w_random +user_mod_w_random_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + password=`${PW} usermod foo -w random | cat` + passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` + atf_check -s exit:0 -o inline:$passhash \ + $(atf_get_srcdir)/crypt $passhash "$password" +} + +atf_test_case user_mod_w_yes +user_mod_w_yes_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} useradd foo + atf_check -s exit:0 ${PW} usermod foo -w yes + passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` + atf_check -s exit:0 -o inline:$passhash \ + $(atf_get_srcdir)/crypt $passhash "foo" +} + +atf_test_case user_mod_m +user_mod_m_body() { + populate_root_etc_skel + + mkdir -p ${HOME}/home + mkdir -p ${HOME}/skel + echo "entry" > ${HOME}/skel/.file + atf_check -s exit:0 ${RPW} useradd foo + ! test -d ${HOME}/home/foo || atf_fail "Directory should not have been created" + atf_check -s exit:0 ${RPW} usermod foo -m -k /skel + test -d ${HOME}/home/foo || atf_fail "Directory should have been created" + test -f ${HOME}/home/foo/.file || atf_fail "Skell files not added" + echo "entry" > ${HOME}/skel/.file2 + atf_check -s exit:0 ${RPW} usermod foo -m -k /skel + test -f ${HOME}/home/foo/.file2 || atf_fail "Skell files not added" + echo > ${HOME}/home/foo/.file2 + atf_check -s exit:0 ${RPW} usermod foo -m -k /skel + atf_check -s exit:0 -o inline:"\n" cat ${HOME}/home/foo/.file2 +} + + +atf_init_test_cases() { + atf_add_test_case user_mod + atf_add_test_case user_mod_noupdate + atf_add_test_case user_mod_comments + atf_add_test_case user_mod_comments_noupdate + atf_add_test_case user_mod_comments_invalid + atf_add_test_case user_mod_comments_invalid_noupdate + atf_add_test_case user_mod_nogroups + atf_add_test_case user_mod_rename + atf_add_test_case user_mod_name_noupdate + atf_add_test_case user_mod_rename_too_long + atf_add_test_case user_mod_rename_multigroups + atf_add_test_case user_mod_h + atf_add_test_case user_mod_H + atf_add_test_case user_mod_renamehome + atf_add_test_case user_mod_uid + atf_add_test_case user_mod_w_error + atf_add_test_case user_mod_w_no + atf_add_test_case user_mod_w_none + atf_add_test_case user_mod_w_random + atf_add_test_case user_mod_w_yes + atf_add_test_case user_mod_m +} diff --git a/pw/tests/pw_usernext.sh b/pw/tests/pw_usernext.sh deleted file mode 100755 index 89f938e..0000000 --- a/pw/tests/pw_usernext.sh +++ /dev/null @@ -1,45 +0,0 @@ -# $FreeBSD$ - -# Import helper functions -. $(atf_get_srcdir)/helper_functions.shin - -# Test usernext after adding a random number of new users. -atf_test_case usernext -usernext_body() { - populate_etc_skel - - CURRENT=`${PW} usernext | sed -e 's/:.*//'` - RANDOM=`jot -r 1 1 150` - MAX=`expr ${CURRENT} + ${RANDOM}` - while [ "${CURRENT}" -lt "${MAX}" ] - do - atf_check -s exit:0 ${PW} useradd test${CURRENT} - CURRENT=`expr ${CURRENT} + 1` - done - atf_check -s exit:0 -o match:"${CURRENT}:${CURRENT}" \ - ${PW} usernext -} - -# Test usernext when multiple users are added to the same group so -# that group id doesn't increment at the same pace as new users. -atf_test_case usernext_assigned_group -usernext_assigned_group_body() { - populate_etc_skel - - CURRENT=`${PW} usernext | sed -e 's/:.*//'` - CURRENTGID=`${PW} groupnext` - RANDOM=`jot -r 1 1 150` - MAX=`expr ${CURRENT} + ${RANDOM}` - while [ "${CURRENT}" -lt "${MAX}" ] - do - atf_check -s exit:0 ${PW} useradd -n test${CURRENT} -g 0 - CURRENT=`expr ${CURRENT} + 1` - done - atf_check -s exit:0 -o match:"${CURRENT}:${CURRENTGID}" \ - ${PW} usernext -} - -atf_init_test_cases() { - atf_add_test_case usernext - atf_add_test_case usernext_assigned_group -} diff --git a/pw/tests/pw_usernext_test.sh b/pw/tests/pw_usernext_test.sh new file mode 100755 index 0000000..89f938e --- /dev/null +++ b/pw/tests/pw_usernext_test.sh @@ -0,0 +1,45 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + +# Test usernext after adding a random number of new users. +atf_test_case usernext +usernext_body() { + populate_etc_skel + + CURRENT=`${PW} usernext | sed -e 's/:.*//'` + RANDOM=`jot -r 1 1 150` + MAX=`expr ${CURRENT} + ${RANDOM}` + while [ "${CURRENT}" -lt "${MAX}" ] + do + atf_check -s exit:0 ${PW} useradd test${CURRENT} + CURRENT=`expr ${CURRENT} + 1` + done + atf_check -s exit:0 -o match:"${CURRENT}:${CURRENT}" \ + ${PW} usernext +} + +# Test usernext when multiple users are added to the same group so +# that group id doesn't increment at the same pace as new users. +atf_test_case usernext_assigned_group +usernext_assigned_group_body() { + populate_etc_skel + + CURRENT=`${PW} usernext | sed -e 's/:.*//'` + CURRENTGID=`${PW} groupnext` + RANDOM=`jot -r 1 1 150` + MAX=`expr ${CURRENT} + ${RANDOM}` + while [ "${CURRENT}" -lt "${MAX}" ] + do + atf_check -s exit:0 ${PW} useradd -n test${CURRENT} -g 0 + CURRENT=`expr ${CURRENT} + 1` + done + atf_check -s exit:0 -o match:"${CURRENT}:${CURRENTGID}" \ + ${PW} usernext +} + +atf_init_test_cases() { + atf_add_test_case usernext + atf_add_test_case usernext_assigned_group +} -- cgit v1.2.3-56-ge451