xref: /titanic_44/usr/src/tools/elfsign/elfsigncmp.sh (revision df8bdeb362277e8d95a74d6c097341fe97409948)
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