#!/bin/sh

if [ $# = 1 -o $# = 2 ]
then
	if [ "$1" = "kiddie" ]
	then
		PAXTEST_MODE=0
		shift
	elif [ "$1" = "blackhat" ]
	then
		PAXTEST_MODE=1
		shift
	else
		echo "usage: paxtest [kiddie|blackhat] [logfile]"
		exit 1
	fi
else
	echo "usage: paxtest [kiddie|blackhat] [logfile]"
	exit 1
fi

LOG=$HOME/paxtest.log
[ -n "$1" ] && LOG=$1
touch "$LOG"
if [ ! -e "$LOG" ]; then
	echo "Could not create logfile in $LOG" >&2
	exit 1
fi
export PAXTEST_MODE

if [ "${LD_LIBRARY_PATH}" = "" ]
then
	LD_LIBRARY_PATH=/usr/lib/paxtest
else
	LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/paxtest
fi
export LD_LIBRARY_PATH

cat <<__end__ | tee $LOG
PaXtest - Copyright(c) 2003-2016 by Peter Busser <peter@adamantix.org> and Brad Spengler <spender@grsecurity.net>
Released under the GNU Public Licence version 2 or later

__end__

echo "Mode: $PAXTEST_MODE" >>$LOG
if [ "$PAXTEST_MODE" -eq 0 ]; then
	echo -n "Kiddie" >>$LOG
fi
if [ "$PAXTEST_MODE" -eq 1 ]; then
	echo -n "Blackhat" >>$LOG
fi
echo >>$LOG

echo "Kernel: " >>$LOG
uname -a >>$LOG
echo >>$LOG
if [ -e /usr/bin/lsb_release ]; then
	echo "Relase information: " >>$LOG
	lsb_release -a 2>/dev/null >>$LOG
fi
echo "Test results:" >>$LOG

echo "Writing output to $LOG"
echo 'It may take a while for the tests to complete'
echo "Test results:"

for i in gcc anonmap execbss execdata execheap execstack shlibbss shlibdata mprotanon mprotbss mprotdata mprotheap mprotstack mprotshbss mprotshdata writetext randamap randheap1 randheap2 randmain1 randmain2 randshlib randvdso randstack1 randstack2 randarg1 randarg2 randshlibdelta1 randshlibdelta2 randexhaust1 randexhaust2 rettofunc1 rettofunc2 rettofunc1x rettofunc2x
do
	/usr/lib/paxtest/$i || echo
done 2>&1 | tee -a $LOG

echo

