#! /bin/sh

########################################################################
#
# /u/sonmi/bin/qaclean
#
# is supposed to clean up after a "hanging" QA
#
# 1) see if there is a lockfile 
#    if yes: 
#    1a) kill the process of the lockfile and if possible it's children
#    1b) rm the lockfile
# 2) kill selfservers
# 3) clean up old tmp files
#
########################################################################

if [ -z "$TMP" ]
then
    if [  -z "$TEMP" ]
    then
        TMP="/tmp"
    else
        TMP=$TEMP
    fi
fi
if [ ! -w "$TMP" ]
then
    echo "Can't write to tmp directory $TMP - exiting"
    echo "Can't write to tmp directory $TMP - exiting" >&2
    exit 1
fi

########################### Ps #########################################
# platform specific ps
########################################################################
Ps()
{
    if [ `uname -s` = "SunOS" ]
    then
        /usr/5bin/ps -e
    else
        ps -e
    fi
}

Kill()
{
    if [ "$1" = "$$" ]
    then
        return
    fi
    echo "Killing PID $1"
    kill $1
    sleep 1
    kill -9 $1 2>/dev/null
}

########################### kill_by_name ################################
# like killall, only without permissionproblems, kills the process whose 
# name is given as parameter
########################################################################
kill_by_name()
{
    echo "Killing all $1"
 
    for PID in `Ps | grep "$1" | grep -v grep | \
        sed -e "s/^[     ]*//g" -e "s/[     ].*//"`
    do
        Kill $PID
    done
}

kill_the_rest()
{
i=0
while [ $i -lt $1 ]
do
    kill_by_name nssqa
    kill_by_name selfserv
    kill_by_name strsclnt
    kill_by_name all.sh
    kill_by_name sdr.sh
    kill_by_name ssl.sh
    kill_by_name smime.sh
    i=`expr $i + 1`
done
}

nt_warning()
{
os_name=`uname -s`
case $os_name in
    CYGWIN*|WIN*|Win*)
        echo
        echo
        echo
        echo "Another Windows problem... If you have not already done so"
        echo "after this script completes, please reboot, and log in as"
        echo "user svbld again"
        echo
        echo
        echo
        ;;
esac
}

nt_warning
case $1 in 
    -all)
        for w in tommy booboo kentuckyderby galileo shame axilla columbus \
                 smarch charm hp64 biggayal orville kwyjibo hbombaix raven \
                 jordan hornet phaedrus louie box dbldog huey washer dryer \
                 shabadoo trex bummer compaqtor jellyfish sjsu
        do
                echo $w
                ping $w && rsh $w '/u/sonmi/bin/qaclean'
        done

        ;;
    ?*)
        rsh $1 '/u/sonmi/bin/qaclean'
        exit
        ;;
esac

uname -a
echo

if [ -f ${TMP}/nssqa.* ]
then
    echo "nssqa seems to be running ${TMP}/nssqa.*"
    #cat ${TMP}/nssqa.*
    NSSQA_PID=`ls ${TMP}/nssqa.* | sed -e 's/[^.]*\.//'`
    Kill $NSSQA_PID
    rm ${TMP}/nssqa.*
fi

kill_the_rest 3
ls -l ${TMP}/nsstmp.*
rm ${TMP}/nsstmp.* 2>/dev/null
rm ${TMP}/certutilout.* 2>/dev/null
rm ${TMP}/Pk12*
nt_warning
