[PATCH] Harden os.system
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
[PATCH] Harden os.system
From: Bryan O'Sullivan <bos@serpentine.com>
Add util.system function. This is similar to os.system, but will
either succeed (if the process finishes with a zero exit code) or raise
a util.CommandError (if the process exits uncleanly or is killed by
a signal).
Add util.explain_exit function. This tends to be ubiquitous in code
that calls other processes, and must describe what has gone wrong.
Change some uses of os.system over to util.system.
manifest hash: e3bf4adcac5b915432ec0af00efdbcef86bea4b1
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCwSipywK+sNU5EO8RAr0RAJkBDt8XQ7mYQAWNHNgTOVt1eyWU1QCfe1oO
2OwxyWqpbRNACVJHHfZ3/Xw=
=OaRX
-----END PGP SIGNATURE-----
#!/bin/bash
set -e
export LANG=C
export LC_CTYPE="C"
export LC_NUMERIC="C"
export LC_TIME="C"
export LC_COLLATE="C"
export LC_MONETARY="C"
export LC_MESSAGES="C"
export LC_PAPER="C"
export LC_NAME="C"
export LC_ADDRESS="C"
export LC_TELEPHONE="C"
export LC_MEASUREMENT="C"
export LC_IDENTIFICATION="C"
export LC_ALL=""
umask 022
tests=0
failed=0
H=$PWD
if [ -d /usr/lib64 ]; then
lib=lib64
else
lib=lib
fi
TESTPATH=$PWD/install/bin
export PATH=$TESTPATH:$PATH
export PYTHONPATH=$PWD/install/$lib/python
rm -rf install
cd ..
${PYTHON:-python} setup.py install --home=tests/install > tests/install.err
if [ $? != 0 ] ; then
cat tests/install.err
fi
cd $H
rm install.err
function run_one
{
rm -f $1.err
export TZ=GMT
D=`mktemp -d`
if [ "$D" == "" ] ; then
echo mktemp failed!
fi
cd $D
fail=0
if ! $H/$1 > .out 2>&1 ; then
echo $1 failed with error code $?
fail=1
fi
if [ -s .out -a ! -r $H/$1.out ] ; then
echo $1 generated unexpected output:
cat .out
cp .out $H/$1.err
fail=1
elif [ -r $H/$1.out ] && ! diff -u $H/$1.out .out > /dev/null ; then
echo $1 output changed:
diff -u $H/$1.out .out && true
cp .out $H/$1.err
fail=1
fi
cd $H
rm -r $D
return $fail
}
TESTS=$@
if [ "$TESTS" == "" ] ; then
TESTS=`ls test-* | grep -Ev "\.|~"`
fi
for f in $TESTS ; do
echo -n "."
if ! run_one $f ; then
failed=$[$failed + 1]
fi
tests=$[$tests + 1]
done
rm -rf install
echo
echo Ran $tests tests, $failed failed
if [ $failed -gt 0 ] ; then
exit 1
fi