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 <jake.petroules@petroules.com> Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>bb10
parent
55e22cfe0e
commit
c207724c9b
|
|
@ -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<QSslCertificate> 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<QSslCertificate> 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<char *>(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);
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@
|
|||
QT_BEGIN_NAMESPACE
|
||||
|
||||
#if defined(Q_OS_MACX)
|
||||
typedef OSStatus (*PtrSecCertificateGetData)(SecCertificateRef, CSSM_DATA_PTR);
|
||||
typedef CFDataRef (*PtrSecCertificateCopyData)(SecCertificateRef);
|
||||
typedef OSStatus (*PtrSecTrustSettingsCopyCertificates)(int, CFArrayRef*);
|
||||
typedef OSStatus (*PtrSecTrustCopyAnchorCertificates)(CFArrayRef*);
|
||||
#endif
|
||||
|
|
@ -146,7 +146,7 @@ public:
|
|||
static void addDefaultCaCertificates(const QList<QSslCertificate> &certs);
|
||||
|
||||
#if defined(Q_OS_MACX)
|
||||
static PtrSecCertificateGetData ptrSecCertificateGetData;
|
||||
static PtrSecCertificateCopyData ptrSecCertificateCopyData;
|
||||
static PtrSecTrustSettingsCopyCertificates ptrSecTrustSettingsCopyCertificates;
|
||||
static PtrSecTrustCopyAnchorCertificates ptrSecTrustCopyAnchorCertificates;
|
||||
#elif defined(Q_OS_WIN)
|
||||
|
|
|
|||
Loading…
Reference in New Issue