Thu, 04 Oct 2012 20:30:05 +0200
Correct out of date build configuration, porting to Solaris 11 network
link infrastructure and new libpcap logic. This additionally allows for
device drivers in subdirectories of /dev. Correct packaged nmap
personalities and signatures to work out of the box. Finally, hack
arpd logic to properly close sockets and quit on TERM by repeating
signaling in the run command script. Sadly, all this fails to correct
the run time behaviour of honeyd which fails to bind to the IP layer.
1 #!@l_prefix@/lib/openpkg/bash
2 ##
3 ## uuid -- OpenPKG UUID Update Utility
4 ## Copyright (c) 2000-2012 OpenPKG GmbH <http://openpkg.com/>
5 ##
6 ## This software is property of the OpenPKG GmbH, DE MUC HRB 160208.
7 ## All rights reserved. Licenses which grant limited permission to use,
8 ## copy, modify and distribute this software are available from the
9 ## OpenPKG GmbH.
10 ##
11 ## THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
12 ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
13 ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
14 ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
15 ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
16 ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
17 ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
18 ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
19 ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
20 ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
21 ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22 ## SUCH DAMAGE.
23 ##
25 # configuration
26 prefix="@l_prefix@"
27 musr="@l_musr@"
28 mgrp="@l_mgrp@"
29 prog_rpm="$prefix/libexec/openpkg/rpm"
30 prog_shtool="$prefix/lib/openpkg/shtool"
31 prog_miniperl="$prefix/lib/openpkg/miniperl"
32 prog_uuid="$prefix/lib/openpkg/uuid"
33 file_uuid="$prefix/etc/openpkg/uuid"
35 # minimum command line parsing
36 opt_v=no
37 opt_m=no
38 while [ 1 ]; do
39 case "$1" in
40 -v | --verbose ) opt_v=yes; shift ;;
41 -m | --multicast ) opt_m=yes; shift ;;
42 * ) break ;;
43 esac
44 done
46 # special "Nil UUID"
47 UUID_NIL="00000000-0000-0000-0000-000000000000"
49 # Query Dynamic Information
50 do_query () {
51 # query RPM information
52 query=":"
53 for var in \
54 l_openpkg_release \
55 l_prefix \
56 l_susr l_suid l_sgrp l_sgid \
57 l_musr l_muid l_mgrp l_mgid \
58 l_rusr l_ruid l_rgrp l_rgid \
59 l_nusr l_nuid l_ngrp l_ngid; do
60 query="$query; `echo $var | sed -e 's;^l_;Q_;'`=\"%{$var}\""
61 done
62 eval `$prog_rpm --eval "$query" 2>/dev/null`
64 # query OS information
65 Q_platform=`$prog_shtool platform --type=binary 2>/dev/null |\
66 sed -e 's;^\([^-][^-]*-[^.-][^.-]*\)\..*$;\1;'`
67 if [ ".$Q_platform" = . ]; then
68 Q_platform="unknown"
69 fi
70 Q_discriminator=`$prog_uuid -v1 | $prog_uuid -d -- - | awk '/node:.*global unicast/ { printf("mac:%s", $2); }'`
71 if [ ".$Q_discriminator" = . ]; then
72 Q_discriminator=`$prog_miniperl -e 'if (-f "/etc/openpkg") { printf("inode:%s", (stat("/etc/openpkg"))[1]); }' 2>/dev/null`
73 if [ ".$Q_discriminator" = . ]; then
74 Q_discriminator=`$prog_shtool echo -e 'fqdn:%h%d' 2>/dev/null`
75 fi
76 fi
77 }
79 # Load Configuration
80 do_load () {
81 # start with reasonable defaults
82 UUID_REGISTRY="$UUID_NIL"
83 UUID_INSTANCE="$UUID_NIL"
84 UUID_PLATFORM="$UUID_NIL"
86 # load configuration (and override defaults)
87 if [ -r $file_uuid ]; then
88 if [ ".$opt_v" = .yes ]; then
89 echo "uuid: loading UUID configuration file ($file_uuid)"
90 fi
91 . $file_uuid
92 fi
94 # remember whether something was changed
95 changed=no
96 }
98 # Save Configuration
99 do_save () {
100 if [ ".$changed" = .yes ]; then
101 # save configuration
102 if [ ".$opt_v" = .yes ]; then
103 echo "uuid: saving UUID configuration file ($file_uuid)"
104 fi
105 if [ -f $file_uuid ] && [ ! -w $file_uuid ]; then
106 echo "uuid:ERROR: cannot write to $file_uuid" 1>&2
107 exit 1
108 fi
109 ( echo "UUID_REGISTRY=\"$UUID_REGISTRY\""
110 echo "UUID_INSTANCE=\"$UUID_INSTANCE\""
111 echo "UUID_PLATFORM=\"$UUID_PLATFORM\""
112 ) >$file_uuid.new || exit $?
113 n=`egrep 'UUID_(REGISTRY|INSTANCE|PLATFORM)="[0-9a-f-]*"' \
114 $file_uuid.new | wc -l | awk '{ print $1; }'`
115 if [ ".$n" != .3 ]; then
116 echo "uuid:ERROR: failed to update $file_uuid" 1>&2
117 rm -f $file_uuid.new
118 exit 1
119 fi
120 cp $file_uuid.new $file_uuid || exit $?
121 rm -f $file_uuid.new || true
122 chown $musr:$mgrp $file_uuid >/dev/null 2>&1 || true
123 chmod 644 $file_uuid >/dev/null 2>&1 || true
125 # remember that no more changes exist
126 changed=no
127 fi
128 }
130 # Reset UUIDs
131 do_reset () {
132 # reset all UUIDs to the "Nil UUID"
133 if [ ".$UUID_REGISTRY" != ".$UUID_NIL" ]; then
134 UUID_REGISTRY="$UUID_NIL"
135 changed=yes
136 fi
137 if [ ".$UUID_INSTANCE" != ".$UUID_NIL" ]; then
138 UUID_INSTANCE="$UUID_NIL"
139 changed=yes
140 fi
141 if [ ".$UUID_PLATFORM" != ".$UUID_NIL" ]; then
142 UUID_PLATFORM="$UUID_NIL"
143 changed=yes
144 fi
145 }
147 # Update UUIDs
148 do_update () {
149 # update registry UUID
150 if [ ".$UUID_REGISTRY" = ".$UUID_NIL" -o ".$UUID_REGISTRY" = . ]; then
151 opt=""
152 if [ ".$opt_m" = .yes ]; then
153 opt="-m"
154 fi
155 if [ ".$opt_v" = .yes ]; then
156 echo "uuid: calculating OpenPKG Registry UUID (UUID_REGISTRY):"
157 echo "uuid: << $prog_uuid -v1 $opt"
158 fi
159 uuid=`$prog_uuid -v1 $opt`
160 if [ ".$UUID_REGISTRY" != ".$uuid" -a ".$uuid" != . ]; then
161 UUID_REGISTRY="$uuid"
162 if [ ".$opt_v" = .yes ]; then
163 echo "uuid: >> $UUID_REGISTRY (NOT REPEATABLE)"
164 fi
165 changed=yes
166 fi
167 fi
169 # update instance UUID
170 name="${Q_openpkg_release}"
171 name="$name:${Q_prefix}"
172 name="$name:${Q_susr}:${Q_suid}:${Q_sgrp}:${Q_sgid}"
173 name="$name:${Q_musr}:${Q_muid}:${Q_mgrp}:${Q_mgid}"
174 name="$name:${Q_rusr}:${Q_ruid}:${Q_rgrp}:${Q_rgid}"
175 name="$name:${Q_nusr}:${Q_nuid}:${Q_ngrp}:${Q_ngid}"
176 if [ ".$opt_v" = .yes ]; then
177 echo "uuid: querying OpenPKG Instance OID"
178 echo "uuid: << $prog_rpm --eval '%{l_openpkg_oid_instance}'"
179 fi
180 OID_NS_INSTANCE="`$prog_rpm --eval '%{l_openpkg_oid_instance}'`"
181 if [ ".$opt_v" = .yes ]; then
182 echo "uuid: >> $OID_NS_INSTANCE"
183 fi
184 if [ ".$opt_v" = .yes ]; then
185 echo "uuid: calculating OpenPKG Instance Namespace UUID"
186 echo "uuid: << $prog_uuid -v3 ns:OID \"$OID_NS_INSTANCE\""
187 fi
188 UUID_NS_INSTANCE=`$prog_uuid -v3 ns:OID "$OID_NS_INSTANCE"`
189 if [ ".$opt_v" = .yes ]; then
190 echo "uuid: >> $UUID_NS_INSTANCE"
191 fi
192 if [ ".$opt_v" = .yes ]; then
193 echo "uuid: calculating OpenPKG Instance UUID (UUID_INSTANCE):"
194 echo "uuid: << $prog_uuid -v3 \"$UUID_NS_INSTANCE\" \"$name\""
195 fi
196 uuid=`$prog_uuid -v3 "$UUID_NS_INSTANCE" "$name"`
197 if [ ".$opt_v" = .yes ]; then
198 echo "uuid: >> $uuid"
199 fi
200 if [ ".$UUID_INSTANCE" != ".$uuid" -a ".$uuid" != . ]; then
201 UUID_INSTANCE="$uuid"
202 changed=yes
203 fi
205 # update platform UUID
206 name="${Q_platform}"
207 name="$name:${Q_discriminator}"
208 if [ ".$opt_v" = .yes ]; then
209 echo "uuid: querying OpenPKG Platform OID"
210 echo "uuid: << $prog_rpm --eval '%{l_openpkg_oid_platform}'"
211 fi
212 OID_NS_PLATFORM="`$prog_rpm --eval '%{l_openpkg_oid_platform}'`"
213 if [ ".$opt_v" = .yes ]; then
214 echo "uuid: >> $OID_NS_PLATFORM"
215 fi
216 if [ ".$opt_v" = .yes ]; then
217 echo "uuid: calculating OpenPKG Platform Namespace UUID"
218 echo "uuid: << $prog_uuid -v3 ns:OID \"$OID_NS_PLATFORM\""
219 fi
220 UUID_NS_PLATFORM=`$prog_uuid -v3 ns:OID "$OID_NS_PLATFORM"`
221 if [ ".$opt_v" = .yes ]; then
222 echo "uuid: >> $UUID_NS_PLATFORM"
223 fi
224 if [ ".$opt_v" = .yes ]; then
225 echo "uuid: calculating OpenPKG Platform UUID (UUID_PLATFORM):"
226 echo "uuid: << $prog_uuid -v3 \"$UUID_NS_PLATFORM\" \"$name\""
227 fi
228 uuid=`$prog_uuid -v3 "$UUID_NS_PLATFORM" "$name"`
229 if [ ".$opt_v" = .yes ]; then
230 echo "uuid: >> $uuid"
231 fi
232 if [ ".$UUID_PLATFORM" != ".$uuid" -a ".$uuid" != . ]; then
233 UUID_PLATFORM="$uuid"
234 changed=yes
235 fi
236 }
238 # Info about input and resulting UUIDs
239 do_info () {
240 echo "OpenPKG Summary of Identification Information"
241 echo "============================================="
242 echo ""
243 echo "OpenPKG Registry"
244 time=""; clock=""; node=""
245 eval `$prog_uuid -d "$UUID_REGISTRY" 2>/dev/null |\
246 sed -e 's/^/X/' \
247 -e 's/X.*time: *\(.*\)$/time="\1";/' \
248 -e 's/X.*clock: *\(.*\)$/clock="\1";/' \
249 -e 's/X.*node: *\(.*\)$/node="\1";/' \
250 -e 's/^X.*//'`
251 echo " System Time: ${time:-unknown}"
252 echo " System Clock Sequence: ${clock:-unknown}"
253 echo " System Node Address: ${node:-unknown}"
254 echo " UUID_REGISTRY: $UUID_REGISTRY"
255 echo ""
256 echo "OpenPKG Instance"
257 echo " Release: ${Q_openpkg_release}"
258 echo " Prefix: ${Q_prefix}"
259 echo " Super Account: ${Q_susr}(${Q_suid}):${Q_sgrp}(${Q_sgid})"
260 echo " Management Account: ${Q_musr}(${Q_muid}):${Q_mgrp}(${Q_mgid})"
261 echo " Restricted Account: ${Q_rusr}(${Q_ruid}):${Q_rgrp}(${Q_rgid})"
262 echo " Nonprivileged Account: ${Q_nusr}(${Q_nuid}):${Q_ngrp}(${Q_ngid})"
263 echo " UUID_INSTANCE: $UUID_INSTANCE"
264 echo ""
265 echo "OpenPKG Platform"
266 echo " Platform Id: $Q_platform"
267 echo " Discriminator: $Q_discriminator"
268 echo " UUID_PLATFORM: $UUID_PLATFORM"
269 echo ""
270 echo "(run \"$0 --verbose update\" to reproduce the UUID generation)"
271 }
273 # Command Line Dispatching
274 cmd="$1"
275 shift
276 case "$cmd" in
277 reset )
278 do_load; do_reset; do_save
279 ;;
280 update )
281 do_query; do_load; do_update; do_save
282 ;;
283 info )
284 do_query; do_load; do_info
285 ;;
286 * )
287 echo "uuid:ERROR: invalid command \"$cmd\"" 1>&2
288 exit 1
289 ;;
290 esac