1*ce3adf43SDag-Erling Smørgrav#!/bin/sh 2*ce3adf43SDag-Erling Smørgrav# 3*ce3adf43SDag-Erling Smørgrav# findssl.sh 4*ce3adf43SDag-Erling Smørgrav# Search for all instances of OpenSSL headers and libraries 5*ce3adf43SDag-Erling Smørgrav# and print their versions. 6*ce3adf43SDag-Erling Smørgrav# Intended to help diagnose OpenSSH's "OpenSSL headers do not 7*ce3adf43SDag-Erling Smørgrav# match your library" errors. 8*ce3adf43SDag-Erling Smørgrav# 9*ce3adf43SDag-Erling Smørgrav# Written by Darren Tucker (dtucker at zip dot com dot au) 10*ce3adf43SDag-Erling Smørgrav# This file is placed in the public domain. 11*ce3adf43SDag-Erling Smørgrav# 12*ce3adf43SDag-Erling Smørgrav# Release history: 13*ce3adf43SDag-Erling Smørgrav# 2002-07-27: Initial release. 14*ce3adf43SDag-Erling Smørgrav# 2002-08-04: Added public domain notice. 15*ce3adf43SDag-Erling Smørgrav# 2003-06-24: Incorporated readme, set library paths. First cvs version. 16*ce3adf43SDag-Erling Smørgrav# 2004-12-13: Add traps to cleanup temp files, from Amarendra Godbole. 17*ce3adf43SDag-Erling Smørgrav# 18*ce3adf43SDag-Erling Smørgrav# "OpenSSL headers do not match your library" are usually caused by 19*ce3adf43SDag-Erling Smørgrav# OpenSSH's configure picking up an older version of OpenSSL headers 20*ce3adf43SDag-Erling Smørgrav# or libraries. You can use the following # procedure to help identify 21*ce3adf43SDag-Erling Smørgrav# the cause. 22*ce3adf43SDag-Erling Smørgrav# 23*ce3adf43SDag-Erling Smørgrav# The output of configure will tell you the versions of the OpenSSL 24*ce3adf43SDag-Erling Smørgrav# headers and libraries that were picked up, for example: 25*ce3adf43SDag-Erling Smørgrav# 26*ce3adf43SDag-Erling Smørgrav# checking OpenSSL header version... 90604f (OpenSSL 0.9.6d 9 May 2002) 27*ce3adf43SDag-Erling Smørgrav# checking OpenSSL library version... 90602f (OpenSSL 0.9.6b [engine] 9 Jul 2001) 28*ce3adf43SDag-Erling Smørgrav# checking whether OpenSSL's headers match the library... no 29*ce3adf43SDag-Erling Smørgrav# configure: error: Your OpenSSL headers do not match your library 30*ce3adf43SDag-Erling Smørgrav# 31*ce3adf43SDag-Erling Smørgrav# Now run findssl.sh. This should identify the headers and libraries 32*ce3adf43SDag-Erling Smørgrav# present and their versions. You should be able to identify the 33*ce3adf43SDag-Erling Smørgrav# libraries and headers used and adjust your CFLAGS or remove incorrect 34*ce3adf43SDag-Erling Smørgrav# versions. The output will show OpenSSL's internal version identifier 35*ce3adf43SDag-Erling Smørgrav# and should look something like: 36*ce3adf43SDag-Erling Smørgrav 37*ce3adf43SDag-Erling Smørgrav# $ ./findssl.sh 38*ce3adf43SDag-Erling Smørgrav# Searching for OpenSSL header files. 39*ce3adf43SDag-Erling Smørgrav# 0x0090604fL /usr/include/openssl/opensslv.h 40*ce3adf43SDag-Erling Smørgrav# 0x0090604fL /usr/local/ssl/include/openssl/opensslv.h 41*ce3adf43SDag-Erling Smørgrav# 42*ce3adf43SDag-Erling Smørgrav# Searching for OpenSSL shared library files. 43*ce3adf43SDag-Erling Smørgrav# 0x0090602fL /lib/libcrypto.so.0.9.6b 44*ce3adf43SDag-Erling Smørgrav# 0x0090602fL /lib/libcrypto.so.2 45*ce3adf43SDag-Erling Smørgrav# 0x0090581fL /usr/lib/libcrypto.so.0 46*ce3adf43SDag-Erling Smørgrav# 0x0090602fL /usr/lib/libcrypto.so 47*ce3adf43SDag-Erling Smørgrav# 0x0090581fL /usr/lib/libcrypto.so.0.9.5a 48*ce3adf43SDag-Erling Smørgrav# 0x0090600fL /usr/lib/libcrypto.so.0.9.6 49*ce3adf43SDag-Erling Smørgrav# 0x0090600fL /usr/lib/libcrypto.so.1 50*ce3adf43SDag-Erling Smørgrav# 51*ce3adf43SDag-Erling Smørgrav# Searching for OpenSSL static library files. 52*ce3adf43SDag-Erling Smørgrav# 0x0090602fL /usr/lib/libcrypto.a 53*ce3adf43SDag-Erling Smørgrav# 0x0090604fL /usr/local/ssl/lib/libcrypto.a 54*ce3adf43SDag-Erling Smørgrav# 55*ce3adf43SDag-Erling Smørgrav# In this example, I gave configure no extra flags, so it's picking up 56*ce3adf43SDag-Erling Smørgrav# the OpenSSL header from /usr/include/openssl (90604f) and the library 57*ce3adf43SDag-Erling Smørgrav# from /usr/lib/ (90602f). 58*ce3adf43SDag-Erling Smørgrav 59*ce3adf43SDag-Erling Smørgrav# 60*ce3adf43SDag-Erling Smørgrav# Adjust these to suit your compiler. 61*ce3adf43SDag-Erling Smørgrav# You may also need to set the *LIB*PATH environment variables if 62*ce3adf43SDag-Erling Smørgrav# DEFAULT_LIBPATH is not correct for your system. 63*ce3adf43SDag-Erling Smørgrav# 64*ce3adf43SDag-Erling SmørgravCC=gcc 65*ce3adf43SDag-Erling SmørgravSTATIC=-static 66*ce3adf43SDag-Erling Smørgrav 67*ce3adf43SDag-Erling Smørgrav# 68*ce3adf43SDag-Erling Smørgrav# Cleanup on interrupt 69*ce3adf43SDag-Erling Smørgrav# 70*ce3adf43SDag-Erling Smørgravtrap 'rm -f conftest.c' INT HUP TERM 71*ce3adf43SDag-Erling Smørgrav 72*ce3adf43SDag-Erling Smørgrav# 73*ce3adf43SDag-Erling Smørgrav# Set up conftest C source 74*ce3adf43SDag-Erling Smørgrav# 75*ce3adf43SDag-Erling Smørgravrm -f findssl.log 76*ce3adf43SDag-Erling Smørgravcat >conftest.c <<EOD 77*ce3adf43SDag-Erling Smørgrav#include <stdio.h> 78*ce3adf43SDag-Erling Smørgravint main(){printf("0x%08xL\n", SSLeay());} 79*ce3adf43SDag-Erling SmørgravEOD 80*ce3adf43SDag-Erling Smørgrav 81*ce3adf43SDag-Erling Smørgrav# 82*ce3adf43SDag-Erling Smørgrav# Set default library paths if not already set 83*ce3adf43SDag-Erling Smørgrav# 84*ce3adf43SDag-Erling SmørgravDEFAULT_LIBPATH=/usr/lib:/usr/local/lib 85*ce3adf43SDag-Erling SmørgravLIBPATH=${LIBPATH:=$DEFAULT_LIBPATH} 86*ce3adf43SDag-Erling SmørgravLD_LIBRARY_PATH=${LD_LIBRARY_PATH:=$DEFAULT_LIBPATH} 87*ce3adf43SDag-Erling SmørgravLIBRARY_PATH=${LIBRARY_PATH:=$DEFAULT_LIBPATH} 88*ce3adf43SDag-Erling Smørgravexport LIBPATH LD_LIBRARY_PATH LIBRARY_PATH 89*ce3adf43SDag-Erling Smørgrav 90*ce3adf43SDag-Erling Smørgrav# not all platforms have a 'which' command 91*ce3adf43SDag-Erling Smørgravif which ls >/dev/null 2>/dev/null; then 92*ce3adf43SDag-Erling Smørgrav : which is defined 93*ce3adf43SDag-Erling Smørgravelse 94*ce3adf43SDag-Erling Smørgrav which () { 95*ce3adf43SDag-Erling Smørgrav saveIFS="$IFS" 96*ce3adf43SDag-Erling Smørgrav IFS=: 97*ce3adf43SDag-Erling Smørgrav for p in $PATH; do 98*ce3adf43SDag-Erling Smørgrav if test -x "$p/$1" -a -f "$p/$1"; then 99*ce3adf43SDag-Erling Smørgrav IFS="$saveIFS" 100*ce3adf43SDag-Erling Smørgrav echo "$p/$1" 101*ce3adf43SDag-Erling Smørgrav return 0 102*ce3adf43SDag-Erling Smørgrav fi 103*ce3adf43SDag-Erling Smørgrav done 104*ce3adf43SDag-Erling Smørgrav IFS="$saveIFS" 105*ce3adf43SDag-Erling Smørgrav return 1 106*ce3adf43SDag-Erling Smørgrav } 107*ce3adf43SDag-Erling Smørgravfi 108*ce3adf43SDag-Erling Smørgrav 109*ce3adf43SDag-Erling Smørgrav# 110*ce3adf43SDag-Erling Smørgrav# Search for OpenSSL headers and print versions 111*ce3adf43SDag-Erling Smørgrav# 112*ce3adf43SDag-Erling Smørgravecho Searching for OpenSSL header files. 113*ce3adf43SDag-Erling Smørgravif [ -x "`which locate`" ] 114*ce3adf43SDag-Erling Smørgravthen 115*ce3adf43SDag-Erling Smørgrav headers=`locate opensslv.h` 116*ce3adf43SDag-Erling Smørgravelse 117*ce3adf43SDag-Erling Smørgrav headers=`find / -name opensslv.h -print 2>/dev/null` 118*ce3adf43SDag-Erling Smørgravfi 119*ce3adf43SDag-Erling Smørgrav 120*ce3adf43SDag-Erling Smørgravfor header in $headers 121*ce3adf43SDag-Erling Smørgravdo 122*ce3adf43SDag-Erling Smørgrav ver=`awk '/OPENSSL_VERSION_NUMBER/{printf \$3}' $header` 123*ce3adf43SDag-Erling Smørgrav echo "$ver $header" 124*ce3adf43SDag-Erling Smørgravdone 125*ce3adf43SDag-Erling Smørgravecho 126*ce3adf43SDag-Erling Smørgrav 127*ce3adf43SDag-Erling Smørgrav# 128*ce3adf43SDag-Erling Smørgrav# Search for shared libraries. 129*ce3adf43SDag-Erling Smørgrav# Relies on shared libraries looking like "libcrypto.s*" 130*ce3adf43SDag-Erling Smørgrav# 131*ce3adf43SDag-Erling Smørgravecho Searching for OpenSSL shared library files. 132*ce3adf43SDag-Erling Smørgravif [ -x "`which locate`" ] 133*ce3adf43SDag-Erling Smørgravthen 134*ce3adf43SDag-Erling Smørgrav libraries=`locate libcrypto.s` 135*ce3adf43SDag-Erling Smørgravelse 136*ce3adf43SDag-Erling Smørgrav libraries=`find / -name 'libcrypto.s*' -print 2>/dev/null` 137*ce3adf43SDag-Erling Smørgravfi 138*ce3adf43SDag-Erling Smørgrav 139*ce3adf43SDag-Erling Smørgravfor lib in $libraries 140*ce3adf43SDag-Erling Smørgravdo 141*ce3adf43SDag-Erling Smørgrav (echo "Trying libcrypto $lib" >>findssl.log 142*ce3adf43SDag-Erling Smørgrav dir=`dirname $lib` 143*ce3adf43SDag-Erling Smørgrav LIBPATH="$dir:$LIBPATH" 144*ce3adf43SDag-Erling Smørgrav LD_LIBRARY_PATH="$dir:$LIBPATH" 145*ce3adf43SDag-Erling Smørgrav LIBRARY_PATH="$dir:$LIBPATH" 146*ce3adf43SDag-Erling Smørgrav export LIBPATH LD_LIBRARY_PATH LIBRARY_PATH 147*ce3adf43SDag-Erling Smørgrav ${CC} -o conftest conftest.c $lib 2>>findssl.log 148*ce3adf43SDag-Erling Smørgrav if [ -x ./conftest ] 149*ce3adf43SDag-Erling Smørgrav then 150*ce3adf43SDag-Erling Smørgrav ver=`./conftest 2>/dev/null` 151*ce3adf43SDag-Erling Smørgrav rm -f ./conftest 152*ce3adf43SDag-Erling Smørgrav echo "$ver $lib" 153*ce3adf43SDag-Erling Smørgrav fi) 154*ce3adf43SDag-Erling Smørgravdone 155*ce3adf43SDag-Erling Smørgravecho 156*ce3adf43SDag-Erling Smørgrav 157*ce3adf43SDag-Erling Smørgrav# 158*ce3adf43SDag-Erling Smørgrav# Search for static OpenSSL libraries and print versions 159*ce3adf43SDag-Erling Smørgrav# 160*ce3adf43SDag-Erling Smørgravecho Searching for OpenSSL static library files. 161*ce3adf43SDag-Erling Smørgravif [ -x "`which locate`" ] 162*ce3adf43SDag-Erling Smørgravthen 163*ce3adf43SDag-Erling Smørgrav libraries=`locate libcrypto.a` 164*ce3adf43SDag-Erling Smørgravelse 165*ce3adf43SDag-Erling Smørgrav libraries=`find / -name libcrypto.a -print 2>/dev/null` 166*ce3adf43SDag-Erling Smørgravfi 167*ce3adf43SDag-Erling Smørgrav 168*ce3adf43SDag-Erling Smørgravfor lib in $libraries 169*ce3adf43SDag-Erling Smørgravdo 170*ce3adf43SDag-Erling Smørgrav libdir=`dirname $lib` 171*ce3adf43SDag-Erling Smørgrav echo "Trying libcrypto $lib" >>findssl.log 172*ce3adf43SDag-Erling Smørgrav ${CC} ${STATIC} -o conftest conftest.c -L${libdir} -lcrypto 2>>findssl.log 173*ce3adf43SDag-Erling Smørgrav if [ -x ./conftest ] 174*ce3adf43SDag-Erling Smørgrav then 175*ce3adf43SDag-Erling Smørgrav ver=`./conftest 2>/dev/null` 176*ce3adf43SDag-Erling Smørgrav rm -f ./conftest 177*ce3adf43SDag-Erling Smørgrav echo "$ver $lib" 178*ce3adf43SDag-Erling Smørgrav fi 179*ce3adf43SDag-Erling Smørgravdone 180*ce3adf43SDag-Erling Smørgrav 181*ce3adf43SDag-Erling Smørgrav# 182*ce3adf43SDag-Erling Smørgrav# Clean up 183*ce3adf43SDag-Erling Smørgrav# 184*ce3adf43SDag-Erling Smørgravrm -f conftest.c 185