Mercurial > trustbridge
view ui/certificate_win.h @ 285:f23e0ccd5d14
Fix call to windows process.
This now uses the correct parameters, emits the signals
correctly as errors and waits for the process to finish instead
of relying on NOASYNC which did not work for runas and also
made it impossible to get the return code
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 02 Apr 2014 13:45:57 +0000 |
parents | dc1e1e9e62ce |
children | 17e1c8f37d72 |
line wrap: on
line source
#include "certificate.h" #ifdef Q_OS_WIN #include <QDebug> Certificate::Certificate(const QByteArray& asn1data) : mValid(false) { // asn1data is expected to be \0 terminated as this is what // qt does in ::fromBase64 so the actual asn1data is // size() - 1 and not size() Q_ASSERT (asn1data[asn1data.size()] == '\0'); DWORD sizeOfName = 0; DWORD sizeOfCert = asn1data.size() - 1; mPCertContext = CertCreateCertificateContext(X509_ASN_ENCODING, (const BYTE *) asn1data.constData(), sizeOfCert); if (!mPCertContext) { qDebug() << "Error creating certificate context. Err: " << GetLastError(); return; } sizeOfName = CertGetNameStringW(pCertContext, CERT_NAME_FRIENDLY_DISPLAY_TYPE, 0, NULL, NULL, 0); if (sizeOfName <= 1) { // Probably some fallbacks would be nice here? Let's see if this // is a problem in testing. qDebug() << "Failed to get friendly name. Don't know what to do!"; } else { WCHAR certName[sizeOfName]; DWORD actSize = CertGetNameStringW(pCertContext, CERT_NAME_FRIENDLY_DISPLAY_TYPE, 0, NULL, certName, sizeOfName); Q_ASSERT (actSize == sizeOfName); mShortDescription = QString::fromWCharArray(certName, sizeOfName); } } Certificate::~Certificate() { if (mPCertContext) { CertFreeCertificateContext(pCertContext); } } QString Certificate::shortDescription() { if (!isValid()) { return QString::fromLatin1(tr("Invalid Certificate")); } return mShortDescription; } #endif