~ubuntu-branches/ubuntu/jaunty/psi/jaunty

« back to all changes in this revision

Viewing changes to third-party/qca/qca/src/qca_systemstore_win.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jan Niehusmann
  • Date: 2008-04-14 18:57:30 UTC
  • mfrom: (2.1.9 hardy)
  • Revision ID: james.westby@ubuntu.com-20080414185730-528re3zp0m2hdlhi
Tags: 0.11-8
* added CONFIG -= link_prl to .pro files and removed dependencies
  which are made unnecessary by this change
* Fix segfault when closing last chat tab with qt4.4
  (This is from upstream svn, rev. 1101) (Closes: Bug#476122)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2004,2005  Justin Karneges <justin@affinix.com>
 
3
 *
 
4
 * This library is free software; you can redistribute it and/or
 
5
 * modify it under the terms of the GNU Lesser General Public
 
6
 * License as published by the Free Software Foundation; either
 
7
 * version 2.1 of the License, or (at your option) any later version.
 
8
 *
 
9
 * This library is distributed in the hope that it will be useful,
 
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
12
 * Lesser General Public License for more details.
 
13
 *
 
14
 * You should have received a copy of the GNU Lesser General Public
 
15
 * License along with this library; if not, write to the Free Software
 
16
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 
17
 *
 
18
 */
 
19
 
 
20
// need to define this immediately
 
21
#define _WIN32_WINNT 0x400
 
22
 
 
23
#include "qca_systemstore.h"
 
24
 
 
25
#include <windows.h>
 
26
#include <wincrypt.h>
 
27
 
 
28
namespace QCA {
 
29
 
 
30
bool qca_have_systemstore()
 
31
{
 
32
        bool ok = false;
 
33
        HCERTSTORE hSystemStore;
 
34
        hSystemStore = CertOpenSystemStoreA(0, "ROOT");
 
35
        if(hSystemStore)
 
36
                ok = true;
 
37
        CertCloseStore(hSystemStore, 0);
 
38
        return ok;
 
39
}
 
40
 
 
41
CertificateCollection qca_get_systemstore(const QString &provider)
 
42
{
 
43
        CertificateCollection col;
 
44
        HCERTSTORE hSystemStore;
 
45
        hSystemStore = CertOpenSystemStoreA(0, "ROOT");
 
46
        if(!hSystemStore)
 
47
                return col;
 
48
        PCCERT_CONTEXT pc = NULL;
 
49
        while(1)
 
50
        {
 
51
                pc = CertFindCertificateInStore(
 
52
                        hSystemStore,
 
53
                        X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
 
54
                        0,
 
55
                        CERT_FIND_ANY,
 
56
                        NULL,
 
57
                        pc);
 
58
                if(!pc)
 
59
                        break;
 
60
                int size = pc->cbCertEncoded;
 
61
                QByteArray der(size, 0);
 
62
                memcpy(der.data(), pc->pbCertEncoded, size);
 
63
 
 
64
                Certificate cert = Certificate::fromDER(der, 0, provider);
 
65
                if(!cert.isNull())
 
66
                        col.addCertificate(cert);
 
67
        }
 
68
        CertCloseStore(hSystemStore, 0);
 
69
        return col;
 
70
}
 
71
 
 
72
}