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