view ui/certificate_win.h @ 289:9ad00a3255f4

Change cinst from stdin input to use arguments. As we have to execute this process on Windows over the shell a stdin / stdout communication is not really possible without some major hacks. So you now have to supply an instructions file and the path to the certificatelist as arguments when this process is called
author Andre Heinecke <aheinecke@intevation.de>
date Wed, 02 Apr 2014 13:52:02 +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

http://wald.intevation.org/projects/trustbridge/