
#!/bin/sh
# File  : chk_login.sh
# By    : Maarten.deBoer@AtosOrigin.com, 091214
# Subject       : Check if no hanging users (from not today)
# (0.2) : Case added
# (0.3) : remove 0 at date
# (0.1) : Name changed to hk_login.sh
# (0.2)	: Added USAGE
# (0.3)	: Added -k (kill user) + sort -u
#set -x
PGM="`basename $0|cut -d\. -f1`"
VER="0.3"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
MAILTO="maarten.deboer@atos.net"
touch ${TMP}
OS="`uname -s`"
MAILADDR=""
MAILFILE="${TMP}.mail"
MAIL=""
KILL=""

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options:"
  echo "    -k | --kill : Kill the user"
  echo "    -m | --mail : send Mail to ${MAILTO}"
  echo "    --mailto    : send MAILTO (${MAILTO})"
  echo "    -h | --help : this help"
  echo "    -V          : Version"
  echo "    -x          : set -x"
}
# Check options
while [ ${#} -gt 0 ]
  do
  case ${1} in
    --mailto) MAILTO=${2}; MAIL=1; shift ;;
    -k | --kill) KILL=1 ;;
    -m | --mail) MAIL=1 ;;
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known."; USAGE; exit 1 ;;
  esac
    shift
done

echo "`date` ${PGM} started." |tee -a ${LOG}

echo "These users are still logged in from previous days, at `date`" > ${MAILFILE}
echo "" >> ${MAILFILE}
case ${OS} in
  SunOS)
    DAY="`date +%a`" ; finger|grep -v TTY|grep -v "${DAY}"|grep -v 'No one logged on'|tee -a ${TMP} ;;
  Linux)
    DAY="`date +%d|sed -e 's/0//g'`" ; finger|grep -v Tty|grep -v "${DAY}"|grep -v 'No one logged on'|tee -a ${TMP} ;;
  *) echo "Unknown OS (${OS}). Exiting ..." >> ${TMP} ;;
esac

# If ${TMP} (error msg), then mail
if [ -s ${TMP} ]; then
#  cat ${TMP} | mailx -s "`hostname`: Check finger [${PGM} v${VERSION}]" ${MAILTO}
#  echo "Mailed to ${MAILTO}"
# Send to the users as well
  cat ${TMP}|cut -d' ' -f1|sort -u| while read USER REST
  do
    MAILADDR="`grep ${USER} /etc/passwd | cut -d\( -f2 | cut -d\) -f1`"
    if [ "${MAILADDR}" == "" ]; then
      cat ${TMP} >> ${MAILFILE}
      echo "No mailaddress found in /etc/passwd for ${USER}" >> ${MAILFILE}
      if [ ${MAIL} ]; then
        cat ${MAILFILE} | mailx "`hostname`: Check login [${PGM} v${VERSION}]" ${MAILTO}
        echo "`date` Mailed to ${MAILTO} ..." |tee -a ${LOG}
      fi  # MAIL
    else  # "${MAILADDR}" == ""
      cat ${TMP} >> ${MAILFILE}
      echo "" >> ${MAILFILE}
      echo "Please logout, if possible." >> ${MAILFILE}
      if [ ${MAIL} ]; then
        cat ${MAILFILE} | mailx -s "`hostname`: Check login [${PGM} v${VERSION}]" ${MAILTO} ${MAILADDR}
        echo "`date` Mailed to ${MAILADDR} ${MAILTO} ..." |tee -a ${LOG}
      fi  # MAIL
    fi  # "${MAILADDR}" == ""

    if [ ${KILL} ]; then
      echo "`date` Killing ${USER} ..."|tee -a ${LOG}
      /bin/ps -ef|grep -v grep|grep -v root|grep ${USER}|awk '{print $2}'| while read PID REST
      do  
        if [ "${PID}" != "" ] && [ ${PID} -ne 0 ] && [ ${PID} -ne 1 ]; then
          echo "  Killing ${PID} ..."|tee -a ${LOG}
          /usr/bin/sudo kill ${PID}
          /bin/ps -ef|grep -v grep|grep -v root|grep ${PID}|awk '{print $2}'| while read 2NDPID REST
          do
            echo "  Killing -9 ${PID} ..."|tee -a ${LOG}
            /usr/bin/sudo kill -9 ${PID}
          done  # 2nd ps
        fi
      done  # ps ...
      echo "  ${USER} has been removed(killed)." >> ${MAILFILE}
    fi  # KILL

  done  # cat ... ${USER} ...
fi  # -s ${TMP}

rm ${TMP} ${MAILFILE}
exit 0

