From 3f1557375b65ba1f41b63d7d71fd177bd5e438b2 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Mon, 24 Mar 2014 22:59:37 +0100 Subject: [PATCH] QSslCertificate::{subject,issuer}Info() returns a QStringList in Qt5 This requires changes in SslInfoDlg. To simplify handling the API differences, we use small wrappers that join the string lists for Qt5. --- src/qtui/sslinfodlg.cpp | 47 +++++++++++++++++++++++++++++------------ src/qtui/sslinfodlg.h | 8 +++++-- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/qtui/sslinfodlg.cpp b/src/qtui/sslinfodlg.cpp index 05311ac8..88ac6b1d 100644 --- a/src/qtui/sslinfodlg.cpp +++ b/src/qtui/sslinfodlg.cpp @@ -45,7 +45,7 @@ SslInfoDlg::SslInfoDlg(const QSslSocket *socket, QWidget *parent) connect(ui.certificateChain, SIGNAL(currentIndexChanged(int)), SLOT(setCurrentCert(int))); foreach(const QSslCertificate &cert, socket->peerCertificateChain()) { - ui.certificateChain->addItem(cert.subjectInfo(QSslCertificate::CommonName)); + ui.certificateChain->addItem(subjectInfo(cert, QSslCertificate::CommonName)); } } @@ -53,19 +53,19 @@ SslInfoDlg::SslInfoDlg(const QSslSocket *socket, QWidget *parent) void SslInfoDlg::setCurrentCert(int index) { QSslCertificate cert = socket()->peerCertificateChain().at(index); - ui.subjectCommonName->setText(cert.subjectInfo(QSslCertificate::CommonName)); - ui.subjectOrganization->setText(cert.subjectInfo(QSslCertificate::Organization)); - ui.subjectOrganizationalUnit->setText(cert.subjectInfo(QSslCertificate::OrganizationalUnitName)); - ui.subjectCountry->setText(cert.subjectInfo(QSslCertificate::CountryName)); - ui.subjectState->setText(cert.subjectInfo(QSslCertificate::StateOrProvinceName)); - ui.subjectCity->setText(cert.subjectInfo(QSslCertificate::LocalityName)); + ui.subjectCommonName->setText(subjectInfo(cert, QSslCertificate::CommonName)); + ui.subjectOrganization->setText(subjectInfo(cert, QSslCertificate::Organization)); + ui.subjectOrganizationalUnit->setText(subjectInfo(cert, QSslCertificate::OrganizationalUnitName)); + ui.subjectCountry->setText(subjectInfo(cert, QSslCertificate::CountryName)); + ui.subjectState->setText(subjectInfo(cert, QSslCertificate::StateOrProvinceName)); + ui.subjectCity->setText(subjectInfo(cert, QSslCertificate::LocalityName)); - ui.issuerCommonName->setText(cert.issuerInfo(QSslCertificate::CommonName)); - ui.issuerOrganization->setText(cert.issuerInfo(QSslCertificate::Organization)); - ui.issuerOrganizationalUnit->setText(cert.issuerInfo(QSslCertificate::OrganizationalUnitName)); - ui.issuerCountry->setText(cert.issuerInfo(QSslCertificate::CountryName)); - ui.issuerState->setText(cert.issuerInfo(QSslCertificate::StateOrProvinceName)); - ui.issuerCity->setText(cert.issuerInfo(QSslCertificate::LocalityName)); + ui.issuerCommonName->setText(issuerInfo(cert, QSslCertificate::CommonName)); + ui.issuerOrganization->setText(issuerInfo(cert, QSslCertificate::Organization)); + ui.issuerOrganizationalUnit->setText(issuerInfo(cert, QSslCertificate::OrganizationalUnitName)); + ui.issuerCountry->setText(issuerInfo(cert, QSslCertificate::CountryName)); + ui.issuerState->setText(issuerInfo(cert, QSslCertificate::StateOrProvinceName)); + ui.issuerCity->setText(issuerInfo(cert, QSslCertificate::LocalityName)); if (socket()->sslErrors().isEmpty()) ui.trusted->setText(tr("Yes")); @@ -81,3 +81,24 @@ void SslInfoDlg::setCurrentCert(int index) ui.md5Digest->setText(prettyDigest(cert.digest(QCryptographicHash::Md5))); ui.sha1Digest->setText(prettyDigest(cert.digest(QCryptographicHash::Sha1))); } + +// in Qt5, subjectInfo returns a QStringList(); turn this into a comma-separated string instead +QString SslInfoDlg::subjectInfo(const QSslCertificate &cert, QSslCertificate::SubjectInfo subjectInfo) const +{ +#if QT_VERSION < 0x050000 + return cert.subjectInfo(subjectInfo); +#else + return cert.subjectInfo(subjectInfo).join(", "); +#endif +} + + +// same here +QString SslInfoDlg::issuerInfo(const QSslCertificate &cert, QSslCertificate::SubjectInfo subjectInfo) const +{ +#if QT_VERSION < 0x050000 + return cert.issuerInfo(subjectInfo); +#else + return cert.issuerInfo(subjectInfo).join(", "); +#endif +} diff --git a/src/qtui/sslinfodlg.h b/src/qtui/sslinfodlg.h index c13de7ba..067cc4c5 100644 --- a/src/qtui/sslinfodlg.h +++ b/src/qtui/sslinfodlg.h @@ -22,6 +22,7 @@ #define SSLINFODLG_H #include +#include #include "ui_sslinfodlg.h" @@ -31,8 +32,6 @@ class QSslSocket; // SslInfoDialog // ======================================== -class QSslCertificate; - class SslInfoDlg : public QDialog { Q_OBJECT @@ -44,6 +43,11 @@ public: private slots: void setCurrentCert(int index); +private: + // simplify handling the API changes between Qt4 and Qt5 (QString -> QStringList) + QString subjectInfo(const QSslCertificate &cert, QSslCertificate::SubjectInfo subjectInfo) const; + QString issuerInfo(const QSslCertificate &cert, QSslCertificate::SubjectInfo subjectInfo) const; + private: Ui::SslInfoDlg ui; const QSslSocket *_socket; -- 2.20.1