From c207724c9bb8e205e756086950063cc91656e401 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Fri, 2 Aug 2013 09:38:24 +0200 Subject: OSX: Make QSslSocket compile on 10.9 CSSM_DATA_PTR was deprecated in 10.7. Replace SecCertificateGetData with SecCertificateCopyData. Task-number: QTBUG-32715 Change-Id: I762687370689b5b5c032567240667631b1ffde98 Reviewed-by: Jake Petroules Reviewed-by: Gabriel de Dietrich --- src/network/ssl/qsslsocket_openssl.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'src/network/ssl/qsslsocket_openssl.cpp') diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index e378faae68..69181f40b4 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -80,7 +80,7 @@ QT_BEGIN_NAMESPACE #if defined(Q_OS_MACX) #define kSecTrustSettingsDomainSystem 2 // so we do not need to include the header file - PtrSecCertificateGetData QSslSocketPrivate::ptrSecCertificateGetData = 0; + PtrSecCertificateCopyData QSslSocketPrivate::ptrSecCertificateCopyData = 0; PtrSecTrustSettingsCopyCertificates QSslSocketPrivate::ptrSecTrustSettingsCopyCertificates = 0; PtrSecTrustCopyAnchorCertificates QSslSocketPrivate::ptrSecTrustCopyAnchorCertificates = 0; #elif defined(Q_OS_WIN) @@ -492,8 +492,8 @@ void QSslSocketPrivate::ensureCiphersAndCertsLoaded() #if defined(Q_OS_MACX) QLibrary securityLib("/System/Library/Frameworks/Security.framework/Versions/Current/Security"); if (securityLib.load()) { - ptrSecCertificateGetData = (PtrSecCertificateGetData) securityLib.resolve("SecCertificateGetData"); - if (!ptrSecCertificateGetData) + ptrSecCertificateCopyData = (PtrSecCertificateCopyData) securityLib.resolve("SecCertificateCopyData"); + if (!ptrSecCertificateCopyData) qWarning("could not resolve symbols in security library"); // should never happen ptrSecTrustSettingsCopyCertificates = (PtrSecTrustSettingsCopyCertificates) securityLib.resolve("SecTrustSettingsCopyCertificates"); @@ -627,12 +627,11 @@ QList QSslSocketPrivate::systemCaCertificates() CFArrayRef cfCerts; OSStatus status = 1; - OSStatus SecCertificateGetData ( - SecCertificateRef certificate, - CSSM_DATA_PTR data + CFDataRef SecCertificateCopyData ( + SecCertificateRef certificate ); - if (ptrSecCertificateGetData) { + if (ptrSecCertificateCopyData) { if (ptrSecTrustSettingsCopyCertificates) status = ptrSecTrustSettingsCopyCertificates(kSecTrustSettingsDomainSystem, &cfCerts); else if (ptrSecTrustCopyAnchorCertificates) @@ -641,15 +640,16 @@ QList QSslSocketPrivate::systemCaCertificates() CFIndex size = CFArrayGetCount(cfCerts); for (CFIndex i = 0; i < size; ++i) { SecCertificateRef cfCert = (SecCertificateRef)CFArrayGetValueAtIndex(cfCerts, i); - CSSM_DATA data; - CSSM_DATA_PTR dataPtr = &data; - if (ptrSecCertificateGetData(cfCert, dataPtr)) { + CFDataRef data; + + data = ptrSecCertificateCopyData(cfCert); + + if (data == NULL) { qWarning("error retrieving a CA certificate from the system store"); } else { - int len = data.Length; - char *rawData = reinterpret_cast(data.Data); - QByteArray rawCert(rawData, len); + QByteArray rawCert = QByteArray::fromRawData((const char *)CFDataGetBytePtr(data), CFDataGetLength(data)); systemCerts.append(QSslCertificate::fromData(rawCert, QSsl::Der)); + CFRelease(data); } } CFRelease(cfCerts); -- cgit v1.2.3