diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist index 35e1c062b1e9..1ec53d5d0028 100644 --- a/etc/mtree/BSD.tests.dist +++ b/etc/mtree/BSD.tests.dist @@ -355,6 +355,8 @@ .. sys kern + execve + .. .. netinet .. diff --git a/tests/sys/kern/Makefile b/tests/sys/kern/Makefile index 4a1e67147953..d366aa1d61ff 100644 --- a/tests/sys/kern/Makefile +++ b/tests/sys/kern/Makefile @@ -10,4 +10,6 @@ LDADD.unix_seqpacket_test+= -lpthread WARNS?= 5 +TESTS_SUBDIRS+= execve + .include diff --git a/tests/sys/kern/execve/Makefile b/tests/sys/kern/execve/Makefile new file mode 100644 index 000000000000..82c5d4b85b10 --- /dev/null +++ b/tests/sys/kern/execve/Makefile @@ -0,0 +1,39 @@ +# $FreeBSD$ + +TESTSDIR= ${TESTSBASE}/sys/kern/execve + +BINDIR= ${TESTSDIR} + +MAN= + +ATF_TESTS_SH+= execve_test + +PROGS+= good_aout +PROGS+= execve_helper + +LDFLAGS.goodaout+= -static + +CLEANFILES+= empty +CLEANFILES+= sparse_aout +CLEANFILES+= trunc_aout + +SCRIPTS+= bad_interp_len +SCRIPTS+= dev_null_script +SCRIPTS+= empty +SCRIPTS+= good_script +SCRIPTS+= non_exist_shell +SCRIPTS+= script_arg +SCRIPTS+= script_arg_nospace +SCRIPTS+= sparse_aout +SCRIPTS+= trunc_aout + +empty: + @touch $@ + +sparse_aout: + @truncate -s 20480 $@ + +trunc_aout: + @truncate -s 16 $@ + +.include diff --git a/tools/regression/execve/tests/badinterplen b/tests/sys/kern/execve/bad_interp_len similarity index 100% rename from tools/regression/execve/tests/badinterplen rename to tests/sys/kern/execve/bad_interp_len diff --git a/tools/regression/execve/tests/devnullscript b/tests/sys/kern/execve/dev_null_script similarity index 100% rename from tools/regression/execve/tests/devnullscript rename to tests/sys/kern/execve/dev_null_script diff --git a/tools/regression/execve/doexec.c b/tests/sys/kern/execve/execve_helper.c similarity index 90% rename from tools/regression/execve/doexec.c rename to tests/sys/kern/execve/execve_helper.c index 0aa82ec87959..164a8f3fc61e 100644 --- a/tools/regression/execve/doexec.c +++ b/tests/sys/kern/execve/execve_helper.c @@ -34,25 +34,21 @@ * $FreeBSD$ */ +#include #include #include #include -#include #include int -main(argc, argv) - int argc; - char *argv[]; +main(int argc, char **argv) { + if (argc != 2) { fprintf(stderr, "usage: %s \n", argv[0]); exit(2); } - unsetenv("LANG"); /* we compare C error strings */ - if (execve(argv[1], &argv[1], NULL) == -1) { - printf("%s\n", strerror(errno)); - exit(1); - } + execve(argv[1], &argv[1], NULL); + err(1, ""); } diff --git a/tests/sys/kern/execve/execve_test.sh b/tests/sys/kern/execve/execve_test.sh new file mode 100644 index 000000000000..ef803a18d442 --- /dev/null +++ b/tests/sys/kern/execve/execve_test.sh @@ -0,0 +1,115 @@ + +bad_interp_len_head() +{ + atf_set "descr" "Bad interpreter length" +} +bad_interp_len_body() +{ + atf_check -s exit:1 -e 'match:No such file or directory' -o empty \ + -x "cd $(atf_get_srcdir) && ./execve_helper bad_interp_len" +} + +empty_head() +{ + atf_set "descr" "Empty file" +} +empty_body() +{ + atf_check -s exit:1 -e 'match:Exec format error' -o empty \ + -x "cd $(atf_get_srcdir) && ./execve_helper empty" +} + +good_aout_head() +{ + atf_set "descr" "Good a.out" +} +good_aout_body() +{ + atf_check -s exit:0 -e empty -o 'match:succeeded' \ + -x "cd $(atf_get_srcdir) && ./execve_helper ./good_aout" +} + +good_script_head() +{ + atf_set "descr" "Good script" +} +good_script_body() +{ + atf_check -s exit:0 -e empty -o 'match:succeeded' \ + -x "cd $(atf_get_srcdir) && ./execve_helper good_script" +} + +non_exist_head() +{ + atf_set "descr" "Non-existent file" +} +non_exist_body() +{ + atf_check -s exit:1 -e 'match:No such file or directory' -o empty \ + -x "cd $(atf_get_srcdir) && ./execve_helper non_exist" +} + +non_exist_shell_head() +{ + atf_set "descr" "Non-existent shell" +} +non_exist_shell_body() +{ + atf_check -s exit:1 -e 'match:No such file or directory' -o empty \ + -x "cd $(atf_get_srcdir) && ./execve_helper non_exist_shell" +} + +script_arg_head() +{ + atf_set "descr" "-x in the shebang" +} +script_arg_body() +{ + atf_check -s exit:0 -e 'match:\+ echo succeeded' -o 'match:succeeded' \ + -x "cd $(atf_get_srcdir) && ./execve_helper script_arg" +} + +script_arg_nospace_head() +{ + atf_set "descr" '-x in the shebang; no space between #! and /bin/sh' +} +script_arg_nospace_body() +{ + atf_check -s exit:0 -e 'match:\+ echo succeeded' -o 'match:succeeded' \ + -x "cd $(atf_get_srcdir) && ./execve_helper script_arg_nospace" +} + +sparse_aout_head() +{ + atf_set "descr" 'Sparse file' +} +sparse_aout_body() +{ + atf_check -s exit:1 -e 'match:Exec format error' -o empty \ + -x "cd $(atf_get_srcdir) && ./execve_helper sparse_aout" +} + +trunc_aout_head() +{ + atf_set "descr" 'Truncated file' +} +trunc_aout_body() +{ + atf_check -s exit:1 -e 'match:Exec format error' -o empty \ + -x "cd $(atf_get_srcdir) && ./execve_helper trunc_aout" +} + +atf_init_test_cases() +{ + atf_add_test_case bad_interp_len + atf_add_test_case empty + atf_add_test_case good_aout + atf_add_test_case good_script + atf_add_test_case non_exist + atf_add_test_case non_exist_shell + atf_add_test_case script_arg + atf_add_test_case script_arg_nospace + atf_add_test_case sparse_aout + atf_add_test_case trunc_aout + +} diff --git a/tools/regression/execve/tests/goodaout.c b/tests/sys/kern/execve/good_aout.c similarity index 97% rename from tools/regression/execve/tests/goodaout.c rename to tests/sys/kern/execve/good_aout.c index ebf476b2cf7f..39e986770c5d 100644 --- a/tools/regression/execve/tests/goodaout.c +++ b/tests/sys/kern/execve/good_aout.c @@ -38,9 +38,7 @@ #include int -main(argc, argv) - int argc; - char *argv[]; +main(void) { printf("succeeded\n"); exit(0); diff --git a/tools/regression/execve/tests/goodscript b/tests/sys/kern/execve/good_script similarity index 70% rename from tools/regression/execve/tests/goodscript rename to tests/sys/kern/execve/good_script index 51270dc38da1..11c76898ca2e 100644 --- a/tools/regression/execve/tests/goodscript +++ b/tests/sys/kern/execve/good_script @@ -1,4 +1,4 @@ -#! /bin/csh +#!/bin/sh # $FreeBSD$ echo succeeded diff --git a/tools/regression/execve/tests/nonexistshell b/tests/sys/kern/execve/non_exist_shell similarity index 100% rename from tools/regression/execve/tests/nonexistshell rename to tests/sys/kern/execve/non_exist_shell diff --git a/tools/regression/execve/tests/scriptarg b/tests/sys/kern/execve/script_arg similarity index 100% rename from tools/regression/execve/tests/scriptarg rename to tests/sys/kern/execve/script_arg diff --git a/tools/regression/execve/tests/scriptarg-nospace b/tests/sys/kern/execve/script_arg_nospace similarity index 100% rename from tools/regression/execve/tests/scriptarg-nospace rename to tests/sys/kern/execve/script_arg_nospace diff --git a/tools/regression/execve/Makefile b/tools/regression/execve/Makefile deleted file mode 100644 index 018678cde02c..000000000000 --- a/tools/regression/execve/Makefile +++ /dev/null @@ -1,70 +0,0 @@ -# $FreeBSD$ - -PROG= doexec -MAN= - -RP= ./${PROG} -TD= ${.CURDIR}/tests - -TESTSCRIPTS= nonexistshell devnullscript badinterplen goodscript \ - scriptarg scriptarg-nospace -CLEANFILES= goodaout truncaout sparseaout empty ${TESTSCRIPTS} - -all: ${PROG} goodaout ${TESTSCRIPTS} - -.for x in ${TESTSCRIPTS} -${x}: ${TD}/${x} - ${CP} ${TD}/${x} . - chmod +x ${x} -.endfor - -regress: test-empty test-nonexist test-nonexistshell \ - test-devnullscript test-badinterplen test-goodscript \ - test-scriptarg test-scriptarg-nospace test-goodaout \ - test-truncaout test-sparseaout - -test-empty: ${PROG} - rm -f empty - touch empty - chmod +x empty - ${RP} empty | grep 'Exec format error' - -test-nonexist: ${PROG} - ${RP} ${TD}/nonexistent | grep 'No such file or directory' - -test-nonexistshell: ${PROG} nonexistshell - ${RP} nonexistshell | grep 'No such file or directory' - -test-devnullscript: ${PROG} devnullscript - ${RP} devnullscript | grep 'Permission denied' - -test-badinterplen: ${PROG} badinterplen - ${RP} badinterplen | grep 'No such file or directory' - -test-goodscript: ${PROG} goodscript - ${RP} goodscript | grep 'succeeded' - -test-scriptarg: ${PROG} scriptarg - ${RP} scriptarg 2>&1 | grep '+ echo succeeded' - -test-scriptarg-nospace: ${PROG} scriptarg-nospace - ${RP} scriptarg-nospace 2>&1 | grep '+ echo succeeded' - -goodaout: ${TD}/goodaout.c - ${CC} -static -o ${.TARGET} ${TD}/goodaout.c - -test-goodaout: ${PROG} goodaout - ${RP} goodaout | grep 'succeeded' - -test-truncaout: ${PROG} goodaout - truncate -s 16 truncaout - chmod a+x truncaout - ${RP} truncaout | grep 'Exec format error' - -test-sparseaout: ${PROG} - /bin/rm -rf sparseaout - truncate -s 20480 sparseaout - chmod a+x sparseaout - ${RP} sparseaout | grep 'Exec format error' - -.include diff --git a/tools/regression/execve/execve.t b/tools/regression/execve/execve.t deleted file mode 100644 index dd2be9a9d0ea..000000000000 --- a/tools/regression/execve/execve.t +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` -cmd="./`basename $0 .t`" - -make >/dev/null 2>&1 - -tests="test-empty test-nonexist test-nonexistshell \ - test-devnullscript test-badinterplen test-goodscript \ - test-scriptarg test-scriptarg-nospace test-goodaout \ - test-truncaout test-sparseaout" - -n=0 - -echo "1..11" - -for atest in ${tests} -do - n=`expr ${n} + 1` - if make ${atest} - then - echo "ok ${n} - ${atest}" - else - echo "not ok ${n} - ${atest}" - fi -done