SOURCES: rpm-user_group.sh - use less global variables (better flow control...

glen glen at pld-linux.org
Thu Mar 26 12:41:29 CET 2009


Author: glen                         Date: Thu Mar 26 11:41:29 2009 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- use less global variables (better flow control)
- add quiet mode support
- die if uid or gid in target do not exist

---- Files affected:
SOURCES:
   rpm-user_group.sh (1.10 -> 1.11) 

---- Diffs:

================================================================
Index: SOURCES/rpm-user_group.sh
diff -u SOURCES/rpm-user_group.sh:1.10 SOURCES/rpm-user_group.sh:1.11
--- SOURCES/rpm-user_group.sh:1.10	Sun Sep  7 12:47:59 2008
+++ SOURCES/rpm-user_group.sh	Thu Mar 26 12:41:23 2009
@@ -3,24 +3,18 @@
 [ -f /etc/sysconfig/rpm ] && . /etc/sysconfig/rpm
 [ -z "$RPM_SCRIPTVERBOSITY" ] && RPM_SCRIPTVERBOSITY=5
 
-if [ -x /usr/bin/banner.sh ]; then
-	BANNERCMD="/usr/bin/banner.sh "
-	BANNERPARA="-s -M user-group.error"
-else
-	BANNERCMD="cat"
-	BANNERPARA=""
-fi
-
-if [ "$1" = user -o "$1" = group ]; then
-	MODE=$1
-else
-	echo ERROR
-	exit 2
-fi
-shift
+# aborts program abnormally
+die() {
+	local rc=${2:-1}
+	if [ "$1" ]; then
+		echo >&2 "ERROR: $1"
+	else
+		echo >&2 "ERROR"
+	fi
+	exit $rc
+}
 
-bannercmd()
-{
+bannercmd() {
 	if [ "$BANNERCMD" = cat ]; then
 		echo cat
 	else
@@ -32,48 +26,120 @@
 	fi
 }
 
-testrm()
-{
+testrm() {
+	local mode=$1
+	local name=$2
+
 	[ "$RPM_USERDEL" != yes ] || [ ! -x /bin/rpm ] && return 1
-	[ -z "$1" ] && return 2
-	rpm -q --whatprovides "${MODE}($1)" >/dev/null 2>&1
+	[ -z "$name" ] && return 2
+	rpm -q --whatprovides "$mode($name)" >/dev/null 2>&1
 	# no package Provides it (strange)
 	[ $? -ne 0 ] && return 0
 	# only current package Provides it
-	[ `rpm -q --whatprovides "${MODE}($1)" | wc -l` -lt 2 ] && return 0
+	[ $(rpm -q --whatprovides "$mode($name)" | wc -l) -lt 2 ] && return 0
 	return 1
 }
 
-if [ "$1" = "testrm" ]; then
-	testrm $2
-	exit $?
-elif [ "$1" = del ]; then
-	if testrm $2; then
-		echo "Removing $MODE $2" | `bannercmd "${MODE}del-$2"`
-		/usr/sbin/${MODE}del $2 || :
-		if [ -x /usr/sbin/nscd ]; then
-			case "${MODE}" in
-			user)
-				/usr/sbin/nscd -i passwd
-				;;
-			group)
-				/usr/sbin/nscd -i group
-				;;
-			esac
+groupremove() {
+	local name="$1"
+	local gid=$(getgid "$name" 2>/dev/null)
+
+	echo "Removing group $name" | $(bannercmd "groupdel-$name")
+	/usr/sbin/groupdel $name || :
+
+	# flush nscd cache
+	[ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i group
+}
+
+userremove() {
+	local uid=$(id -un "$name" 2>/dev/null)
+
+	echo "Removing user $name" | $(bannercmd "userdel-$name")
+	/usr/sbin/userdel $name || :
+
+	# flush nscd cache
+	[ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i passwd
+}
+
+remove() {
+	local mode=$1
+	local name=$2
+	if ! testrm $mode $name; then
+		return
+	fi
+
+	${mode}remove $name
+}
+
+addtogroup() {
+	local user="$1"
+	local group="$2"
+	local uid=$(id -un "$user" 2>/dev/null)
+	local gid=$(getgid "$group" 2>/dev/null)
+
+	if [ -z "$gid" ]; then
+		if [ "$quiet" ]; then
+			return
+		else
+			die "group $group does not exist"
+		fi
+	fi
+
+	if [ -z "$uid" ]; then
+		if [ "$quiet" ]; then
+			return
+		else
+			die "user $user does not exist"
 		fi
 	fi
-elif [ "$MODE" = "user" -a "$1" = "addtogroup" ]; then
-	user="$2"
-	group="$3"
+
 	groups=$(id -n -G $user)
 	if [[ " $groups " != *\ $group\ * ]]; then
-	    echo "Adding user $user to group $group" | `bannercmd "${MODE}mod-$user"`
+		echo "Adding user $user to group $group" | $(bannercmd "${MODE}mod-$user")
 		for grp in $groups $group; do
 			new="$new${new:+,}$grp"
 		done
-	    usermod -G "$new" $user
+		usermod -G "$new" $user
 	fi
+}
+
+if [ -x /usr/bin/banner.sh ]; then
+	BANNERCMD="/usr/bin/banner.sh "
+	BANNERPARA="-s -M user-group.error"
+else
+	BANNERCMD="cat"
+	BANNERPARA=""
+fi
+
+if [ "$1" = user -o "$1" = group ]; then
+	MODE=$1
+	shift
 else
-	echo ERROR
-	exit 2
+	die "Invalid usage"
 fi
+
+# quiet mode cames from $ENV
+quiet=$quiet
+
+case "$1" in
+testrm)
+	testrm $MODE $2
+	exit $?
+	;;
+
+del)
+	remove $MODE $2
+	exit $?
+	;;
+
+addtogroup)
+	if [ "$MODE" = "user" ]; then
+		if [ -z "$2" -o -z "$3" ]; then
+			die "Invalid usage"
+		fi
+		addtogroup $2 $3
+	fi
+	;;
+*)
+	die "Invalid usage" 2
+esac
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/rpm-user_group.sh?r1=1.10&r2=1.11&f=u



More information about the pld-cvs-commit mailing list