1bbf12e6fSEnji Cooper 2bbf12e6fSEnji Cooperbad_interp_len_head() 3bbf12e6fSEnji Cooper{ 4bbf12e6fSEnji Cooper atf_set "descr" "Bad interpreter length" 5bbf12e6fSEnji Cooper} 6bbf12e6fSEnji Cooperbad_interp_len_body() 7bbf12e6fSEnji Cooper{ 8bbf12e6fSEnji Cooper atf_check -s exit:1 -e 'match:No such file or directory' -o empty \ 9bbf12e6fSEnji Cooper -x "cd $(atf_get_srcdir) && ./execve_helper bad_interp_len" 10bbf12e6fSEnji Cooper} 11bbf12e6fSEnji Cooper 12bbf12e6fSEnji Cooperempty_head() 13bbf12e6fSEnji Cooper{ 14bbf12e6fSEnji Cooper atf_set "descr" "Empty file" 15bbf12e6fSEnji Cooper} 16bbf12e6fSEnji Cooperempty_body() 17bbf12e6fSEnji Cooper{ 18bbf12e6fSEnji Cooper atf_check -s exit:1 -e 'match:Exec format error' -o empty \ 19bbf12e6fSEnji Cooper -x "cd $(atf_get_srcdir) && ./execve_helper empty" 20bbf12e6fSEnji Cooper} 21bbf12e6fSEnji Cooper 22bbf12e6fSEnji Coopergood_aout_head() 23bbf12e6fSEnji Cooper{ 24bbf12e6fSEnji Cooper atf_set "descr" "Good a.out" 25bbf12e6fSEnji Cooper} 26bbf12e6fSEnji Coopergood_aout_body() 27bbf12e6fSEnji Cooper{ 28bbf12e6fSEnji Cooper atf_check -s exit:0 -e empty -o 'match:succeeded' \ 29bbf12e6fSEnji Cooper -x "cd $(atf_get_srcdir) && ./execve_helper ./good_aout" 30bbf12e6fSEnji Cooper} 31bbf12e6fSEnji Cooper 32bbf12e6fSEnji Coopergood_script_head() 33bbf12e6fSEnji Cooper{ 34bbf12e6fSEnji Cooper atf_set "descr" "Good script" 35bbf12e6fSEnji Cooper} 36bbf12e6fSEnji Coopergood_script_body() 37bbf12e6fSEnji Cooper{ 38bbf12e6fSEnji Cooper atf_check -s exit:0 -e empty -o 'match:succeeded' \ 39bbf12e6fSEnji Cooper -x "cd $(atf_get_srcdir) && ./execve_helper good_script" 40bbf12e6fSEnji Cooper} 41bbf12e6fSEnji Cooper 42bbf12e6fSEnji Coopernon_exist_head() 43bbf12e6fSEnji Cooper{ 44bbf12e6fSEnji Cooper atf_set "descr" "Non-existent file" 45bbf12e6fSEnji Cooper} 46bbf12e6fSEnji Coopernon_exist_body() 47bbf12e6fSEnji Cooper{ 48bbf12e6fSEnji Cooper atf_check -s exit:1 -e 'match:No such file or directory' -o empty \ 49bbf12e6fSEnji Cooper -x "cd $(atf_get_srcdir) && ./execve_helper non_exist" 50bbf12e6fSEnji Cooper} 51bbf12e6fSEnji Cooper 52bbf12e6fSEnji Coopernon_exist_shell_head() 53bbf12e6fSEnji Cooper{ 54bbf12e6fSEnji Cooper atf_set "descr" "Non-existent shell" 55bbf12e6fSEnji Cooper} 56bbf12e6fSEnji Coopernon_exist_shell_body() 57bbf12e6fSEnji Cooper{ 58bbf12e6fSEnji Cooper atf_check -s exit:1 -e 'match:No such file or directory' -o empty \ 59bbf12e6fSEnji Cooper -x "cd $(atf_get_srcdir) && ./execve_helper non_exist_shell" 60bbf12e6fSEnji Cooper} 61bbf12e6fSEnji Cooper 62bbf12e6fSEnji Cooperscript_arg_head() 63bbf12e6fSEnji Cooper{ 64bbf12e6fSEnji Cooper atf_set "descr" "-x in the shebang" 65bbf12e6fSEnji Cooper} 66bbf12e6fSEnji Cooperscript_arg_body() 67bbf12e6fSEnji Cooper{ 68bbf12e6fSEnji Cooper atf_check -s exit:0 -e 'match:\+ echo succeeded' -o 'match:succeeded' \ 69bbf12e6fSEnji Cooper -x "cd $(atf_get_srcdir) && ./execve_helper script_arg" 70bbf12e6fSEnji Cooper} 71bbf12e6fSEnji Cooper 72bbf12e6fSEnji Cooperscript_arg_nospace_head() 73bbf12e6fSEnji Cooper{ 74bbf12e6fSEnji Cooper atf_set "descr" '-x in the shebang; no space between #! and /bin/sh' 75bbf12e6fSEnji Cooper} 76bbf12e6fSEnji Cooperscript_arg_nospace_body() 77bbf12e6fSEnji Cooper{ 78bbf12e6fSEnji Cooper atf_check -s exit:0 -e 'match:\+ echo succeeded' -o 'match:succeeded' \ 79bbf12e6fSEnji Cooper -x "cd $(atf_get_srcdir) && ./execve_helper script_arg_nospace" 80bbf12e6fSEnji Cooper} 81bbf12e6fSEnji Cooper 82bbf12e6fSEnji Coopersparse_aout_head() 83bbf12e6fSEnji Cooper{ 84bbf12e6fSEnji Cooper atf_set "descr" 'Sparse file' 85bbf12e6fSEnji Cooper} 86bbf12e6fSEnji Coopersparse_aout_body() 87bbf12e6fSEnji Cooper{ 88bbf12e6fSEnji Cooper atf_check -s exit:1 -e 'match:Exec format error' -o empty \ 89bbf12e6fSEnji Cooper -x "cd $(atf_get_srcdir) && ./execve_helper sparse_aout" 90bbf12e6fSEnji Cooper} 91bbf12e6fSEnji Cooper 92bbf12e6fSEnji Coopertrunc_aout_head() 93bbf12e6fSEnji Cooper{ 94bbf12e6fSEnji Cooper atf_set "descr" 'Truncated file' 95bbf12e6fSEnji Cooper} 96bbf12e6fSEnji Coopertrunc_aout_body() 97bbf12e6fSEnji Cooper{ 98bbf12e6fSEnji Cooper atf_check -s exit:1 -e 'match:Exec format error' -o empty \ 99bbf12e6fSEnji Cooper -x "cd $(atf_get_srcdir) && ./execve_helper trunc_aout" 100bbf12e6fSEnji Cooper} 101bbf12e6fSEnji Cooper 102*e5b431fcSKyle Evansempty_args_head() 103*e5b431fcSKyle Evans{ 104*e5b431fcSKyle Evans atf_set "descr" "Empty argv behavior" 105*e5b431fcSKyle Evans} 106*e5b431fcSKyle Evansempty_args_body() 107*e5b431fcSKyle Evans{ 108*e5b431fcSKyle Evans atf_check -o inline:"1\n" \ 109*e5b431fcSKyle Evans -x "cd $(atf_get_srcdir) && ./execve_helper execve_argc_helper" 110*e5b431fcSKyle Evans 111*e5b431fcSKyle Evans # Historically we allowed argc == 0, while execve(2) claimed we didn't. 112*e5b431fcSKyle Evans # execve() should kick back an EINVAL now. We verified the helper was 113*e5b431fcSKyle Evans # there/working in the check just above. 114*e5b431fcSKyle Evans atf_check -s exit:1 \ 115*e5b431fcSKyle Evans -e match:".+Invalid argument$" \ 116*e5b431fcSKyle Evans -x "cd $(atf_get_srcdir) && ./execve_helper -n execve_argc_helper" 117*e5b431fcSKyle Evans} 118*e5b431fcSKyle Evans 119bbf12e6fSEnji Cooperatf_init_test_cases() 120bbf12e6fSEnji Cooper{ 121bbf12e6fSEnji Cooper atf_add_test_case bad_interp_len 122bbf12e6fSEnji Cooper atf_add_test_case empty 123bbf12e6fSEnji Cooper atf_add_test_case good_aout 124bbf12e6fSEnji Cooper atf_add_test_case good_script 125bbf12e6fSEnji Cooper atf_add_test_case non_exist 126bbf12e6fSEnji Cooper atf_add_test_case non_exist_shell 127bbf12e6fSEnji Cooper atf_add_test_case script_arg 128bbf12e6fSEnji Cooper atf_add_test_case script_arg_nospace 129bbf12e6fSEnji Cooper atf_add_test_case sparse_aout 130bbf12e6fSEnji Cooper atf_add_test_case trunc_aout 131*e5b431fcSKyle Evans atf_add_test_case empty_args 132bbf12e6fSEnji Cooper 133bbf12e6fSEnji Cooper} 134