1275657Sbrd# $FreeBSD: stable/11/usr.sbin/pw/tests/pw_usermod_test.sh 322919 2017-08-26 00:35:49Z emaste $ 2275657Sbrd 3275657Sbrd# Import helper functions 4275657Sbrd. $(atf_get_srcdir)/helper_functions.shin 5275657Sbrd 6275657Sbrd# Test modifying a user 7275657Sbrdatf_test_case user_mod 8275657Sbrduser_mod_body() { 9275657Sbrd populate_etc_skel 10275657Sbrd 11275657Sbrd atf_check -s exit:67 -e match:"no such user" ${PW} usermod test 12275657Sbrd atf_check -s exit:0 ${PW} useradd test 13275657Sbrd atf_check -s exit:0 ${PW} usermod test 14275657Sbrd atf_check -s exit:0 -o match:"^test:.*" \ 15275657Sbrd grep "^test:.*" $HOME/master.passwd 16275657Sbrd} 17275657Sbrd 18275829Sbrd# Test modifying a user with option -N 19275829Sbrdatf_test_case user_mod_noupdate 20275829Sbrduser_mod_noupdate_body() { 21275829Sbrd populate_etc_skel 22275829Sbrd 23275829Sbrd atf_check -s exit:67 -e match:"no such user" ${PW} usermod test -N 24275829Sbrd atf_check -s exit:0 ${PW} useradd test 25275829Sbrd atf_check -s exit:0 -o match:"^test:.*" ${PW} usermod test -N 26275829Sbrd atf_check -s exit:0 -o match:"^test:.*" \ 27275829Sbrd grep "^test:.*" $HOME/master.passwd 28275829Sbrd} 29275829Sbrd 30275657Sbrd# Test modifying a user with comments 31275657Sbrdatf_test_case user_mod_comments 32275657Sbrduser_mod_comments_body() { 33275657Sbrd populate_etc_skel 34275657Sbrd 35275657Sbrd atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456" 36275657Sbrd atf_check -s exit:0 ${PW} usermod test -c "Test User,work,123,456" 37275657Sbrd atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ 38275657Sbrd grep "^test:.*:Test User,work,123,456:" $HOME/master.passwd 39275657Sbrd} 40275657Sbrd 41275829Sbrd# Test modifying a user with comments with option -N 42275829Sbrdatf_test_case user_mod_comments_noupdate 43275829Sbrduser_mod_comments_noupdate_body() { 44275829Sbrd populate_etc_skel 45275829Sbrd 46275829Sbrd atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456" 47275829Sbrd atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ 48275829Sbrd ${PW} usermod test -c "Test User,work,123,456" -N 49275829Sbrd atf_check -s exit:0 -o match:"^test:.*:Test User,home,123,456:" \ 50275829Sbrd grep "^test:.*:Test User,home,123,456:" $HOME/master.passwd 51275829Sbrd} 52275829Sbrd 53275657Sbrd# Test modifying a user with invalid comments 54275657Sbrdatf_test_case user_mod_comments_invalid 55275657Sbrduser_mod_comments_invalid_body() { 56275657Sbrd populate_etc_skel 57275657Sbrd 58275657Sbrd atf_check -s exit:0 ${PW} useradd test 59275657Sbrd atf_check -s exit:65 -e match:"invalid character" \ 60275657Sbrd ${PW} usermod test -c "Test User,work,123:456,456" 61275657Sbrd atf_check -s exit:1 -o empty \ 62275657Sbrd grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd 63275829Sbrd atf_check -s exit:0 -o match:"^test:\*" \ 64275829Sbrd grep "^test:\*" $HOME/master.passwd 65275657Sbrd} 66275657Sbrd 67275829Sbrd# Test modifying a user with invalid comments with option -N 68275829Sbrdatf_test_case user_mod_comments_invalid_noupdate 69275829Sbrduser_mod_comments_invalid_noupdate_body() { 70275829Sbrd populate_etc_skel 71275829Sbrd 72275829Sbrd atf_check -s exit:0 ${PW} useradd test 73275829Sbrd atf_check -s exit:65 -e match:"invalid character" \ 74275829Sbrd ${PW} usermod test -c "Test User,work,123:456,456" -N 75275829Sbrd atf_check -s exit:1 -o empty \ 76275829Sbrd grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd 77275829Sbrd atf_check -s exit:0 -o match:"^test:\*" \ 78275829Sbrd grep "^test:\*" $HOME/master.passwd 79275829Sbrd} 80275829Sbrd 81275657Sbrd# Test modifying a user name with -l 82275657Sbrdatf_test_case user_mod_name 83275657Sbrduser_mod_name_body() { 84275657Sbrd populate_etc_skel 85275657Sbrd 86275657Sbrd atf_check -s exit:0 ${PW} useradd foo 87275657Sbrd atf_check -s exit:0 ${PW} usermod foo -l "bar" 88275657Sbrd atf_check -s exit:0 -o match:"^bar:.*" \ 89275657Sbrd grep "^bar:.*" $HOME/master.passwd 90275657Sbrd} 91275829Sbrd 92275829Sbrd# Test modifying a user name with -l with option -N 93275829Sbrdatf_test_case user_mod_name_noupdate 94275829Sbrduser_mod_name_noupdate_body() { 95275829Sbrd populate_etc_skel 96275829Sbrd 97275829Sbrd atf_check -s exit:0 ${PW} useradd foo 98275829Sbrd atf_check -s exit:0 -o match:"^bar:.*" ${PW} usermod foo -l "bar" -N 99275829Sbrd atf_check -s exit:0 -o match:"^foo:.*" \ 100275829Sbrd grep "^foo:.*" $HOME/master.passwd 101275829Sbrd} 102275829Sbrd 103286196Sbaptatf_test_case user_mod_rename_multigroups 104286196Sbaptuser_mod_rename_multigroups_body() { 105286196Sbapt populate_etc_skel 106286196Sbapt 107286196Sbapt atf_check -s exit:0 ${PW} groupadd test1 108286196Sbapt atf_check -s exit:0 ${PW} groupadd test2 109286196Sbapt atf_check -s exit:0 ${PW} useradd foo -G test1,test2 110286196Sbapt atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1 111286196Sbapt atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2 112286196Sbapt atf_check -s exit:0 ${PW} usermod foo -l bar 113286196Sbapt atf_check -o match:"bar" -s exit:0 ${PW} groupshow test1 114286196Sbapt atf_check -o match:"bar" -s exit:0 ${PW} groupshow test2 115286196Sbapt} 116286196Sbapt 117286196Sbaptatf_test_case user_mod_nogroups 118286196Sbaptuser_mod_nogroups_body() { 119286196Sbapt populate_etc_skel 120286196Sbapt 121286196Sbapt atf_check -s exit:0 ${PW} groupadd test1 122286196Sbapt atf_check -s exit:0 ${PW} groupadd test2 123286196Sbapt atf_check -s exit:0 ${PW} groupadd test3 124286196Sbapt atf_check -s exit:0 ${PW} groupadd test4 125286196Sbapt atf_check -s exit:0 ${PW} useradd foo -G test1,test2 126286196Sbapt atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1 127286196Sbapt atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2 128286196Sbapt atf_check -s exit:0 ${PW} usermod foo -G test3,test4 129286196Sbapt atf_check -s exit:0 -o inline:"test3\ntest4\n" \ 130286196Sbapt awk -F\: '$4 == "foo" { print $1 }' ${HOME}/group 131322919Semaste atf_check -s exit:0 ${PW} usermod foo -G "" 132322919Semaste atf_check -s exit:0 -o empty \ 133322919Semaste awk -F\: '$4 == "foo" { print $1 }' ${HOME}/group 134286196Sbapt} 135286196Sbapt 136284129Sbaptatf_test_case user_mod_rename 137284129Sbaptuser_mod_rename_body() { 138284129Sbapt populate_etc_skel 139284129Sbapt 140284129Sbapt atf_check -s exit:0 ${PW} useradd foo 141284129Sbapt atf_check -s exit:0 ${PW} usermod foo -l bar 142284129Sbapt atf_check -s exit:0 -o match:"^bar:.*" \ 143284129Sbapt grep "^bar:.*" ${HOME}/master.passwd 144284129Sbapt} 145284129Sbapt 146284129Sbaptatf_test_case user_mod_rename_too_long 147284129Sbaptuser_mod_rename_too_long_body() { 148284129Sbapt populate_etc_skel 149284129Sbapt 150284129Sbapt atf_check -s exit:0 ${PW} useradd foo 151284129Sbapt atf_check -s exit:64 -e match:"too long" ${PW} usermod foo \ 152284129Sbapt -l name_very_very_very_very_very_long 153284129Sbapt} 154284129Sbapt 155285133Sbaptatf_test_case user_mod_h 156285133Sbaptuser_mod_h_body() { 157285133Sbapt populate_etc_skel 158285133Sbapt 159285133Sbapt atf_check -s exit:0 ${PW} useradd foo 160285133Sbapt atf_check -s exit:0 ${PW} usermod foo -h 0 <<- EOF 161285133Sbapt $(echo a) 162285133Sbapt EOF 163302778Sasomers passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` 164302778Sasomers atf_check -s exit:0 -o inline:$passhash \ 165302778Sasomers $(atf_get_srcdir)/crypt $passhash "a" 166285133Sbapt atf_check -s exit:0 ${PW} usermod foo -h - <<- EOF 167285133Sbapt $(echo b) 168285133Sbapt EOF 169285133Sbapt atf_check -s exit:0 -o match:"^foo:\*:.*" \ 170285133Sbapt grep "^foo" ${HOME}/master.passwd 171286196Sbapt atf_check -e inline:"pw: Bad file descriptor 'a': invalid\n" \ 172285133Sbapt -s exit:64 ${PW} usermod foo -h a <<- EOF 173285133Sbapt $(echo a) 174285133Sbapt EOF 175285133Sbapt} 176285133Sbapt 177285133Sbaptatf_test_case user_mod_H 178285133Sbaptuser_mod_H_body() { 179285133Sbapt populate_etc_skel 180285133Sbapt 181285133Sbapt atf_check -s exit:0 ${PW} useradd foo 182285133Sbapt atf_check -s exit:0 ${PW} usermod foo -H 0 <<- EOF 183285133Sbapt $(echo a) 184285133Sbapt EOF 185285133Sbapt atf_check -s exit:0 -o match:"^foo:a:.*" \ 186285133Sbapt grep "^foo" ${HOME}/master.passwd 187286196Sbapt atf_check -s exit:64 -e inline:"pw: -H expects a file descriptor\n" \ 188285133Sbapt ${PW} usermod foo -H - 189285133Sbapt} 190285133Sbapt 191286196Sbaptatf_test_case user_mod_renamehome 192286196Sbaptuser_mod_renamehome_body() { 193286196Sbapt populate_root_etc_skel 194286196Sbapt 195286196Sbapt mkdir -p ${HOME}/home 196286196Sbapt atf_check -s exit:0 ${RPW} useradd foo -m 197286196Sbapt test -d ${HOME}/home/foo || atf_fail "Directory not created" 198286196Sbapt atf_check -s exit:0 ${RPW} usermod foo -l bar -d /home/bar -m 199286196Sbapt test -d ${HOME}/home/bar || atf_fail "Directory not created" 200286196Sbapt} 201286196Sbapt 202286341Sbaptatf_test_case user_mod_uid 203286341Sbaptuser_mod_uid_body() { 204286341Sbapt populate_etc_skel 205286341Sbapt 206286341Sbapt atf_check -s exit:0 ${PW} useradd foo 207286341Sbapt atf_check -s exit:0 ${PW} usermod foo -u 5000 208286341Sbapt} 209286341Sbapt 210302778Sasomersatf_test_case user_mod_w_error 211302778Sasomersuser_mod_w_error_body() { 212302778Sasomers populate_etc_skel 213302778Sasomers 214302778Sasomers atf_check -s exit:0 ${PW} useradd foo 215302778Sasomers atf_check -s exit:1 -e match:"pw: Invalid value for default password" \ 216302778Sasomers ${PW} usermod foo -w invalid_value 217302778Sasomers} 218302778Sasomers 219302778Sasomersatf_test_case user_mod_w_no 220302778Sasomersuser_mod_w_no_body() { 221302778Sasomers populate_etc_skel 222302778Sasomers 223302778Sasomers atf_check -s exit:0 ${PW} useradd foo 224302778Sasomers atf_check -s exit:0 ${PW} usermod foo -w no 225302778Sasomers atf_check -s exit:0 -o match:"^foo:\*" grep "^foo:" $HOME/master.passwd 226302778Sasomers} 227302778Sasomers 228302778Sasomersatf_test_case user_mod_w_none 229302778Sasomersuser_mod_w_none_body() { 230302778Sasomers populate_etc_skel 231302778Sasomers 232302778Sasomers atf_check -s exit:0 ${PW} useradd foo 233302778Sasomers atf_check -s exit:0 ${PW} usermod foo -w none 234302778Sasomers atf_check -s exit:0 -o match:"^foo::" grep "^foo:" $HOME/master.passwd 235302778Sasomers} 236302778Sasomers 237302778Sasomersatf_test_case user_mod_w_random 238302778Sasomersuser_mod_w_random_body() { 239302778Sasomers populate_etc_skel 240302778Sasomers 241302778Sasomers atf_check -s exit:0 ${PW} useradd foo 242302778Sasomers password=`${PW} usermod foo -w random | cat` 243302778Sasomers passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` 244302778Sasomers atf_check -s exit:0 -o inline:$passhash \ 245302778Sasomers $(atf_get_srcdir)/crypt $passhash "$password" 246302778Sasomers} 247302778Sasomers 248302778Sasomersatf_test_case user_mod_w_yes 249302778Sasomersuser_mod_w_yes_body() { 250302778Sasomers populate_etc_skel 251302778Sasomers 252302778Sasomers atf_check -s exit:0 ${PW} useradd foo 253302778Sasomers atf_check -s exit:0 ${PW} usermod foo -w yes 254302778Sasomers passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` 255302778Sasomers atf_check -s exit:0 -o inline:$passhash \ 256302778Sasomers $(atf_get_srcdir)/crypt $passhash "foo" 257302778Sasomers} 258302778Sasomers 259312650Sbaptatf_test_case user_mod_m 260312650Sbaptuser_mod_m_body() { 261312650Sbapt populate_root_etc_skel 262302778Sasomers 263312650Sbapt mkdir -p ${HOME}/home 264312650Sbapt mkdir -p ${HOME}/skel 265312650Sbapt echo "entry" > ${HOME}/skel/.file 266312650Sbapt atf_check -s exit:0 ${RPW} useradd foo 267312650Sbapt ! test -d ${HOME}/home/foo || atf_fail "Directory should not have been created" 268312650Sbapt atf_check -s exit:0 ${RPW} usermod foo -m -k /skel 269312650Sbapt test -d ${HOME}/home/foo || atf_fail "Directory should have been created" 270312650Sbapt test -f ${HOME}/home/foo/.file || atf_fail "Skell files not added" 271312650Sbapt echo "entry" > ${HOME}/skel/.file2 272312650Sbapt atf_check -s exit:0 ${RPW} usermod foo -m -k /skel 273312650Sbapt test -f ${HOME}/home/foo/.file2 || atf_fail "Skell files not added" 274312650Sbapt echo > ${HOME}/home/foo/.file2 275312650Sbapt atf_check -s exit:0 ${RPW} usermod foo -m -k /skel 276312650Sbapt atf_check -s exit:0 -o inline:"\n" cat ${HOME}/home/foo/.file2 277312650Sbapt} 278312650Sbapt 279312650Sbapt 280275657Sbrdatf_init_test_cases() { 281275657Sbrd atf_add_test_case user_mod 282275829Sbrd atf_add_test_case user_mod_noupdate 283275657Sbrd atf_add_test_case user_mod_comments 284275829Sbrd atf_add_test_case user_mod_comments_noupdate 285284129Sbapt atf_add_test_case user_mod_comments_invalid 286284129Sbapt atf_add_test_case user_mod_comments_invalid_noupdate 287286196Sbapt atf_add_test_case user_mod_nogroups 288284129Sbapt atf_add_test_case user_mod_rename 289275829Sbrd atf_add_test_case user_mod_name_noupdate 290284129Sbapt atf_add_test_case user_mod_rename_too_long 291286196Sbapt atf_add_test_case user_mod_rename_multigroups 292285133Sbapt atf_add_test_case user_mod_h 293285133Sbapt atf_add_test_case user_mod_H 294286196Sbapt atf_add_test_case user_mod_renamehome 295286341Sbapt atf_add_test_case user_mod_uid 296302778Sasomers atf_add_test_case user_mod_w_error 297302778Sasomers atf_add_test_case user_mod_w_no 298302778Sasomers atf_add_test_case user_mod_w_none 299302778Sasomers atf_add_test_case user_mod_w_random 300302778Sasomers atf_add_test_case user_mod_w_yes 301312650Sbapt atf_add_test_case user_mod_m 302275657Sbrd} 303