mirror of
https://github.com/samba-team/samba.git
synced 2025-07-23 20:59:10 +03:00
r14624: - add timelimit.c
- add configure tests --with-selftest-prefix=/tmp/samba-test this is needed because the path name of unix socket can only be 108 chars long - add configure test --with-smbtorture4-path=/home/foo/prefix/samba4/bin/smbtorture this will be used to run samba4's smbtorture inside samba3's make test later metze
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
c3a9f30e2a
commit
d9df1853b9
@ -11,6 +11,9 @@
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
|
||||
selftest_prefix=@selftest_prefix@
|
||||
smbtorture4_path=@smbtorture4_path@
|
||||
|
||||
LIBS=@LIBS@
|
||||
CC=@CC@
|
||||
SHLD=@SHLD@
|
||||
@ -1405,6 +1408,10 @@ bin/t_push_ucs2@EXEEXT@: bin/libbigballofmud.@SHLIBEXT@ torture/t_push_ucs2.o
|
||||
|
||||
bin/t_snprintf@EXEEXT@: lib/snprintf.c
|
||||
$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(DYNEXP) -DTEST_SNPRINTF lib/snprintf.c -lm
|
||||
|
||||
bin/timelimit@EXEEXT@: script/tests/timelimit.c
|
||||
$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(DYNEXP) script/tests/timelimit.c
|
||||
|
||||
install: installservers installbin @INSTALL_CIFSMOUNT@ installman installscripts installdat installswat installmodules @INSTALL_LIBSMBCLIENT@ @INSTALL_LIBMSRPC@
|
||||
|
||||
install-everything: install installmodules
|
||||
|
@ -308,6 +308,41 @@ AC_ARG_ENABLE(socket-wrapper,
|
||||
SOCKWRAP="\$(SOCKET_WRAPPER_OBJ)"
|
||||
fi])
|
||||
|
||||
#################################################
|
||||
# set prefix for 'make test'
|
||||
selftest_prefix="./"
|
||||
AC_SUBST(selftest_prefix)
|
||||
AC_ARG_WITH(selftest-prefix,
|
||||
[ --with-selftest-prefix=DIR The prefix where make test will be runned ($selftest_prefix)],
|
||||
[ case "$withval" in
|
||||
yes|no)
|
||||
AC_MSG_WARN([--with-selftest-prefix called without argument - will use default])
|
||||
;;
|
||||
* )
|
||||
selftest_prefix="$withval"
|
||||
;;
|
||||
esac
|
||||
])
|
||||
|
||||
#################################################
|
||||
# set path of samba4's smbtorture
|
||||
smbtorture4_path=""
|
||||
AC_SUBST(smbtorture4_path)
|
||||
AC_ARG_WITH(smbtorture4_path,
|
||||
[ --with-smbtorture4-path=PATH The path to a samba4 smbtorture for make test (none)],
|
||||
[ case "$withval" in
|
||||
yes|no)
|
||||
AC_MSG_ERROR([--with-smbtorture4-path should take a path])
|
||||
;;
|
||||
* )
|
||||
smbtorture4_path="$withval"
|
||||
if test -z "$smbtorture4_path" -a ! -f $smbtorture4_path; then
|
||||
AC_MSG_ERROR(['$smbtorture_path' does not exist!])
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
])
|
||||
|
||||
# compile with optimization and without debugging by default, but
|
||||
# allow people to set their own preference.
|
||||
# do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
|
||||
|
78
source/script/tests/timelimit.c
Normal file
78
source/script/tests/timelimit.c
Normal file
@ -0,0 +1,78 @@
|
||||
/* run a command with a limited timeout
|
||||
tridge@samba.org, June 2005
|
||||
|
||||
attempt to be as portable as possible (fighting posix all the way)
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
printf("usage: timelimit <time> <command>\n");
|
||||
}
|
||||
|
||||
static void sig_alrm(int sig)
|
||||
{
|
||||
kill(0, SIGKILL);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static void sig_term_kill(int sig)
|
||||
{
|
||||
static int c = 0;
|
||||
|
||||
if (c > 2) {
|
||||
kill(0, SIGKILL);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
c++;
|
||||
}
|
||||
|
||||
static void sig_term(int sig)
|
||||
{
|
||||
kill(0, SIGTERM);
|
||||
signal(SIGTERM, sig_term_kill);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int maxtime, ret=1;
|
||||
|
||||
if (argc < 3) {
|
||||
usage();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (setpgrp() == -1) {
|
||||
perror("setpgrp");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
maxtime = atoi(argv[1]);
|
||||
signal(SIGALRM, sig_alrm);
|
||||
alarm(maxtime);
|
||||
signal(SIGTERM, sig_term);
|
||||
|
||||
if (fork() == 0) {
|
||||
execvp(argv[2], argv+2);
|
||||
}
|
||||
|
||||
do {
|
||||
int status;
|
||||
pid_t pid = wait(&status);
|
||||
if (pid != -1) {
|
||||
ret = WEXITSTATUS(status);
|
||||
} else if (errno == ECHILD) {
|
||||
break;
|
||||
}
|
||||
} while (1);
|
||||
|
||||
exit(ret);
|
||||
}
|
Reference in New Issue
Block a user