#! /bin/sh

# Question 3, shell programming assignment, 2003.
# method using lastb:

prog=`basename $0`
usage() {
   echo "Usage: $prog [-f] [-d] [-u user]"
   echo "Show bad login attempts."
   echo -- "-f sort output by days of most frequent bad attempts first"
   echo -- "-d sort output by date (default)"
   echo -- "-u user get output for user instead of root"
   exit 1
}

USER=root
SORTBY=date

while getopts ":fdu:" opt
do
    case $opt in
        f) SORTBY=frequency ;;
        d) SORTBY=date  ;;
        u) USER=$OPTARG ;;
        *) usage        ;;
    esac
done
shift $((OPTIND - 1))

TMPFILE=`mktemp /tmp/${prog}.XXXXXX` || exit 1
trap "rm $TMPFILE" HUP INT QUIT PIPE ALRM TERM EXIT
lastb $USER > "$TMPFILE"

if [ "$SORTBY" = "date" ]
then
    cat "$TMPFILE"
    exit 0
elif [ "$SORTBY" = "frequency" ]
then
    lastb -R $USER \
    | egrep -v '^\s*$|^btmp begins' \
    | awk '{$1="";$2="";print}' \
    | cut -b 3-12 \
    | uniq -c \
    | sort -bnr \
    | awk '{$1="";printf "%s %s %2d\n", $2, $3, $4}' \
    | while read date
    do
        fgrep "$date" "$TMPFILE"
    done
fi
