]> git.pld-linux.org Git - packages/rpm.git/blob - rpm-user_group.sh
- requires lua 5.3
[packages/rpm.git] / rpm-user_group.sh
1 #!/bin/sh
2
3 [ -f /etc/sysconfig/rpm ] && . /etc/sysconfig/rpm
4 [ -z "$RPM_SCRIPTVERBOSITY" ] && RPM_SCRIPTVERBOSITY=5
5
6 # aborts program abnormally
7 die() {
8         local rc=${2:-1}
9         if [ "$1" ]; then
10                 echo >&2 "ERROR: $1"
11         else
12                 echo >&2 "ERROR"
13         fi
14         exit $rc
15 }
16
17 bannercmd() {
18         if [ "$BANNERCMD" = cat ]; then
19                 echo cat
20         else
21                 if [ "$RPM_SCRIPTVERBOSITY" -lt 2 ]; then
22                         echo "$BANNERCMD -M $1"
23                 else
24                         echo "$BANNERCMD -s -M $1"
25                 fi
26         fi
27 }
28
29 testrm() {
30         local mode=$1
31         local name=$2
32
33         [ "$RPM_USERDEL" != yes ] || [ ! -x /bin/rpm ] && return 1
34         [ -z "$name" ] && return 2
35         rpm -q --whatprovides "$mode($name)" >/dev/null 2>&1
36         # no package Provides it (strange)
37         [ $? -ne 0 ] && return 0
38         # only current package Provides it
39         [ $(rpm -q --whatprovides "$mode($name)" | wc -l) -lt 2 ] && return 0
40         return 1
41 }
42
43 groupremove() {
44         local name="$1"
45         local gid=$(getgid "$name" 2>/dev/null)
46
47         echo "Removing group $name" | $(bannercmd "groupdel-$name")
48         /usr/sbin/groupdel $name || :
49
50         # flush nscd cache
51         [ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i group
52 }
53
54 userremove() {
55         local uid=$(id -un "$name" 2>/dev/null)
56
57         echo "Removing user $name" | $(bannercmd "userdel-$name")
58         /usr/sbin/userdel $name || :
59
60         # flush nscd cache
61         [ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i passwd
62 }
63
64 remove() {
65         local mode=$1
66         local name=$2
67         if ! testrm $mode $name; then
68                 return
69         fi
70
71         ${mode}remove $name
72 }
73
74 addtogroup() {
75         local user="$1"
76         local group="$2"
77         local uid=$(id -un "$user" 2>/dev/null)
78         local gid=$(getgid "$group" 2>/dev/null)
79
80         if [ -z "$gid" ]; then
81                 if [ "$quiet" ]; then
82                         return
83                 else
84                         die "group $group does not exist"
85                 fi
86         fi
87
88         if [ -z "$uid" ]; then
89                 if [ "$quiet" ]; then
90                         return
91                 else
92                         die "user $user does not exist"
93                 fi
94         fi
95
96         groups=$(id -n -G $user)
97         if [[ " $groups " != *\ $group\ * ]]; then
98                 echo "Adding user $user to group $group" | $(bannercmd "${MODE}mod-$user")
99                 for grp in $groups $group; do
100                         new="$new${new:+,}$grp"
101                 done
102                 usermod -G "$new" $user
103         fi
104 }
105
106 if [ -x /usr/bin/banner.sh ]; then
107         BANNERCMD="/usr/bin/banner.sh "
108         BANNERPARA="-s -M user-group.error"
109 else
110         BANNERCMD="cat"
111         BANNERPARA=""
112 fi
113
114 if [ "$1" = user -o "$1" = group ]; then
115         MODE=$1
116         shift
117 else
118         die "Invalid usage"
119 fi
120
121 # quiet mode cames from $ENV
122 quiet=$quiet
123
124 case "$1" in
125 testrm)
126         testrm $MODE $2
127         exit $?
128         ;;
129
130 del)
131         remove $MODE $2
132         exit $?
133         ;;
134
135 addtogroup)
136         if [ "$MODE" = "user" ]; then
137                 if [ -z "$2" -o -z "$3" ]; then
138                         die "Invalid usage"
139                 fi
140                 addtogroup $2 $3
141         fi
142         ;;
143 *)
144         die "Invalid usage" 2
145 esac
This page took 0.043622 seconds and 3 git commands to generate.