#! /bin/sh

# Question 5, shell programming assignment, 2003.

prog=$(basename $0)
usage() {
   echo "Usage: $prog"
   exit 1
}

UG_TMPFILE=$(mktemp /tmp/${prog}.XXXXXX) || exit 1
U_TMPFILE=$(mktemp /tmp/${prog}.XXXXXX)  || exit 1
G_TMPFILE=$(mktemp /tmp/${prog}.XXXXXX)  || exit 1
trap "rm $UG_TMPFILE $U_TMPFILE $G_TMPFILE" HUP INT QUIT PIPE ALRM TERM EXIT

find $PWD -type f \( -perm -6000 -fprintf ${UG_TMPFILE} "%m\t%u\t%g\t%p\n" -o \
                     -perm -4000 -fprintf ${U_TMPFILE}  "%m\t%u\t%g\t%p\n" -o \
                     -perm -2000 -fprintf ${G_TMPFILE}  "%m\t%u\t%g\t%p\n" \)

UG_LINES=$(cat ${UG_TMPFILE} | wc -l)
U_LINES=$(cat ${U_TMPFILE}   | wc -l)
G_LINES=$(cat ${G_TMPFILE}   | wc -l)

if [ "$UG_LINES" -gt 0 ]
then
    echo "Ordinary files that are BOTH SUID and SGID:"
    cat "$UG_TMPFILE"
fi
if [ "$U_LINES" -gt 0 ]
then
    [ "$UG_LINES" -gt 0 ] && echo
    echo "Ordinary files that are SUID only:"
    cat "$U_TMPFILE"
fi
if [ "$G_LINES" -gt 0 ]
then
    [ "$U_LINES" -gt 0 -o "$UG_LINES" -gt 0 ] && echo
    echo "Ordinary files that are SGID only:"
    cat "$G_TMPFILE"
fi
