1*df8bdeb3Sjohnz#! /usr/bin/sh 2*df8bdeb3Sjohnz# 3*df8bdeb3Sjohnz# CDDL HEADER START 4*df8bdeb3Sjohnz# 5*df8bdeb3Sjohnz# The contents of this file are subject to the terms of the 6*df8bdeb3Sjohnz# Common Development and Distribution License (the "License"). 7*df8bdeb3Sjohnz# You may not use this file except in compliance with the License. 8*df8bdeb3Sjohnz# 9*df8bdeb3Sjohnz# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*df8bdeb3Sjohnz# or http://www.opensolaris.org/os/licensing. 11*df8bdeb3Sjohnz# See the License for the specific language governing permissions 12*df8bdeb3Sjohnz# and limitations under the License. 13*df8bdeb3Sjohnz# 14*df8bdeb3Sjohnz# When distributing Covered Code, include this CDDL HEADER in each 15*df8bdeb3Sjohnz# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*df8bdeb3Sjohnz# If applicable, add the following below this CDDL HEADER, with the 17*df8bdeb3Sjohnz# fields enclosed by brackets "[]" replaced with your own identifying 18*df8bdeb3Sjohnz# information: Portions Copyright [yyyy] [name of copyright owner] 19*df8bdeb3Sjohnz# 20*df8bdeb3Sjohnz# CDDL HEADER END 21*df8bdeb3Sjohnz# 22*df8bdeb3Sjohnz 23*df8bdeb3Sjohnz# 24*df8bdeb3Sjohnz# ident "%Z%%M% %I% %E% SMI" 25*df8bdeb3Sjohnz# 26*df8bdeb3Sjohnz# Copyright 2007 Sun Microsystems, Inc. All rights reserved. 27*df8bdeb3Sjohnz# Use is subject to license terms. 28*df8bdeb3Sjohnz# 29*df8bdeb3Sjohnz 30*df8bdeb3Sjohnzprog=$0 31*df8bdeb3Sjohnzpd=`dirname $prog` 32*df8bdeb3SjohnzMACH=`uname -p` 33*df8bdeb3Sjohnzelfcmp=$pd/elfcmp 34*df8bdeb3Sjohnzelfsign=$pd/$MACH/elfsign 35*df8bdeb3Sjohnz 36*df8bdeb3Sjohnzaopt= 37*df8bdeb3Sjohnzcopt= 38*df8bdeb3Sjohnzeopt= 39*df8bdeb3SjohnzFopt= 40*df8bdeb3Sjohnzkopt= 41*df8bdeb3Sjohnzvopt= 42*df8bdeb3Sjohnz 43*df8bdeb3SjohnzUsage() { 44*df8bdeb3Sjohnz echo "Usage: $prog {sign|verify} [-v] [-a]" \ 45*df8bdeb3Sjohnz "[-c <cert>] [-k <key>] [-F <format>] -e <elf>" 1>&2 46*df8bdeb3Sjohnz exit 1 47*df8bdeb3Sjohnz} 48*df8bdeb3Sjohnz 49*df8bdeb3Sjohnzif [ $# -lt 1 ]; then 50*df8bdeb3Sjohnz Usage 51*df8bdeb3Sjohnz fi 52*df8bdeb3Sjohnzcmd=$1 53*df8bdeb3Sjohnzshift 54*df8bdeb3Sjohnz 55*df8bdeb3Sjohnzwhile getopts "ac:e:F:k:v" opt ; do 56*df8bdeb3Sjohnz case $opt in 57*df8bdeb3Sjohnz a) aopt=-a;; 58*df8bdeb3Sjohnz c) copt="$OPTARG";; 59*df8bdeb3Sjohnz e) eopt="$OPTARG";; 60*df8bdeb3Sjohnz F) Fopt="$OPTARG";; 61*df8bdeb3Sjohnz k) kopt="$OPTARG";; 62*df8bdeb3Sjohnz v) vopt=-v;; 63*df8bdeb3Sjohnz \?) Usage;; 64*df8bdeb3Sjohnz esac 65*df8bdeb3Sjohnzdone 66*df8bdeb3Sjohnz 67*df8bdeb3Sjohnzcase X$eopt in X) Usage;; esac 68*df8bdeb3Sjohnz 69*df8bdeb3Sjohnztmpe=$eopt.e$$ 70*df8bdeb3Sjohnztmpo=$eopt.o$$ 71*df8bdeb3Sjohnz 72*df8bdeb3Sjohnzcpq() { 73*df8bdeb3Sjohnz cp -p $1 $2 > /dev/null 2>&1 74*df8bdeb3Sjohnz} 75*df8bdeb3Sjohnz 76*df8bdeb3Sjohnzrestore() { 77*df8bdeb3Sjohnz cpq $tmpe $eopt 78*df8bdeb3Sjohnz} 79*df8bdeb3Sjohnz 80*df8bdeb3Sjohnzcleanup() { 81*df8bdeb3Sjohnz restore 82*df8bdeb3Sjohnz rm -f $tmpe $tmpo 83*df8bdeb3Sjohnz} 84*df8bdeb3Sjohnz 85*df8bdeb3Sjohnztrap cleanup 1 2 3 13 15 86*df8bdeb3Sjohnz 87*df8bdeb3Sjohnzcpq $eopt $tmpe 88*df8bdeb3Sjohnz 89*df8bdeb3Sjohnzeval $elfsign $cmd $aopt $vopt ${copt:+-c} ${copt} ${kopt:+-k} ${kopt} \ 90*df8bdeb3Sjohnz ${Fopt:+-F} ${Fopt} -e ${eopt} 91*df8bdeb3Sjohnzrv=$? 92*df8bdeb3Sjohnz 93*df8bdeb3Sjohnzcase $cmd:$rv in 94*df8bdeb3Sjohnzsign:0) 95*df8bdeb3Sjohnz if $elfcmp -v -S $tmpe $eopt > $tmpo 2>&1 96*df8bdeb3Sjohnz then 97*df8bdeb3Sjohnz : # all's fine 98*df8bdeb3Sjohnz else 99*df8bdeb3Sjohnz rv=$? 100*df8bdeb3Sjohnz echo "Warning: elfcmp failed: $eopt" 1>&2 101*df8bdeb3Sjohnz cat ${tmpo} 1>&2 102*df8bdeb3Sjohnz echo "current directory: `pwd`" 1>&2 103*df8bdeb3Sjohnz restore 104*df8bdeb3Sjohnz cpq ${eopt} ${eopt}.elfcmp.failed.$$ 105*df8bdeb3Sjohnz fi 106*df8bdeb3Sjohnz ;; 107*df8bdeb3Sjohnzsign:*) 108*df8bdeb3Sjohnz restore 109*df8bdeb3Sjohnz cpq ${eopt} ${eopt}.elfsign.failed.$$ 110*df8bdeb3Sjohnz ;; 111*df8bdeb3Sjohnzesac 112*df8bdeb3Sjohnz 113*df8bdeb3Sjohnzrm -f $tmpe $tmpo 114*df8bdeb3Sjohnzexit $rv 115