+cc Bernard Spil

On 2015/09/28 02:27, David Coppa wrote:
> 
> Hi!
> 
> I was trying to update security/wpa_supplicant to the latest release (2.5).
> No cookie for me this time :(
> 
> First error:
> 
> cc -c -o ../src/eap_peer/eap_tls_common.o -O2 -pipe  
> -I/home/cvs/obj/wpa_supplicant-2.5/wpa_supplicant-2.5/src 
> -I/home/cvs/obj/wpa_supplicant-2.5/wpa_supplicant-2.5/src/utils 
> -I/usr/local/include/PCSC -DCONFIG_BACKEND_FILE -DCONFIG_PEERKEY   
> -DCONFIG_DRIVER_WIRED -DCONFIG_DRIVER_OPENBSD -DEAP_TLS -DEAP_PEAP -DEAP_TTLS 
> -DEAP_MD5 -DEAP_MSCHAPv2 -DEAP_GTC -DEAP_OTP -DEAP_SIM -DEAP_LEAP -DEAP_PSK 
> -DEAP_AKA -DEAP_FAST -DEAP_PAX -DEAP_SAKE -DEAP_GPSK -DEAP_IKEV2 
> -DIEEE8021X_EAPOL -DPCSC_FUNCS -I/usr/include/PCSC -DPKCS12_FUNCS 
> -DCONFIG_SMARTCARD -DEAP_TLS_OPENSSL -DCONFIG_SHA256 -DALL_DH_GROUPS 
> -DCONFIG_CTRL_IFACE -DCONFIG_CTRL_IFACE_UNIX  ../src/eap_peer/eap_tls_common.c
> cc -c -o ../src/crypto/tls_openssl.o -O2 -pipe  
> -I/home/cvs/obj/wpa_supplicant-2.5/wpa_supplicant-2.5/src 
> -I/home/cvs/obj/wpa_supplicant-2.5/wpa_supplicant-2.5/src/utils 
> -I/usr/local/include/PCSC -DCONFIG_BACKEND_FILE -DCONFIG_PEERKEY   
> -DCONFIG_DRIVER_WIRED -DCONFIG_DRIVER_OPENBSD -DEAP_TLS -DEAP_PEAP -DEAP_TTLS 
> -DEAP_MD5 -DEAP_MSCHAPv2 -DEAP_GTC -DEAP_OTP -DEAP_SIM -DEAP_LEAP -DEAP_PSK 
> -DEAP_AKA -DEAP_FAST -DEAP_PAX -DEAP_SAKE -DEAP_GPSK -DEAP_IKEV2 
> -DIEEE8021X_EAPOL -DPCSC_FUNCS -I/usr/include/PCSC -DPKCS12_FUNCS 
> -DCONFIG_SMARTCARD -DEAP_TLS_OPENSSL -DCONFIG_SHA256 -DALL_DH_GROUPS 
> -DCONFIG_CTRL_IFACE -DCONFIG_CTRL_IFACE_UNIX  ../src/crypto/tls_openssl.c
> ../src/crypto/tls_openssl.c: In function 'tls_parse_pkcs12':
> ../src/crypto/tls_openssl.c:2252: error: 'SSL_BUILD_CHAIN_FLAG_CHECK' 
> undeclared (first use in this function)
> ../src/crypto/tls_openssl.c:2252: error: (Each undeclared identifier is 
> reported only once
> ../src/crypto/tls_openssl.c:2252: error: for each function it appears in.)
> ../src/crypto/tls_openssl.c:2253: error: 'SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR' 
> undeclared (first use in this function)
> Makefile:1748: recipe for target '../src/crypto/tls_openssl.o' failed
> gmake: *** [../src/crypto/tls_openssl.o] Error 1
> 
> Then if I cut that chunk out:
> 
> ---8<---
> 
> $ cat patches/patch-src_crypto_tls_openssl_c
> $OpenBSD$
> --- src/crypto/tls_openssl.c.orig     Mon Sep 28 09:44:11 2015
> +++ src/crypto/tls_openssl.c  Mon Sep 28 09:44:30 2015
> @@ -2247,18 +2247,6 @@ static int tls_parse_pkcs12(struct tls_data *data, SSL
>                       /* Try to continue anyway */
>               }
>               sk_X509_free(certs);
> -#ifndef OPENSSL_IS_BORINGSSL

This ifndef is for Android :)

Checking for SSL_BUILD_CHAIN_FLAG_CHECK (or at a push LIBRESSL_VERSION)
being defined should be more widely applicable here.

> -             res = SSL_build_cert_chain(ssl,
> -                                        SSL_BUILD_CHAIN_FLAG_CHECK |
> -                                        SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR);
> -             if (!res) {
> -                     tls_show_errors(MSG_DEBUG, __func__,
> -                                     "Failed to build certificate chain");
> -             } else if (res == 2) {
> -                     wpa_printf(MSG_DEBUG,
> -                                "TLS: Ignore certificate chain verification 
> error when building chain with PKCS#12 extra certificates");
> -             }
> -#endif /* OPENSSL_IS_BORINGSSL */
>               /*
>                * Try to continue regardless of result since it is possible for
>                * the extra certificates not to be required.
> 
> ---8<---
> 
> Another bunch of errors while linking:
> 
> cc  -o wpa_supplicant config.o notify.o bss.o eap_register.o 
> ../src/utils/common.o ../src/utils/wpa_debug.o ../src/utils/wpabuf.o wmm_ac.o 
> ../src/utils/os_unix.o ../src/utils/eloop.o config_file.o 
> ../src/rsn_supp/wpa.o ../src/rsn_supp/preauth.o ../src/rsn_supp/pmksa_cache.o 
> ../src/rsn_supp/peerkey.o ../src/rsn_supp/wpa_ie.o ../src/common/wpa_common.o 
> ../src/eap_peer/eap_tls.o ../src/eap_peer/eap_peap.o 
> ../src/eap_common/eap_peap_common.o ../src/eap_peer/eap_ttls.o 
> ../src/eap_peer/eap_md5.o ../src/eap_peer/eap_mschapv2.o 
> ../src/eap_peer/mschapv2.o ../src/eap_peer/eap_gtc.o 
> ../src/eap_peer/eap_otp.o ../src/eap_peer/eap_sim.o 
> ../src/eap_peer/eap_leap.o ../src/eap_peer/eap_psk.o 
> ../src/eap_common/eap_psk_common.o ../src/eap_peer/eap_aka.o 
> ../src/eap_common/eap_sim_common.o ../src/eap_peer/eap_fast.o 
> ../src/eap_peer/eap_fast_pac.o ../src/eap_common/eap_fast_common.o 
> ../src/eap_peer/eap_pax.o ../src/eap_common/eap_pax_common.o 
> ../src/eap_peer/eap_sake.o ../src/eap_common/eap_sak!
 e_common.o ../src/eap_peer/eap_gpsk.o ../src/eap_common/eap_gpsk_common.o 
../src/eap_peer/eap_ikev2.o ../src/eap_peer/ikev2.o 
../src/eap_common/eap_ikev2_common.o ../src/eap_common/ikev2_common.o 
../src/eapol_supp/eapol_supp_sm.o ../src/eap_peer/eap.o 
../src/eap_peer/eap_methods.o ../src/utils/pcsc_funcs.o 
../src/crypto/ms_funcs.o ../src/eap_common/chap.o 
../src/eap_peer/eap_tls_common.o ../src/crypto/tls_openssl.o 
../src/crypto/crypto_openssl.o ../src/crypto/fips_prf_openssl.o  
../src/crypto/aes-eax.o ../src/crypto/aes-ctr.o ../src/crypto/aes-encblock.o 
../src/crypto/aes-omac1.o   ../src/crypto/sha256-prf.o 
../src/crypto/sha256-tlsprf.o ../src/crypto/dh_groups.o ../src/crypto/random.o 
ctrl_iface.o ctrl_iface_unix.o  ../src/utils/base64.o 
../src/common/ieee802_11_common.o ../src/common/hw_features_common.o 
../src/eap_common/eap_common.o ../src/crypto/sha1-prf.o 
../src/crypto/sha1-tprf.o ../src/crypto/sha1-tlsprf.o  
../src/drivers/driver_common.o wpa_supplicant.o events.o bl!
 acklist.o wpas_glue.o scan.o main.o   ../src/drivers/driver_wired.o 
../src/drivers/driver_openbsd.o ../src/drivers/drivers.o 
../src/l2_packet/l2_packet_freebsd.o -L/usr/local/lib   -lpcap -lpcsclite 
-lpthread -lssl -lcrypto  
> ../src/utils/os_unix.o: In function `os_random':
> os_unix.c:(.text+0x4f1): warning: warning: random() may return deterministic 
> values, is that what you want?
> /usr/local/lib/libpcsclite.so.1.0: warning: warning: strcpy() is almost 
> always misused, please use strlcpy()
> /usr/local/lib/libpcsclite.so.1.0: warning: warning: rand() may return 
> deterministic values, is that what you want?
> ../src/crypto/tls_openssl.o: In function `tls_sess_sec_cb':
> tls_openssl.c:(.text+0x4a1): undefined reference to `SSL_get_client_random'
> tls_openssl.c:(.text+0x4b3): undefined reference to `SSL_get_server_random'
> ../src/crypto/tls_openssl.o: In function `tls_parse_pkcs12':
> tls_openssl.c:(.text+0x75b): undefined reference to `SSL_clear_chain_certs'
> tls_openssl.c:(.text+0x7ad): undefined reference to `SSL_add1_chain_cert'
> ../src/crypto/tls_openssl.o: In function `tls_connection_get_random':
> tls_openssl.c:(.text+0x1569): undefined reference to `SSL_get_client_random'
> tls_openssl.c:(.text+0x1589): undefined reference to `SSL_get_server_random'
> ../src/crypto/tls_openssl.o: In function `tls_connection_set_cipher_list':
> tls_openssl.c:(.text+0x32d4): undefined reference to `SSL_set_security_level'
> tls_openssl.c:(.text+0x332a): undefined reference to `SSL_get_security_level'
> tls_openssl.c:(.text+0x333c): undefined reference to `SSL_set_security_level'
> ../src/crypto/tls_openssl.o: In function `openssl_tls_prf':
> tls_openssl.c:(.text+0x3961): undefined reference to `SSL_get_client_random'
> tls_openssl.c:(.text+0x397d): undefined reference to `SSL_get_server_random'
> tls_openssl.c:(.text+0x3991): undefined reference to 
> `SSL_SESSION_get_master_key'
> tls_openssl.c:(.text+0x3b6c): undefined reference to 
> `SSL_CIPHER_get_cipher_nid'
> tls_openssl.c:(.text+0x3b7a): undefined reference to 
> `SSL_CIPHER_get_digest_nid'
> collect2: ld returned 1 exit status
> Makefile:1663: recipe for target 'wpa_supplicant' failed
> gmake: *** [wpa_supplicant] Error 1

OpenSSL 1.1 API.

These are guarded by OPENSSL_VERSION_NUMBER >= 0x10100000L checks.
wpa-supplicant doesn't use an autoconf-like mechanism so you can't
reasonably add checks that the specific functions exist, the only
sensible option is to change these to something like

#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION)

Similar for < 0x10100000L || defined(LIBRESSL_VERSION).


Reply via email to