1# $FreeBSD$ 2 3# Import helper functions 4. $(atf_get_srcdir)/helper_functions.shin 5 6# Test modifying a user 7atf_test_case user_mod 8user_mod_body() { 9 populate_etc_skel 10 11 atf_check -s exit:67 -e match:"no such user" ${PW} usermod test 12 atf_check -s exit:0 ${PW} useradd test 13 atf_check -s exit:0 ${PW} usermod test 14 atf_check -s exit:0 -o match:"^test:.*" \ 15 grep "^test:.*" $HOME/master.passwd 16} 17 18# Test modifying a user with option -N 19atf_test_case user_mod_noupdate 20user_mod_noupdate_body() { 21 populate_etc_skel 22 23 atf_check -s exit:67 -e match:"no such user" ${PW} usermod test -N 24 atf_check -s exit:0 ${PW} useradd test 25 atf_check -s exit:0 -o match:"^test:.*" ${PW} usermod test -N 26 atf_check -s exit:0 -o match:"^test:.*" \ 27 grep "^test:.*" $HOME/master.passwd 28} 29 30# Test modifying a user with comments 31atf_test_case user_mod_comments 32user_mod_comments_body() { 33 populate_etc_skel 34 35 atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456" 36 atf_check -s exit:0 ${PW} usermod test -c "Test User,work,123,456" 37 atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ 38 grep "^test:.*:Test User,work,123,456:" $HOME/master.passwd 39} 40 41# Test modifying a user with comments with option -N 42atf_test_case user_mod_comments_noupdate 43user_mod_comments_noupdate_body() { 44 populate_etc_skel 45 46 atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456" 47 atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ 48 ${PW} usermod test -c "Test User,work,123,456" -N 49 atf_check -s exit:0 -o match:"^test:.*:Test User,home,123,456:" \ 50 grep "^test:.*:Test User,home,123,456:" $HOME/master.passwd 51} 52 53# Test modifying a user with invalid comments 54atf_test_case user_mod_comments_invalid 55user_mod_comments_invalid_body() { 56 populate_etc_skel 57 58 atf_check -s exit:0 ${PW} useradd test 59 atf_check -s exit:65 -e match:"invalid character" \ 60 ${PW} usermod test -c "Test User,work,123:456,456" 61 atf_check -s exit:1 -o empty \ 62 grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd 63 atf_check -s exit:0 -o match:"^test:\*" \ 64 grep "^test:\*" $HOME/master.passwd 65} 66 67# Test modifying a user with invalid comments with option -N 68atf_test_case user_mod_comments_invalid_noupdate 69user_mod_comments_invalid_noupdate_body() { 70 populate_etc_skel 71 72 atf_check -s exit:0 ${PW} useradd test 73 atf_check -s exit:65 -e match:"invalid character" \ 74 ${PW} usermod test -c "Test User,work,123:456,456" -N 75 atf_check -s exit:1 -o empty \ 76 grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd 77 atf_check -s exit:0 -o match:"^test:\*" \ 78 grep "^test:\*" $HOME/master.passwd 79} 80 81# Test modifying a user name with -l 82atf_test_case user_mod_name 83user_mod_name_body() { 84 populate_etc_skel 85 86 atf_check -s exit:0 ${PW} useradd foo 87 atf_check -s exit:0 ${PW} usermod foo -l "bar" 88 atf_check -s exit:0 -o match:"^bar:.*" \ 89 grep "^bar:.*" $HOME/master.passwd 90} 91 92# Test modifying a user name with -l with option -N 93atf_test_case user_mod_name_noupdate 94user_mod_name_noupdate_body() { 95 populate_etc_skel 96 97 atf_check -s exit:0 ${PW} useradd foo 98 atf_check -s exit:0 -o match:"^bar:.*" ${PW} usermod foo -l "bar" -N 99 atf_check -s exit:0 -o match:"^foo:.*" \ 100 grep "^foo:.*" $HOME/master.passwd 101} 102 103atf_test_case user_mod_rename_multigroups 104user_mod_rename_multigroups_body() { 105 populate_etc_skel 106 107 atf_check -s exit:0 ${PW} groupadd test1 108 atf_check -s exit:0 ${PW} groupadd test2 109 atf_check -s exit:0 ${PW} useradd foo -G test1,test2 110 atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1 111 atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2 112 atf_check -s exit:0 ${PW} usermod foo -l bar 113 atf_check -o match:"bar" -s exit:0 ${PW} groupshow test1 114 atf_check -o match:"bar" -s exit:0 ${PW} groupshow test2 115} 116 117atf_test_case user_mod_nogroups 118user_mod_nogroups_body() { 119 populate_etc_skel 120 121 atf_check -s exit:0 ${PW} groupadd test1 122 atf_check -s exit:0 ${PW} groupadd test2 123 atf_check -s exit:0 ${PW} groupadd test3 124 atf_check -s exit:0 ${PW} groupadd test4 125 atf_check -s exit:0 ${PW} useradd foo -G test1,test2 126 atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1 127 atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2 128 atf_check -s exit:0 ${PW} usermod foo -G test3,test4 129 atf_check -s exit:0 -o inline:"test3\ntest4\n" \ 130 awk -F\: '$4 == "foo" { print $1 }' ${HOME}/group 131} 132 133atf_test_case user_mod_rename 134user_mod_rename_body() { 135 populate_etc_skel 136 137 atf_check -s exit:0 ${PW} useradd foo 138 atf_check -s exit:0 ${PW} usermod foo -l bar 139 atf_check -s exit:0 -o match:"^bar:.*" \ 140 grep "^bar:.*" ${HOME}/master.passwd 141} 142 143atf_test_case user_mod_rename_too_long 144user_mod_rename_too_long_body() { 145 populate_etc_skel 146 147 atf_check -s exit:0 ${PW} useradd foo 148 atf_check -s exit:64 -e match:"too long" ${PW} usermod foo \ 149 -l name_very_very_very_very_very_long 150} 151 152atf_test_case user_mod_h 153user_mod_h_body() { 154 populate_etc_skel 155 156 atf_check -s exit:0 ${PW} useradd foo 157 atf_check -s exit:0 ${PW} usermod foo -h 0 <<- EOF 158 $(echo a) 159 EOF 160 passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` 161 atf_check -s exit:0 -o inline:$passhash \ 162 $(atf_get_srcdir)/crypt $passhash "a" 163 atf_check -s exit:0 ${PW} usermod foo -h - <<- EOF 164 $(echo b) 165 EOF 166 atf_check -s exit:0 -o match:"^foo:\*:.*" \ 167 grep "^foo" ${HOME}/master.passwd 168 atf_check -e inline:"pw: Bad file descriptor 'a': invalid\n" \ 169 -s exit:64 ${PW} usermod foo -h a <<- EOF 170 $(echo a) 171 EOF 172} 173 174atf_test_case user_mod_H 175user_mod_H_body() { 176 populate_etc_skel 177 178 atf_check -s exit:0 ${PW} useradd foo 179 atf_check -s exit:0 ${PW} usermod foo -H 0 <<- EOF 180 $(echo a) 181 EOF 182 atf_check -s exit:0 -o match:"^foo:a:.*" \ 183 grep "^foo" ${HOME}/master.passwd 184 atf_check -s exit:64 -e inline:"pw: -H expects a file descriptor\n" \ 185 ${PW} usermod foo -H - 186} 187 188atf_test_case user_mod_renamehome 189user_mod_renamehome_body() { 190 populate_root_etc_skel 191 192 mkdir -p ${HOME}/home 193 atf_check -s exit:0 ${RPW} useradd foo -m 194 test -d ${HOME}/home/foo || atf_fail "Directory not created" 195 atf_check -s exit:0 ${RPW} usermod foo -l bar -d /home/bar -m 196 test -d ${HOME}/home/bar || atf_fail "Directory not created" 197} 198 199atf_test_case user_mod_uid 200user_mod_uid_body() { 201 populate_etc_skel 202 203 atf_check -s exit:0 ${PW} useradd foo 204 atf_check -s exit:0 ${PW} usermod foo -u 5000 205} 206 207atf_test_case user_mod_w_error 208user_mod_w_error_body() { 209 populate_etc_skel 210 211 atf_check -s exit:0 ${PW} useradd foo 212 atf_check -s exit:1 -e match:"pw: Invalid value for default password" \ 213 ${PW} usermod foo -w invalid_value 214} 215 216atf_test_case user_mod_w_no 217user_mod_w_no_body() { 218 populate_etc_skel 219 220 atf_check -s exit:0 ${PW} useradd foo 221 atf_check -s exit:0 ${PW} usermod foo -w no 222 atf_check -s exit:0 -o match:"^foo:\*" grep "^foo:" $HOME/master.passwd 223} 224 225atf_test_case user_mod_w_none 226user_mod_w_none_body() { 227 populate_etc_skel 228 229 atf_check -s exit:0 ${PW} useradd foo 230 atf_check -s exit:0 ${PW} usermod foo -w none 231 atf_check -s exit:0 -o match:"^foo::" grep "^foo:" $HOME/master.passwd 232} 233 234atf_test_case user_mod_w_random 235user_mod_w_random_body() { 236 populate_etc_skel 237 238 atf_check -s exit:0 ${PW} useradd foo 239 password=`${PW} usermod foo -w random | cat` 240 passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` 241 atf_check -s exit:0 -o inline:$passhash \ 242 $(atf_get_srcdir)/crypt $passhash "$password" 243} 244 245atf_test_case user_mod_w_yes 246user_mod_w_yes_body() { 247 populate_etc_skel 248 249 atf_check -s exit:0 ${PW} useradd foo 250 atf_check -s exit:0 ${PW} usermod foo -w yes 251 passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` 252 atf_check -s exit:0 -o inline:$passhash \ 253 $(atf_get_srcdir)/crypt $passhash "foo" 254} 255 256atf_test_case user_mod_m 257user_mod_m_body() { 258 populate_root_etc_skel 259 260 mkdir -p ${HOME}/home 261 mkdir -p ${HOME}/skel 262 echo "entry" > ${HOME}/skel/.file 263 atf_check -s exit:0 ${RPW} useradd foo 264 ! test -d ${HOME}/home/foo || atf_fail "Directory should not have been created" 265 atf_check -s exit:0 ${RPW} usermod foo -m -k /skel 266 test -d ${HOME}/home/foo || atf_fail "Directory should have been created" 267 test -f ${HOME}/home/foo/.file || atf_fail "Skell files not added" 268 echo "entry" > ${HOME}/skel/.file2 269 atf_check -s exit:0 ${RPW} usermod foo -m -k /skel 270 test -f ${HOME}/home/foo/.file2 || atf_fail "Skell files not added" 271 echo > ${HOME}/home/foo/.file2 272 atf_check -s exit:0 ${RPW} usermod foo -m -k /skel 273 atf_check -s exit:0 -o inline:"\n" cat ${HOME}/home/foo/.file2 274} 275 276 277atf_init_test_cases() { 278 atf_add_test_case user_mod 279 atf_add_test_case user_mod_noupdate 280 atf_add_test_case user_mod_comments 281 atf_add_test_case user_mod_comments_noupdate 282 atf_add_test_case user_mod_comments_invalid 283 atf_add_test_case user_mod_comments_invalid_noupdate 284 atf_add_test_case user_mod_nogroups 285 atf_add_test_case user_mod_rename 286 atf_add_test_case user_mod_name_noupdate 287 atf_add_test_case user_mod_rename_too_long 288 atf_add_test_case user_mod_rename_multigroups 289 atf_add_test_case user_mod_h 290 atf_add_test_case user_mod_H 291 atf_add_test_case user_mod_renamehome 292 atf_add_test_case user_mod_uid 293 atf_add_test_case user_mod_w_error 294 atf_add_test_case user_mod_w_no 295 atf_add_test_case user_mod_w_none 296 atf_add_test_case user_mod_w_random 297 atf_add_test_case user_mod_w_yes 298 atf_add_test_case user_mod_m 299} 300