diff -r 71503088f51b -r f880f219c566 openpkg/license.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/openpkg/license.sh Tue Jul 31 12:23:42 2012 +0200
@@ -0,0 +1,281 @@
+#!@l_prefix@/lib/openpkg/bash
+##
+## uuid -- OpenPKG UUID Update Utility
+## Copyright (c) 2000-2012 OpenPKG GmbH
+##
+## This software is property of the OpenPKG GmbH, DE MUC HRB 160208.
+## All rights reserved. Licenses which grant limited permission to use,
+## copy, modify and distribute this software are available from the
+## OpenPKG GmbH.
+##
+## THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
+## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+## SUCH DAMAGE.
+##
+
+# configuration
+prefix="@l_prefix@"
+musr="@l_musr@"
+mgrp="@l_mgrp@"
+
+# minimum command line parsing
+opt_v=no
+while [ 1 ]; do
+ case "$1" in
+ -v | --verbose ) opt_v=yes; shift ;;
+ * ) break ;;
+ esac
+done
+
+# determine temporary directory
+tmpdir="${TMPDIR-/tmp}"
+
+# helper function for checking the signature
+valid_signature () {
+ script="%{lua: print(rpm.signature(\"$1\", nil,"
+ script="$script \"$prefix/etc/openpkg/openpkg.com.pgp\","
+ script="$script \"7D121A8FC05DC18A4329E9EF67042EC961B7AE34\")) }"
+ result=`$prefix/bin/openpkg rpm --eval "$script" 2>/dev/null || true`
+ if [ ".$result" == .true ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+# display usage help
+do_help () {
+ echo "openpkg license help .......................... show usage help (this text)"
+ echo "openpkg license install ||- ... install a new license"
+ echo "openpkg license update ||- .... update an installed license"
+ echo "openpkg license uninstall ................ uninstall an installed license"
+ echo "openpkg license activate ................. activate an installed license"
+ echo "openpkg license view ..................... view an installed license"
+ echo "openpkg license list .......................... list all installed licenses"
+ echo "openpkg license active ........................ list the currently activated license"
+ echo "openpkg license sanity ........................ sanity check installed license"
+}
+
+# install license
+do_install () {
+ if [ $# -ne 2 ]; then
+ echo "openpkg:license:USAGE: openpkg license install |-" 1>&2
+ exit 1
+ fi
+ id="$1"
+ src="$2"
+ case "$src" in
+ http:* | https:* | ftp:* )
+ tmp="$tmpdir/openpkg.license.txt"
+ ( rm -f $tmp >/dev/null 2>&1 || true
+ set -o noclobber
+ $prefix/lib/openpkg/curl -s -q -f -L $src >$tmp
+ ) || exit $?
+ src="$tmp"
+ ;;
+ "-" )
+ src="$tmpdir/openpkg.license.txt"
+ ( rm -f $src >/dev/null 2>&1 || true
+ set -o noclobber
+ cat >$src
+ ) || exit $?
+ ;;
+ esac
+ if [ -f $prefix/etc/openpkg/license.d/$id ]; then
+ echo "openpkg:license:ERROR: license with id \"$id\" already exists -- uninstall first" 1>&2
+ exit 1
+ fi
+ if ! valid_signature $src; then
+ echo "openpkg:license:ERROR: invalid signature on license file" 1>&2
+ exit 1
+ fi
+ if [ ! -w $prefix/etc/openpkg/license.d ]; then
+ echo "openpkg:license:ERROR: unable to store signature -- permission problems?" 1>&2
+ exit 1
+ fi
+ cat $src >$prefix/etc/openpkg/license.d/$id || exit $?
+ chown $musr:$mgrp $prefix/etc/openpkg/license.d/$id >/dev/null 2>&1 || true
+}
+
+# update license
+do_update () {
+ if [ $# -ne 2 ]; then
+ echo "openpkg:license:USAGE: openpkg license update |-" 1>&2
+ exit 1
+ fi
+ id="$1"
+ src="$2"
+ case "$src" in
+ http:* | https:* | ftp:* )
+ tmp="$tmpdir/openpkg.license.txt"
+ ( rm -f $tmp >/dev/null 2>&1 || true
+ set -o noclobber
+ $prefix/lib/openpkg/curl -s -q -f -L $src >$tmp
+ ) || exit $?
+ src="$tmp"
+ ;;
+ "-" )
+ src="$tmpdir/openpkg.license.txt"
+ ( rm -f $src >/dev/null 2>&1 || true
+ set -o noclobber
+ cat >$src
+ ) || exit $?
+ ;;
+ esac
+ if [ ! -f $prefix/etc/openpkg/license.d/$id ]; then
+ echo "openpkg:license:ERROR: license with id \"$id\" does not exist -- install first to update" 1>&2
+ exit 1
+ fi
+ if ! valid_signature $src; then
+ echo "openpkg:license:ERROR: invalid signature on license file" 1>&2
+ exit 1
+ fi
+ if [ ! -w $prefix/etc/openpkg/license.d ]; then
+ echo "openpkg:license:ERROR: unable to store signature -- permission problems?" 1>&2
+ exit 1
+ fi
+ cat $src >$prefix/etc/openpkg/license.d/$id || exit $?
+ chown $musr:$mgrp $prefix/etc/openpkg/license.d/$id >/dev/null 2>&1 || true
+}
+
+# uninstall license
+do_uninstall () {
+ if [ $# -ne 1 ]; then
+ echo "openpkg:license:USAGE: openpkg license uninstall " 1>&2
+ exit 1
+ fi
+ id="$1"
+ if [ ! -f $prefix/etc/openpkg/license.d/$id ]; then
+ echo "openpkg:license:ERROR: no license under id \"$id\" installed" 1>&2
+ exit 1
+ fi
+ id_active="`cat $prefix/etc/openpkg/license`"
+ if [ ".$id" = ".$id_active" ]; then
+ echo "openpkg:license:ERROR: license under id \"$id\" still activated -- activate a different one first" 1>&2
+ exit 1
+ fi
+ rm -f $prefix/etc/openpkg/license.d/$id
+ if [ $? -ne 0 ]; then
+ echo "openpkg:license:ERROR: failed to uninstall license" 1>&2
+ exit 1
+ fi
+}
+
+# activate license
+do_activate () {
+ if [ $# -ne 1 ]; then
+ echo "openpkg:license:USAGE: openpkg license activate " 1>&2
+ exit 1
+ fi
+ id="$1"
+ if [ ! -f $prefix/etc/openpkg/license.d/$id ]; then
+ echo "openpkg:license:ERROR: no license under id \"$id\" installed" 1>&2
+ exit 1
+ fi
+ id_active="`cat $prefix/etc/openpkg/license`"
+ if [ ".$id" = ".$id_active" ]; then
+ echo "openpkg:license:ERROR: license id \"$id\" is already activated" 1>&2
+ exit 1
+ fi
+ echo "$id" >$prefix/etc/openpkg/license
+ if [ $? -ne 0 ]; then
+ echo "openpkg:license:ERROR: failed to activate license under id \"$id\"" 1>&2
+ exit 1
+ fi
+}
+
+# view license
+do_view () {
+ if [ $# -ne 1 ]; then
+ echo "openpkg:license:USAGE: openpkg license view " 1>&2
+ exit 1
+ fi
+ id="$1"
+ if [ ! -f $prefix/etc/openpkg/license.d/$id ]; then
+ echo "openpkg:license:ERROR: no license under id \"$id\" installed" 1>&2
+ exit 1
+ fi
+ viewer=""
+ for name in less more cat; do
+ for dir in `echo $PATH | sed -e 's;:; ;g'`; do
+ if [ -x $dir/$name ]; then
+ viewer="$dir/$name"
+ break
+ fi
+ done
+ if [ ".$viewer" != . ]; then
+ break
+ fi
+ done
+ eval $viewer $prefix/etc/openpkg/license.d/$id
+}
+
+# list license
+do_list () {
+ if [ $# -ne 0 ]; then
+ echo "openpkg:license:USAGE: openpkg license list" 1>&2
+ exit 1
+ fi
+ id_active="`cat $prefix/etc/openpkg/license`"
+ for file in `cd / && find $prefix/etc/openpkg/license.d -type f -print | sort`; do
+ id=`echo $file | sed -e "s;^$prefix/etc/openpkg/license.d/;;"`
+ status="-"
+ if [ ".$id" = ".$id_active" ]; then
+ status="+"
+ fi
+ echo . | awk '{ printf("%s %s\n", status, id); }' id="$id" status="$status"
+ done
+}
+
+# list currently activate license
+do_active () {
+ if [ $# -ne 0 ]; then
+ echo "openpkg:license:USAGE: openpkg license active" 1>&2
+ exit 1
+ fi
+ cat $prefix/etc/openpkg/license
+}
+
+# sanity-check license
+do_sanity () {
+ if [ $# -ne 0 ]; then
+ echo "openpkg:license:USAGE: openpkg license sanity" 1>&2
+ exit 1
+ fi
+ id="`cat $prefix/etc/openpkg/license`"
+ if [ ! -f $prefix/etc/openpkg/license.d/$id ]; then
+ echo "openpkg:license:ERROR: active license with id \"$id\" does not exist" 1>&2
+ exit 1
+ fi
+ if ! valid_signature $prefix/etc/openpkg/license.d/$id; then
+ echo "openpkg:license:ERROR: invalid signature on active license" 1>&2
+ exit 1
+ fi
+}
+
+# Command Line Dispatching
+cmd="$1"
+shift
+case "$cmd" in
+ help ) do_help ${1+"$@"} ;;
+ install ) do_install ${1+"$@"} ;;
+ update ) do_update ${1+"$@"} ;;
+ uninstall ) do_uninstall ${1+"$@"} ;;
+ activate ) do_activate ${1+"$@"} ;;
+ view ) do_view ${1+"$@"} ;;
+ list ) do_list ${1+"$@"} ;;
+ active ) do_active ${1+"$@"} ;;
+ sanity ) do_sanity ${1+"$@"} ;;
+ "" ) echo "openpkg:license:ERROR: no command given (use \"help\" for usage)" 1>&2; exit 1 ;;
+ * ) echo "openpkg:license:ERROR: invalid command \"$cmd\" (use \"help\" for usage)" 1>&2; exit 1 ;;
+esac
+