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 ## register -- OpenPKG Registry Command-Line Client
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 ##
26 ## configuration
27 ##
29 # program name, version and date
30 progname="register"
31 progvers="1.1.3"
32 progdate="24-Aug-2007"
34 # determine path to OpenPKG instance
35 PREFIX="@l_prefix@"
36 if [ ".${OPENPKG_PREFIX}" != . ]; then
37 PREFIX="${OPENPKG_PREFIX}"
38 fi
40 # determine rpm
41 rpm="$PREFIX/libexec/openpkg/rpm"
42 [ -x "$PREFIX/lib/openpkg/rpm" ] && rpm="$PREFIX/lib/openpkg/rpm"
44 # http post
45 curl="$PREFIX/lib/openpkg/curl"
46 useragent="openpkg-$progname/$progvers"
48 error()
49 {
50 echo "$progname:ERROR: $@" 1>&2
51 exit 1
52 }
54 [ ".$PREFIX" = . ] && error "empty PREFIX not allowed"
56 ##
57 ## read configuration unless already done during option parsing
58 ##
59 sanitycheck()
60 {
61 if [ ".$1" != . -a -r "$1" ]; then
62 cat <"$1" | awk '
63 BEGIN { rc=0 }
64 !/^([A-Z][A-Z0-9_]+[A-Z0-9]="[^"]*")? *(#.*)?$/ { rc=1 }
65 END { exit rc }' && return 0
66 fi
67 return 1
68 }
70 readconf()
71 {
72 [ ".$REGISTRY_CONF" = . ] && return
73 if [ -r "$REGISTRY_CONF" ]; then
74 sanitycheck "$REGISTRY_CONF" && . "$REGISTRY_CONF"
75 fi
76 }
78 readuuid()
79 {
80 [ ".$REGISTRY_UUID" = . ] && return
81 if [ -r "$REGISTRY_UUID" ]; then
82 sanitycheck "$REGISTRY_UUID" && . "$REGISTRY_UUID"
83 fi
84 }
86 readutil()
87 {
88 [ ".$REGISTRY_UTIL" = . ] && return
89 if [ -r "$REGISTRY_UTIL" ]; then
90 sanitycheck "$REGISTRY_UTIL" && . "$REGISTRY_UTIL"
91 fi
92 }
94 ##
95 ## command line option parsing
96 ##
98 # default parameters
99 FQDN=`$PREFIX/lib/openpkg/shtool echo -e '%h%d'`
101 # primary operations
102 op="automatic"
104 # standard options
105 REGISTRY_AUTO="http://openpkg.org/go/autoregister"
106 REGISTRY_MODE="post"
107 REGISTRY_ARGS="http://registry.openpkg.org/register"
108 REGISTRY_USER=""
109 REGISTRY_LINK=""
110 REGISTRY_DESC="openpkg://${FQDN}${PREFIX}"
112 # advanced options
113 # we are called from rpm URL rewrite wrapper,
114 # so defer PLAT and OREL lookup to avoid rpm loop
115 REGISTRY_PLAT=""
116 REGISTRY_OREL=""
117 REGISTRY_UUID="$PREFIX/etc/openpkg/uuid"
118 REGISTRY_CONF="$PREFIX/etc/openpkg/register.conf"
119 REGISTRY_PREP="$PREFIX/etc/openpkg/register.prep"
120 REGISTRY_TRAN="$PREFIX/etc/openpkg/register.tran"
121 REGISTRY_UTIL="$PREFIX/etc/openpkg/register.util"
123 # amount of data being posted
124 REGISTRY_DATA="request,package,provides"
126 # read baseline config early and allow options to override contents
127 readconf
129 # debug options
130 verbose="no"
131 help="no"
133 # iterate over argument line
134 declare -a a
135 declare -i i=0
136 while [ $# -gt 0 ]; do
137 opt=$1
138 case $opt in
139 -*=*) arg=`echo "${opt}" | sed 's/^[-_a-zA-Z0-9]*=//'`
140 opt=`echo "${opt}" | sed 's/=.*//'`
141 ;;
142 *) arg='' ;;
143 esac
144 case $opt in
145 # primary operations
146 -P|--preparation ) op="preparation" ;;
147 -T|--transaction ) op="transaction" ;;
148 -U|--utilization ) op="utilization" ;;
149 -C|--convenience ) op="convenience" ;;
150 -I|--interaction ) op="interaction" ;;
152 # additional features
153 -S|--printstatus ) op="printstatus" ;;
154 -R|--rewriteurls ) op="rewriteurls" ;;
156 # standard options
157 -m|--mode )
158 if [ ".$arg" = . ]; then shift; arg="$1"; fi
159 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
160 REGISTRY_MODE="$arg"
161 ;;
162 -a|--args )
163 if [ ".$arg" = . ]; then shift; arg="$1"; fi
164 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
165 REGISTRY_ARGS="$arg"
166 ;;
167 -u|--user )
168 if [ ".$arg" = . ]; then shift; arg="$1"; fi
169 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
170 REGISTRY_USER="$arg"
171 ;;
172 -l|--link )
173 if [ ".$arg" = . ]; then shift; arg="$1"; fi
174 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
175 REGISTRY_LINK="$arg"
176 ;;
177 -d|--desc )
178 if [ ".$arg" = . ]; then shift; arg="$1"; fi
179 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
180 REGISTRY_DESC="$arg"
181 ;;
183 # advanced options
184 --plat )
185 if [ ".$arg" = . ]; then shift; arg="$1"; fi
186 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
187 REGISTRY_PLAT="$arg"
188 ;;
189 --orel )
190 if [ ".$arg" = . ]; then shift; arg="$1"; fi
191 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
192 REGISTRY_VERS="$arg"
193 ;;
194 --uuid )
195 if [ ".$arg" = . ]; then shift; arg="$1"; fi
196 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
197 REGISTRY_UUID="$arg"
198 ;;
199 --conf )
200 if [ ".$arg" = . ]; then shift; arg="$1"; fi
201 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
202 REGISTRY_CONF="$arg"; readconf
203 ;;
204 --prep )
205 if [ ".$arg" = . ]; then shift; arg="$1"; fi
206 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
207 REGISTRY_PREP="$arg"
208 ;;
209 --tran )
210 if [ ".$arg" = . ]; then shift; arg="$1"; fi
211 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
212 REGISTRY_TRAN="$arg"
213 ;;
214 --util )
215 if [ ".$arg" = . ]; then shift; arg="$1"; fi
216 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
217 REGISTRY_UTIL="$arg"
218 ;;
219 --data )
220 if [ ".$arg" = . ]; then shift; arg="$1"; fi
221 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
222 REGISTRY_DATA="$arg"
223 ;;
225 # debug options
226 -v|--verbose ) verbose="yes" ;;
227 -h|--help ) help="Usage" ;;
228 -* ) help="Invalid option \`$opt'"; break ;;
230 # optional arguments
231 * ) a[$i]="$opt"
232 i=i+1
233 ;;
234 esac
235 shift
236 done
237 set -- "${a[@]}"
238 unset i a
240 # advanced options, lookup PLAT and OREL default for all modes
241 # but those called from rpm URL rewrite mapper
242 if [ $op != "printstatus" -a $op != "rewriteurls" ]; then
243 [ ".$REGISTRY_PLAT" = . ] && REGISTRY_PLAT="`$rpm --db-private --eval '%{l_platform -p}'`"
244 [ ".$REGISTRY_OREL" = . ] && REGISTRY_OREL="`$rpm --db-private --eval '%{l_openpkg_release}'`"
245 fi
247 # display error or usage message
248 if [ ".$help" != .no ]; then
249 if [ ".$help" != ".Usage" ]; then
250 echo "$progname:ERROR: $help" 1>&2
251 fi
252 echo "Usage: $progname [-u|--user=<user>] [-l|--link=<token>] [-d|--desc=<text>]"
253 echo " [-m|--mode=fake|post|wipe] [-a|--args=<args>]"
254 echo " [--plat=<text>] [--orel=<text>] [--uuid=<file>]"
255 echo " [--conf=<file>] [--prep=<file>] [--tran=<file>] [--util=<file>] [--data=<tag>[,<tag>...]]"
256 echo " [-P|--preparation] [-T|--transaction] [-U|--utilization]"
257 echo " [-C|--convenience] [-I|--interaction]"
258 echo " [-v|--verbose] [-h|--help]"
259 echo "Usage: $progname -S|--printstatus"
260 echo "Usage: $progname -R|--rewriteurls [[url]...]]"
261 if [ ".$help" != ".Usage" ]; then
262 exit 1
263 else
264 exit 0
265 fi
266 fi
268 ##
269 ## Primary operation Preparation
270 ##
271 preparation()
272 {
273 if [ ".$REGISTRY_MODE" = .wipe ]; then
274 if [ ".$REGISTRY_PREP" != . ]; then
275 if [ -f $REGISTRY_PREP ]; then
276 cat </dev/null >$REGISTRY_PREP
277 fi
278 fi
279 return
280 fi
282 [ ".$REGISTRY_USER" = . ] && error "missing information REGISTRY_USER"
283 [ ".$REGISTRY_DESC" = . ] && error "missing information REGISTRY_DESC"
284 [ ".$REGISTRY_PLAT" = . ] && error "missing information REGISTRY_PLAT"
285 [ ".$REGISTRY_OREL" = . ] && error "missing information REGISTRY_OREL"
286 [ ".$REGISTRY_UUID" = . ] && error "missing information REGISTRY_UUID"
287 [ ".$REGISTRY_PREP" = . ] && error "missing information REGISTRY_PREP"
289 if [ -r "$REGISTRY_UUID" ]; then
290 sanitycheck "$REGISTRY_UUID" && . "$REGISTRY_UUID"
291 fi
292 [ ".$UUID_REGISTRY" = . ] && error "missing information UUID_REGISTRY"
293 [ ".$UUID_INSTANCE" = . ] && error "missing information UUID_INSTANCE"
294 [ ".$UUID_PLATFORM" = . ] && error "missing information UUID_PLATFORM"
296 # amount of data being posted
297 Q='"'; I=" "; N=$'\n'; D=""
299 echo "$REGISTRY_DATA" | grep request >/dev/null
300 if [ $? = 0 ]; then
301 D="${D}<?xml version=${Q}1.0${Q} encoding=${Q}iso-8859-1${Q} standalone=${Q}no${Q}?>${N}"
302 D="${D}<!DOCTYPE registry${N}"
303 D="${D} PUBLIC ${Q}-//OpenPKG//DTD OpenPKG Registry 0.0.1//EN${Q}${N}"
304 D="${D} ${Q}http://registry.openpkg.org/registry.dtd${Q} []>${N}"
305 D="${D}<registry>${N}"
306 D="${D}${I}<request id=${Q}$UUID_REGISTRY${Q}${N}"
307 D="${D}${I}${I}registry_user=${Q}$REGISTRY_USER${Q}${N}"
308 [ ".$REGISTRY_LINK" != . ] && \
309 D="${D}${I}${I}registry_link=${Q}$REGISTRY_LINK${Q}${N}" # optional
310 D="${D}${I}${I}registry_desc=${Q}$REGISTRY_DESC${Q}${N}"
311 D="${D}${I}${I}registry_plat=${Q}$REGISTRY_PLAT${Q}${N}"
312 D="${D}${I}${I}registry_orel=${Q}$REGISTRY_OREL${Q}${N}"
313 D="${D}${I}${I}uuid_registry=${Q}$UUID_REGISTRY${Q}${N}"
314 D="${D}${I}${I}uuid_instance=${Q}$UUID_INSTANCE${Q}${N}"
315 D="${D}${I}${I}uuid_platform=${Q}$UUID_PLATFORM${Q}${N}"
317 echo "$REGISTRY_DATA" | grep package >/dev/null
318 if [ $? = 0 ]; then
319 D="${D}${I}>${N}"
320 F=""
321 F="${F}${I}${I}<package id=${Q}%{PKGID}${Q} name=${Q}%{NAME}${Q} version=${Q}%{VERSION}${Q} release=${Q}%{RELEASE}${Q}"
322 echo "$REGISTRY_DATA" | grep provides >/dev/null
323 if [ $? = 0 ]; then
324 F="${F}>\n"
325 F="${F}[${I}${I}${I}<provides name=${Q}%{PROVIDENAME}${Q} flag=${Q}%{PROVIDEFLAGS:depflags}${Q} version=${Q}%{PROVIDEVERSION}${Q}/>\n]"
326 F="${F}${I}${I}</package>\n"
327 else
328 F="${F}/>\n"
329 fi
330 D="${D}`$rpm --db-private --qf \"${F}\" -qa | sed '/<package id="(none)"/,/<\/package>/d'`${N}"
331 D="${D} </request>${N}"
332 else
333 D="${D}${I}/>${N}"
334 fi
335 D="${D}</registry>${N}"
336 fi
337 echo "$D" | tee $REGISTRY_PREP
338 }
340 ##
341 ## Primary operation Transaction
342 ##
343 transaction()
344 {
345 if [ ".$REGISTRY_MODE" = .wipe ]; then
346 if [ ".$REGISTRY_TRAN" != . ]; then
347 if [ -f $REGISTRY_TRAN ]; then
348 cat </dev/null >$REGISTRY_TRAN
349 fi
350 fi
351 return
352 fi
354 [ ".$REGISTRY_MODE" = . ] && error "missing information REGISTRY_MODE"
355 [ ".$REGISTRY_ARGS" = . ] && error "missing information REGISTRY_ARGS"
356 [ ".$REGISTRY_TRAN" = . ] && error "missing information REGISTRY_TRAN"
358 if [ ".$REGISTRY_MODE" = .fake ]; then
359 request=`awk '
360 BEGIN { registry=0 }
361 /<registry>/ { registry=1 }
362 /<request / { if (registry) { print $0 } }
363 /<\/registry>/ { registry=0 }' | \
364 sed -e 's;^.*<request id=";;' -e 's;"$;;'`
365 if [ ".$request" = . ]; then error "no request seen on stdin"; fi
366 (
367 echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"no\"?>"
368 echo "<!DOCTYPE registry"
369 echo " PUBLIC \"-//OpenPKG//DTD OpenPKG Registry 0.0.1//EN\""
370 echo " \"http://registry.openpkg.org/registry.dtd\" []>"
371 echo "<registry>"
372 echo " <response id=\"$request\" done=\"yes\">fake</response>"
373 echo "</registry>"
374 ) | tee $REGISTRY_TRAN
375 fi
377 if [ ".$REGISTRY_MODE" = .post ]; then
378 O=""
379 if [ $verbose = no ]; then O="$O --silent"; fi
380 $curl \
381 $O \
382 --user-agent "$useragent" \
383 --connect-timeout 15 \
384 --max-time 120 \
385 --form 'page=dropxml' \
386 --form 'data=<-' \
387 --form 'submit=DROPXML' \
388 $REGISTRY_ARGS \
389 | tee $REGISTRY_TRAN
390 fi
391 }
393 ##
394 ## Primary operation Utilization
395 ##
396 utilization()
397 {
398 if [ ".$REGISTRY_MODE" = .wipe ]; then
399 if [ ".$REGISTRY_UTIL" != . ]; then
400 if [ -f $REGISTRY_UTIL ]; then
401 cat </dev/null >$REGISTRY_UTIL
402 fi
403 fi
404 return
405 fi
407 [ ".$REGISTRY_UTIL" = . ] && error "missing information REGISTRY_UTIL"
409 response=`awk '
410 BEGIN { registry=0 }
411 /<registry>/ { registry=1 }
412 /<response / { if (registry) { print $0 } }
413 /<\/registry>/ { registry=0 }' | \
414 sed -e 's;^.*<response id=";;' -e 's;" done="; ;' -e 's;">; ;' -e 's;</response>.*$;;'`
415 if [ ".$response" = . ]; then error "no response seen on stdin"; fi
417 REGISTRY_DBID=`echo $response | awk '/./ { print $1 }'`
418 REGISTRY_DONE=`echo $response | awk '/./ { print $2 }'`
419 REGISTRY_RESP=`echo $response | sed -e 's;^[^ ][^ ]* [^ ][^ ]* ;;'`
421 [ ".$REGISTRY_DBID" = . ] && error "missing information REGISTRY_DBID"
422 [ ".$REGISTRY_DONE" = . ] && error "missing information REGISTRY_DONE"
423 [ ".$REGISTRY_RESP" = . ] && error "missing information REGISTRY_RESP"
425 (
426 echo "REGISTRY_DBID=\"$REGISTRY_DBID\""
427 echo "REGISTRY_DONE=\"$REGISTRY_DONE\""
428 echo "REGISTRY_RESP=\"$REGISTRY_RESP\""
429 ) | tee $REGISTRY_UTIL
430 }
432 ##
433 ## Automatic registration data retrieval
434 ##
435 autoregdata()
436 {
437 if [ ".$REGISTRY_AUTO" != . ]; then
438 O=""
439 if [ $verbose = no ]; then O="$O --silent"; fi
440 response=`$curl \
441 $O -L \
442 --user-agent "$useragent" \
443 --connect-timeout 8 \
444 --max-time 16 \
445 $REGISTRY_AUTO \
446 | awk '
447 BEGIN { registry=0 }
448 /<registry>/ { registry=1 }
449 /<autoregister / { if (registry) { print $0 } }
450 /<\/registry>/ { registry=0 }' \
451 | sed -e 's;^.*<autoregister *;;' -e 's;>[^>]*</autoregister>.*$;;' \
452 -e 's;\([^=]*\)="\([^"]*\)" *;\1="\2"\\
453 ;g' \
454 | awk -F= '/=/ { print "REGISTRY_"toupper($1)"="$2"" }'`
455 if [ $verbose = yes ]; then echo "autoregdata from $REGISTRY_AUTO"; echo "$response"; fi
456 eval "$response"
457 fi
458 }
460 ##
461 ## Primary operation Convenience
462 ##
463 convenience()
464 {
465 if [ ".$REGISTRY_MODE" = .wipe ]; then
466 utilization
467 transaction
468 preparation
469 return
470 fi
472 preparation | transaction | utilization
474 readutil || error "problem reading util"
475 if [ ".$REGISTRY_DONE" = .yes ]; then
476 echo "#`TZ= date '+%Y-%m-%d %H:%M:%S'` UTC" | tee "$REGISTRY_CONF" || return
477 (
478 echo "REGISTRY_USER=\"$REGISTRY_USER\""
479 echo "REGISTRY_LINK=\"$REGISTRY_LINK\""
480 echo "REGISTRY_DESC=\"$REGISTRY_DESC\""
481 echo "REGISTRY_PLAT=\"$REGISTRY_PLAT\""
482 echo "REGISTRY_OREL=\"$REGISTRY_OREL\""
483 echo "REGISTRY_UUID=\"$REGISTRY_UUID\""
484 echo "REGISTRY_PREP=\"$REGISTRY_PREP\""
485 echo "REGISTRY_MODE=\"$REGISTRY_MODE\""
486 echo "REGISTRY_ARGS=\"$REGISTRY_ARGS\""
487 echo "REGISTRY_TRAN=\"$REGISTRY_TRAN\""
488 echo "REGISTRY_UTIL=\"$REGISTRY_UTIL\""
489 ) | tee -a "$REGISTRY_CONF"
490 fi
491 }
493 ##
494 ## Primary operation Interaction
495 ##
496 interaction()
497 {
498 if [ ".$REGISTRY_MODE" = .wipe ]; then
499 if [ ".$REGISTRY_CONF" != . ]; then
500 if [ -f $REGISTRY_CONF ]; then
501 cat </dev/null >$REGISTRY_CONF
502 fi
503 fi
504 return
505 fi
507 echo "OpenPKG Registry Client ($useragent)"
508 echo ""
509 echo "Interactive step-by-step registration procedure."
510 echo "You can abort at any time by just pressing CTRL-C."
511 echo ""
512 echo "Registration is a three step process:"
513 echo "1. Preparation = create a configuration file and locally prepare a registration request"
514 echo "2. Transaction = run a transaction to submit the request to the registry"
515 echo "3. Utilization = memorize the response to activate local URL rewriting"
516 echo ""
517 echo "A (*) marks an optional field where the empty string \"\" is allowed."
518 echo "Just press RETURN to continue and/or keep a default setting."
520 echo ""
521 echo "==== Step 1/3: Preparation ===="
522 echo "Attempting to write to the configuration file \"$REGISTRY_CONF\""
523 echo "#`TZ= date '+%Y-%m-%d %H:%M:%S'` UTC" | tee -a "$REGISTRY_CONF" 2>/dev/null \
524 || error "Configuration file not writable. Get more permissions and try again"
526 read -p "[REGISTRY_USER=\"$REGISTRY_USER\"] username? "; [ ".$REPLY" != . ] && REGISTRY_USER="$REPLY"
527 read -p "[REGISTRY_DESC=\"$REGISTRY_DESC\"] description (*)? "; [ ".$REPLY" != . ] && REGISTRY_DESC="$REPLY"
528 read -p "[REGISTRY_PLAT=\"$REGISTRY_PLAT\"] platform (*)? "; [ ".$REPLY" != . ] && REGISTRY_DESC="$REPLY"
529 read -p "[REGISTRY_OREL=\"$REGISTRY_OREL\"] release (*)? "; [ ".$REPLY" != . ] && REGISTRY_DESC="$REPLY"
530 read -p "[REGISTRY_UUID=\"$REGISTRY_UUID\"] uuid file to read? "; [ ".$REPLY" != . ] && REGISTRY_UUID="$REPLY"
531 read -p "[REGISTRY_DATA=\"$REGISTRY_DATA\"] data to prepare? "; [ ".$REPLY" != . ] && REGISTRY_DATA="$REPLY"
532 read -p "[REGISTRY_PREP=\"$REGISTRY_PREP\"] prep dump file? "; [ ".$REPLY" != . ] && REGISTRY_PREP="$REPLY"
534 [ ".$REGISTRY_USER" = . ] && error "missing information REGISTRY_USER"
535 [ ".$REGISTRY_DESC" = . ] && error "missing information REGISTRY_DESC"
536 [ ".$REGISTRY_PLAT" = . ] && error "missing information REGISTRY_PLAT"
537 [ ".$REGISTRY_OREL" = . ] && error "missing information REGISTRY_OREL"
538 [ ".$REGISTRY_UUID" = . ] && error "missing information REGISTRY_UUID"
539 [ ".$REGISTRY_DATA" = . ] && error "missing information REGISTRY_DATA"
540 [ ".$REGISTRY_PREP" = . ] && error "missing information REGISTRY_PREP"
542 if [ -r "$REGISTRY_UUID" ]; then
543 sanitycheck "$REGISTRY_UUID" && . "$REGISTRY_UUID"
544 fi
545 [ ".$UUID_REGISTRY" = . ] && error "missing information UUID_REGISTRY"
546 [ ".$UUID_INSTANCE" = . ] && error "missing information UUID_INSTANCE"
547 [ ".$UUID_PLATFORM" = . ] && error "missing information UUID_PLATFORM"
549 echo "Appending to configuration file \"$REGISTRY_CONF\""
550 (
551 echo "REGISTRY_USER=\"$REGISTRY_USER\""
552 echo "REGISTRY_LINK=\"$REGISTRY_LINK\""
553 echo "REGISTRY_DESC=\"$REGISTRY_DESC\""
554 echo "REGISTRY_PLAT=\"$REGISTRY_PLAT\""
555 echo "REGISTRY_OREL=\"$REGISTRY_OREL\""
556 echo "REGISTRY_UUID=\"$REGISTRY_UUID\""
557 echo "REGISTRY_PREP=\"$REGISTRY_PREP\""
558 ) | tee -a "$REGISTRY_CONF"
560 preparation
562 echo ""
563 echo "==== Step 2/3: Transaction ===="
564 read -p "[REGISTRY_MODE=\"$REGISTRY_MODE\"] mode (post or fake)? "; [ ".$REPLY" != . ] && REGISTRY_MODE="$REPLY"
565 read -p "[REGISTRY_ARGS=\"$REGISTRY_ARGS\"] args? "; [ ".$REPLY" != . ] && REGISTRY_ARGS="$REPLY"
566 read -p "[REGISTRY_TRAN=\"$REGISTRY_TRAN\"] tran dump file? "; [ ".$REPLY" != . ] && REGISTRY_TRAN="$REPLY"
568 [ ".$REGISTRY_MODE" = . ] && error "missing information REGISTRY_MODE"
569 [ ".$REGISTRY_ARGS" = . ] && error "missing information REGISTRY_ARGS"
570 [ ".$REGISTRY_TRAN" = . ] && error "missing information REGISTRY_TRAN"
572 echo "Appending to configuration file \"$REGISTRY_CONF\""
573 (
574 echo "REGISTRY_MODE=\"$REGISTRY_MODE\""
575 echo "REGISTRY_ARGS=\"$REGISTRY_ARGS\""
576 echo "REGISTRY_TRAN=\"$REGISTRY_TRAN\""
577 ) | tee -a "$REGISTRY_CONF"
579 transaction <$REGISTRY_PREP
581 echo ""
582 echo "==== Step 3/3: Utilization ===="
583 read -p "[REGISTRY_UTIL=\"$REGISTRY_UTIL\"] util dump file? "; [ ".$REPLY" != . ] && REGISTRY_UTIL="$REPLY"
585 [ ".$REGISTRY_UTIL" = . ] && error "missing information REGISTRY_UTIL"
587 echo "Appending to configuration file \"$REGISTRY_CONF\""
588 (
589 echo "REGISTRY_UTIL=\"$REGISTRY_UTIL\""
590 ) | tee -a "$REGISTRY_CONF"
592 utilization <$REGISTRY_TRAN
593 }
595 ##
596 ## Additional feature printstatus
597 ##
598 printstatus()
599 {
600 rc=0
601 readconf || error "problem reading conf"
602 readuuid || error "problem reading uuid"
603 readutil || error "problem reading util"
604 if [ ".$REGISTRY_DONE" = .yes ]; then
605 cat "$REGISTRY_UTIL"
606 return 0
607 fi
608 return 1
609 }
611 ##
612 ## Additional feature rewriteurls
613 ##
614 rewriteurls()
615 {
616 readconf && readuuid && readutil || return $?
617 if [ ".$REGISTRY_DONE" = .yes ]; then
618 # URL rewriting
619 while [ ".$1" != . ]; do
620 printf '%s\n' "$1" | \
621 sed -e "s;^\([^:/]*\)://\([^:/]*\.openpkg\.com\)/;\1://$UUID_REGISTRY:$UUID_INSTANCE.$UUID_PLATFORM@\2/;" \
622 -e "s;^\([^:/]*\)://\([^:/]*\.openpkg\.org\)/;\1://$UUID_REGISTRY:$UUID_INSTANCE.$UUID_PLATFORM@\2/;" \
623 -e "s;^\([^:/]*\)://\([^:/]*\.openpkg\.net\)/;\1://$UUID_REGISTRY:$UUID_INSTANCE.$UUID_PLATFORM@\2/;"
624 shift
625 done
626 return 0
627 else
628 # stealth mode
629 return 1
630 fi
631 }
633 ##
634 ## check whether important configuration data is missing
635 ##
636 checkmissing()
637 {
638 missing=""
639 [ ".$REGISTRY_USER" = . ] && missing="$missing REGISTRY_USER"
640 [ ".$REGISTRY_DESC" = . ] && missing="$missing REGISTRY_DESC"
641 [ ".$REGISTRY_PLAT" = . ] && missing="$missing REGISTRY_PLAT"
642 [ ".$REGISTRY_OREL" = . ] && missing="$missing REGISTRY_OREL"
643 [ ".$REGISTRY_UUID" = . ] && missing="$missing REGISTRY_UUID"
644 [ ".$REGISTRY_PREP" = . ] && missing="$missing REGISTRY_PREP"
645 [ ".$REGISTRY_MODE" = . ] && missing="$missing REGISTRY_MODE"
646 [ ".$REGISTRY_ARGS" = . ] && missing="$missing REGISTRY_ARGS"
647 [ ".$REGISTRY_TRAN" = . ] && missing="$missing REGISTRY_TRAN"
648 [ ".$REGISTRY_UTIL" = . ] && missing="$missing REGISTRY_UTIL"
649 }
651 ##
652 ## automatically pick interaction or convenience
653 ##
654 automatic()
655 {
656 if [ ".$REGISTRY_MODE" = .wipe ]; then
657 convenience
658 interaction
659 return
660 fi
662 checkmissing
663 if [ ".$missing" != . ]; then
664 autoregdata
665 fi
667 checkmissing
668 if [ ".$missing" = . ]; then
669 convenience
670 else
671 tty -s || return
672 echo "missing $missing"
673 interaction
674 fi
675 }
677 ##
678 ## primary operation switch
679 ##
680 eval $op "\"$@\""
681 exit $?
683 ##
684 ## MANUAL PAGE
685 ##