#! /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