#!/bin/bash

# findid - find invalid user ids
# Copyright © 2000-2007 by Pádraig Brady <P@draigBrady.com>.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details,
# which is available at www.gnu.org

script_dir=`dirname $0`                #directory of this script
script_dir=`readlink -f "$script_dir"` #Make sure absolute path

. $script_dir/supprt/fslver

Usage() {
	ProgName=`basename "$0"`
	echo "find unused or bad file ids
Usage: $ProgName [[-r] [-f] paths(s) ...]

If no path(s) specified then the currrent directory is assumed."
	exit
}

for arg
do
	case "$arg" in
	-h|--help|-help)
		Usage ;;
	-v|--version)
		Version ;;
	*)
		argsToPassOn="$argsToPassOn '$arg'" ;;
	esac
done

. $script_dir/supprt/getfpf "$argsToPassOn"

reUsers="`cut -f3 -d: /etc/passwd | tr '\n' '|'`0"
reGroups="`cut -f3 -d: /etc/group | tr '\n' '|'`0"
find "$@" -printf "%U:%G:$FPF\0" |
sort -zu | #merge files (indirectly) specified multiple times
tr '\n\0' '\1\n' |
grep -Ev "^($reUsers):($reGroups):" |
cut -d: -f3- |
tr '\n\1' '\0\n' |

#Note this find command is equivalent to the above.
#However it's much slower. This really shows the
#advantage of the small cohesive tools paradigm.
#find $findArgs \( -nouser -o -nogroup \) -printf "$FPF\0" |

if [ -p /proc/self/fd/1 ]; then
    cat
else
    xargs -r0 ls -lUdb --color=auto --
fi
