]>
Commit | Line | Data |
---|---|---|
7c689a45 | 1 | #!/bin/sh |
2 | ||
3 | [ -f /etc/sysconfig/rpm ] && . /etc/sysconfig/rpm | |
4 | [ -z "$RPM_SCRIPTVERBOSITY" ] && RPM_SCRIPTVERBOSITY=5 | |
5 | ||
b0daadbc ER |
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 | } | |
7c689a45 | 16 | |
b0daadbc | 17 | bannercmd() { |
e88c759f | 18 | if [ "$BANNERCMD" = cat ]; then |
1257c400 | 19 | echo cat |
20 | else | |
21 | if [ "$RPM_SCRIPTVERBOSITY" -lt 2 ]; then | |
1257c400 | 22 | echo "$BANNERCMD -M $1" |
eeb844ab | 23 | else |
24 | echo "$BANNERCMD -s -M $1" | |
1257c400 | 25 | fi |
26 | fi | |
27 | } | |
28 | ||
b0daadbc ER |
29 | testrm() { |
30 | local mode=$1 | |
31 | local name=$2 | |
32 | ||
d0fbac1a | 33 | [ "$RPM_USERDEL" != yes ] || [ ! -x /bin/rpm ] && return 1 |
b0daadbc ER |
34 | [ -z "$name" ] && return 2 |
35 | rpm -q --whatprovides "$mode($name)" >/dev/null 2>&1 | |
7c689a45 | 36 | # no package Provides it (strange) |
37 | [ $? -ne 0 ] && return 0 | |
38 | # only current package Provides it | |
b0daadbc | 39 | [ $(rpm -q --whatprovides "$mode($name)" | wc -l) -lt 2 ] && return 0 |
7c689a45 | 40 | return 1 |
41 | } | |
42 | ||
b0daadbc ER |
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" | |
89b9c531 | 93 | fi |
7c689a45 | 94 | fi |
b0daadbc | 95 | |
45abb9e9 ER |
96 | groups=$(id -n -G $user) |
97 | if [[ " $groups " != *\ $group\ * ]]; then | |
b0daadbc | 98 | echo "Adding user $user to group $group" | $(bannercmd "${MODE}mod-$user") |
45abb9e9 ER |
99 | for grp in $groups $group; do |
100 | new="$new${new:+,}$grp" | |
101 | done | |
b0daadbc | 102 | usermod -G "$new" $user |
13f70a2c | 103 | fi |
b0daadbc ER |
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 | |
7c689a45 | 117 | else |
b0daadbc | 118 | die "Invalid usage" |
7c689a45 | 119 | fi |
b0daadbc ER |
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 |