libpurple/certificate.c

Tue, 15 Apr 2014 16:51:42 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Tue, 15 Apr 2014 16:51:42 +0200
changeset 35850
1abeda205d6c
parent 35458
385156e1b493
child 35901
5bcb306a4edf
permissions
-rw-r--r--

cross-win32: make dirs more flexible, add them to the config.h

17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
1 /*
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
2 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
3 * purple
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
4 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
7 * source distribution.
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
8 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
12 * (at your option) any later version.
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
13 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
17 * GNU General Public License for more details.
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
18 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
20 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19827
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
22 */
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
23
19668
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
24 #include "internal.h"
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
25 #include "certificate.h"
19688
7eddbc94521c (Un)Register the pools with DBus to avoid a runtime fit.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19678
diff changeset
26 #include "dbus-maybe.h"
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
27 #include "debug.h"
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
28 #include "request.h"
18894
1a00d2309d39 - Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18818
diff changeset
29 #include "signals.h"
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
30 #include "util.h"
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
31
35458
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
32 /* List holding pointers to all registered certificate schemes */
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
33 static GList *cert_schemes = NULL;
35458
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
34 /* List of registered Verifiers */
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
35 static GList *cert_verifiers = NULL;
35458
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
36 /* List of registered Pools */
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
37 static GList *cert_pools = NULL;
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
38
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
39 static const gchar *
33637
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
40 invalidity_reason_to_string(PurpleCertificateVerificationStatus flag)
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
41 {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
42 switch (flag) {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
43 case PURPLE_CERTIFICATE_SELF_SIGNED:
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
44 return _("The certificate is self-signed and cannot be "
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
45 "automatically checked.");
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
46 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
47 case PURPLE_CERTIFICATE_CA_UNKNOWN:
28653
f88a1253ed92 Some wordsmithing on this message from Y S Landro, Richard, William, and Kevin (on the translators m-l).
Paul Aurich <darkrain42@pidgin.im>
parents: 28528
diff changeset
48 return _("The certificate is not trusted because no certificate "
f88a1253ed92 Some wordsmithing on this message from Y S Landro, Richard, William, and Kevin (on the translators m-l).
Paul Aurich <darkrain42@pidgin.im>
parents: 28528
diff changeset
49 "that can verify it is currently trusted.");
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
50 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
51 case PURPLE_CERTIFICATE_NOT_ACTIVATED:
30472
61a484e29e6e certificate: Add helpful text to the 'not yet active' message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29982
diff changeset
52 return _("The certificate is not valid yet. Check that your "
61a484e29e6e certificate: Add helpful text to the 'not yet active' message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29982
diff changeset
53 "computer's date and time are accurate.");
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
54 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
55 case PURPLE_CERTIFICATE_EXPIRED:
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
56 return _("The certificate has expired and should not be "
30815
f771b27caa6b cert: Tell users to check their computer's date/time for expired certs, too
Paul Aurich <darkrain42@pidgin.im>
parents: 30472
diff changeset
57 "considered valid. Check that your computer's date "
f771b27caa6b cert: Tell users to check their computer's date/time for expired certs, too
Paul Aurich <darkrain42@pidgin.im>
parents: 30472
diff changeset
58 "and time are accurate.");
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
59 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
60 case PURPLE_CERTIFICATE_NAME_MISMATCH:
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
61 /* Translators: "domain" refers to a DNS domain (e.g. talk.google.com) */
28337
f3bae8c31997 String change feedback from Stu.
Paul Aurich <darkrain42@pidgin.im>
parents: 28332
diff changeset
62 return _("The certificate presented is not issued to this domain.");
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
63 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
64 case PURPLE_CERTIFICATE_NO_CA_POOL:
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
65 return _("You have no database of root certificates, so "
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
66 "this certificate cannot be validated.");
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
67 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
68 case PURPLE_CERTIFICATE_INVALID_CHAIN:
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
69 return _("The certificate chain presented is invalid.");
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
70 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
71 case PURPLE_CERTIFICATE_REVOKED:
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
72 return _("The certificate has been revoked.");
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
73 break;
33637
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
74 case PURPLE_CERTIFICATE_REJECTED:
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
75 return _("The certificate was rejected by the user.");
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
76 break;
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
77 case PURPLE_CERTIFICATE_UNKNOWN_ERROR:
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
78 default:
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
79 return _("An unknown certificate error occurred.");
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
80 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
81 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
82 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
83
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
84 void
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
85 purple_certificate_verify (PurpleCertificateVerifier *verifier,
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
86 const gchar *subject_name, GList *cert_chain,
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
87 PurpleCertificateVerifiedCallback cb,
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
88 gpointer cb_data)
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
89 {
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
90 PurpleCertificateVerificationRequest *vrq;
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
91 PurpleCertificateScheme *scheme;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
92
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
93 g_return_if_fail(subject_name != NULL);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
94 /* If you don't have a cert to check, why are you requesting that it
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
95 be verified? */
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
96 g_return_if_fail(cert_chain != NULL);
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
97 g_return_if_fail(cb != NULL);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
98
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
99 /* Look up the CertificateScheme */
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
100 scheme = purple_certificate_find_scheme(verifier->scheme_name);
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
101 g_return_if_fail(scheme);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
102
18463
20cf7daafb13 - purple_certificate_verify attempts to check that the cert chain is of
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18462
diff changeset
103 /* Check that at least the first cert in the chain matches the
20cf7daafb13 - purple_certificate_verify attempts to check that the cert chain is of
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18462
diff changeset
104 Verifier scheme */
18479
a38ca6794f6f - Fixed an inverted assertion
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18477
diff changeset
105 g_return_if_fail(scheme ==
18463
20cf7daafb13 - purple_certificate_verify attempts to check that the cert chain is of
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18462
diff changeset
106 ((PurpleCertificate *) (cert_chain->data))->scheme);
20cf7daafb13 - purple_certificate_verify attempts to check that the cert chain is of
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18462
diff changeset
107
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
108 /* Construct and fill in the request fields */
18469
675afaf5559f - Use g_new0 instead of g_new
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18467
diff changeset
109 vrq = g_new0(PurpleCertificateVerificationRequest, 1);
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
110 vrq->verifier = verifier;
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
111 vrq->scheme = scheme;
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
112 vrq->subject_name = g_strdup(subject_name);
18656
02c822b398d2 - purple_certificate_verify no longer takes possession of the
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18655
diff changeset
113 vrq->cert_chain = purple_certificate_copy_list(cert_chain);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
114 vrq->cb = cb;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
115 vrq->cb_data = cb_data;
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
116
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
117 /* Initiate verification */
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
118 (verifier->start_verification)(vrq);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
119 }
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
120
18466
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
121 void
19028
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
122 purple_certificate_verify_complete(PurpleCertificateVerificationRequest *vrq,
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
123 PurpleCertificateVerificationStatus st)
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
124 {
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
125 PurpleCertificateVerifier *vr;
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
126
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
127 g_return_if_fail(vrq);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
128
20832
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
129 if (st == PURPLE_CERTIFICATE_VALID) {
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
130 purple_debug_info("certificate",
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
131 "Successfully verified certificate for %s\n",
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
132 vrq->subject_name);
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
133 } else {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 25905
diff changeset
134 purple_debug_error("certificate",
20832
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
135 "Failed to verify certificate for %s\n",
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
136 vrq->subject_name);
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
137 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
138
19028
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
139 /* Pass the results on to the request's callback */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
140 (vrq->cb)(st, vrq->cb_data);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
141
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
142 /* And now to eliminate the request */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
143 /* Fetch the Verifier responsible... */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
144 vr = vrq->verifier;
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
145 /* ...and order it to KILL */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
146 (vr->destroy_request)(vrq);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
147
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
148 /* Now the internals have been cleaned up, so clean up the libpurple-
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
149 created elements */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
150 g_free(vrq->subject_name);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
151 purple_certificate_destroy_list(vrq->cert_chain);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
152
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
153 /* A structure born
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
154 * to much ado
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
155 * and with so much within.
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
156 * It reaches now
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
157 * its quiet end. */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
158 g_free(vrq);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
159 }
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
160
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
161
18653
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
162 PurpleCertificate *
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
163 purple_certificate_copy(PurpleCertificate *crt)
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
164 {
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
165 g_return_val_if_fail(crt, NULL);
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
166 g_return_val_if_fail(crt->scheme, NULL);
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
167 g_return_val_if_fail(crt->scheme->copy_certificate, NULL);
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
168
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
169 return (crt->scheme->copy_certificate)(crt);
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
170 }
18467
6bd91f3acf84 - Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18466
diff changeset
171
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
172 GList *
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
173 purple_certificate_copy_list(GList *crt_list)
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
174 {
24488
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
175 GList *new_l, *l;
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
176
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
177 /* First, make a shallow copy of the list */
24488
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
178 new_l = g_list_copy(crt_list);
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
179
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
180 /* Now go through and actually duplicate each certificate */
24488
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
181 for (l = new_l; l; l = l->next) {
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
182 l->data = purple_certificate_copy(l->data);
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
183 }
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
184
24488
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
185 return new_l;
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
186 }
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
187
18467
6bd91f3acf84 - Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18466
diff changeset
188 void
18466
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
189 purple_certificate_destroy (PurpleCertificate *crt)
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
190 {
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
191 PurpleCertificateScheme *scheme;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
192
18466
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
193 if (NULL == crt) return;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
194
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
195 scheme = crt->scheme;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
196
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
197 (scheme->destroy_certificate)(crt);
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
198 }
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
199
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
200 void
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
201 purple_certificate_destroy_list (GList * crt_list)
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
202 {
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
203 PurpleCertificate *crt;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
204 GList *l;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
205
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
206 for (l=crt_list; l; l = l->next) {
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
207 crt = (PurpleCertificate *) l->data;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
208 purple_certificate_destroy(crt);
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
209 }
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
210
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
211 g_list_free(crt_list);
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
212 }
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
213
19016
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
214 gboolean
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
215 purple_certificate_signed_by(PurpleCertificate *crt, PurpleCertificate *issuer)
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
216 {
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
217 PurpleCertificateScheme *scheme;
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
218
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
219 g_return_val_if_fail(crt, FALSE);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
220 g_return_val_if_fail(issuer, FALSE);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
221
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
222 scheme = crt->scheme;
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
223 g_return_val_if_fail(scheme, FALSE);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
224 /* We can't compare two certs of unrelated schemes, obviously */
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
225 g_return_val_if_fail(issuer->scheme == scheme, FALSE);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
226
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
227 return (scheme->signed_by)(crt, issuer);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
228 }
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
229
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
230 gboolean
32590
65bb6a842cdc Remove the old deprecated purple_certificate_check_signature_chain.
Andrew Victor <andrew.victor@mxit.com>
parents: 31868
diff changeset
231 purple_certificate_check_signature_chain(GList *chain,
27936
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
232 PurpleCertificate **failing)
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
233 {
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
234 GList *cur;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
235 PurpleCertificate *crt, *issuer;
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
236 gchar *uid;
34246
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
237 time_t now;
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
238 gint64 activation, expiration;
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
239 gboolean ret;
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
240
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
241 g_return_val_if_fail(chain, FALSE);
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
242
27936
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
243 if (failing)
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
244 *failing = NULL;
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
245
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
246 uid = purple_certificate_get_unique_id((PurpleCertificate *) chain->data);
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
247 purple_debug_info("certificate",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
248 "Checking signature chain for uid=%s\n",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
249 uid);
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
250 g_free(uid);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
251
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
252 /* If this is a single-certificate chain, say that it is valid */
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
253 if (chain->next == NULL) {
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
254 purple_debug_info("certificate",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
255 "...Singleton. We'll say it's valid.\n");
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
256 return TRUE;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
257 }
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
258
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
259 now = time(NULL);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
260
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
261 /* Load crt with the first certificate */
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
262 crt = (PurpleCertificate *)(chain->data);
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
263 /* And start with the second certificate in the chain */
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
264 for ( cur = chain->next; cur; cur = cur->next ) {
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
265
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
266 issuer = (PurpleCertificate *)(cur->data);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
267
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
268 uid = purple_certificate_get_unique_id(issuer);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
269
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
270 ret = purple_certificate_get_times(issuer, &activation, &expiration);
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 31155
diff changeset
271 if (!ret || now < activation || now > expiration) {
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
272 if (!ret)
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
273 purple_debug_error("certificate",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
274 "...Failed to get validity times for certificate %s\n"
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
275 "Chain is INVALID\n", uid);
34246
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
276 else if (now > expiration) {
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
277 #if GLIB_CHECK_VERSION(2,26,0)
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
278 GDateTime *exp_dt = g_date_time_new_from_unix_local(expiration);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
279 gchar *expir_str = g_date_time_format(exp_dt, "%c");
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
280 g_date_time_unref(exp_dt);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
281 #else
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
282 gchar *expir_str = g_strdup(ctime(&expiration));
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
283 #endif
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
284 purple_debug_error("certificate",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
285 "...Issuer %s expired at %s\nChain is INVALID\n",
34246
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
286 uid, expir_str);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
287 g_free(expir_str);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
288 } else {
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
289 #if GLIB_CHECK_VERSION(2,26,0)
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
290 GDateTime *act_dt = g_date_time_new_from_unix_local(activation);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
291 gchar *activ_str = g_date_time_format(act_dt, "%c");
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
292 g_date_time_unref(act_dt);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
293 #else
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
294 gchar *activ_str = g_strdup(ctime(&activation));
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
295 #endif
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
296 purple_debug_error("certificate",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
297 "...Not-yet-activated issuer %s will be valid at %s\n"
34246
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
298 "Chain is INVALID\n", uid, activ_str);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
299 g_free(activ_str);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
300 }
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
301
27936
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
302 if (failing)
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
303 *failing = crt;
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
304
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
305 g_free(uid);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
306 return FALSE;
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
307 }
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
308
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
309 /* Check the signature for this link */
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
310 if (! purple_certificate_signed_by(crt, issuer) ) {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 25905
diff changeset
311 purple_debug_error("certificate",
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
312 "...Bad or missing signature by %s\nChain is INVALID\n",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
313 uid);
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
314 g_free(uid);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
315
27936
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
316 if (failing)
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
317 *failing = crt;
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
318
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
319 return FALSE;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
320 }
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
321
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
322 purple_debug_info("certificate",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
323 "...Good signature by %s\n",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
324 uid);
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
325 g_free(uid);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
326
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
327 /* The issuer is now the next crt whose signature is to be
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
328 checked */
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
329 crt = issuer;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
330 }
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
331
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
332 /* If control reaches this point, the chain is valid */
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
333 purple_debug_info("certificate", "Chain is VALID\n");
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
334 return TRUE;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
335 }
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
336
18577
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
337 PurpleCertificate *
18578
95080ca9610a - Fixed naming issues in previous revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18577
diff changeset
338 purple_certificate_import(PurpleCertificateScheme *scheme, const gchar *filename)
18577
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
339 {
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
340 g_return_val_if_fail(scheme, NULL);
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
341 g_return_val_if_fail(scheme->import_certificate, NULL);
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
342 g_return_val_if_fail(filename, NULL);
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
343
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
344 return (scheme->import_certificate)(filename);
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
345 }
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
346
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
347 GSList *
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
348 purple_certificates_import(PurpleCertificateScheme *scheme, const gchar *filename)
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
349 {
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
350 g_return_val_if_fail(scheme, NULL);
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
351 g_return_val_if_fail(scheme->import_certificates, NULL);
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
352 g_return_val_if_fail(filename, NULL);
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
353
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
354 return (scheme->import_certificates)(filename);
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
355 }
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
356
18496
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
357 gboolean
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
358 purple_certificate_export(const gchar *filename, PurpleCertificate *crt)
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
359 {
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
360 PurpleCertificateScheme *scheme;
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
361
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
362 g_return_val_if_fail(filename, FALSE);
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
363 g_return_val_if_fail(crt, FALSE);
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
364 g_return_val_if_fail(crt->scheme, FALSE);
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
365
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
366 scheme = crt->scheme;
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
367 g_return_val_if_fail(scheme->export_certificate, FALSE);
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
368
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
369 return (scheme->export_certificate)(filename, crt);
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
370 }
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
371
27934
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
372 static gboolean
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
373 byte_arrays_equal(const GByteArray *array1, const GByteArray *array2)
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
374 {
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
375 g_return_val_if_fail(array1 != NULL, FALSE);
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
376 g_return_val_if_fail(array2 != NULL, FALSE);
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
377
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
378 return (array1->len == array2->len) &&
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
379 (0 == memcmp(array1->data, array2->data, array1->len));
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
380 }
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 31155
diff changeset
381
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
382 GByteArray *
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
383 purple_certificate_get_fingerprint_sha1(PurpleCertificate *crt)
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
384 {
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
385 PurpleCertificateScheme *scheme;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
386 GByteArray *fpr;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
387
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
388 g_return_val_if_fail(crt, NULL);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
389 g_return_val_if_fail(crt->scheme, NULL);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
390
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
391 scheme = crt->scheme;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
392
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
393 g_return_val_if_fail(scheme->get_fingerprint_sha1, NULL);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
394
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
395 fpr = (scheme->get_fingerprint_sha1)(crt);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
396
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
397 return fpr;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
398 }
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
399
18481
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
400 gchar *
19020
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
401 purple_certificate_get_unique_id(PurpleCertificate *crt)
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
402 {
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
403 g_return_val_if_fail(crt, NULL);
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
404 g_return_val_if_fail(crt->scheme, NULL);
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
405 g_return_val_if_fail(crt->scheme->get_unique_id, NULL);
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
406
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
407 return (crt->scheme->get_unique_id)(crt);
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
408 }
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
409
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
410 gchar *
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
411 purple_certificate_get_issuer_unique_id(PurpleCertificate *crt)
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
412 {
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
413 g_return_val_if_fail(crt, NULL);
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
414 g_return_val_if_fail(crt->scheme, NULL);
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
415 g_return_val_if_fail(crt->scheme->get_issuer_unique_id, NULL);
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
416
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
417 return (crt->scheme->get_issuer_unique_id)(crt);
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
418 }
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
419
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
420 gchar *
18481
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
421 purple_certificate_get_subject_name(PurpleCertificate *crt)
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
422 {
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
423 PurpleCertificateScheme *scheme;
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
424 gchar *subject_name;
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
425
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
426 g_return_val_if_fail(crt, NULL);
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
427 g_return_val_if_fail(crt->scheme, NULL);
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
428
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
429 scheme = crt->scheme;
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
430
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
431 g_return_val_if_fail(scheme->get_subject_name, NULL);
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
432
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
433 subject_name = (scheme->get_subject_name)(crt);
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
434
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
435 return subject_name;
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
436 }
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
437
18643
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
438 gboolean
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
439 purple_certificate_check_subject_name(PurpleCertificate *crt, const gchar *name)
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
440 {
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
441 PurpleCertificateScheme *scheme;
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
442
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
443 g_return_val_if_fail(crt, FALSE);
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
444 g_return_val_if_fail(crt->scheme, FALSE);
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
445 g_return_val_if_fail(name, FALSE);
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
446
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
447 scheme = crt->scheme;
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
448
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
449 g_return_val_if_fail(scheme->check_subject_name, FALSE);
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
450
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
451 return (scheme->check_subject_name)(crt, name);
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
452 }
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
453
18647
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
454 gboolean
34246
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
455 purple_certificate_get_times(PurpleCertificate *crt, gint64 *activation, gint64 *expiration)
18647
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
456 {
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
457 PurpleCertificateScheme *scheme;
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
458
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
459 g_return_val_if_fail(crt, FALSE);
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
460
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
461 scheme = crt->scheme;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
462
18647
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
463 g_return_val_if_fail(scheme, FALSE);
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
464
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
465 /* If both provided references are NULL, what are you doing calling
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
466 this? */
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
467 g_return_val_if_fail( (activation != NULL) || (expiration != NULL), FALSE);
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
468
19007
f3c3ddf37812 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19003
diff changeset
469 /* Throw the request on down to the certscheme */
f3c3ddf37812 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19003
diff changeset
470 return (scheme->get_times)(crt, activation, expiration);
18647
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
471 }
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
472
32767
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
473 GByteArray *
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
474 purple_certificate_get_der_data(PurpleCertificate *crt)
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
475 {
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
476 PurpleCertificateScheme *scheme;
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
477 GByteArray *data;
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
478
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
479 g_return_val_if_fail(crt, NULL);
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
480 g_return_val_if_fail(crt->scheme, NULL);
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
481
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
482 scheme = crt->scheme;
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
483
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
484 g_return_val_if_fail(scheme->get_der_data, NULL);
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
485
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
486 data = (scheme->get_der_data)(crt);
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
487
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
488 return data;
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
489 }
581cd5f30198 Add a function for retrieving the raw DER representation of a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32590
diff changeset
490
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
491 gchar *
32885
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
492 purple_certificate_get_display_string(PurpleCertificate *crt)
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
493 {
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
494 PurpleCertificateScheme *scheme;
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
495 gchar *str;
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
496
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
497 g_return_val_if_fail(crt, NULL);
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
498 g_return_val_if_fail(crt->scheme, NULL);
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
499
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
500 scheme = crt->scheme;
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
501
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
502 g_return_val_if_fail(scheme->get_display_string, NULL);
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
503
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
504 str = (scheme->get_display_string)(crt);
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
505
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
506 return str;
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
507 }
d65261e7426e Add a function for converting a PurpleCertificate to a string
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32767
diff changeset
508
34792
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
509 GType
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
510 purple_certificate_get_type(void)
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
511 {
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
512 static GType type = 0;
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
513
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
514 if (type == 0) {
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
515 type = g_boxed_type_register_static("PurpleCertificate",
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
516 (GBoxedCopyFunc)purple_certificate_copy,
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
517 (GBoxedFreeFunc)purple_certificate_destroy);
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
518 }
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
519
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
520 return type;
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
521 }
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
522
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
523 gchar *
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
524 purple_certificate_pool_mkpath(PurpleCertificatePool *pool, const gchar *id)
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
525 {
18645
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
526 gchar *path;
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
527 gchar *esc_scheme_name, *esc_name, *esc_id;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
528
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
529 g_return_val_if_fail(pool, NULL);
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
530 g_return_val_if_fail(pool->scheme_name, NULL);
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
531 g_return_val_if_fail(pool->name, NULL);
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
532
18645
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
533 /* Escape all the elements for filesystem-friendliness */
33769
96f89e35d24d Fix various "Dereference before null check" issues
Daniel Atallah <datallah@pidgin.im>
parents: 31377
diff changeset
534 esc_scheme_name = g_strdup(purple_escape_filename(pool->scheme_name));
96f89e35d24d Fix various "Dereference before null check" issues
Daniel Atallah <datallah@pidgin.im>
parents: 31377
diff changeset
535 esc_name = g_strdup(purple_escape_filename(pool->name));
18817
d4d89568fab6 - Handle NULLs given to certificate_pool_mkpath without causing errors
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18662
diff changeset
536 esc_id = id ? g_strdup(purple_escape_filename(id)) : NULL;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
537
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
538 path = g_build_filename(purple_user_dir(),
18575
24299c91b963 - Correct the certstore folder paths
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18574
diff changeset
539 "certificates", /* TODO: constantize this? */
18645
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
540 esc_scheme_name,
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
541 esc_name,
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
542 esc_id,
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
543 NULL);
18644
ac67b1ff08c4 - pool_mkpath now runs purple_escape_filename on its return value
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18643
diff changeset
544
18645
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
545 g_free(esc_scheme_name);
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
546 g_free(esc_name);
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
547 g_free(esc_id);
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
548 return path;
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
549 }
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
550
18584
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
551 gboolean
18818
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
552 purple_certificate_pool_usable(PurpleCertificatePool *pool)
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
553 {
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
554 g_return_val_if_fail(pool, FALSE);
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
555 g_return_val_if_fail(pool->scheme_name, FALSE);
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
556
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
557 /* Check that the pool's scheme is loaded */
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
558 if (purple_certificate_find_scheme(pool->scheme_name) == NULL) {
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
559 return FALSE;
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
560 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
561
18818
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
562 return TRUE;
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
563 }
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
564
19000
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
565 PurpleCertificateScheme *
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
566 purple_certificate_pool_get_scheme(PurpleCertificatePool *pool)
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
567 {
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
568 g_return_val_if_fail(pool, NULL);
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
569 g_return_val_if_fail(pool->scheme_name, NULL);
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
570
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
571 return purple_certificate_find_scheme(pool->scheme_name);
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
572 }
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
573
18818
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
574 gboolean
18584
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
575 purple_certificate_pool_contains(PurpleCertificatePool *pool, const gchar *id)
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
576 {
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
577 g_return_val_if_fail(pool, FALSE);
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
578 g_return_val_if_fail(id, FALSE);
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
579 g_return_val_if_fail(pool->cert_in_pool, FALSE);
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
580
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
581 return (pool->cert_in_pool)(id);
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
582 }
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
583
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
584 PurpleCertificate *
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
585 purple_certificate_pool_retrieve(PurpleCertificatePool *pool, const gchar *id)
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
586 {
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
587 g_return_val_if_fail(pool, NULL);
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
588 g_return_val_if_fail(id, NULL);
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
589 g_return_val_if_fail(pool->get_cert, NULL);
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
590
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
591 return (pool->get_cert)(id);
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
592 }
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
593
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
594 gboolean
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
595 purple_certificate_pool_store(PurpleCertificatePool *pool, const gchar *id, PurpleCertificate *crt)
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
596 {
18896
70742468a820 - Emit certificate-stored signal in purple_certificate_pool_store
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18894
diff changeset
597 gboolean ret = FALSE;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
598
18584
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
599 g_return_val_if_fail(pool, FALSE);
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
600 g_return_val_if_fail(id, FALSE);
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
601 g_return_val_if_fail(pool->put_cert, FALSE);
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
602
18585
5a9738565416 - Do some weak checking to ensure that you don't attempt to store a
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18584
diff changeset
603 /* Whether crt->scheme matches find_scheme(pool->scheme_name) is not
5a9738565416 - Do some weak checking to ensure that you don't attempt to store a
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18584
diff changeset
604 relevant... I think... */
5a9738565416 - Do some weak checking to ensure that you don't attempt to store a
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18584
diff changeset
605 g_return_val_if_fail(
5a9738565416 - Do some weak checking to ensure that you don't attempt to store a
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18584
diff changeset
606 g_ascii_strcasecmp(pool->scheme_name, crt->scheme->name) == 0,
5a9738565416 - Do some weak checking to ensure that you don't attempt to store a
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18584
diff changeset
607 FALSE);
18584
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
608
18896
70742468a820 - Emit certificate-stored signal in purple_certificate_pool_store
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18894
diff changeset
609 ret = (pool->put_cert)(id, crt);
70742468a820 - Emit certificate-stored signal in purple_certificate_pool_store
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18894
diff changeset
610
18900
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
611 /* Signal that the certificate was stored if success*/
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
612 if (ret) {
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
613 purple_signal_emit(pool, "certificate-stored",
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
614 pool, id);
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
615 }
18896
70742468a820 - Emit certificate-stored signal in purple_certificate_pool_store
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18894
diff changeset
616
70742468a820 - Emit certificate-stored signal in purple_certificate_pool_store
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18894
diff changeset
617 return ret;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
618 }
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
619
18899
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
620 gboolean
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
621 purple_certificate_pool_delete(PurpleCertificatePool *pool, const gchar *id)
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
622 {
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
623 gboolean ret = FALSE;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
624
18899
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
625 g_return_val_if_fail(pool, FALSE);
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
626 g_return_val_if_fail(id, FALSE);
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
627 g_return_val_if_fail(pool->delete_cert, FALSE);
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
628
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
629 ret = (pool->delete_cert)(id);
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
630
18900
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
631 /* Signal that the certificate was deleted if success */
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
632 if (ret) {
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
633 purple_signal_emit(pool, "certificate-deleted",
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
634 pool, id);
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
635 }
18899
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
636
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
637 return ret;
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
638 }
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
639
18661
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
640 GList *
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
641 purple_certificate_pool_get_idlist(PurpleCertificatePool *pool)
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
642 {
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
643 g_return_val_if_fail(pool, NULL);
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
644 g_return_val_if_fail(pool->get_idlist, NULL);
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
645
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
646 return (pool->get_idlist)();
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
647 }
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
648
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
649 void
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
650 purple_certificate_pool_destroy_idlist(GList *idlist)
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
651 {
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
652 GList *l;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
653
18661
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
654 /* Iterate through and free them strings */
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
655 for ( l = idlist; l; l = l->next ) {
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
656 g_free(l->data);
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
657 }
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
658
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
659 g_list_free(idlist);
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
660 }
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
661
34792
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
662 static PurpleCertificatePool *
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
663 purple_certificate_pool_copy(PurpleCertificatePool *certificate_pool)
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
664 {
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
665 PurpleCertificatePool *certificate_pool_copy;
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
666
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
667 g_return_val_if_fail(certificate_pool != NULL, NULL);
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
668
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
669 certificate_pool_copy = g_new(PurpleCertificatePool, 1);
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
670 *certificate_pool_copy = *certificate_pool;
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
671
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
672 return certificate_pool_copy;
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
673 }
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
674
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
675 GType
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
676 purple_certificate_pool_get_type(void)
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
677 {
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
678 static GType type = 0;
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
679
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
680 if (type == 0) {
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
681 type = g_boxed_type_register_static("PurpleCertificatePool",
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
682 (GBoxedCopyFunc)purple_certificate_pool_copy,
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
683 (GBoxedFreeFunc)g_free);
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
684 }
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
685
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
686 return type;
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
687 }
09228ea79272 Added GBoxed to certificate, certificate pool, xfer, log
Ankit Vani <a@nevitus.org>
parents: 34246
diff changeset
688
18661
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
689
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
690 /****************************************************************************/
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
691 /* Builtin Verifiers, Pools, etc. */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
692 /****************************************************************************/
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
693
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
694 static void
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
695 x509_singleuse_verify_accept_cb(PurpleCertificateVerificationRequest *vrq)
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
696 {
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
697 g_return_if_fail(vrq);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
698
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
699 purple_debug_info("certificate/x509_singleuse",
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
700 "VRQ on cert from %s accepted\n",
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
701 vrq->subject_name);
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
702
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
703 purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_VALID);
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
704 }
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
705
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
706 static void
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
707 x509_singleuse_verify_reject_cb(PurpleCertificateVerificationRequest *vrq)
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
708 {
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
709 g_return_if_fail(vrq);
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
710
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
711 purple_debug_info("certificate/x509_singleuse",
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
712 "VRQ on cert from %s rejected\n",
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
713 vrq->subject_name);
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
714
33637
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
715 purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_REJECTED);
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
716 }
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
717
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
718 static void
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
719 x509_singleuse_start_verify (PurpleCertificateVerificationRequest *vrq)
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
720 {
18483
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
721 gchar *cn;
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
722 const gchar *cn_match;
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
723 gchar *primary, *secondary;
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
724 PurpleCertificate *crt = (PurpleCertificate *)vrq->cert_chain->data;
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
725
18483
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
726 cn = purple_certificate_get_subject_name(crt);
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
727
19499
6b9c37c4ca85 - Even more TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19498
diff changeset
728 if (purple_certificate_check_subject_name(crt, vrq->subject_name)) {
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
729 cn_match = _("(MATCH)");
18483
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
730 } else {
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
731 cn_match = _("(DOES NOT MATCH)");
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
732 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
733
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
734 primary = g_strdup_printf(_("%s has presented the following certificate for just-this-once use:"), vrq->subject_name);
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
735 secondary = g_strdup_printf(_("Common name: %s %s"), cn, cn_match);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
736
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
737 /* Make a semi-pretty display */
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
738 purple_request_certificate(
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
739 vrq->cb_data, /* TODO: Find what the handle ought to be */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
740 _("Single-use Certificate Verification"),
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
741 primary,
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
742 secondary,
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
743 crt,
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
744 _("Accept"), G_CALLBACK(x509_singleuse_verify_accept_cb),
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
745 _("Reject"), G_CALLBACK(x509_singleuse_verify_reject_cb),
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
746 vrq);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
747
29982
e2a8f797a521 A couple more leak fixes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29930
diff changeset
748 g_free(cn);
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
749 g_free(primary);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
750 g_free(secondary);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
751 }
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
752
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
753 static void
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
754 x509_singleuse_destroy_request (PurpleCertificateVerificationRequest *vrq)
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
755 {
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
756 /* I don't do anything! */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
757 }
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
758
22734
4d1dde18dada Make x509_singleuse static
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22622
diff changeset
759 static PurpleCertificateVerifier x509_singleuse = {
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
760 "x509", /* Scheme name */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
761 "singleuse", /* Verifier name */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
762 x509_singleuse_start_verify, /* start_verification function */
19827
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
763 x509_singleuse_destroy_request, /* Request cleanup operation */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
764
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
765 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
766 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
767 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
768 NULL
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
769 };
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
770
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
771
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
772
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
773 /***** X.509 Certificate Authority pool, keyed by Distinguished Name *****/
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
774 /* This is implemented in what may be the most inefficient and bugprone way
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
775 possible; however, future optimizations should not be difficult. */
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
776
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
777 static PurpleCertificatePool x509_ca;
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
778
35458
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
779 /* Holds a key-value pair for quickish certificate lookup */
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
780 typedef struct {
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
781 gchar *dn;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
782 PurpleCertificate *crt;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
783 } x509_ca_element;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
784
19348
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
785 static void
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
786 x509_ca_element_free(x509_ca_element *el)
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
787 {
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
788 if (NULL == el) return;
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
789
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
790 g_free(el->dn);
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
791 purple_certificate_destroy(el->crt);
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
792 g_free(el);
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
793 }
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
794
35458
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
795 /* System directory to probe for CA certificates */
19484
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
796 /* This is set in the lazy_init function */
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
797 static GList *x509_ca_paths = NULL;
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
798
35458
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
799 /* A list of loaded CAs, populated from the above path whenever the lazy_init
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
800 happens. Contains pointers to x509_ca_elements */
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
801 static GList *x509_ca_certs = NULL;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
802
35458
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
803 /* Used for lazy initialization purposes. */
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
804 static gboolean x509_ca_initialized = FALSE;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
805
35458
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
806 /* Adds a certificate to the in-memory cache, doing nothing else */
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
807 static gboolean
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
808 x509_ca_quiet_put_cert(PurpleCertificate *crt)
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
809 {
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
810 x509_ca_element *el;
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
811
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
812 /* lazy_init calls this function, so calling lazy_init here is a
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
813 Bad Thing */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
814
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
815 g_return_val_if_fail(crt, FALSE);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
816 g_return_val_if_fail(crt->scheme, FALSE);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
817 /* Make sure that this is some kind of X.509 certificate */
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
818 /* TODO: Perhaps just check crt->scheme->name instead? */
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
819 g_return_val_if_fail(crt->scheme == purple_certificate_find_scheme(x509_ca.scheme_name), FALSE);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
820
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
821 el = g_new0(x509_ca_element, 1);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
822 el->dn = purple_certificate_get_unique_id(crt);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
823 el->crt = purple_certificate_copy(crt);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
824 x509_ca_certs = g_list_prepend(x509_ca_certs, el);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
825
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
826 return TRUE;
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
827 }
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
828
19484
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
829 /* Since the libpurple CertificatePools get registered before plugins are
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
830 loaded, an X.509 Scheme is generally not available when x509_ca_init is
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
831 called, but x509_ca requires X.509 operations in order to properly load.
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
832
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
833 To solve this, I present the lazy_init function. It attempts to finish
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
834 initialization of the Pool, but it usually fails when it is called from
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
835 x509_ca_init. However, this is OK; initialization is then simply deferred
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
836 until someone tries to use functions from the pool. */
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
837 static gboolean
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
838 x509_ca_lazy_init(void)
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
839 {
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
840 PurpleCertificateScheme *x509;
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
841 GDir *certdir;
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
842 const gchar *entry;
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
843 GPatternSpec *pempat, *crtpat;
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
844 GList *iter = NULL;
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
845 GSList *crts = NULL;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
846
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
847 if (x509_ca_initialized) return TRUE;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
848
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
849 /* Check that X.509 is registered */
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
850 x509 = purple_certificate_find_scheme(x509_ca.scheme_name);
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
851 if ( !x509 ) {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 25905
diff changeset
852 purple_debug_warning("certificate/x509/ca",
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
853 "Lazy init failed because an X.509 Scheme "
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
854 "is not yet registered. Maybe it will be "
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
855 "better later.\n");
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
856 return FALSE;
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
857 }
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
858
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
859 /* Use a glob to only read .pem files */
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
860 pempat = g_pattern_spec_new("*.pem");
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
861 crtpat = g_pattern_spec_new("*.crt");
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
862
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
863 /* Populate the certificates pool from the search path(s) */
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
864 for (iter = x509_ca_paths; iter; iter = iter->next) {
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
865 certdir = g_dir_open(iter->data, 0, NULL);
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
866 if (!certdir) {
22622
1ecb840b5101 Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <markdoliner@pidgin.im>
parents: 22269
diff changeset
867 purple_debug_error("certificate/x509/ca", "Couldn't open location '%s'\n", (const char *)iter->data);
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
868 continue;
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
869 }
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
870
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
871 while ( (entry = g_dir_read_name(certdir)) ) {
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
872 gchar *fullpath;
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
873 PurpleCertificate *crt;
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
874
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
875 if (!g_pattern_match_string(pempat, entry) && !g_pattern_match_string(crtpat, entry)) {
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
876 continue;
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
877 }
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
878
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
879 fullpath = g_build_filename(iter->data, entry, NULL);
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
880
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
881 /* TODO: Respond to a failure in the following? */
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
882 crts = purple_certificates_import(x509, fullpath);
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
883
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
884 while (crts && crts->data) {
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
885 crt = crts->data;
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
886 if (x509_ca_quiet_put_cert(crt)) {
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
887 gchar *name;
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
888 name = purple_certificate_get_subject_name(crt);
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
889 purple_debug_info("certificate/x509/ca",
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
890 "Loaded %s from %s\n",
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
891 name ? name : "(unknown)", fullpath);
29982
e2a8f797a521 A couple more leak fixes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29930
diff changeset
892 g_free(name);
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
893 } else {
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
894 purple_debug_error("certificate/x509/ca",
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
895 "Failed to load certificate from %s\n",
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
896 fullpath);
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
897 }
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
898 purple_certificate_destroy(crt);
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
899 crts = g_slist_delete_link(crts, crts);
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
900 }
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
901
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
902 g_free(fullpath);
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
903 }
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
904 g_dir_close(certdir);
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
905 }
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
906
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
907 g_pattern_spec_free(pempat);
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
908 g_pattern_spec_free(crtpat);
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
909
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
910 purple_debug_info("certificate/x509/ca",
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
911 "Lazy init completed.\n");
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
912 x509_ca_initialized = TRUE;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
913 return TRUE;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
914 }
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
915
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
916 static gboolean
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
917 x509_ca_init(void)
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
918 {
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
919 /* Attempt to point at the appropriate system path */
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
920 if (NULL == x509_ca_paths) {
35850
1abeda205d6c cross-win32: make dirs more flexible, add them to the config.h
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35458
diff changeset
921 #ifdef SSL_CERTIFICATES_DIR
1abeda205d6c cross-win32: make dirs more flexible, add them to the config.h
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35458
diff changeset
922 x509_ca_paths = g_list_append(x509_ca_paths,
1abeda205d6c cross-win32: make dirs more flexible, add them to the config.h
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35458
diff changeset
923 g_strdup(SSL_CERTIFICATES_DIR));
1abeda205d6c cross-win32: make dirs more flexible, add them to the config.h
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35458
diff changeset
924 #endif
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
925 #ifdef _WIN32
35850
1abeda205d6c cross-win32: make dirs more flexible, add them to the config.h
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35458
diff changeset
926 x509_ca_paths = g_list_append(x509_ca_paths, g_build_filename(
1abeda205d6c cross-win32: make dirs more flexible, add them to the config.h
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35458
diff changeset
927 PURPLE_DATADIR, "ca-certs", NULL));
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
928 #else
35850
1abeda205d6c cross-win32: make dirs more flexible, add them to the config.h
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35458
diff changeset
929 x509_ca_paths = g_list_append(x509_ca_paths, g_build_filename(
1abeda205d6c cross-win32: make dirs more flexible, add them to the config.h
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35458
diff changeset
930 PURPLE_DATADIR, "purple", "ca-certs", NULL));
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
931 #endif
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
932 }
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
933
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
934 /* Attempt to initialize now, but if it doesn't work, that's OK;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
935 it will get done later */
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
936 if ( ! x509_ca_lazy_init()) {
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
937 purple_debug_info("certificate/x509/ca",
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
938 "Init failed, probably because a "
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
939 "dependency is not yet registered. "
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
940 "It has been deferred to later.\n");
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
941 }
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
942
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
943 return TRUE;
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
944 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
945
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
946 static void
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
947 x509_ca_uninit(void)
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
948 {
19343
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
949 GList *l;
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
950
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
951 for (l = x509_ca_certs; l; l = l->next) {
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
952 x509_ca_element *el = l->data;
19348
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
953 x509_ca_element_free(el);
19343
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
954 }
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
955 g_list_free(x509_ca_certs);
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
956 x509_ca_certs = NULL;
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
957 x509_ca_initialized = FALSE;
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
958 g_list_foreach(x509_ca_paths, (GFunc)g_free, NULL);
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
959 g_list_free(x509_ca_paths);
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
960 x509_ca_paths = NULL;
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
961 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
962
35458
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
963 /* Look up a ca_element by dn */
19344
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
964 static x509_ca_element *
19346
e0ae1b11effb Cosmetics
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19345
diff changeset
965 x509_ca_locate_cert(GList *lst, const gchar *dn)
19344
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
966 {
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
967 GList *cur;
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
968
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
969 for (cur = lst; cur; cur = cur->next) {
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
970 x509_ca_element *el = cur->data;
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 25275
diff changeset
971 if (purple_strequal(dn, el->dn)) {
19344
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
972 return el;
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
973 }
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
974 }
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
975 return NULL;
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
976 }
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
977
31155
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
978 static GSList *
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
979 x509_ca_locate_certs(GList *lst, const gchar *dn)
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
980 {
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
981 GList *cur;
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
982 GSList *crts = NULL;
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
983
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
984 for (cur = lst; cur; cur = cur->next) {
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
985 x509_ca_element *el = cur->data;
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
986 if (purple_strequal(dn, el->dn)) {
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
987 crts = g_slist_prepend(crts, el);
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
988 }
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
989 }
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
990 return crts;
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
991 }
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
992
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
993
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
994 static gboolean
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
995 x509_ca_cert_in_pool(const gchar *id)
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
996 {
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
997 g_return_val_if_fail(x509_ca_lazy_init(), FALSE);
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
998 g_return_val_if_fail(id, FALSE);
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
999
19346
e0ae1b11effb Cosmetics
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19345
diff changeset
1000 if (x509_ca_locate_cert(x509_ca_certs, id) != NULL) {
19345
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
1001 return TRUE;
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
1002 } else {
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
1003 return FALSE;
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
1004 }
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
1005
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
1006 return FALSE;
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1007 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1008
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1009 static PurpleCertificate *
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1010 x509_ca_get_cert(const gchar *id)
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1011 {
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1012 PurpleCertificate *crt = NULL;
19347
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1013 x509_ca_element *el;
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
1014
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
1015 g_return_val_if_fail(x509_ca_lazy_init(), NULL);
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1016 g_return_val_if_fail(id, NULL);
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1017
19347
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1018 /* Search the memory-cached pool */
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1019 el = x509_ca_locate_cert(x509_ca_certs, id);
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1020
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1021 if (el != NULL) {
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1022 /* Make a copy of the memcached one for the function caller
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1023 to play with */
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1024 crt = purple_certificate_copy(el->crt);
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1025 } else {
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1026 crt = NULL;
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1027 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1028
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1029 return crt;
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1030 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1031
31155
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1032 static GSList *
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1033 x509_ca_get_certs(const gchar *id)
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1034 {
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1035 GSList *crts = NULL, *els = NULL;
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1036
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1037 g_return_val_if_fail(x509_ca_lazy_init(), NULL);
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1038 g_return_val_if_fail(id, NULL);
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1039
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1040 /* Search the memory-cached pool */
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1041 els = x509_ca_locate_certs(x509_ca_certs, id);
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1042
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1043 if (els != NULL) {
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1044 GSList *cur;
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1045 /* Make a copy of the memcached ones for the function caller
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1046 to play with */
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1047 for (cur = els; cur; cur = cur->next) {
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1048 x509_ca_element *el = cur->data;
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1049 crts = g_slist_prepend(crts, purple_certificate_copy(el->crt));
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1050 }
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1051 g_slist_free(els);
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1052 }
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1053
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1054 return crts;
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1055 }
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1056
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1057 static gboolean
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1058 x509_ca_put_cert(const gchar *id, PurpleCertificate *crt)
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1059 {
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1060 gboolean ret = FALSE;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1061
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
1062 g_return_val_if_fail(x509_ca_lazy_init(), FALSE);
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1063
19036
62025e265d24 - Add a hacked-up method of adding certs to the CA pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19035
diff changeset
1064 /* TODO: This is a quick way of doing this. At some point the change
62025e265d24 - Add a hacked-up method of adding certs to the CA pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19035
diff changeset
1065 ought to be flushed to disk somehow. */
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
1066 ret = x509_ca_quiet_put_cert(crt);
19036
62025e265d24 - Add a hacked-up method of adding certs to the CA pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19035
diff changeset
1067
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1068 return ret;
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1069 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1070
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1071 static gboolean
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1072 x509_ca_delete_cert(const gchar *id)
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1073 {
19349
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1074 x509_ca_element *el;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1075
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
1076 g_return_val_if_fail(x509_ca_lazy_init(), FALSE);
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1077 g_return_val_if_fail(id, FALSE);
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1078
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1079 /* Is the id even in the pool? */
19349
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1080 el = x509_ca_locate_cert(x509_ca_certs, id);
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1081 if ( el == NULL ) {
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
1082 purple_debug_warning("certificate/x509/ca",
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1083 "Id %s wasn't in the pool\n",
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1084 id);
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1085 return FALSE;
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1086 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1087
19349
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1088 /* Unlink it from the memory cache and destroy it */
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1089 x509_ca_certs = g_list_remove(x509_ca_certs, el);
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1090 x509_ca_element_free(el);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1091
19349
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1092 return TRUE;
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1093 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1094
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1095 static GList *
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1096 x509_ca_get_idlist(void)
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1097 {
19350
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1098 GList *l, *idlist;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1099
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
1100 g_return_val_if_fail(x509_ca_lazy_init(), NULL);
19350
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1101
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1102 idlist = NULL;
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1103 for (l = x509_ca_certs; l; l = l->next) {
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1104 x509_ca_element *el = l->data;
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1105 idlist = g_list_prepend(idlist, g_strdup(el->dn));
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1106 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1107
19350
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1108 return idlist;
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1109 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1110
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1111
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1112 static PurpleCertificatePool x509_ca = {
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1113 "x509", /* Scheme name */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1114 "ca", /* Pool name */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1115 N_("Certificate Authorities"),/* User-friendly name */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1116 NULL, /* Internal data */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1117 x509_ca_init, /* init */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1118 x509_ca_uninit, /* uninit */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1119 x509_ca_cert_in_pool, /* Certificate exists? */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1120 x509_ca_get_cert, /* Cert retriever */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1121 x509_ca_put_cert, /* Cert writer */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1122 x509_ca_delete_cert, /* Cert remover */
19827
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1123 x509_ca_get_idlist, /* idlist retriever */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1124
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1125 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1126 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1127 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1128 NULL
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1129
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1130 };
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1131
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1132
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1133
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1134 /***** Cache of certificates given by TLS/SSL peers *****/
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1135 static PurpleCertificatePool x509_tls_peers;
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1136
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1137 static gboolean
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1138 x509_tls_peers_init(void)
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1139 {
18574
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
1140 gchar *poolpath;
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
1141 int ret;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1142
18574
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
1143 /* Set up key cache here if it isn't already done */
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
1144 poolpath = purple_certificate_pool_mkpath(&x509_tls_peers, NULL);
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
1145 ret = purple_build_dir(poolpath, 0700); /* Make it this user only */
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1146
27788
135010d3e3a9 Don't fail an assertion and don't return FALSE if we can't create
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1147 if (ret != 0)
135010d3e3a9 Don't fail an assertion and don't return FALSE if we can't create
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1148 purple_debug_info("certificate/tls_peers",
135010d3e3a9 Don't fail an assertion and don't return FALSE if we can't create
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1149 "Could not create %s. Certificates will not be cached.\n",
135010d3e3a9 Don't fail an assertion and don't return FALSE if we can't create
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1150 poolpath);
135010d3e3a9 Don't fail an assertion and don't return FALSE if we can't create
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1151
18574
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
1152 g_free(poolpath);
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
1153
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1154 return TRUE;
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1155 }
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1156
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1157 static gboolean
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1158 x509_tls_peers_cert_in_pool(const gchar *id)
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1159 {
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1160 gchar *keypath;
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1161 gboolean ret = FALSE;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1162
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1163 g_return_val_if_fail(id, FALSE);
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1164
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1165 keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id);
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1166
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1167 ret = g_file_test(keypath, G_FILE_TEST_IS_REGULAR);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1168
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1169 g_free(keypath);
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1170 return ret;
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1171 }
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1172
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1173 static PurpleCertificate *
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1174 x509_tls_peers_get_cert(const gchar *id)
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1175 {
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1176 PurpleCertificateScheme *x509;
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1177 PurpleCertificate *crt;
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1178 gchar *keypath;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1179
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1180 g_return_val_if_fail(id, NULL);
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1181
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1182 /* Is it in the pool? */
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1183 if ( !x509_tls_peers_cert_in_pool(id) ) {
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1184 return NULL;
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1185 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1186
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1187 /* Look up the X.509 scheme */
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1188 x509 = purple_certificate_find_scheme("x509");
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1189 g_return_val_if_fail(x509, NULL);
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1190
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1191 /* Okay, now find and load that key */
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1192 keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id);
18579
a479d0f12779 - Finish tls_peers get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18578
diff changeset
1193 crt = purple_certificate_import(x509, keypath);
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1194
18579
a479d0f12779 - Finish tls_peers get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18578
diff changeset
1195 g_free(keypath);
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1196
18579
a479d0f12779 - Finish tls_peers get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18578
diff changeset
1197 return crt;
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1198 }
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1199
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1200 static gboolean
18571
abab131c242c - CertificatePool put_cert now accepts an id argument
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18496
diff changeset
1201 x509_tls_peers_put_cert(const gchar *id, PurpleCertificate *crt)
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1202 {
18580
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1203 gboolean ret = FALSE;
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1204 gchar *keypath;
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1205
18580
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1206 g_return_val_if_fail(crt, FALSE);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1207 g_return_val_if_fail(crt->scheme, FALSE);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1208 /* Make sure that this is some kind of X.509 certificate */
18581
26b562cc939d - Comment change
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18580
diff changeset
1209 /* TODO: Perhaps just check crt->scheme->name instead? */
18580
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1210 g_return_val_if_fail(crt->scheme == purple_certificate_find_scheme(x509_tls_peers.scheme_name), FALSE);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1211
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1212 /* Work out the filename and export */
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1213 keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1214 ret = purple_certificate_export(keypath, crt);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1215
18580
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1216 g_free(keypath);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1217 return ret;
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1218 }
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1219
18897
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1220 static gboolean
18898
eb09543c2898 - remove_cert => delete_cert, because naming conventions are our
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18897
diff changeset
1221 x509_tls_peers_delete_cert(const gchar *id)
18897
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1222 {
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1223 gboolean ret = FALSE;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1224 gchar *keypath;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1225
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1226 g_return_val_if_fail(id, FALSE);
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1227
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1228 /* Is the id even in the pool? */
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1229 if (!x509_tls_peers_cert_in_pool(id)) {
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1230 purple_debug_warning("certificate/tls_peers",
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1231 "Id %s wasn't in the pool\n",
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1232 id);
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1233 return FALSE;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1234 }
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1235
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1236 /* OK, so work out the keypath and delete the thing */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1237 keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id);
18897
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1238 if ( unlink(keypath) != 0 ) {
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1239 purple_debug_error("certificate/tls_peers",
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1240 "Unlink of %s failed!\n",
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1241 keypath);
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1242 ret = FALSE;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1243 } else {
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1244 ret = TRUE;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1245 }
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1246
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1247 g_free(keypath);
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1248 return ret;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1249 }
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1250
18662
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1251 static GList *
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1252 x509_tls_peers_get_idlist(void)
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1253 {
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1254 GList *idlist = NULL;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1255 GDir *dir;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1256 const gchar *entry;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1257 gchar *poolpath;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1258
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1259 /* Get a handle on the pool directory */
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1260 poolpath = purple_certificate_pool_mkpath(&x509_tls_peers, NULL);
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1261 dir = g_dir_open(poolpath,
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1262 0, /* No flags */
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1263 NULL); /* Not interested in what the error is */
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1264 g_free(poolpath);
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1265
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1266 g_return_val_if_fail(dir, NULL);
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1267
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1268 /* Traverse the directory listing and create an idlist */
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1269 while ( (entry = g_dir_read_name(dir)) != NULL ) {
19018
2ebe15f875a6 - tls_peers pool unescapes filenames in its directory, as it should
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19017
diff changeset
1270 /* Unescape the filename */
2ebe15f875a6 - tls_peers pool unescapes filenames in its directory, as it should
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19017
diff changeset
1271 const char *unescaped = purple_unescape_filename(entry);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1272
18662
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1273 /* Copy the entry name into our list (GLib owns the original
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1274 string) */
19018
2ebe15f875a6 - tls_peers pool unescapes filenames in its directory, as it should
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19017
diff changeset
1275 idlist = g_list_prepend(idlist, g_strdup(unescaped));
18662
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1276 }
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1277
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1278 /* Release the directory */
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1279 g_dir_close(dir);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1280
18662
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1281 return idlist;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1282 }
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1283
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1284 static PurpleCertificatePool x509_tls_peers = {
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1285 "x509", /* Scheme name */
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1286 "tls_peers", /* Pool name */
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1287 N_("SSL Peers Cache"), /* User-friendly name */
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1288 NULL, /* Internal data */
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1289 x509_tls_peers_init, /* init */
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1290 NULL, /* uninit not required */
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1291 x509_tls_peers_cert_in_pool, /* Certificate exists? */
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1292 x509_tls_peers_get_cert, /* Cert retriever */
18661
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
1293 x509_tls_peers_put_cert, /* Cert writer */
18899
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
1294 x509_tls_peers_delete_cert, /* Cert remover */
19827
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1295 x509_tls_peers_get_idlist, /* idlist retriever */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1296
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1297 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1298 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1299 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1300 NULL
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1301 };
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1302
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1303
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1304 /***** A Verifier that uses the tls_peers cache and the CA pool to validate certificates *****/
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1305 static PurpleCertificateVerifier x509_tls_cached;
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1306
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1307
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1308 static void
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1309 x509_tls_cached_user_auth_accept_cb(PurpleCertificateVerificationRequest *vrq)
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1310 {
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1311 PurpleCertificatePool *tls_peers;
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1312 gchar *cache_id;
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1313
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1314 g_return_if_fail(vrq);
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1315
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1316 tls_peers = purple_certificate_find_pool("x509", "tls_peers");
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1317
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1318 cache_id = vrq->subject_name;
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1319 purple_debug_info("certificate/x509/tls_cached",
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1320 "User ACCEPTED cert\nCaching first in chain for future use as %s...\n",
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1321 cache_id);
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1322
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1323 purple_certificate_pool_store(tls_peers, cache_id, vrq->cert_chain->data);
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1324
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1325 purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_VALID);
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1326 }
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1327
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1328 static void
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1329 x509_tls_cached_user_auth_reject_cb(PurpleCertificateVerificationRequest *vrq)
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1330 {
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1331 g_return_if_fail(vrq);
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1332
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1333 purple_debug_warning("certificate/x509/tls_cached", "User REJECTED cert\n");
19031
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
1334
33637
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
1335 purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_REJECTED);
19678
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1336 }
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1337
35458
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
1338 /*
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
1339 * x509_tls_cached_user_auth:
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
1340 *
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
1341 * Validates a certificate by asking the user
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
1342 * @reason: String to explain why the user needs to accept/refuse the
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
1343 * certificate.
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
1344 *
385156e1b493 Fix some gtk-doc warnings from account to connection
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
1345 * TODO Needs a handle argument
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1346 */
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1347 static void
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1348 x509_tls_cached_user_auth(PurpleCertificateVerificationRequest *vrq,
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1349 const gchar *reason)
18589
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1350 {
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1351 gchar *primary;
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1352
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1353 primary = g_strdup_printf(_("Accept certificate for %s?"),
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1354 vrq->subject_name);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1355
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1356 purple_request_certificate(
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1357 vrq->cb_data, /* TODO: Find what the handle ought to be */
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1358 _("SSL Certificate Verification"),
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1359 primary,
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1360 reason,
32889
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1361 vrq->cert_chain->data,
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1362 _("Accept"), G_CALLBACK(x509_tls_cached_user_auth_accept_cb),
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1363 _("Reject"), G_CALLBACK(x509_tls_cached_user_auth_reject_cb),
b1a7793d2fe7 Use new certificate request API when prompting the user to accept certs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32885
diff changeset
1364 vrq);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1365
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1366 g_free(primary);
18589
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1367 }
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1368
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1369 static void
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1370 x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq,
33637
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
1371 PurpleCertificateVerificationStatus flags);
22050
c847558530de If a peer certificate does not match our cached cert, do not auto reject it!
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22048
diff changeset
1372
c847558530de If a peer certificate does not match our cached cert, do not auto reject it!
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22048
diff changeset
1373 static void
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1374 x509_tls_cached_complete(PurpleCertificateVerificationRequest *vrq,
33637
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
1375 PurpleCertificateVerificationStatus flags)
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1376 {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1377 PurpleCertificatePool *tls_peers;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1378 PurpleCertificate *peer_crt = vrq->cert_chain->data;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1379
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1380 if (flags & PURPLE_CERTIFICATE_FATALS_MASK) {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1381 /* TODO: Also print any other warnings? */
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1382 const gchar *error;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1383 gchar *tmp, *secondary;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1384
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1385 if (flags & PURPLE_CERTIFICATE_INVALID_CHAIN)
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1386 error = invalidity_reason_to_string(PURPLE_CERTIFICATE_INVALID_CHAIN);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1387 else if (flags & PURPLE_CERTIFICATE_REVOKED)
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1388 error = invalidity_reason_to_string(PURPLE_CERTIFICATE_REVOKED);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1389 else
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1390 error = invalidity_reason_to_string(PURPLE_CERTIFICATE_UNKNOWN_ERROR);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1391
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1392 tmp = g_strdup_printf(_("The certificate for %s could not be validated."),
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1393 vrq->subject_name);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1394 secondary = g_strconcat(tmp, " ", error, NULL);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1395 g_free(tmp);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1396
33636
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1397 purple_debug_error("certificate/x509/tls_cached",
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1398 "Unable to validate certificate: %s\n", secondary);
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1399
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1400 purple_notify_error(NULL, /* TODO: Probably wrong. */
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1401 _("SSL Certificate Error"),
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1402 _("Unable to validate certificate"),
34449
bbcb198650b7 Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 34246
diff changeset
1403 secondary, NULL);
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1404 g_free(secondary);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1405
33637
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
1406 purple_certificate_verify_complete(vrq, flags);
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1407 return;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1408 } else if (flags & PURPLE_CERTIFICATE_NON_FATALS_MASK) {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1409 /* Non-fatal error. Prompt the user. */
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1410 gchar *tmp;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1411 GString *errors;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1412 guint32 i = 1;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1413
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1414 tmp = g_strdup_printf(_("The certificate for %s could not be validated."),
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1415 vrq->subject_name);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1416 errors = g_string_new(tmp);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1417 g_free(tmp);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1418
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1419 errors = g_string_append_c(errors, '\n');
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1420
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1421 /* Special case a name mismatch because we want to display the two names... */
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1422 if (flags & PURPLE_CERTIFICATE_NAME_MISMATCH) {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1423 gchar *sn = purple_certificate_get_subject_name(peer_crt);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1424
28691
8f8d9963f92d Print that specific message only when there is a CN; otherwise fall back
Paul Aurich <darkrain42@pidgin.im>
parents: 28690
diff changeset
1425 if (sn) {
8f8d9963f92d Print that specific message only when there is a CN; otherwise fall back
Paul Aurich <darkrain42@pidgin.im>
parents: 28690
diff changeset
1426 g_string_append_printf(errors, _("The certificate claims to be "
8f8d9963f92d Print that specific message only when there is a CN; otherwise fall back
Paul Aurich <darkrain42@pidgin.im>
parents: 28690
diff changeset
1427 "from \"%s\" instead. This could mean that you are "
8f8d9963f92d Print that specific message only when there is a CN; otherwise fall back
Paul Aurich <darkrain42@pidgin.im>
parents: 28690
diff changeset
1428 "not connecting to the service you believe you are."),
8f8d9963f92d Print that specific message only when there is a CN; otherwise fall back
Paul Aurich <darkrain42@pidgin.im>
parents: 28690
diff changeset
1429 sn);
8f8d9963f92d Print that specific message only when there is a CN; otherwise fall back
Paul Aurich <darkrain42@pidgin.im>
parents: 28690
diff changeset
1430 g_free(sn);
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1431
28691
8f8d9963f92d Print that specific message only when there is a CN; otherwise fall back
Paul Aurich <darkrain42@pidgin.im>
parents: 28690
diff changeset
1432 flags &= ~PURPLE_CERTIFICATE_NAME_MISMATCH;
8f8d9963f92d Print that specific message only when there is a CN; otherwise fall back
Paul Aurich <darkrain42@pidgin.im>
parents: 28690
diff changeset
1433 }
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1434 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1435
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1436 while (i != PURPLE_CERTIFICATE_LAST) {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1437 if (flags & i) {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1438 errors = g_string_append_c(errors, '\n');
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1439 g_string_append(errors, invalidity_reason_to_string(i));
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1440 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1441
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1442 i <<= 1;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1443 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1444
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1445 x509_tls_cached_user_auth(vrq, errors->str);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1446 g_string_free(errors, TRUE);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1447 return;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1448 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1449
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1450 /* If we reach this point, the certificate is good. */
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1451
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1452 /* Look up the local cache and store it there for future use */
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1453 tls_peers = purple_certificate_find_pool(x509_tls_cached.scheme_name,
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1454 "tls_peers");
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1455 if (tls_peers) {
29042
5c056c4502b7 *** Plucked rev 8549b9a30115559965e9bf93bb15a45b04c1d149 (f05c54b03e6bbfdbff38c01697fbd353a969e05e):
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
1456 if (!purple_certificate_pool_store(tls_peers,vrq->subject_name,
5c056c4502b7 *** Plucked rev 8549b9a30115559965e9bf93bb15a45b04c1d149 (f05c54b03e6bbfdbff38c01697fbd353a969e05e):
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
1457 peer_crt)) {
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1458 purple_debug_error("certificate/x509/tls_cached",
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1459 "FAILED to cache peer certificate\n");
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1460 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1461 } else {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1462 purple_debug_error("certificate/x509/tls_cached",
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1463 "Unable to locate tls_peers certificate cache.\n");
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1464 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1465
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1466 purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_VALID);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1467 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1468
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1469 static void
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1470 x509_tls_cached_cert_in_cache(PurpleCertificateVerificationRequest *vrq,
33637
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
1471 PurpleCertificateVerificationStatus flags)
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1472 {
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1473 /* TODO: Looking this up by name over and over is expensive.
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1474 Fix, please! */
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1475 PurpleCertificatePool *tls_peers =
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1476 purple_certificate_find_pool(x509_tls_cached.scheme_name,
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1477 "tls_peers");
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1478
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1479 /* The peer's certificate should be the first in the list */
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1480 PurpleCertificate *peer_crt =
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1481 (PurpleCertificate *) vrq->cert_chain->data;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1482
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1483 PurpleCertificate *cached_crt;
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1484 GByteArray *peer_fpr, *cached_fpr;
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1485
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1486 /* Load up the cached certificate */
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1487 cached_crt = purple_certificate_pool_retrieve(
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1488 tls_peers, vrq->subject_name);
19715
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1489 if ( !cached_crt ) {
27823
8eb52a9d3a6d Continue verification when we can't find a *cached* peer. Fixes #9664.
Paul Aurich <darkrain42@pidgin.im>
parents: 27788
diff changeset
1490 purple_debug_warning("certificate/x509/tls_cached",
19715
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1491 "Lookup failed on cached certificate!\n"
27823
8eb52a9d3a6d Continue verification when we can't find a *cached* peer. Fixes #9664.
Paul Aurich <darkrain42@pidgin.im>
parents: 27788
diff changeset
1492 "Falling back to full verification.\n");
8eb52a9d3a6d Continue verification when we can't find a *cached* peer. Fixes #9664.
Paul Aurich <darkrain42@pidgin.im>
parents: 27788
diff changeset
1493 /* vrq now becomes the problem of unknown_peer */
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1494 x509_tls_cached_unknown_peer(vrq, flags);
25275
b28406cfe56a Prevent a NULL ptr deref when unexpected stuff happens in the cert cache. Fixes #7776,#7769
Daniel Atallah <datallah@pidgin.im>
parents: 25165
diff changeset
1495 return;
19715
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1496 }
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1497
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1498 /* Now get SHA1 sums for both and compare them */
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1499 /* TODO: This is not an elegant way to compare certs */
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1500 peer_fpr = purple_certificate_get_fingerprint_sha1(peer_crt);
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1501 cached_fpr = purple_certificate_get_fingerprint_sha1(cached_crt);
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1502 if (!memcmp(peer_fpr->data, cached_fpr->data, peer_fpr->len)) {
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1503 purple_debug_info("certificate/x509/tls_cached",
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1504 "Peer cert matched cached\n");
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1505 x509_tls_cached_complete(vrq, flags);
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1506 } else {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 25905
diff changeset
1507 purple_debug_error("certificate/x509/tls_cached",
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1508 "Peer cert did NOT match cached\n");
22050
c847558530de If a peer certificate does not match our cached cert, do not auto reject it!
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22048
diff changeset
1509 /* vrq now becomes the problem of the user */
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1510 x509_tls_cached_unknown_peer(vrq, flags);
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1511 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1512
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1513 purple_certificate_destroy(cached_crt);
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1514 g_byte_array_free(peer_fpr, TRUE);
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1515 g_byte_array_free(cached_fpr, TRUE);
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1516 }
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1517
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1518 /*
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1519 * This is called from two points in x509_tls_cached_unknown_peer below
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1520 * once we've verified the signature chain is valid. Now we need to verify
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1521 * the subject name of the certificate.
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1522 */
19025
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1523 static void
28032
fdb1cd9da99b cert: Validate subject name before prompting due to no CA pool.
Paul Aurich <darkrain42@pidgin.im>
parents: 27999
diff changeset
1524 x509_tls_cached_check_subject_name(PurpleCertificateVerificationRequest *vrq,
33637
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
1525 PurpleCertificateVerificationStatus flags)
19025
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1526 {
27936
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
1527 PurpleCertificate *peer_crt;
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1528 GList *chain = vrq->cert_chain;
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1529
19030
e2bf9dcb2b72 - Add HOSTNAME CHECKING to tls_cached unknown_peer mode, which is kind
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19029
diff changeset
1530 peer_crt = (PurpleCertificate *) chain->data;
e2bf9dcb2b72 - Add HOSTNAME CHECKING to tls_cached unknown_peer mode, which is kind
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19029
diff changeset
1531
22048
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1532 /* Last, check that the hostname matches */
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1533 if ( ! purple_certificate_check_subject_name(peer_crt,
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1534 vrq->subject_name) ) {
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1535 gchar *sn = purple_certificate_get_subject_name(peer_crt);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1536
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1537 flags |= PURPLE_CERTIFICATE_NAME_MISMATCH;
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 25905
diff changeset
1538 purple_debug_error("certificate/x509/tls_cached",
22048
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1539 "Name mismatch: Certificate given for %s "
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1540 "has a name of %s\n",
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1541 vrq->subject_name, sn);
29982
e2a8f797a521 A couple more leak fixes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29930
diff changeset
1542 g_free(sn);
28032
fdb1cd9da99b cert: Validate subject name before prompting due to no CA pool.
Paul Aurich <darkrain42@pidgin.im>
parents: 27999
diff changeset
1543 }
fdb1cd9da99b cert: Validate subject name before prompting due to no CA pool.
Paul Aurich <darkrain42@pidgin.im>
parents: 27999
diff changeset
1544
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1545 x509_tls_cached_complete(vrq, flags);
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1546 }
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1547
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1548 /* For when we've never communicated with this party before */
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1549 /* TODO: Need ways to specify possibly multiple problems with a cert, or at
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1550 least reprioritize them.
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1551 */
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1552 static void
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1553 x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq,
33637
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
1554 PurpleCertificateVerificationStatus flags)
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1555 {
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1556 PurpleCertificatePool *ca;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1557 PurpleCertificate *peer_crt;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1558 PurpleCertificate *ca_crt, *end_crt;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1559 PurpleCertificate *failing_crt;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1560 GList *chain = vrq->cert_chain;
31155
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1561 GSList *ca_crts, *cur;
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1562 GByteArray *last_fpr, *ca_fpr;
31155
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1563 gboolean valid = FALSE;
31377
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1564 gchar *ca_id, *ca2_id;
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1565
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1566 peer_crt = (PurpleCertificate *) chain->data;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1567
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1568 /* TODO: Figure out a way to check for a bad signature, as opposed to
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1569 "not self-signed" */
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1570 if ( purple_certificate_signed_by(peer_crt, peer_crt) ) {
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1571 flags |= PURPLE_CERTIFICATE_SELF_SIGNED;
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1572
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1573 purple_debug_info("certificate/x509/tls_cached",
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1574 "Certificate for %s is self-signed.\n",
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1575 vrq->subject_name);
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1576
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1577 x509_tls_cached_check_subject_name(vrq, flags);
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1578 return;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1579 } /* if (self signed) */
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1580
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1581 ca = purple_certificate_find_pool(x509_tls_cached.scheme_name, "ca");
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1582
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1583 /* Next, check that the certificate chain is valid */
32590
65bb6a842cdc Remove the old deprecated purple_certificate_check_signature_chain.
Andrew Victor <andrew.victor@mxit.com>
parents: 31868
diff changeset
1584 if (!purple_certificate_check_signature_chain(chain,
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1585 &failing_crt))
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1586 {
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1587 gboolean chain_validated = FALSE;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1588 /*
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1589 * Check if the failing certificate is in the CA store. If it is, then
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1590 * consider this fully validated. This works around issues with some
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1591 * prominent intermediate CAs whose signature is md5WithRSAEncryption.
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1592 * I'm looking at CACert Class 3 here. See #4458 for details.
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1593 */
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1594 if (ca) {
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1595 gchar *uid = purple_certificate_get_unique_id(failing_crt);
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1596 PurpleCertificate *ca_crt = purple_certificate_pool_retrieve(ca, uid);
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1597 if (ca_crt != NULL) {
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1598 GByteArray *failing_fpr;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1599 GByteArray *ca_fpr;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1600 failing_fpr = purple_certificate_get_fingerprint_sha1(failing_crt);
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1601 ca_fpr = purple_certificate_get_fingerprint_sha1(ca_crt);
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1602 if (byte_arrays_equal(failing_fpr, ca_fpr)) {
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1603 purple_debug_info("certificate/x509/tls_cached",
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1604 "Full chain verification failed (probably a bad "
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1605 "signature algorithm), but found the last "
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1606 "certificate %s in the CA pool.\n", uid);
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1607 chain_validated = TRUE;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1608 }
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1609
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1610 g_byte_array_free(failing_fpr, TRUE);
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1611 g_byte_array_free(ca_fpr, TRUE);
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1612 }
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1613
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1614 purple_certificate_destroy(ca_crt);
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1615 g_free(uid);
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1616 }
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1617
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1618 /*
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1619 * If we get here, either the cert matched the stuff right above
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1620 * or it didn't, in which case we give up and complain to the user.
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1621 */
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1622 if (!chain_validated)
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1623 /* TODO: Tell the user where the chain broke? */
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1624 flags |= PURPLE_CERTIFICATE_INVALID_CHAIN;
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1625
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1626 x509_tls_cached_check_subject_name(vrq, flags);
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1627 return;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1628 } /* if (signature chain not good) */
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1629
31377
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1630 /* Next, attempt to verify the last certificate is signed by a trusted
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1631 * CA, or is a trusted CA (based on fingerprint).
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1632 */
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1633 /* If, for whatever reason, there is no Certificate Authority pool
33636
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1634 loaded, we'll verify the subject name and then warn about this. */
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1635 if ( !ca ) {
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1636 purple_debug_error("certificate/x509/tls_cached",
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1637 "No X.509 Certificate Authority pool "
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1638 "could be found!\n");
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1639
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1640 flags |= PURPLE_CERTIFICATE_NO_CA_POOL;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1641
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1642 x509_tls_cached_check_subject_name(vrq, flags);
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1643 return;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1644 }
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1645
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1646 end_crt = g_list_last(chain)->data;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1647
31377
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1648 /* Attempt to look up the last certificate, and the last certificate's
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1649 * issuer.
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1650 */
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1651 ca_id = purple_certificate_get_issuer_unique_id(end_crt);
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1652 ca2_id = purple_certificate_get_unique_id(end_crt);
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1653 purple_debug_info("certificate/x509/tls_cached",
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1654 "Checking for a CA with DN=%s\n",
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1655 ca_id);
31377
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1656 purple_debug_info("certificate/x509/tls_cached",
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1657 "Also checking for a CA with DN=%s\n",
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1658 ca2_id);
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1659 ca_crts = g_slist_concat(x509_ca_get_certs(ca_id), x509_ca_get_certs(ca2_id));
31155
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1660 if ( NULL == ca_crts ) {
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1661 flags |= PURPLE_CERTIFICATE_CA_UNKNOWN;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1662
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1663 purple_debug_warning("certificate/x509/tls_cached",
31868
b1dbae4ba9a8 Remove duplicate word "found" in this debug message
Mark Doliner <markdoliner@pidgin.im>
parents: 31377
diff changeset
1664 "No Certificate Authorities with either DN "
31377
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1665 "found. I'll prompt the user, I guess.\n");
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1666
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1667 x509_tls_cached_check_subject_name(vrq, flags);
33636
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1668 g_free(ca_id);
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1669 g_free(ca2_id);
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1670 return;
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1671 }
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1672
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1673 /*
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1674 * Check the fingerprints; if they match, then this certificate *is* one
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1675 * of the designated "trusted roots", and we don't need to verify the
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1676 * signature. This is good because some of the older roots are self-signed
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1677 * with bad hash algorithms that we don't want to allow in any other
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1678 * circumstances (one of Verisign's root CAs is self-signed with MD2).
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1679 *
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1680 * If the fingerprints don't match, we'll fall back to checking the
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1681 * signature.
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1682 */
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1683 last_fpr = purple_certificate_get_fingerprint_sha1(end_crt);
31155
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1684 for (cur = ca_crts; cur; cur = cur->next) {
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1685 ca_crt = cur->data;
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1686 ca_fpr = purple_certificate_get_fingerprint_sha1(ca_crt);
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1687
31155
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1688 if ( byte_arrays_equal(last_fpr, ca_fpr) ||
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1689 purple_certificate_signed_by(end_crt, ca_crt) )
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1690 {
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1691 /* TODO: If signed_by ever returns a reason, maybe mention
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1692 that, too. */
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1693 /* TODO: Also mention the CA involved. While I could do this
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1694 now, a full DN is a little much with which to assault the
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1695 user's poor, leaky eyes. */
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1696 valid = TRUE;
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1697 g_byte_array_free(ca_fpr, TRUE);
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1698 break;
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1699 }
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1700
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1701 g_byte_array_free(ca_fpr, TRUE);
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1702 }
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1703
33636
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1704 if (valid == FALSE) {
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1705 purple_debug_error("certificate/x509/tls_cached",
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1706 "Unable to verify final certificate %s signed by %s. "
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1707 "Not a trusted root or signed by a trusted root.\n",
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1708 ca2_id, ca_id);
31155
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1709 flags |= PURPLE_CERTIFICATE_INVALID_CHAIN;
33636
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1710 }
31155
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1711
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1712 g_slist_foreach(ca_crts, (GFunc)purple_certificate_destroy, NULL);
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1713 g_slist_free(ca_crts);
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1714 g_byte_array_free(last_fpr, TRUE);
33636
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1715 g_free(ca_id);
2fdb0449cdff Add some more certificate debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32892
diff changeset
1716 g_free(ca2_id);
27999
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1717
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1718 x509_tls_cached_check_subject_name(vrq, flags);
19025
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1719 }
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1720
18589
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1721 static void
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1722 x509_tls_cached_start_verify(PurpleCertificateVerificationRequest *vrq)
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1723 {
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1724 const gchar *tls_peers_name = "tls_peers"; /* Name of local cache */
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1725 PurpleCertificatePool *tls_peers;
34246
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1726 time_t now;
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1727 gint64 activation, expiration;
33637
5e3eb38571fc Merge PurpleCertificateInvalidityFlags and PurpleCertificateValidationStatus.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33636
diff changeset
1728 PurpleCertificateVerificationStatus flags = PURPLE_CERTIFICATE_VALID;
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1729 gboolean ret;
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1730
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1731 g_return_if_fail(vrq);
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1732
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1733 purple_debug_info("certificate/x509/tls_cached",
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1734 "Starting verify for %s\n",
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1735 vrq->subject_name);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1736
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1737 /*
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1738 * Verify the first certificate (the main one) has been activated and
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1739 * isn't expired, i.e. activation < now < expiration.
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1740 */
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1741 now = time(NULL);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1742 ret = purple_certificate_get_times(vrq->cert_chain->data, &activation,
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1743 &expiration);
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1744 if (!ret) {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1745 flags |= PURPLE_CERTIFICATE_EXPIRED | PURPLE_CERTIFICATE_NOT_ACTIVATED;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1746 purple_debug_error("certificate/x509/tls_cached",
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1747 "Failed to get validity times for certificate %s\n",
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1748 vrq->subject_name);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1749 } else if (now > expiration) {
34246
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1750 #if GLIB_CHECK_VERSION(2,26,0)
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1751 GDateTime *exp_dt = g_date_time_new_from_unix_local(expiration);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1752 gchar *expir_str = g_date_time_format(exp_dt, "%c");
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1753 g_date_time_unref(exp_dt);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1754 #else
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1755 gchar *expir_str = g_strdup(ctime(&expiration));
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1756 #endif
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1757 flags |= PURPLE_CERTIFICATE_EXPIRED;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1758 purple_debug_error("certificate/x509/tls_cached",
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1759 "Certificate %s expired at %s\n",
34246
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1760 vrq->subject_name, expir_str);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1761 g_free(expir_str);
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1762 } else if (now < activation) {
34246
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1763 #if GLIB_CHECK_VERSION(2,26,0)
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1764 GDateTime *act_dt = g_date_time_new_from_unix_local(activation);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1765 gchar *activ_str = g_date_time_format(act_dt, "%c");
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1766 g_date_time_unref(act_dt);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1767 #else
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1768 gchar *activ_str = g_strdup(ctime(&activation));
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1769 #endif
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1770 flags |= PURPLE_CERTIFICATE_NOT_ACTIVATED;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1771 purple_debug_error("certificate/x509/tls_cached",
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1772 "Certificate %s is not yet valid, will be at %s\n",
34246
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1773 vrq->subject_name, activ_str);
2ca1bb194693 Update certificate API to use 64-bit unsigned values instead of time_t.
Daniel Atallah <datallah@pidgin.im>
parents: 33774
diff changeset
1774 g_free(activ_str);
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1775 }
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1776
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1777 tls_peers = purple_certificate_find_pool(x509_tls_cached.scheme_name,tls_peers_name);
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1778
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1779 if (!tls_peers) {
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1780 purple_debug_error("certificate/x509/tls_cached",
24182
0b128c580e0f remove misleading portion of the debug line
Ka-Hing Cheung <khc@pidgin.im>
parents: 24014
diff changeset
1781 "Couldn't find local peers cache %s\n",
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1782 tls_peers_name);
19031
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
1783
20143
5b005012e908 applied changes from 92e6c32278d711f0d5807c4d931b26162e4a720f
Richard Laager <rlaager@pidgin.im>
parents: 19864
diff changeset
1784 /* vrq now becomes the problem of unknown_peer */
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1785 x509_tls_cached_unknown_peer(vrq, flags);
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1786 return;
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1787 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1788
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1789 /* Check if the peer has a certificate cached already */
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1790 purple_debug_info("certificate/x509/tls_cached",
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1791 "Checking for cached cert...\n");
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1792 if (purple_certificate_pool_contains(tls_peers, vrq->subject_name)) {
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1793 purple_debug_info("certificate/x509/tls_cached",
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1794 "...Found cached cert\n");
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1795 /* vrq is now the responsibility of cert_in_cache */
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1796 x509_tls_cached_cert_in_cache(vrq, flags);
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1797 } else {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 25905
diff changeset
1798 purple_debug_warning("certificate/x509/tls_cached",
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1799 "...Not in cache\n");
18589
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1800 /* vrq now becomes the problem of unknown_peer */
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1801 x509_tls_cached_unknown_peer(vrq, flags);
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1802 }
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1803 }
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1804
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1805 static void
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1806 x509_tls_cached_destroy_request(PurpleCertificateVerificationRequest *vrq)
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1807 {
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1808 g_return_if_fail(vrq);
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1809 }
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1810
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1811 static PurpleCertificateVerifier x509_tls_cached = {
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1812 "x509", /* Scheme name */
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1813 "tls_cached", /* Verifier name */
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1814 x509_tls_cached_start_verify, /* Verification begin */
19827
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1815 x509_tls_cached_destroy_request,/* Request cleanup */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1816
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1817 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1818 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1819 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1820 NULL
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1821
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1822 };
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1823
18470
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1824 /****************************************************************************/
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1825 /* Subsystem */
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1826 /****************************************************************************/
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1827 void
18477
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1828 purple_certificate_init(void)
18470
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1829 {
18477
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1830 /* Register builtins */
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
1831 purple_certificate_register_verifier(&x509_singleuse);
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1832 purple_certificate_register_pool(&x509_ca);
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
1833 purple_certificate_register_pool(&x509_tls_peers);
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1834 purple_certificate_register_verifier(&x509_tls_cached);
18470
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1835 }
18466
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
1836
18477
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1837 void
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1838 purple_certificate_uninit(void)
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1839 {
18659
89e08c113e68 - Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18658
diff changeset
1840 /* Unregister all Verifiers */
25467
9631ed4f4527 Fix a crash on exit with a patch from im.pidgin.next.minor.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25275
diff changeset
1841 g_list_foreach(cert_verifiers, (GFunc)purple_certificate_unregister_verifier, NULL);
18659
89e08c113e68 - Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18658
diff changeset
1842
89e08c113e68 - Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18658
diff changeset
1843 /* Unregister all Pools */
25467
9631ed4f4527 Fix a crash on exit with a patch from im.pidgin.next.minor.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25275
diff changeset
1844 g_list_foreach(cert_pools, (GFunc)purple_certificate_unregister_pool, NULL);
18477
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1845 }
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1846
18657
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1847 gpointer
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1848 purple_certificate_get_handle(void)
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1849 {
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1850 static gint handle;
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1851 return &handle;
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1852 }
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1853
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1854 PurpleCertificateScheme *
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1855 purple_certificate_find_scheme(const gchar *name)
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1856 {
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1857 PurpleCertificateScheme *scheme = NULL;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1858 GList *l;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1859
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1860 g_return_val_if_fail(name, NULL);
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1861
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1862 /* Traverse the list of registered schemes and locate the
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1863 one whose name matches */
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1864 for(l = cert_schemes; l; l = l->next) {
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1865 scheme = (PurpleCertificateScheme *)(l->data);
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1866
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1867 /* Name matches? that's our man */
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1868 if(!g_ascii_strcasecmp(scheme->name, name))
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1869 return scheme;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1870 }
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
1871
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1872 purple_debug_warning("certificate",
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1873 "CertificateScheme %s requested but not found.\n",
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1874 name);
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
1875
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1876 /* TODO: Signalling and such? */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1877
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1878 return NULL;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1879 }
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
1880
18658
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1881 GList *
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1882 purple_certificate_get_schemes(void)
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1883 {
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1884 return cert_schemes;
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1885 }
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1886
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1887 gboolean
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1888 purple_certificate_register_scheme(PurpleCertificateScheme *scheme)
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1889 {
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1890 g_return_val_if_fail(scheme != NULL, FALSE);
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1891
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1892 /* Make sure no scheme is registered with the same name */
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1893 if (purple_certificate_find_scheme(scheme->name) != NULL) {
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1894 return FALSE;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1895 }
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1896
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1897 /* Okay, we're golden. Register it. */
18491
2aa829b48785 - prepend > append
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18490
diff changeset
1898 cert_schemes = g_list_prepend(cert_schemes, scheme);
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1899
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1900 /* TODO: Signalling and such? */
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1901
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1902 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1903 "CertificateScheme %s registered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1904 scheme->name);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1905
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1906 return TRUE;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1907 }
18446
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1908
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1909 gboolean
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1910 purple_certificate_unregister_scheme(PurpleCertificateScheme *scheme)
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1911 {
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1912 if (NULL == scheme) {
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1913 purple_debug_warning("certificate",
18492
1ebf50a37d55 - Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18491
diff changeset
1914 "Attempting to unregister NULL scheme\n");
1ebf50a37d55 - Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18491
diff changeset
1915 return FALSE;
18446
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1916 }
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1917
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1918 /* TODO: signalling? */
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1919
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1920 /* TODO: unregister all CertificateVerifiers for this scheme?*/
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1921 /* TODO: unregister all CertificatePools for this scheme? */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1922 /* Neither of the above should be necessary, though */
18446
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1923 cert_schemes = g_list_remove(cert_schemes, scheme);
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1924
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1925 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1926 "CertificateScheme %s unregistered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1927 scheme->name);
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1928
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1929
18446
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1930 return TRUE;
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1931 }
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1932
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1933 PurpleCertificateVerifier *
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1934 purple_certificate_find_verifier(const gchar *scheme_name, const gchar *ver_name)
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1935 {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1936 PurpleCertificateVerifier *vr = NULL;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1937 GList *l;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1938
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1939 g_return_val_if_fail(scheme_name, NULL);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1940 g_return_val_if_fail(ver_name, NULL);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1941
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1942 /* Traverse the list of registered verifiers and locate the
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1943 one whose name matches */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1944 for(l = cert_verifiers; l; l = l->next) {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1945 vr = (PurpleCertificateVerifier *)(l->data);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1946
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1947 /* Scheme and name match? */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1948 if(!g_ascii_strcasecmp(vr->scheme_name, scheme_name) &&
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1949 !g_ascii_strcasecmp(vr->name, ver_name))
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1950 return vr;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1951 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1952
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1953 purple_debug_warning("certificate",
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1954 "CertificateVerifier %s, %s requested but not found.\n",
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1955 scheme_name, ver_name);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1956
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1957 /* TODO: Signalling and such? */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1958
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1959 return NULL;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1960 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1961
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1962
18658
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1963 GList *
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1964 purple_certificate_get_verifiers(void)
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1965 {
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1966 return cert_verifiers;
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1967 }
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1968
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1969 gboolean
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1970 purple_certificate_register_verifier(PurpleCertificateVerifier *vr)
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1971 {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1972 g_return_val_if_fail(vr != NULL, FALSE);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1973
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1974 /* Make sure no verifier is registered with the same scheme/name */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1975 if (purple_certificate_find_verifier(vr->scheme_name, vr->name) != NULL) {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1976 return FALSE;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1977 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1978
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1979 /* Okay, we're golden. Register it. */
18491
2aa829b48785 - prepend > append
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18490
diff changeset
1980 cert_verifiers = g_list_prepend(cert_verifiers, vr);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1981
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1982 /* TODO: Signalling and such? */
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1983
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1984 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1985 "CertificateVerifier %s registered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1986 vr->name);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1987 return TRUE;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1988 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1989
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1990 gboolean
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1991 purple_certificate_unregister_verifier(PurpleCertificateVerifier *vr)
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1992 {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1993 if (NULL == vr) {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1994 purple_debug_warning("certificate",
18492
1ebf50a37d55 - Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18491
diff changeset
1995 "Attempting to unregister NULL verifier\n");
1ebf50a37d55 - Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18491
diff changeset
1996 return FALSE;
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1997 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1998
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1999 /* TODO: signalling? */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2000
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2001 cert_verifiers = g_list_remove(cert_verifiers, vr);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2002
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2004 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2005 "CertificateVerifier %s unregistered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2006 vr->name);
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2007
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2008 return TRUE;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2009 }
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2010
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2011 PurpleCertificatePool *
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2012 purple_certificate_find_pool(const gchar *scheme_name, const gchar *pool_name)
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2013 {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2014 PurpleCertificatePool *pool = NULL;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2015 GList *l;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2016
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2017 g_return_val_if_fail(scheme_name, NULL);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2018 g_return_val_if_fail(pool_name, NULL);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2019
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2020 /* Traverse the list of registered pools and locate the
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2021 one whose name matches */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2022 for(l = cert_pools; l; l = l->next) {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2023 pool = (PurpleCertificatePool *)(l->data);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2024
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2025 /* Scheme and name match? */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2026 if(!g_ascii_strcasecmp(pool->scheme_name, scheme_name) &&
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2027 !g_ascii_strcasecmp(pool->name, pool_name))
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2028 return pool;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2029 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2030
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2031 purple_debug_warning("certificate",
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2032 "CertificatePool %s, %s requested but not found.\n",
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2033 scheme_name, pool_name);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2034
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2035 /* TODO: Signalling and such? */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
2036
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2037 return NULL;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2038
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2039 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2040
18658
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2041 GList *
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2042 purple_certificate_get_pools(void)
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2043 {
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2044 return cert_pools;
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2045 }
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2046
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2047 gboolean
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2048 purple_certificate_register_pool(PurpleCertificatePool *pool)
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2049 {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2050 g_return_val_if_fail(pool, FALSE);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2051 g_return_val_if_fail(pool->scheme_name, FALSE);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2052 g_return_val_if_fail(pool->name, FALSE);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2053 g_return_val_if_fail(pool->fullname, FALSE);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2054
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2055 /* Make sure no pools are registered under this name */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2056 if (purple_certificate_find_pool(pool->scheme_name, pool->name)) {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2057 return FALSE;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2058 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2059
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2060 /* Initialize the pool if needed */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2061 if (pool->init) {
21720
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2062 gboolean success;
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2063
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
2064 success = pool->init();
21720
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2065 if (!success)
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2066 return FALSE;
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2067 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2068
21720
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2069 /* Register the Pool */
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2070 cert_pools = g_list_prepend(cert_pools, pool);
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2071
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2072 /* TODO: Emit a signal that the pool got registered */
18894
1a00d2309d39 - Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18818
diff changeset
2073
21720
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2074 PURPLE_DBUS_REGISTER_POINTER(pool, PurpleCertificatePool);
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2075 purple_signal_register(pool, /* Signals emitted from pool */
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2076 "certificate-stored",
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2077 purple_marshal_VOID__POINTER_POINTER,
34812
3d6f7d9dc21d Refactored account, buddylist, certificate to use GType and GValue instead of PurpleType and PurpleValue
Ankit Vani <a@nevitus.org>
parents: 34792
diff changeset
2078 G_TYPE_NONE, /* No callback return value */
21720
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2079 2, /* Two non-data arguments */
34812
3d6f7d9dc21d Refactored account, buddylist, certificate to use GType and GValue instead of PurpleType and PurpleValue
Ankit Vani <a@nevitus.org>
parents: 34792
diff changeset
2080 PURPLE_TYPE_CERTIFICATE_POOL, G_TYPE_STRING);
18894
1a00d2309d39 - Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18818
diff changeset
2081
21720
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2082 purple_signal_register(pool, /* Signals emitted from pool */
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2083 "certificate-deleted",
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2084 purple_marshal_VOID__POINTER_POINTER,
34812
3d6f7d9dc21d Refactored account, buddylist, certificate to use GType and GValue instead of PurpleType and PurpleValue
Ankit Vani <a@nevitus.org>
parents: 34792
diff changeset
2085 G_TYPE_NONE, /* No callback return value */
21720
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2086 2, /* Two non-data arguments */
34812
3d6f7d9dc21d Refactored account, buddylist, certificate to use GType and GValue instead of PurpleType and PurpleValue
Ankit Vani <a@nevitus.org>
parents: 34792
diff changeset
2087 PURPLE_TYPE_CERTIFICATE_POOL, G_TYPE_STRING);
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2088
21720
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2089 purple_debug_info("certificate",
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2090 "CertificatePool %s registered\n",
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2091 pool->name);
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2092
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2093 return TRUE;
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2094 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2095
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2096 gboolean
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2097 purple_certificate_unregister_pool(PurpleCertificatePool *pool)
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2098 {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2099 if (NULL == pool) {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2100 purple_debug_warning("certificate",
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2101 "Attempting to unregister NULL pool\n");
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2102 return FALSE;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2103 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2104
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2105 /* Check that the pool is registered */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2106 if (!g_list_find(cert_pools, pool)) {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2107 purple_debug_warning("certificate",
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2108 "Pool to unregister isn't registered!\n");
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2109
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2110 return FALSE;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2111 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2112
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2113 /* Uninit the pool if needed */
19688
7eddbc94521c (Un)Register the pools with DBus to avoid a runtime fit.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19678
diff changeset
2114 PURPLE_DBUS_UNREGISTER_POINTER(pool);
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2115 if (pool->uninit) {
18494
fc93e7020e83 - CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18492
diff changeset
2116 pool->uninit();
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2117 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2118
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2119 cert_pools = g_list_remove(cert_pools, pool);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
2120
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2121 /* TODO: Signalling? */
18894
1a00d2309d39 - Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18818
diff changeset
2122 purple_signal_unregister(pool, "certificate-stored");
1a00d2309d39 - Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18818
diff changeset
2123 purple_signal_unregister(pool, "certificate-deleted");
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
2124
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2125 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2126 "CertificatePool %s unregistered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2127 pool->name);
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2128 return TRUE;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2129 }
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2130
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2131 /****************************************************************************/
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2132 /* Scheme-specific functions */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2133 /****************************************************************************/
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2134
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
2135 void purple_certificate_add_ca_search_path(const char *path)
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
2136 {
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
2137 if (g_list_find_custom(x509_ca_paths, path, (GCompareFunc)strcmp))
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
2138 return;
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
2139 x509_ca_paths = g_list_append(x509_ca_paths, g_strdup(path));
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
2140 }
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
2141

mercurial