df8bdeb362277e8d95a74d6c097341fe97409948johnz#! /usr/bin/sh
df8bdeb362277e8d95a74d6c097341fe97409948johnz#
df8bdeb362277e8d95a74d6c097341fe97409948johnz# CDDL HEADER START
df8bdeb362277e8d95a74d6c097341fe97409948johnz#
df8bdeb362277e8d95a74d6c097341fe97409948johnz# The contents of this file are subject to the terms of the
df8bdeb362277e8d95a74d6c097341fe97409948johnz# Common Development and Distribution License (the "License").
df8bdeb362277e8d95a74d6c097341fe97409948johnz# You may not use this file except in compliance with the License.
df8bdeb362277e8d95a74d6c097341fe97409948johnz#
df8bdeb362277e8d95a74d6c097341fe97409948johnz# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
df8bdeb362277e8d95a74d6c097341fe97409948johnz# or http://www.opensolaris.org/os/licensing.
df8bdeb362277e8d95a74d6c097341fe97409948johnz# See the License for the specific language governing permissions
df8bdeb362277e8d95a74d6c097341fe97409948johnz# and limitations under the License.
df8bdeb362277e8d95a74d6c097341fe97409948johnz#
df8bdeb362277e8d95a74d6c097341fe97409948johnz# When distributing Covered Code, include this CDDL HEADER in each
df8bdeb362277e8d95a74d6c097341fe97409948johnz# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
df8bdeb362277e8d95a74d6c097341fe97409948johnz# If applicable, add the following below this CDDL HEADER, with the
df8bdeb362277e8d95a74d6c097341fe97409948johnz# fields enclosed by brackets "[]" replaced with your own identifying
df8bdeb362277e8d95a74d6c097341fe97409948johnz# information: Portions Copyright [yyyy] [name of copyright owner]
df8bdeb362277e8d95a74d6c097341fe97409948johnz#
df8bdeb362277e8d95a74d6c097341fe97409948johnz# CDDL HEADER END
df8bdeb362277e8d95a74d6c097341fe97409948johnz#
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnz#
df8bdeb362277e8d95a74d6c097341fe97409948johnz# ident "%Z%%M% %I% %E% SMI"
df8bdeb362277e8d95a74d6c097341fe97409948johnz#
df8bdeb362277e8d95a74d6c097341fe97409948johnz# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
df8bdeb362277e8d95a74d6c097341fe97409948johnz# Use is subject to license terms.
df8bdeb362277e8d95a74d6c097341fe97409948johnz#
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzprog=$0
df8bdeb362277e8d95a74d6c097341fe97409948johnzpd=`dirname $prog`
df8bdeb362277e8d95a74d6c097341fe97409948johnzMACH=`uname -p`
df8bdeb362277e8d95a74d6c097341fe97409948johnzelfcmp=$pd/elfcmp
df8bdeb362277e8d95a74d6c097341fe97409948johnzelfsign=$pd/$MACH/elfsign
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzaopt=
df8bdeb362277e8d95a74d6c097341fe97409948johnzcopt=
df8bdeb362277e8d95a74d6c097341fe97409948johnzeopt=
df8bdeb362277e8d95a74d6c097341fe97409948johnzFopt=
df8bdeb362277e8d95a74d6c097341fe97409948johnzkopt=
df8bdeb362277e8d95a74d6c097341fe97409948johnzvopt=
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzUsage() {
df8bdeb362277e8d95a74d6c097341fe97409948johnz echo "Usage: $prog {sign|verify} [-v] [-a]" \
df8bdeb362277e8d95a74d6c097341fe97409948johnz "[-c <cert>] [-k <key>] [-F <format>] -e <elf>" 1>&2
df8bdeb362277e8d95a74d6c097341fe97409948johnz exit 1
df8bdeb362277e8d95a74d6c097341fe97409948johnz}
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzif [ $# -lt 1 ]; then
df8bdeb362277e8d95a74d6c097341fe97409948johnz Usage
df8bdeb362277e8d95a74d6c097341fe97409948johnz fi
df8bdeb362277e8d95a74d6c097341fe97409948johnzcmd=$1
df8bdeb362277e8d95a74d6c097341fe97409948johnzshift
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzwhile getopts "ac:e:F:k:v" opt ; do
df8bdeb362277e8d95a74d6c097341fe97409948johnz case $opt in
df8bdeb362277e8d95a74d6c097341fe97409948johnz a) aopt=-a;;
df8bdeb362277e8d95a74d6c097341fe97409948johnz c) copt="$OPTARG";;
df8bdeb362277e8d95a74d6c097341fe97409948johnz e) eopt="$OPTARG";;
df8bdeb362277e8d95a74d6c097341fe97409948johnz F) Fopt="$OPTARG";;
df8bdeb362277e8d95a74d6c097341fe97409948johnz k) kopt="$OPTARG";;
df8bdeb362277e8d95a74d6c097341fe97409948johnz v) vopt=-v;;
df8bdeb362277e8d95a74d6c097341fe97409948johnz \?) Usage;;
df8bdeb362277e8d95a74d6c097341fe97409948johnz esac
df8bdeb362277e8d95a74d6c097341fe97409948johnzdone
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzcase X$eopt in X) Usage;; esac
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnztmpe=$eopt.e$$
df8bdeb362277e8d95a74d6c097341fe97409948johnztmpo=$eopt.o$$
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzcpq() {
df8bdeb362277e8d95a74d6c097341fe97409948johnz cp -p $1 $2 > /dev/null 2>&1
df8bdeb362277e8d95a74d6c097341fe97409948johnz}
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzrestore() {
df8bdeb362277e8d95a74d6c097341fe97409948johnz cpq $tmpe $eopt
df8bdeb362277e8d95a74d6c097341fe97409948johnz}
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzcleanup() {
df8bdeb362277e8d95a74d6c097341fe97409948johnz restore
df8bdeb362277e8d95a74d6c097341fe97409948johnz rm -f $tmpe $tmpo
df8bdeb362277e8d95a74d6c097341fe97409948johnz}
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnztrap cleanup 1 2 3 13 15
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzcpq $eopt $tmpe
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzeval $elfsign $cmd $aopt $vopt ${copt:+-c} ${copt} ${kopt:+-k} ${kopt} \
df8bdeb362277e8d95a74d6c097341fe97409948johnz ${Fopt:+-F} ${Fopt} -e ${eopt}
df8bdeb362277e8d95a74d6c097341fe97409948johnzrv=$?
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzcase $cmd:$rv in
df8bdeb362277e8d95a74d6c097341fe97409948johnzsign:0)
df8bdeb362277e8d95a74d6c097341fe97409948johnz if $elfcmp -v -S $tmpe $eopt > $tmpo 2>&1
df8bdeb362277e8d95a74d6c097341fe97409948johnz then
df8bdeb362277e8d95a74d6c097341fe97409948johnz : # all's fine
df8bdeb362277e8d95a74d6c097341fe97409948johnz else
df8bdeb362277e8d95a74d6c097341fe97409948johnz rv=$?
df8bdeb362277e8d95a74d6c097341fe97409948johnz echo "Warning: elfcmp failed: $eopt" 1>&2
df8bdeb362277e8d95a74d6c097341fe97409948johnz cat ${tmpo} 1>&2
df8bdeb362277e8d95a74d6c097341fe97409948johnz echo "current directory: `pwd`" 1>&2
df8bdeb362277e8d95a74d6c097341fe97409948johnz restore
df8bdeb362277e8d95a74d6c097341fe97409948johnz cpq ${eopt} ${eopt}.elfcmp.failed.$$
df8bdeb362277e8d95a74d6c097341fe97409948johnz fi
df8bdeb362277e8d95a74d6c097341fe97409948johnz ;;
df8bdeb362277e8d95a74d6c097341fe97409948johnzsign:*)
df8bdeb362277e8d95a74d6c097341fe97409948johnz restore
df8bdeb362277e8d95a74d6c097341fe97409948johnz cpq ${eopt} ${eopt}.elfsign.failed.$$
df8bdeb362277e8d95a74d6c097341fe97409948johnz ;;
df8bdeb362277e8d95a74d6c097341fe97409948johnzesac
df8bdeb362277e8d95a74d6c097341fe97409948johnz
df8bdeb362277e8d95a74d6c097341fe97409948johnzrm -f $tmpe $tmpo
df8bdeb362277e8d95a74d6c097341fe97409948johnzexit $rv