| |
1 #!/bin/sh |
| |
2 ## |
| |
3 ## usrgrp.sh -- user/group name/id determination |
| |
4 ## Copyright (c) 2000-2007 OpenPKG Foundation e.V. <http://openpkg.net/> |
| |
5 ## Copyright (c) 2000-2007 Ralf S. Engelschall <http://engelschall.com/> |
| |
6 ## |
| |
7 ## Permission to use, copy, modify, and distribute this software for |
| |
8 ## any purpose with or without fee is hereby granted, provided that |
| |
9 ## the above copyright notice and this permission notice appear in all |
| |
10 ## copies. |
| |
11 ## |
| |
12 ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED |
| |
13 ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| |
14 ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
| |
15 ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR |
| |
16 ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| |
17 ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| |
18 ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
| |
19 ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| |
20 ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| |
21 ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
| |
22 ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| |
23 ## SUCH DAMAGE. |
| |
24 ## |
| |
25 |
| |
26 # command line parameters (defaults) |
| |
27 help=0 |
| |
28 usr=''; grp='' |
| |
29 susr=''; sgrp='' |
| |
30 musr=''; mgrp='' |
| |
31 rusr=''; rgrp='' |
| |
32 nusr=''; ngrp='' |
| |
33 suid=''; sgid='' |
| |
34 muid=''; mgid='' |
| |
35 ruid=''; rgid='' |
| |
36 nuid=''; ngid='' |
| |
37 |
| |
38 # parse command line options |
| |
39 for opt |
| |
40 do |
| |
41 case $opt in |
| |
42 -*=*) arg=`echo "$opt" | sed 's/^[-_a-zA-Z0-9]*=//'` ;; |
| |
43 *) arg='' ;; |
| |
44 esac |
| |
45 case $opt in |
| |
46 -h | --help ) help=1 ;; |
| |
47 --usr=* | --user=* ) usr=$arg ;; |
| |
48 --grp=* | --group=* ) grp=$arg ;; |
| |
49 --susr=* ) susr=$arg ;; |
| |
50 --sgrp=* ) sgrp=$arg ;; |
| |
51 --musr=* ) musr=$arg ;; |
| |
52 --mgrp=* ) mgrp=$arg ;; |
| |
53 --rusr=* ) rusr=$arg ;; |
| |
54 --rgrp=* ) rgrp=$arg ;; |
| |
55 --nusr=* ) nusr=$arg ;; |
| |
56 --ngrp=* ) ngrp=$arg ;; |
| |
57 --suid=* ) suid=$arg ;; |
| |
58 --sgid=* ) sgid=$arg ;; |
| |
59 --muid=* ) muid=$arg ;; |
| |
60 --mgid=* ) mgid=$arg ;; |
| |
61 --ruid=* ) ruid=$arg ;; |
| |
62 --rgid=* ) rgid=$arg ;; |
| |
63 --nuid=* ) nuid=$arg ;; |
| |
64 --ngid=* ) ngid=$arg ;; |
| |
65 * ) help=1 ;; |
| |
66 esac |
| |
67 done |
| |
68 if [ ".$help" = .1 ]; then |
| |
69 echo "Usage: sh $0 [-h|--help]" 2>&1 |
| |
70 echo " [--[smrn]?usr=<usr>] [--[smrn]?grp=<usr>]" 2>&1 |
| |
71 echo " [--[smrn]uid=<uid>] [--[smrn]gid=<gid>]" 2>&1 |
| |
72 exit 1 |
| |
73 fi |
| |
74 |
| |
75 # determine cusr/cgrp |
| |
76 cusr=`(id -un) 2>/dev/null ||\ |
| |
77 (id | sed -e 's;^[^(]*(\([^)]*\)).*;\1;') 2>/dev/null ||\ |
| |
78 (whoami) 2>/dev/null ||\ |
| |
79 (who am i | cut "-d " -f1) 2>/dev/null ||\ |
| |
80 echo $LOGNAME` |
| |
81 cgid=`(id -g $cusr) 2>/dev/null ||\ |
| |
82 ((getent passwd "${cusr}"; grep "^${cusr}:" /etc/passwd; ypmatch "${cusr}" passwd; nismatch "${cusr}" passwd; nidump passwd . | grep "^${cusr}:") 2>/dev/null |\ |
| |
83 sed -n -e '1p' | awk -F: '{ print $4; }')` |
| |
84 cgrp=`(id -gn $cusr) 2>/dev/null ||\ |
| |
85 ((getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null | grep "^[^:]*:[^:]*:${cgid}:" |\ |
| |
86 sed -n -e '1p' | awk -F: '{ print $1; }')` |
| |
87 [ ".$cgrp" = . ] && cgrp="$cusr" |
| |
88 |
| |
89 # determine OpenPKG susr/sgrp |
| |
90 if [ ".$susr" = . ]; then |
| |
91 if [ ".$usr" = . ]; then |
| |
92 susr="$cusr" |
| |
93 else |
| |
94 susr="root" |
| |
95 fi |
| |
96 fi |
| |
97 if [ ".$sgrp" = . ]; then |
| |
98 sgrp=`(id -gn $susr) 2>/dev/null` |
| |
99 if [ ".$sgrp" = . ]; then |
| |
100 tgid=`(getent passwd "${susr}"; grep "^${susr}:" /etc/passwd; ypmatch "${susr}" passwd; nismatch "${susr}" passwd; nidump passwd . | grep "^${susr}:") 2>/dev/null |\ |
| |
101 sed -n -e '1p' | awk -F: '{ print $4; }'` |
| |
102 if [ ".$tgid" != . ]; then |
| |
103 sgid="${tgid}" |
| |
104 sgrp=`(getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null |\ |
| |
105 grep "^[^:]*:[^:]*:${sgid}:" | sed -n -e '1p' | awk -F: '{ print $1; }'` |
| |
106 fi |
| |
107 if [ ".$sgrp" = . ]; then |
| |
108 sgrp="wheel" |
| |
109 fi |
| |
110 fi |
| |
111 fi |
| |
112 |
| |
113 # determine OpenPKG musr/mgrp |
| |
114 if [ ".$musr" = . ]; then |
| |
115 musr="$usr" |
| |
116 fi |
| |
117 if [ ".$musr" = . ]; then |
| |
118 musr="$cusr" |
| |
119 fi |
| |
120 if [ ".$mgrp" = . ]; then |
| |
121 mgrp=`(id -gn $musr) 2>/dev/null` |
| |
122 if [ ".$mgrp" = . ]; then |
| |
123 tgid=`(getent passwd "${musr}"; grep "^${musr}:" /etc/passwd; ypmatch "${musr}" passwd; nismatch "${musr}" passwd; nidump passwd . | grep "^${musr}:") 2>/dev/null |\ |
| |
124 sed -n -e '1p' | awk -F: '{ print $4; }'` |
| |
125 if [ ".$tgid" != . ]; then |
| |
126 mgid="${tgid}" |
| |
127 mgrp=`(getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null |\ |
| |
128 grep "^[^:]*:[^:]*:${mgid}:" | sed -n -e '1p' | awk -F: '{ print $1; }'` |
| |
129 fi |
| |
130 if [ ".$mgrp" = . ]; then |
| |
131 mgrp="$grp" |
| |
132 fi |
| |
133 if [ ".$mgrp" = . ]; then |
| |
134 mgrp="$cgrp" |
| |
135 fi |
| |
136 fi |
| |
137 fi |
| |
138 |
| |
139 # determine OpenPKG rusr/rgrp |
| |
140 if [ ".$rusr" = . ]; then |
| |
141 rusr="${usr}-r" |
| |
142 fi |
| |
143 if [ ".$rusr" = ".-r" ]; then |
| |
144 rusr="$cusr" |
| |
145 fi |
| |
146 if [ ".$rgrp" = . ]; then |
| |
147 rgrp=`(id -gn $rusr) 2>/dev/null` |
| |
148 if [ ".$rgrp" = . ]; then |
| |
149 tgid=`(getent passwd "${rusr}"; grep "^${rusr}:" /etc/passwd; ypmatch "${rusr}" passwd; nismatch "${rusr}" passwd; nidump passwd . | grep "^${rusr}:") 2>/dev/null |\ |
| |
150 sed -n -e '1p' | awk -F: '{ print $4; }'` |
| |
151 if [ ".$tgid" != . ]; then |
| |
152 rgid="${tgid}" |
| |
153 rgrp=`(getent group; cat /etc/group; ypcat group; nismatch group; nidump group .) 2>/dev/null |\ |
| |
154 grep "^[^:]*:[^:]*:${rgid}:" | sed -n -e '1p' | awk -F: '{ print $1; }'` |
| |
155 fi |
| |
156 if [ ".$rgrp" = . ]; then |
| |
157 rgrp="${grp}-r" |
| |
158 fi |
| |
159 if [ ".$rgrp" = ".-r" ]; then |
| |
160 rgrp="$cgrp" |
| |
161 fi |
| |
162 fi |
| |
163 fi |
| |
164 |
| |
165 # determine OpenPKG nusr/ngrp |
| |
166 if [ ".$nusr" = . ]; then |
| |
167 nusr="${usr}-n" |
| |
168 fi |
| |
169 if [ ".$nusr" = ".-n" ]; then |
| |
170 nusr="$cusr" |
| |
171 fi |
| |
172 if [ ".$ngrp" = . ]; then |
| |
173 ngrp=`(id -gn $nusr) 2>/dev/null` |
| |
174 if [ ".$ngrp" = . ]; then |
| |
175 tgid=`(getent passwd "${nusr}"; grep "^${nusr}:" /etc/passwd; ypmatch "${nusr}" passwd; nismatch "${nusr}" passwd; nidump passwd . | grep "^${nusr}:") 2>/dev/null |\ |
| |
176 sed -n -e '1p' | awk -F: '{ print $4; }'` |
| |
177 if [ ".$tgid" != . ]; then |
| |
178 ngid="${tgid}" |
| |
179 ngrp=`(getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null |\ |
| |
180 grep "^[^:]*:[^:]*:${ngid}:" | sed -n -e '1p' | awk -F: '{ print $1; }'` |
| |
181 fi |
| |
182 if [ ".$ngrp" = . ]; then |
| |
183 ngrp="${grp}-n" |
| |
184 fi |
| |
185 if [ ".$ngrp" = ".-n" ]; then |
| |
186 ngrp="$cgrp" |
| |
187 fi |
| |
188 fi |
| |
189 fi |
| |
190 |
| |
191 # determine OpenPKG suid/sgid |
| |
192 # (currently not necessary) |
| |
193 |
| |
194 # determine OpenPKG muid/mgid |
| |
195 # (currently not necessary) |
| |
196 |
| |
197 # determine OpenPKG ruid/rgid |
| |
198 # (currently not necessary) |
| |
199 |
| |
200 # determine OpenPKG nuid/ngid |
| |
201 # (currently not necessary) |
| |
202 |
| |
203 # print results |
| |
204 output="" |
| |
205 for var in \ |
| |
206 susr sgrp \ |
| |
207 musr mgrp \ |
| |
208 rusr rgrp \ |
| |
209 nusr ngrp \ |
| |
210 suid sgid \ |
| |
211 muid mgid \ |
| |
212 ruid rgid \ |
| |
213 nuid ngid; do |
| |
214 eval "val=\"\$$var\"" |
| |
215 if [ ".$output" = . ]; then |
| |
216 output="$var=\"$val\"" |
| |
217 else |
| |
218 output="$output; $var=\"$val\"" |
| |
219 fi |
| |
220 done |
| |
221 echo $output |
| |
222 |