#!/bin/sh | |
# | |
# redo the hashes for the certificates in your cert path or the ones passed | |
# on the command line. | |
# | |
if [ "$OPENSSL"x = "x" -o ! -x "$OPENSSL" ]; then | |
OPENSSL='openssl' | |
export OPENSSL | |
fi | |
DIR=/usr/local/ssl | |
PATH=$DIR/bin:$PATH | |
if [ ! -f "$OPENSSL" ]; then | |
found=0 | |
for dir in . `echo $PATH | sed -e 's/:/ /g'`; do | |
if [ -f "$dir/$OPENSSL" ]; then | |
found=1 | |
break | |
fi | |
done | |
if [ $found = 0 ]; then | |
echo "c_rehash: rehashing skipped ('openssl' program still not available)" 1>&2 | |
exit 0 | |
fi | |
fi | |
SSL_DIR=$DIR/certs | |
if [ "$*" = "" ]; then | |
CERTS=${*:-${SSL_CERT_DIR:-$SSL_DIR}} | |
else | |
CERTS=$* | |
fi | |
IFS=': ' | |
for i in $CERTS | |
do | |
( | |
IFS=' ' | |
if [ -d $i -a -w $i ]; then | |
cd $i | |
echo "Doing $i" | |
for i in *.pem | |
do | |
if [ $i != '*.pem' ]; then | |
h=`$OPENSSL x509 -hash -noout -in $i` | |
if [ "x$h" = "x" ]; then | |
echo $i does not contain a certificate | |
else | |
if [ -f $h.0 ]; then | |
/bin/rm -f $h.0 | |
fi | |
echo "$i => $h.0" | |
ln -s $i $h.0 | |
fi | |
fi | |
done | |
fi | |
) | |
done |