openpkg/aux.usrgrp.sh

changeset 28
beaae89a4a45
equal deleted inserted replaced
-1:000000000000 0:06db48e33fd1
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

mercurial