summaryrefslogtreecommitdiffstats
path: root/src/network/ssl/qsslcertificate.cpp
diff options
context:
space:
mode:
authorRichard Moore <rich@kde.org>2011-06-20 18:11:33 +0200
committerQt Continuous Integration System <qt-info@nokia.com>2011-06-21 16:12:55 +0200
commitae4b4696a53aba6e81491a5d9796ca03adfb2953 (patch)
tree13c61b8571177b29e3ad705709fe42bf9224f38d /src/network/ssl/qsslcertificate.cpp
parentf5a128bb0ed13425d7f153e36c053e3d3511ca08 (diff)
Add the ability to convert a certificate to text
Adds a function that will convert a certificate to human readable text format using the openssl print function. This is useful for debugging and for displaying the full details of a certificate (including those parts not supported by the Qt API). Change-Id: I27238d05df37f8b15ad09f8e761b06344631a9ce Merge-request: 2 Reviewed-by: Peter Hartmann <peter.hartmann@nokia.com> Reviewed-on: http://codereview.qt.nokia.com/551 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Diffstat (limited to 'src/network/ssl/qsslcertificate.cpp')
-rw-r--r--src/network/ssl/qsslcertificate.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp
index 76b7d41e46..dc7b5bee1f 100644
--- a/src/network/ssl/qsslcertificate.cpp
+++ b/src/network/ssl/qsslcertificate.cpp
@@ -123,6 +123,7 @@
#include <QtCore/qmap.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
+#include <QtCore/qvarlengtharray.h>
QT_BEGIN_NAMESPACE
@@ -522,6 +523,17 @@ QByteArray QSslCertificate::toDer() const
}
/*!
+ Returns this certificate converted to a human-readable text
+ representation.
+*/
+QByteArray QSslCertificate::toText() const
+{
+ if (!d->x509)
+ return QByteArray();
+ return d->text_from_X509(d->x509);
+}
+
+/*!
Searches all files in the \a path for certificates encoded in the
specified \a format and returns them in a list. \e must be a file or a
pattern matching one or more files, as specified by \a syntax.
@@ -666,6 +678,31 @@ QByteArray QSslCertificatePrivate::QByteArray_from_X509(X509 *x509, QSsl::Encodi
return BEGINCERTSTRING "\n" + tmp + ENDCERTSTRING "\n";
}
+QByteArray QSslCertificatePrivate::text_from_X509(X509 *x509)
+{
+ if (!x509) {
+ qWarning("QSslSocketBackendPrivate::text_from_X509: null X509");
+ return QByteArray();
+ }
+
+ QByteArray result;
+ BIO *bio = q_BIO_new(q_BIO_s_mem());
+ if (!bio)
+ return result;
+
+ q_X509_print(bio, x509);
+
+ QVarLengthArray<char, 4096> data;
+ int count = q_BIO_read(bio, data.data(), 4096);
+ if ( count > 0 ) {
+ result = QByteArray( data.data(), count );
+ }
+
+ q_BIO_free(bio);
+
+ return result;
+}
+
static QMap<QString, QString> _q_mapFromX509Name(X509_NAME *name)
{
QMap<QString, QString> info;