]> git.pld-linux.org Git - packages/rpm.git/commitdiff
- use less global variables (better flow control)
authorElan Ruusamäe <glen@pld-linux.org>
Thu, 26 Mar 2009 11:41:23 +0000 (11:41 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
- add quiet mode support
- die if uid or gid in target do not exist

Changed files:
    rpm-user_group.sh -> 1.11

rpm-user_group.sh

index 0319dc46dd1419539e98b9d7b2beee09e19e7aca..63806575de44a8c449d514e068dfa929426a72ed 100644 (file)
@@ -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 @@ bannercmd()
        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
This page took 0.132361 seconds and 4 git commands to generate.