11305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#!/bin/sh 21305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 31305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# $Id: findssl.sh,v 1.4 2007/02/19 11:44:25 dtucker Exp $ 41305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 51305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# findssl.sh 61305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Search for all instances of OpenSSL headers and libraries 71305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# and print their versions. 81305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Intended to help diagnose OpenSSH's "OpenSSL headers do not 91305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# match your library" errors. 101305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 111305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Written by Darren Tucker (dtucker at zip dot com dot au) 121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# This file is placed in the public domain. 131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Release history: 151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 2002-07-27: Initial release. 161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 2002-08-04: Added public domain notice. 171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 2003-06-24: Incorporated readme, set library paths. First cvs version. 181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 2004-12-13: Add traps to cleanup temp files, from Amarendra Godbole. 191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# "OpenSSL headers do not match your library" are usually caused by 211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# OpenSSH's configure picking up an older version of OpenSSL headers 221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# or libraries. You can use the following # procedure to help identify 231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# the cause. 241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 251305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# The output of configure will tell you the versions of the OpenSSL 261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# headers and libraries that were picked up, for example: 271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# checking OpenSSL header version... 90604f (OpenSSL 0.9.6d 9 May 2002) 291305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# checking OpenSSL library version... 90602f (OpenSSL 0.9.6b [engine] 9 Jul 2001) 301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# checking whether OpenSSL's headers match the library... no 311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# configure: error: Your OpenSSL headers do not match your library 321305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 331305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Now run findssl.sh. This should identify the headers and libraries 341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# present and their versions. You should be able to identify the 351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# libraries and headers used and adjust your CFLAGS or remove incorrect 361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# versions. The output will show OpenSSL's internal version identifier 371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# and should look something like: 381305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# $ ./findssl.sh 401305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Searching for OpenSSL header files. 411305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 0x0090604fL /usr/include/openssl/opensslv.h 421305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 0x0090604fL /usr/local/ssl/include/openssl/opensslv.h 431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Searching for OpenSSL shared library files. 451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 0x0090602fL /lib/libcrypto.so.0.9.6b 461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 0x0090602fL /lib/libcrypto.so.2 471305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 0x0090581fL /usr/lib/libcrypto.so.0 481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 0x0090602fL /usr/lib/libcrypto.so 491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 0x0090581fL /usr/lib/libcrypto.so.0.9.5a 501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 0x0090600fL /usr/lib/libcrypto.so.0.9.6 511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 0x0090600fL /usr/lib/libcrypto.so.1 521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 531305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Searching for OpenSSL static library files. 541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 0x0090602fL /usr/lib/libcrypto.a 551305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 0x0090604fL /usr/local/ssl/lib/libcrypto.a 561305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 571305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# In this example, I gave configure no extra flags, so it's picking up 581305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# the OpenSSL header from /usr/include/openssl (90604f) and the library 591305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# from /usr/lib/ (90602f). 601305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 611305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 621305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Adjust these to suit your compiler. 631305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# You may also need to set the *LIB*PATH environment variables if 641305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# DEFAULT_LIBPATH is not correct for your system. 651305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 661305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodCC=gcc 671305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodSTATIC=-static 681305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 691305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 701305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Cleanup on interrupt 711305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 721305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodtrap 'rm -f conftest.c' INT HUP TERM 731305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 741305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 751305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Set up conftest C source 761305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 771305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodrm -f findssl.log 781305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodcat >conftest.c <<EOD 791305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#include <stdio.h> 801305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodint main(){printf("0x%08xL\n", SSLeay());} 811305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodEOD 821305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 831305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 841305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Set default library paths if not already set 851305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 861305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodDEFAULT_LIBPATH=/usr/lib:/usr/local/lib 871305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodLIBPATH=${LIBPATH:=$DEFAULT_LIBPATH} 881305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodLD_LIBRARY_PATH=${LD_LIBRARY_PATH:=$DEFAULT_LIBPATH} 891305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodLIBRARY_PATH=${LIBRARY_PATH:=$DEFAULT_LIBPATH} 901305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodexport LIBPATH LD_LIBRARY_PATH LIBRARY_PATH 911305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 921305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# not all platforms have a 'which' command 931305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif which ls >/dev/null 2>/dev/null; then 941305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood : which is defined 951305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodelse 961305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood which () { 971305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood saveIFS="$IFS" 981305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood IFS=: 991305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood for p in $PATH; do 1001305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if test -x "$p/$1" -a -f "$p/$1"; then 1011305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood IFS="$saveIFS" 1021305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "$p/$1" 1031305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood return 0 1041305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fi 1051305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood done 1061305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood IFS="$saveIFS" 1071305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood return 1 1081305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood } 1091305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 1101305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1111305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 1121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Search for OpenSSL headers and print versions 1131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 1141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodecho Searching for OpenSSL header files. 1151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ -x "`which locate`" ] 1161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodthen 1171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood headers=`locate opensslv.h` 1181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodelse 1191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood headers=`find / -name opensslv.h -print 2>/dev/null` 1201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 1211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfor header in $headers 1231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddo 1241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ver=`awk '/OPENSSL_VERSION_NUMBER/{printf \$3}' $header` 1251305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "$ver $header" 1261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddone 1271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodecho 1281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1291305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 1301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Search for shared libraries. 1311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Relies on shared libraries looking like "libcrypto.s*" 1321305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 1331305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodecho Searching for OpenSSL shared library files. 1341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ -x "`which locate`" ] 1351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodthen 1361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood libraries=`locate libcrypto.s` 1371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodelse 1381305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood libraries=`find / -name 'libcrypto.s*' -print 2>/dev/null` 1391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 1401305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1411305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfor lib in $libraries 1421305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddo 1431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood (echo "Trying libcrypto $lib" >>findssl.log 1441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood dir=`dirname $lib` 1451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood LIBPATH="$dir:$LIBPATH" 1461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood LD_LIBRARY_PATH="$dir:$LIBPATH" 1471305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood LIBRARY_PATH="$dir:$LIBPATH" 1481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood export LIBPATH LD_LIBRARY_PATH LIBRARY_PATH 1491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ${CC} -o conftest conftest.c $lib 2>>findssl.log 1501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if [ -x ./conftest ] 1511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood then 1521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ver=`./conftest 2>/dev/null` 1531305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood rm -f ./conftest 1541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "$ver $lib" 1551305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fi) 1561305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddone 1571305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodecho 1581305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1591305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 1601305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Search for static OpenSSL libraries and print versions 1611305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 1621305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodecho Searching for OpenSSL static library files. 1631305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ -x "`which locate`" ] 1641305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodthen 1651305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood libraries=`locate libcrypto.a` 1661305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodelse 1671305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood libraries=`find / -name libcrypto.a -print 2>/dev/null` 1681305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 1691305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1701305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfor lib in $libraries 1711305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddo 1721305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood libdir=`dirname $lib` 1731305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "Trying libcrypto $lib" >>findssl.log 1741305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ${CC} ${STATIC} -o conftest conftest.c -L${libdir} -lcrypto 2>>findssl.log 1751305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if [ -x ./conftest ] 1761305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood then 1771305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ver=`./conftest 2>/dev/null` 1781305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood rm -f ./conftest 1791305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "$ver $lib" 1801305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fi 1811305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddone 1821305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1831305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 1841305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Clean up 1851305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# 1861305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodrm -f conftest.c 187