#!/bin/sh

PROG="${0##*/}" #program name

print_version()
{
	cat <<EOF
$PROG version @VERSION@

Written by Stanislav Ievlev

Copyright (C) 2003-2004 ALT Linux Team
EOF
	exit
}

print_usage()
{
	[ "$1" = 0 ] || exec >&2
	cat <<EOF
Usage: $PROG [options] 

utility to manipulate groups of system users: add, delete, modify

Valid options are:
  -h, --help	display help screen
  -v, --version	display version information
  -l, --list	get list of available groups
  -t, --type	check for user existance
  -d, --delete	delete some user
  -r, --read	read user information
  -w, --write	write user information

Report bugs to <inger@altlinux.org>
EOF
	[ -n "$1" ] && exit "$1" || exit
}


GPASSWD="/usr/bin/gpasswd"
GRADD="/usr/sbin/groupadd"
GRDEL="/usr/sbin/groupdel"
IDUTIL="/usr/bin/id"

TEMP=`getopt -n $PROG -o h,v,l:,d:,r:,w:,t: -l help,version,list:,delete:,read:,write:,type: -- "$@"` || print_usage
eval set -- "$TEMP"

are_user_exists()
{
	"$IDUTIL" -Gn "$1" 2>/dev/null|tr ' ' '\n'| grep -qs "^$2\$"
}

are_group_exists()
{
	egrep -qs "^$1:" /etc/group
}

while :; do
	case "$1" in
		-h|--help) print_usage 0
			;;
		-v|--version) print_version
			;;
		-l|--list)
			shift;dir=$1;
			if [ "$dir" = "/" ] ;then
				cat /etc/group|cut -f1 -d:|sed 's,.*,& d,'
			else
				content=$(cat /etc/group|grep "^$dir:"|cut -f4 -d:)
				[ -n "$content" ] && echo "$content"|tr ',' '\n'|sed 's,.*,& r,'
			fi
			exit 0
			;;
		-d|--delete)
			shift;name="$1";
			if echo "$name"|grep -qs "/"; then
				group=${name%%/*}
				user=${name##*/}
				"$GPASSWD" -d "$user" "$group" &>/dev/null
				are_user_exists "$user" "$group" || exit 0
				exit 1
			else
				"$GRDEL" "$name"
				are_group_exists "$user" "$group" || exit 0
				exit 1
			fi
			;;
		-t|--type)
			shift;name="$1";
			if echo "$name"|grep -qs "/"; then
				group=${name%%/*}
				user=${name##*/}
				are_user_exists "$user" "$group" && echo "$name r"
			else
				are_group_exists "$name" && echo "$name d"
			fi
			exit 0
			;;
		-r|--read)
			shift;name="$1";
			#ignore
			exit 0
			;;
		-w|--write)
			shift;name="$1";
			#add user to group
			if echo $name|grep -qs '/' ; then
				group=${name%%/*}
				user=${name##*/}
				"$GPASSWD" -a "$user" "$group" &>/dev/null
				#ignore any input
				while read l; do
					echo -n
				done
				are_user_exists "$user" "$group" || exit 1
				exit 0
			else
				systemgroup=
				while read l;do
					option=${l%%:*}
					value=${l#*:}
					[ "$option" = "type" -a "$value" = "system" ] && systemgroup=" -r"
				done
				"$GRADD" $systemgroup "$name" &>/dev/null
				are_group_exists "$name" || exit 1
				exit 0
			fi
			;;
		--) shift; break
			;;
		*) Fatal "unrecognized option: $1"
			;;
	esac
	shift
done

