openpkg/license.sh

changeset 428
f880f219c566
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/openpkg/license.sh	Tue Jul 31 12:23:42 2012 +0200
     1.3 @@ -0,0 +1,281 @@
     1.4 +#!@l_prefix@/lib/openpkg/bash
     1.5 +##
     1.6 +##  uuid -- OpenPKG UUID Update Utility
     1.7 +##  Copyright (c) 2000-2012 OpenPKG GmbH <http://openpkg.com/>
     1.8 +##
     1.9 +##  This software is property of the OpenPKG GmbH, DE MUC HRB 160208.
    1.10 +##  All rights reserved. Licenses which grant limited permission to use,
    1.11 +##  copy, modify and distribute this software are available from the
    1.12 +##  OpenPKG GmbH.
    1.13 +##
    1.14 +##  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
    1.15 +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    1.16 +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    1.17 +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    1.18 +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    1.19 +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    1.20 +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    1.21 +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    1.22 +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    1.23 +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    1.24 +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    1.25 +##  SUCH DAMAGE.
    1.26 +##
    1.27 +
    1.28 +#   configuration
    1.29 +prefix="@l_prefix@"
    1.30 +musr="@l_musr@"
    1.31 +mgrp="@l_mgrp@"
    1.32 +
    1.33 +#   minimum command line parsing
    1.34 +opt_v=no
    1.35 +while [ 1 ]; do
    1.36 +    case "$1" in
    1.37 +        -v | --verbose ) opt_v=yes; shift ;;
    1.38 +        * ) break ;;
    1.39 +    esac
    1.40 +done
    1.41 +
    1.42 +#   determine temporary directory
    1.43 +tmpdir="${TMPDIR-/tmp}"
    1.44 +
    1.45 +#   helper function for checking the signature
    1.46 +valid_signature () {
    1.47 +    script="%{lua: print(rpm.signature(\"$1\", nil,"
    1.48 +    script="$script \"$prefix/etc/openpkg/openpkg.com.pgp\","
    1.49 +    script="$script \"7D121A8FC05DC18A4329E9EF67042EC961B7AE34\")) }"
    1.50 +    result=`$prefix/bin/openpkg rpm --eval "$script" 2>/dev/null || true`
    1.51 +    if [ ".$result" == .true ]; then
    1.52 +        return 0
    1.53 +    else
    1.54 +        return 1
    1.55 +    fi
    1.56 +}
    1.57 +
    1.58 +#   display usage help
    1.59 +do_help () {
    1.60 +    echo "openpkg license help .......................... show usage help (this text)"
    1.61 +    echo "openpkg license install <id> <file>|<url>|- ... install a new license"
    1.62 +    echo "openpkg license update <id> <file>|<url>|- .... update an installed license"
    1.63 +    echo "openpkg license uninstall <id> ................ uninstall an installed license"
    1.64 +    echo "openpkg license activate <id> ................. activate an installed license"
    1.65 +    echo "openpkg license view <id> ..................... view an installed license"
    1.66 +    echo "openpkg license list .......................... list all installed licenses"
    1.67 +    echo "openpkg license active ........................ list the currently activated license"
    1.68 +    echo "openpkg license sanity ........................ sanity check installed license"
    1.69 +}
    1.70 +
    1.71 +#   install license
    1.72 +do_install () {
    1.73 +    if [ $# -ne 2 ]; then
    1.74 +        echo "openpkg:license:USAGE: openpkg license install <id> <file>|-" 1>&2
    1.75 +        exit 1
    1.76 +    fi
    1.77 +    id="$1"
    1.78 +    src="$2"
    1.79 +    case "$src" in
    1.80 +        http:* | https:* | ftp:* )
    1.81 +            tmp="$tmpdir/openpkg.license.txt"
    1.82 +            ( rm -f $tmp >/dev/null 2>&1 || true
    1.83 +              set -o noclobber
    1.84 +              $prefix/lib/openpkg/curl -s -q -f -L $src >$tmp
    1.85 +            ) || exit $?
    1.86 +            src="$tmp"
    1.87 +            ;;
    1.88 +        "-" )
    1.89 +            src="$tmpdir/openpkg.license.txt"
    1.90 +            ( rm -f $src >/dev/null 2>&1 || true
    1.91 +              set -o noclobber
    1.92 +              cat >$src
    1.93 +            ) || exit $?
    1.94 +            ;;
    1.95 +    esac
    1.96 +    if [ -f $prefix/etc/openpkg/license.d/$id ]; then
    1.97 +        echo "openpkg:license:ERROR: license with id \"$id\" already exists -- uninstall first" 1>&2
    1.98 +        exit 1
    1.99 +    fi
   1.100 +    if ! valid_signature $src; then
   1.101 +        echo "openpkg:license:ERROR: invalid signature on license file" 1>&2
   1.102 +        exit 1
   1.103 +    fi
   1.104 +    if [ ! -w $prefix/etc/openpkg/license.d ]; then
   1.105 +        echo "openpkg:license:ERROR: unable to store signature -- permission problems?" 1>&2
   1.106 +        exit 1
   1.107 +    fi
   1.108 +    cat $src >$prefix/etc/openpkg/license.d/$id || exit $?
   1.109 +    chown $musr:$mgrp $prefix/etc/openpkg/license.d/$id >/dev/null 2>&1 || true
   1.110 +}
   1.111 +
   1.112 +#   update license
   1.113 +do_update () {
   1.114 +    if [ $# -ne 2 ]; then
   1.115 +        echo "openpkg:license:USAGE: openpkg license update <id> <file>|-" 1>&2
   1.116 +        exit 1
   1.117 +    fi
   1.118 +    id="$1"
   1.119 +    src="$2"
   1.120 +    case "$src" in
   1.121 +        http:* | https:* | ftp:* )
   1.122 +            tmp="$tmpdir/openpkg.license.txt"
   1.123 +            ( rm -f $tmp >/dev/null 2>&1 || true
   1.124 +              set -o noclobber
   1.125 +              $prefix/lib/openpkg/curl -s -q -f -L $src >$tmp
   1.126 +            ) || exit $?
   1.127 +            src="$tmp"
   1.128 +            ;;
   1.129 +        "-" )
   1.130 +            src="$tmpdir/openpkg.license.txt"
   1.131 +            ( rm -f $src >/dev/null 2>&1 || true
   1.132 +              set -o noclobber
   1.133 +              cat >$src
   1.134 +            ) || exit $?
   1.135 +            ;;
   1.136 +    esac
   1.137 +    if [ ! -f $prefix/etc/openpkg/license.d/$id ]; then
   1.138 +        echo "openpkg:license:ERROR: license with id \"$id\" does not exist -- install first to update" 1>&2
   1.139 +        exit 1
   1.140 +    fi
   1.141 +    if ! valid_signature $src; then
   1.142 +        echo "openpkg:license:ERROR: invalid signature on license file" 1>&2
   1.143 +        exit 1
   1.144 +    fi
   1.145 +    if [ ! -w $prefix/etc/openpkg/license.d ]; then
   1.146 +        echo "openpkg:license:ERROR: unable to store signature -- permission problems?" 1>&2
   1.147 +        exit 1
   1.148 +    fi
   1.149 +    cat $src >$prefix/etc/openpkg/license.d/$id || exit $?
   1.150 +    chown $musr:$mgrp $prefix/etc/openpkg/license.d/$id >/dev/null 2>&1 || true
   1.151 +}
   1.152 +
   1.153 +#   uninstall license
   1.154 +do_uninstall () {
   1.155 +    if [ $# -ne 1 ]; then
   1.156 +        echo "openpkg:license:USAGE: openpkg license uninstall <id>" 1>&2
   1.157 +        exit 1
   1.158 +    fi
   1.159 +    id="$1"
   1.160 +    if [ ! -f $prefix/etc/openpkg/license.d/$id ]; then
   1.161 +        echo "openpkg:license:ERROR: no license under id \"$id\" installed" 1>&2
   1.162 +        exit 1
   1.163 +    fi
   1.164 +    id_active="`cat $prefix/etc/openpkg/license`"
   1.165 +    if [ ".$id" = ".$id_active" ]; then
   1.166 +        echo "openpkg:license:ERROR: license under id \"$id\" still activated -- activate a different one first" 1>&2
   1.167 +        exit 1
   1.168 +    fi
   1.169 +    rm -f $prefix/etc/openpkg/license.d/$id
   1.170 +    if [ $? -ne 0 ]; then
   1.171 +        echo "openpkg:license:ERROR: failed to uninstall license" 1>&2
   1.172 +        exit 1
   1.173 +    fi
   1.174 +}
   1.175 +
   1.176 +#   activate license
   1.177 +do_activate () {
   1.178 +    if [ $# -ne 1 ]; then
   1.179 +        echo "openpkg:license:USAGE: openpkg license activate <id>" 1>&2
   1.180 +        exit 1
   1.181 +    fi
   1.182 +    id="$1"
   1.183 +    if [ ! -f $prefix/etc/openpkg/license.d/$id ]; then
   1.184 +        echo "openpkg:license:ERROR: no license under id \"$id\" installed" 1>&2
   1.185 +        exit 1
   1.186 +    fi
   1.187 +    id_active="`cat $prefix/etc/openpkg/license`"
   1.188 +    if [ ".$id" = ".$id_active" ]; then
   1.189 +        echo "openpkg:license:ERROR: license id \"$id\" is already activated" 1>&2
   1.190 +        exit 1
   1.191 +    fi
   1.192 +    echo "$id" >$prefix/etc/openpkg/license
   1.193 +    if [ $? -ne 0 ]; then
   1.194 +        echo "openpkg:license:ERROR: failed to activate license under id \"$id\"" 1>&2
   1.195 +        exit 1
   1.196 +    fi
   1.197 +}
   1.198 +
   1.199 +#   view license
   1.200 +do_view () {
   1.201 +    if [ $# -ne 1 ]; then
   1.202 +        echo "openpkg:license:USAGE: openpkg license view <id>" 1>&2
   1.203 +        exit 1
   1.204 +    fi
   1.205 +    id="$1"
   1.206 +    if [ ! -f $prefix/etc/openpkg/license.d/$id ]; then
   1.207 +        echo "openpkg:license:ERROR: no license under id \"$id\" installed" 1>&2
   1.208 +        exit 1
   1.209 +    fi
   1.210 +    viewer=""
   1.211 +    for name in less more cat; do
   1.212 +        for dir in `echo $PATH | sed -e 's;:; ;g'`; do
   1.213 +            if [ -x $dir/$name ]; then
   1.214 +                viewer="$dir/$name"
   1.215 +                break
   1.216 +            fi
   1.217 +        done
   1.218 +        if [ ".$viewer" != . ]; then
   1.219 +            break
   1.220 +        fi
   1.221 +    done
   1.222 +    eval $viewer $prefix/etc/openpkg/license.d/$id
   1.223 +}
   1.224 +
   1.225 +#   list license
   1.226 +do_list () {
   1.227 +    if [ $# -ne 0 ]; then
   1.228 +        echo "openpkg:license:USAGE: openpkg license list" 1>&2
   1.229 +        exit 1
   1.230 +    fi
   1.231 +    id_active="`cat $prefix/etc/openpkg/license`"
   1.232 +    for file in `cd / && find $prefix/etc/openpkg/license.d -type f -print | sort`; do
   1.233 +        id=`echo $file | sed -e "s;^$prefix/etc/openpkg/license.d/;;"`
   1.234 +        status="-"
   1.235 +        if [ ".$id" = ".$id_active" ]; then
   1.236 +            status="+"
   1.237 +        fi
   1.238 +        echo . | awk '{ printf("%s %s\n", status, id); }' id="$id" status="$status"
   1.239 +    done
   1.240 +}
   1.241 +
   1.242 +#   list currently activate license
   1.243 +do_active () {
   1.244 +    if [ $# -ne 0 ]; then
   1.245 +        echo "openpkg:license:USAGE: openpkg license active" 1>&2
   1.246 +        exit 1
   1.247 +    fi
   1.248 +    cat $prefix/etc/openpkg/license
   1.249 +}
   1.250 +
   1.251 +#   sanity-check license
   1.252 +do_sanity () {
   1.253 +    if [ $# -ne 0 ]; then
   1.254 +        echo "openpkg:license:USAGE: openpkg license sanity" 1>&2
   1.255 +        exit 1
   1.256 +    fi
   1.257 +    id="`cat $prefix/etc/openpkg/license`"
   1.258 +    if [ ! -f $prefix/etc/openpkg/license.d/$id ]; then
   1.259 +        echo "openpkg:license:ERROR: active license with id \"$id\" does not exist" 1>&2
   1.260 +        exit 1
   1.261 +    fi
   1.262 +    if ! valid_signature $prefix/etc/openpkg/license.d/$id; then
   1.263 +        echo "openpkg:license:ERROR: invalid signature on active license" 1>&2
   1.264 +        exit 1
   1.265 +    fi
   1.266 +}
   1.267 +
   1.268 +#   Command Line Dispatching
   1.269 +cmd="$1"
   1.270 +shift
   1.271 +case "$cmd" in
   1.272 +    help      ) do_help      ${1+"$@"} ;;
   1.273 +    install   ) do_install   ${1+"$@"} ;;
   1.274 +    update    ) do_update    ${1+"$@"} ;;
   1.275 +    uninstall ) do_uninstall ${1+"$@"} ;;
   1.276 +    activate  ) do_activate  ${1+"$@"} ;;
   1.277 +    view      ) do_view      ${1+"$@"} ;;
   1.278 +    list      ) do_list      ${1+"$@"} ;;
   1.279 +    active    ) do_active    ${1+"$@"} ;;
   1.280 +    sanity    ) do_sanity    ${1+"$@"} ;;
   1.281 +    ""        ) echo "openpkg:license:ERROR: no command given (use \"help\" for usage)" 1>&2; exit 1 ;;
   1.282 +    *         ) echo "openpkg:license:ERROR: invalid command \"$cmd\" (use \"help\" for usage)" 1>&2; exit 1 ;;
   1.283 +esac
   1.284 +

mercurial