1# Import helper functions 2. $(atf_get_srcdir)/helper_functions.shin 3 4# Test add user 5atf_test_case user_add 6user_add_body() { 7 populate_etc_skel 8 9 atf_check -s exit:0 ${PW} useradd test 10 atf_check -s exit:0 -o match:"^test:.*" \ 11 grep "^test:.*" $HOME/master.passwd 12} 13 14# Test add user with option -N 15atf_test_case user_add_noupdate 16user_add_noupdate_body() { 17 populate_etc_skel 18 19 atf_check -s exit:0 -o match:"^test:.*" ${PW} useradd test -N 20 atf_check -s exit:1 -o empty grep "^test:.*" $HOME/master.passwd 21} 22 23# Test add user with comments 24atf_test_case user_add_comments 25user_add_comments_body() { 26 populate_etc_skel 27 28 atf_check -s exit:0 ${PW} useradd test -c 'Test User,work!,123,user@example.com' 29 atf_check -s exit:0 -o match:'^test:.*:Test User,work!,123,user@example.com:' \ 30 grep '^test:.*:Test User,work!,123,user@example.com:' $HOME/master.passwd 31} 32 33# Test add user with comments and option -N 34atf_test_case user_add_comments_noupdate 35user_add_comments_noupdate_body() { 36 populate_etc_skel 37 38 atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \ 39 ${PW} useradd test -c "Test User,work,123,456" -N 40 atf_check -s exit:1 -o empty grep "^test:.*" $HOME/master.passwd 41} 42 43# Test add user with invalid comments 44atf_test_case user_add_comments_invalid 45user_add_comments_invalid_body() { 46 populate_etc_skel 47 48 atf_check -s exit:65 -e match:"invalid character" \ 49 ${PW} useradd test -c "Test User,work,123:456,456" 50 atf_check -s exit:1 -o empty \ 51 grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd 52} 53 54# Test add user with invalid comments and option -N 55atf_test_case user_add_comments_invalid_noupdate 56user_add_comments_invalid_noupdate_body() { 57 populate_etc_skel 58 59 atf_check -s exit:65 -e match:"invalid character" \ 60 ${PW} useradd test -c "Test User,work,123:456,456" -N 61 atf_check -s exit:1 -o empty grep "^test:.*" $HOME/master.passwd 62} 63 64# Test add user with alternate homedir 65atf_test_case user_add_homedir 66user_add_homedir_body() { 67 populate_etc_skel 68 69 atf_check -s exit:0 ${PW} useradd test -d /foo/bar 70 atf_check -s exit:0 -o match:"^test:\*:.*::0:0:User &:/foo/bar:.*" \ 71 ${PW} usershow test 72} 73 74# Test add user with account expiration as an epoch date 75atf_test_case user_add_account_expiration_epoch 76user_add_account_expiration_epoch_body() { 77 populate_etc_skel 78 79 DATE=`date -j -v+1d "+%s"` 80 atf_check -s exit:0 ${PW} useradd test -e ${DATE} 81 atf_check -s exit:0 -o match:"^test:\*:.*::0:${DATE}:.*" \ 82 ${PW} usershow test 83} 84 85# Test add user with account expiration as a DD-MM-YYYY date 86atf_test_case user_add_account_expiration_date_numeric 87user_add_account_expiration_date_numeric_body() { 88 populate_etc_skel 89 90 DATE=`date -j -v+1d "+%d-%m-%Y"` 91 EPOCH=`date -j -f "%d-%m-%Y %H:%M:%S" "${DATE} 00:00:00" "+%s"` 92 atf_check -s exit:0 ${PW} useradd test -e ${DATE} 93 atf_check -s exit:0 -o match:"^test:\*:.*::0:${EPOCH}:User &:.*" \ 94 ${PW} usershow test 95} 96 97# Test add user with account expiration as a DD-MM-YYYY date 98atf_test_case user_add_account_expiration_date_month 99user_add_account_expiration_date_month_body() { 100 populate_etc_skel 101 102 DATE=`date -j -v+1d "+%d-%b-%Y"` 103 EPOCH=`date -j -f "%d-%b-%Y %H:%M:%S" "${DATE} 00:00:00" "+%s"` 104 atf_check -s exit:0 ${PW} useradd test -e ${DATE} 105 atf_check -s exit:0 -o match:"^test:\*:.*::0:${EPOCH}:User &:.*" \ 106 ${PW} usershow test 107} 108 109# Test add user with account expiration as a relative date 110atf_test_case user_add_account_expiration_date_relative 111user_add_account_expiration_date_relative_body() { 112 populate_etc_skel 113 114 EPOCH=`date -j -v+13m "+%s"` 115 BUF=`expr $EPOCH + 5` 116 atf_check -s exit:0 ${PW} useradd test -e +13o 117 TIME=`${PW} usershow test | awk -F ':' '{print $7}'` 118 [ ! -z $TIME -a $TIME -ge $EPOCH -a $TIME -lt $BUF ] || \ 119 atf_fail "Expiration time($TIME) was not within $EPOCH - $BUF seconds." 120} 121 122# Test add user with password expiration as an epoch date 123atf_test_case user_add_password_expiration_epoch 124user_add_password_expiration_epoch_body() { 125 populate_etc_skel 126 127 DATE=`date -j -v+1d "+%s"` 128 atf_check -s exit:0 ${PW} useradd test -p ${DATE} 129 atf_check -s exit:0 -o match:"^test:\*:.*::${DATE}:0:.*" \ 130 ${PW} usershow test 131} 132 133# Test add user with password expiration as a DD-MM-YYYY date 134atf_test_case user_add_password_expiration_date_numeric 135user_add_password_expiration_date_numeric_body() { 136 populate_etc_skel 137 138 DATE=`date -j -v+1d "+%d-%m-%Y"` 139 EPOCH=`date -j -f "%d-%m-%Y %H:%M:%S" "${DATE} 00:00:00" "+%s"` 140 atf_check -s exit:0 ${PW} useradd test -p ${DATE} 141 atf_check -s exit:0 -o match:"^test:\*:.*::${EPOCH}:0:User &:.*" \ 142 ${PW} usershow test 143} 144 145# Test add user with password expiration as a DD-MMM-YYYY date 146atf_test_case user_add_password_expiration_date_month 147user_add_password_expiration_date_month_body() { 148 populate_etc_skel 149 150 DATE=`date -j -v+1d "+%d-%b-%Y"` 151 EPOCH=`date -j -f "%d-%b-%Y %H:%M:%S" "${DATE} 00:00:00" "+%s"` 152 atf_check -s exit:0 ${PW} useradd test -p ${DATE} 153 atf_check -s exit:0 -o match:"^test:\*:.*::${EPOCH}:0:User &:.*" \ 154 ${PW} usershow test 155} 156 157# Test add user with password expiration as a relative date 158atf_test_case user_add_password_expiration_date_relative 159user_add_password_expiration_date_relative_body() { 160 populate_etc_skel 161 162 EPOCH=`date -j -v+13m "+%s"` 163 BUF=`expr $EPOCH + 5` 164 atf_check -s exit:0 ${PW} useradd test -p +13o 165 TIME=`${PW} usershow test | awk -F ':' '{print $6}'` 166 [ ! -z $TIME -a $TIME -ge $EPOCH -a $TIME -lt $BUF ] || \ 167 atf_fail "Expiration time($TIME) was not within $EPOCH - $BUF seconds." 168} 169 170atf_test_case user_add_name_too_long 171user_add_name_too_long_body() { 172 populate_etc_skel 173 atf_check -e match:"too long" -s exit:64 \ 174 ${PW} useradd name_very_vert_very_very_very_long 175} 176 177atf_test_case user_add_name_with_spaces 178user_add_name_with_spaces_body() { 179 populate_etc_skel 180 atf_check -s exit:65 -e match:"invalid character" \ 181 ${PW} useradd 'test user' 182 atf_check -s exit:1 -o empty grep "^test user:.*" $HOME/master.passwd 183 # Try again with -n which uses a slightly different code path. 184 atf_check -s exit:65 -e match:"invalid character" \ 185 ${PW} useradd -n 'test user' 186 atf_check -s exit:1 -o empty grep "^test user:.*" $HOME/master.passwd 187} 188 189atf_test_case user_add_name_with_spaces_and_gid_specified 190user_add_name_with_spaces_and_gid_specified_body() { 191 populate_etc_skel 192 gid=12345 193 user_name="test user" 194 # pw useradd should fail because of the space in the user 195 # name, not because the group doesn't exist. 196 atf_check -s exit:65 -e match:"invalid character" \ 197 ${PW} useradd "${user_name}" -g ${gid} 198 atf_check -s exit:1 -o empty grep "^${user_name}:.*" $HOME/master.passwd 199 # Try again with -n which uses a slightly different code path. 200 atf_check -s exit:65 -e match:"invalid character" \ 201 ${PW} useradd -n "${user_name}" -g ${gid} 202 atf_check -s exit:1 -o empty grep "^${user_name}:.*" $HOME/master.passwd 203 # Make sure the user isn't added even if the group exists 204 atf_check -s exit:0 ${PW} groupadd blafasel -g ${gid} 205 atf_check -s exit:65 -e match:"invalid character" \ 206 ${PW} useradd "${user_name}" -g ${gid} 207 atf_check -s exit:1 -o empty grep "^${user_name}:.*" $HOME/master.passwd 208 # Try again with the -n option. 209 atf_check -s exit:65 -e match:"invalid character" \ 210 ${PW} useradd -n "${user_name}" -g ${gid} 211 atf_check -s exit:1 -o empty grep "^${user_name}:.*" $HOME/master.passwd 212} 213 214atf_test_case user_add_expiration 215user_add_expiration_body() { 216 populate_etc_skel 217 218 atf_check -s exit:0 \ 219 ${PW} useradd foo -e 20-03-2037 220 atf_check -o inline:"foo:*:1001:1001::0:2121120000:User &:/home/foo:/bin/sh\n" \ 221 -s exit:0 grep "^foo" ${HOME}/master.passwd 222 atf_check -s exit:0 ${PW} userdel foo 223 atf_check -s exit:0 \ 224 ${PW} useradd foo -e 20-03-37 225 atf_check -o inline:"foo:*:1001:1001::0:2121120000:User &:/home/foo:/bin/sh\n" \ 226 -s exit:0 grep "^foo" ${HOME}/master.passwd 227 atf_check -s exit:0 ${PW} userdel foo 228 atf_check -s exit:0 \ 229 ${PW} useradd foo -e 20-Mar-2037 230 atf_check -o inline:"foo:*:1001:1001::0:2121120000:User &:/home/foo:/bin/sh\n" \ 231 -s exit:0 grep "^foo" ${HOME}/master.passwd 232 atf_check -s exit:0 ${PW} userdel foo 233 atf_check -e inline:"pw: Invalid date\n" -s exit:1 \ 234 ${PW} useradd foo -e 20-Foo-2037 235 atf_check -e inline:"pw: Invalid date\n" -s exit:1 \ 236 ${PW} useradd foo -e 20-13-2037 237 atf_check -s exit:0 ${PW} useradd foo -e "12:00 20-03-2037" 238 atf_check -s exit:0 ${PW} userdel foo 239 atf_check -e inline:"pw: Invalid date\n" -s exit:1 \ 240 ${PW} useradd foo -e "12 20-03-2037" 241 atf_check -s exit:0 ${PW} useradd foo -e "20-03-2037 12:00" 242 atf_check -s exit:0 ${PW} userdel foo 243} 244 245atf_test_case user_add_invalid_user_entry 246user_add_invalid_user_entry_body() { 247 touch ${HOME}/master.passwd 248 touch ${HOME}/group 249 250 pwd_mkdb -p -d ${HOME} ${HOME}/master.passwd || \ 251 atf_fail "generate passwd from master.passwd" 252 atf_check -s exit:0 ${PW} useradd foo 253 echo "foo1:*:1002" >> ${HOME}/master.passwd 254 atf_check -s exit:1 -e match:"Invalid user entry" ${PW} useradd foo2 255} 256 257atf_test_case user_add_invalid_group_entry 258user_add_invalid_group_entry_body() { 259 touch ${HOME}/master.passwd 260 touch ${HOME}/group 261 262 pwd_mkdb -p -d ${HOME} ${HOME}/master.passwd || \ 263 atf_fail "generate passwd from master.passwd" 264 atf_check -s exit:0 ${PW} useradd foo 265 echo 'foo1:*:1002' >> group 266 atf_check -s exit:1 -e match:"Invalid group entry" ${PW} useradd foo2 267} 268 269atf_test_case user_add_password_from_h 270user_add_password_from_h_body() { 271 populate_etc_skel 272 273 atf_check -s exit:0 ${PW} useradd foo -h 0 <<-EOF 274 $(echo mypassword) 275 EOF 276 passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` 277 atf_check -s exit:0 -o inline:$passhash \ 278 $(atf_get_srcdir)/crypt $passhash "mypassword" 279} 280 281atf_test_case user_add_R 282user_add_R_body() { 283 populate_root_etc_skel 284 285 atf_check -s exit:0 ${RPW} useradd foo 286 atf_check -s exit:0 ${RPW} useradd bar -m 287 test -d ${HOME}/home || atf_fail "Home parent directory not created" 288 test -d ${HOME}/home/bar || atf_fail "Directory not created" 289 atf_check -s exit:0 ${RPW} userdel bar 290 test -d ${HOME}/home/bar || atf_fail "Directory removed" 291 atf_check -s exit:0 ${RPW} useradd bar 292 atf_check -s exit:0 ${RPW} userdel bar -r 293 [ ! -d ${HOME}/home/bar ] || atf_fail "Directory not removed" 294} 295 296atf_test_case user_add_R_no_symlink 297user_add_R_no_symlink_body() { 298 populate_root_etc_skel 299 300 mkdir ${HOME}/usr 301 atf_check -s exit:0 ${RPW} useradd foo -m 302 [ ! -d ${HOME}/usr/home ] || atf_fail "/usr/home created" 303 test -d ${HOME}/home || atf_fail "/home directory not created" 304} 305 306atf_test_case user_add_R_intermed 307user_add_R_intermed_body() { 308 populate_root_etc_skel 309 310 atf_check -s exit:0 ${RPW} useradd foo -m -d /a/b/c/foo 311 test -d ${HOME}/a/b/c || atf_fail "intermediate directories not created" 312 test -d ${HOME}/a/b/c/foo || atf_fail "user directory not created" 313} 314 315atf_test_case user_add_dir 316user_add_dir_body() { 317 populate_root_etc_skel 318 319 atf_check -s exit:0 ${RPW} useradd foo -M 0705 -m 320 atf_check grep -q '^foo:' $HOME/etc/master.passwd 321 atf_check test -d ${HOME}/home/foo 322 atf_check -o save:ugid \ 323 awk -F: '$1 == "foo" { print $3, $4 }' \ 324 $HOME/etc/master.passwd 325 atf_check -o file:ugid \ 326 stat -f '%u %g' ${HOME}/home/foo 327 atf_check -o inline:"40705\n" \ 328 stat -f '%p' ${HOME}/home/foo 329} 330 331atf_test_case user_add_existing_dir 332user_add_existing_dir_body() { 333 populate_root_etc_skel 334 335 mkdir -p -m 0777 ${HOME}/home/foo 336 atf_check -o inline:"40777\n" \ 337 stat -f '%p' ${HOME}/home/foo 338 339 atf_check -s exit:0 ${RPW} useradd foo -M 0705 -m 340 atf_check grep -q '^foo:' $HOME/etc/master.passwd 341 atf_check test -d ${HOME}/home/foo 342 atf_check -o inline:"40705\n" \ 343 stat -f '%p' ${HOME}/home/foo 344} 345 346atf_test_case user_add_skel 347user_add_skel_body() { 348 populate_root_etc_skel 349 350 mkdir ${HOME}/skel 351 echo "a" > ${HOME}/skel/.a 352 echo "b" > ${HOME}/skel/b 353 mkdir ${HOME}/skel/c 354 mkdir ${HOME}/skel/c/d 355 mkdir ${HOME}/skel/dot.plop 356 echo "c" > ${HOME}/skel/c/d/dot.c 357 mkdir ${HOME}/home 358 ln -sf /nonexistent ${HOME}/skel/c/foo 359 atf_check -s exit:0 ${RPW} -M METALOG useradd foo -k /skel -m 360 test -d ${HOME}/home/foo || atf_fail "Directory not created" 361 test -f ${HOME}/home/foo/.a || atf_fail "File not created" 362 atf_check -o file:${HOME}/skel/.a -s exit:0 cat ${HOME}/home/foo/.a 363 atf_check -o file:${HOME}/skel/b -s exit:0 cat ${HOME}/home/foo/b 364 test -d ${HOME}/home/foo/c || atf_fail "Directory in skel not copied" 365 test -d ${HOME}/home/foo/.plop || atf_fail "Dotted directory in skel not created" 366 atf_check -o inline:"/nonexistent\n" -s ignore readlink -f ${HOME}/home/foo/c/foo 367 atf_check -o file:${HOME}/skel/c/d/dot.c -s exit:0 cat ${HOME}/home/foo/c/d/.c 368 369 cat <<__EOF__ >METALOG.expected 370./home/foo type=dir mode=0755 uid=1001 gid=1001 371./home/foo/.a type=file mode=0644 uid=1001 gid=1001 372./home/foo/.plop type=dir mode=0755 uid=1001 gid=1001 373./home/foo/b type=file mode=0644 uid=1001 gid=1001 374./home/foo/c type=dir mode=0755 uid=1001 gid=1001 375./home/foo/c/d type=dir mode=0755 uid=1001 gid=1001 376./home/foo/c/d/.c type=file mode=0644 uid=1001 gid=1001 377./home/foo/c/foo type=link mode=0755 uid=1001 gid=1001 link=/nonexistent 378__EOF__ 379 atf_check -o save:METALOG.out sort METALOG 380 atf_check diff METALOG.out METALOG.expected 381} 382 383atf_test_case user_add_uid0 384user_add_uid0_body() { 385 populate_etc_skel 386 atf_check -e inline:"pw: WARNING: new account \`foo' has a uid of 0 (superuser access!)\n" \ 387 -s exit:0 ${PW} useradd foo -u 0 -g 0 -d /root -s /bin/sh -c "Bourne-again Superuser" -o 388 atf_check \ 389 -o inline:"foo:*:0:0::0:0:Bourne-again Superuser:/root:/bin/sh\n" \ 390 -s exit:0 ${PW} usershow foo 391} 392 393atf_test_case user_add_uid_too_large 394user_add_uid_too_large_body() { 395 populate_etc_skel 396 atf_check -s exit:64 -e inline:"pw: Bad id '9999999999999': too large\n" \ 397 ${PW} useradd -n test1 -u 9999999999999 398} 399 400atf_test_case user_add_bad_shell 401user_add_bad_shell_body() { 402 populate_etc_skel 403 404 atf_check -s exit:0 ${PW} useradd foo -s sh 405 atf_check -s exit:78 -e ignore ${PW} useradd bar -s badshell 406} 407 408atf_test_case user_add_already_exists 409user_add_already_exists_body() { 410 populate_etc_skel 411 412 atf_check -s exit:0 ${PW} useradd foo 413 atf_check -s exit:65 \ 414 -e inline:"pw: login name \`foo' already exists\n" \ 415 ${PW} useradd foo 416} 417 418atf_test_case user_add_w_error 419user_add_w_error_body() { 420 populate_etc_skel 421 422 atf_check -s exit:1 -e match:"pw: Invalid value for default password" \ 423 ${PW} useradd foo -w invalid_value 424} 425 426atf_test_case user_add_w_no 427user_add_w_no_body() { 428 populate_etc_skel 429 430 atf_check -s exit:0 ${PW} useradd foo -w no 431 atf_check -s exit:0 -o match:"^foo:\*" grep "^foo:" $HOME/master.passwd 432} 433 434atf_test_case user_add_w_none 435user_add_w_none_body() { 436 populate_etc_skel 437 438 atf_check -s exit:0 ${PW} useradd foo -w none 439 atf_check -s exit:0 -o match:"^foo::" grep "^foo:" $HOME/master.passwd 440} 441 442atf_test_case user_add_w_random 443user_add_w_random_body() { 444 populate_etc_skel 445 446 password=`${PW} useradd foo -w random | cat` 447 passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` 448 atf_check -s exit:0 -o inline:$passhash \ 449 $(atf_get_srcdir)/crypt $passhash "$password" 450} 451 452atf_test_case user_add_w_yes 453user_add_w_yes_body() { 454 populate_etc_skel 455 password=`${PW} useradd foo -w random | cat` 456 passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd` 457 atf_check -s exit:0 -o inline:$passhash \ 458 $(atf_get_srcdir)/crypt $passhash "$password" 459} 460 461atf_test_case user_add_with_pw_conf 462user_add_with_pw_conf_body() 463{ 464 populate_etc_skel 465 atf_check -s exit:0 \ 466 ${PW} useradd -D -C ${HOME}/pw.conf \ 467 -u 2000,32767 -i 2000,32767 468 atf_check -s exit:0 \ 469 -o inline:"minuid = 2000\nmaxuid = 32767\nmingid = 2000\nmaxgid = 32767\n" \ 470 grep "^m.*id =" ${HOME}/pw.conf 471 atf_check -s exit:0 \ 472 ${PW} useradd foo -C ${HOME}/pw.conf 473} 474 475atf_test_case user_add_defaultgroup 476user_add_defaultgroup_body() 477{ 478 populate_etc_skel 479 echo 'defaultgroup = "plop"' > ${HOME}/pw.conf 480 atf_check -s exit:0 \ 481 ${PW} groupadd plop -g 442 482 atf_check -s exit:0 \ 483 ${PW} useradd foo -C ${HOME}/pw.conf 484 atf_check -s exit:0 \ 485 -o inline:"foo:*:1001:442::0:0:User &:/home/foo:/bin/sh\n" \ 486 ${PW} usershow foo 487} 488 489atf_test_case user_add_conf_defaultpasswd 490user_add_conf_defaultpasswd_body() 491{ 492 populate_etc_skel 493 494 atf_check -s exit:0 ${PW} useradd -D -w no 495 atf_check -o inline:"defaultpasswd = \"no\"\n" \ 496 grep defaultpasswd ${HOME}/pw.conf 497 atf_check -s exit:0 ${PW} useradd -D -w none 498 atf_check -o inline:"defaultpasswd = \"none\"\n" \ 499 grep defaultpasswd ${HOME}/pw.conf 500 atf_check -s exit:0 ${PW} useradd -D -w random 501 atf_check -o inline:"defaultpasswd = \"random\"\n" \ 502 grep defaultpasswd ${HOME}/pw.conf 503 atf_check -s exit:0 ${PW} useradd -D -w yes 504 atf_check -o inline:"defaultpasswd = \"yes\"\n" \ 505 grep defaultpasswd ${HOME}/pw.conf 506} 507 508atf_test_case user_add_existing_login_group 509user_add_existing_login_group_body() 510{ 511 populate_etc_skel 512 513 atf_check -s exit:0 ${PW} groupadd testuser 514 atf_check -s exit:0 ${PW} useradd user1 -G testuser 515 atf_check -s exit:0 ${PW} useradd testuser 516 atf_check -o match:"1" \ 517 sh -c "grep testuser ${HOME}/group | wc -l" 518} 519 520atf_test_case user_add_already_in_group 521user_add_already_in_group_body() 522{ 523 populate_etc_skel 524 525 echo "testgroup:*:4242:testuser" >> ${HOME}/group 526 atf_check -s exit:0 ${PW} useradd testuser -G testgroup 527 atf_check -o not-match:"testuser,testuser" \ 528 grep testuser ${HOME}/group 529} 530 531atf_init_test_cases() { 532 atf_add_test_case user_add 533 atf_add_test_case user_add_noupdate 534 atf_add_test_case user_add_comments 535 atf_add_test_case user_add_comments_noupdate 536 atf_add_test_case user_add_comments_invalid 537 atf_add_test_case user_add_comments_invalid_noupdate 538 atf_add_test_case user_add_homedir 539 atf_add_test_case user_add_account_expiration_epoch 540 atf_add_test_case user_add_account_expiration_date_numeric 541 atf_add_test_case user_add_account_expiration_date_month 542 atf_add_test_case user_add_account_expiration_date_relative 543 atf_add_test_case user_add_password_expiration_epoch 544 atf_add_test_case user_add_password_expiration_date_numeric 545 atf_add_test_case user_add_password_expiration_date_month 546 atf_add_test_case user_add_password_expiration_date_relative 547 atf_add_test_case user_add_name_too_long 548 atf_add_test_case user_add_name_with_spaces 549 atf_add_test_case user_add_name_with_spaces_and_gid_specified 550 atf_add_test_case user_add_expiration 551 atf_add_test_case user_add_invalid_user_entry 552 atf_add_test_case user_add_invalid_group_entry 553 atf_add_test_case user_add_password_from_h 554 atf_add_test_case user_add_R 555 atf_add_test_case user_add_R_no_symlink 556 atf_add_test_case user_add_R_intermed 557 atf_add_test_case user_add_dir 558 atf_add_test_case user_add_existing_dir 559 atf_add_test_case user_add_skel 560 atf_add_test_case user_add_uid0 561 atf_add_test_case user_add_uid_too_large 562 atf_add_test_case user_add_bad_shell 563 atf_add_test_case user_add_already_exists 564 atf_add_test_case user_add_w_error 565 atf_add_test_case user_add_w_no 566 atf_add_test_case user_add_w_none 567 atf_add_test_case user_add_w_random 568 atf_add_test_case user_add_w_yes 569 atf_add_test_case user_add_with_pw_conf 570 atf_add_test_case user_add_defaultgroup 571 572 atf_add_test_case user_add_conf_defaultpasswd 573 atf_add_test_case user_add_existing_login_group 574 atf_add_test_case user_add_already_in_group 575} 576