@ -1,5 +1,11 @@
# include "config.h"
# define __USE_MISC
# define _SVID_SOURCE
# ifdef HAVE_FEATURES_H
# include <features.h>
# endif
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
@ -53,7 +59,6 @@ main(int argc,
const char * act ;
# endif
gid_t gid , gl [ 65536 ] , egid ;
int pid = 0 ;
for ( i = 1 ; i < argc ; i + + )
{
@ -75,21 +80,6 @@ main(int argc,
test = 1 ;
action = argv [ 2 ] ;
}
else if ( ! strcmp ( argv [ 1 ] , " gdb " ) )
{
if ( argc ! = 4 ) exit ( 1 ) ;
char * end = NULL ;
action = argv [ 1 ] ;
pid = strtoul ( argv [ 2 ] , & end , 10 ) ;
if ( end = = NULL | | * end ! = ' \0 ' )
{
printf ( " Invalid pid for '%s'. \n " , argv [ 3 ] ) ;
exit ( 0 ) ;
}
output = argv [ 3 ] ;
}
else if ( ! strcmp ( argv [ 1 ] , " l2ping " ) )
{
action = argv [ 1 ] ;
@ -161,27 +151,7 @@ main(int argc,
exit ( 20 ) ;
}
if ( ! strcmp ( action , " gdb " ) )
{
char buffer [ 4096 ] ;
int r ;
snprintf ( buffer , 4096 ,
" %s --pid=%i "
" -batch "
" -ex 'set logging file %s' "
" -ex 'set logging on' "
" -ex 'thread apply all backtrace full' "
" -ex detach > /dev/null 2>&1 < /dev/zero " ,
cmd ,
pid ,
output ? : " e-output.txt " ) ;
r = system ( buffer ) ;
exit ( WEXITSTATUS ( r ) ) ;
}
else if ( ! test & & ! strcmp ( action , " l2ping " ) )
if ( ! test & & ! strcmp ( action , " l2ping " ) )
{
char tmp [ 128 ] ;
double latency ;
@ -193,6 +163,23 @@ main(int argc,
return ( latency < 0 ) ? 1 : 0 ;
}
/* sanitize environment */
# ifdef HAVE_UNSETENV
# define NOENV(x) unsetenv(x)
# else
# define NOENV(x)
# endif
NOENV ( " IFS " ) ;
NOENV ( " LD_PRELOAD " ) ;
NOENV ( " PYTHONPATH " ) ;
NOENV ( " LD_LIBRARY_PATH " ) ;
# ifdef HAVE_CLEARENV
clearenv ( ) ;
# endif
/* set path and ifs to minimal defaults */
putenv ( " PATH=/bin:/usr/bin " ) ;
putenv ( " IFS= \t \n " ) ;
if ( ( ! test )
# ifdef HAVE_EEZE_MOUNT
& & ( ! mnt )