libpurple/certificate.c

Mon, 06 Mar 2017 03:32:06 -0300

author
dx <dx@dxzone.com.ar>
date
Mon, 06 Mar 2017 03:32:06 -0300
branch
release-2.x.y
changeset 38214
b3d0ba7c75f6
parent 36191
2e4475087f04
child 38216
887efbd652d8
permissions
-rw-r--r--

certificate: Use SHA256 fingerprints instead of SHA1

This meant adding a get_fingerprint_sha256 function to the certificate scheme
structs, which meant adding a struct_size member because we ran out of reserved
members there.

The API-facing purple_certificate_get_fingerprint_sha256() has a fallback
parameter to use sha1 if the SSL plugin doesn't implement this function
(probably an outdated installation, or a third party SSL plugin). When using
the function for display purposes, the fallback is disabled and it returns
NULL, but when using it to compare certificates it's better to have at least
the SHA1.

In functions like purple_certificate_display_x509(), some slight changes to
translatable strings would have been required. Since we're in a string freeze
right now, I avoided those by concatenating a language-neutral "SHA256: %s" at
the end of those messages. The SHA1 line used the word "fingerprint" but we
can't reuse that translation. This should be cleaned up after the release.

17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
1 /**
19015
2e55af5c1242 - Typo fix
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
2 * @file certificate.c Public-Key Certificate API
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
3 * @ingroup core
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
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
6 /*
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
7 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
8 * purple
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
9 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
10 * 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
11 * 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
12 * source distribution.
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 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
15 * 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
16 * 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
17 * (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
18 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
19 * 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
20 * 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
21 * 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
22 * 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
23 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
24 * 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
25 * 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
26 * 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
27 */
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
28
19668
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
29 #include "internal.h"
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
30 #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
31 #include "dbus-maybe.h"
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
32 #include "debug.h"
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
33 #include "request.h"
18894
1a00d2309d39 - Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18818
diff changeset
34 #include "signals.h"
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
35 #include "util.h"
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
36
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
37 /** 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
38 static GList *cert_schemes = NULL;
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
39 /** List of registered Verifiers */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
40 static GList *cert_verifiers = NULL;
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
41 /** List of registered Pools */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
42 static GList *cert_pools = NULL;
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
43
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
44
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
45 static const gchar *
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
46 invalidity_reason_to_string(PurpleCertificateInvalidityFlags flag)
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
47 {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
48 switch (flag) {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
49 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
50 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
51 "automatically checked.");
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
52 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
53 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
54 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
55 "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
56 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
57 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
58 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
59 "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
60 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
61 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
62 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
63 "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
64 "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
65 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
66 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
67 /* 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
68 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
69 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
70 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
71 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
72 "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
73 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
74 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
75 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
76 break;
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_REVOKED:
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
78 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
79 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
80 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
81 default:
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
82 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
83 break;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
84 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
85 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
86
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
87 static void
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
88 get_ascii_fingerprints (PurpleCertificate *crt, gchar **sha1, gchar **sha256)
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
89 {
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
90 GByteArray *sha_bin;
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
91
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
92 if (sha1 != NULL) {
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
93 sha_bin = purple_certificate_get_fingerprint_sha1(crt);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
94
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
95 *sha1 = purple_base16_encode_chunked(sha_bin->data, sha_bin->len);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
96
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
97 g_byte_array_free(sha_bin, TRUE);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
98 }
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
99
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
100 if (sha256 != NULL) {
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
101 sha_bin = purple_certificate_get_fingerprint_sha256(crt, FALSE);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
102
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
103 *sha256 = (sha_bin == NULL) ? g_strdup("(null)") :
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
104 purple_base16_encode_chunked(sha_bin->data, sha_bin->len);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
105
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
106 g_byte_array_free(sha_bin, TRUE);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
107 }
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
108 }
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
109
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
110 void
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
111 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
112 const gchar *subject_name, GList *cert_chain,
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
113 PurpleCertificateVerifiedCallback cb,
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
114 gpointer cb_data)
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
115 {
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
116 PurpleCertificateVerificationRequest *vrq;
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
117 PurpleCertificateScheme *scheme;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
118
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
119 g_return_if_fail(subject_name != NULL);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
120 /* 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
121 be verified? */
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
122 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
123 g_return_if_fail(cb != NULL);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
124
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
125 /* Look up the CertificateScheme */
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
126 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
127 g_return_if_fail(scheme);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
128
18463
20cf7daafb13 - purple_certificate_verify attempts to check that the cert chain is of
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18462
diff changeset
129 /* 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
130 Verifier scheme */
18479
a38ca6794f6f - Fixed an inverted assertion
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18477
diff changeset
131 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
132 ((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
133
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
134 /* 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
135 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
136 vrq->verifier = verifier;
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
137 vrq->scheme = scheme;
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
138 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
139 vrq->cert_chain = purple_certificate_copy_list(cert_chain);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
140 vrq->cb = cb;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
141 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
142
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
143 /* Initiate verification */
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
144 (verifier->start_verification)(vrq);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
145 }
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
146
18466
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
147 void
19028
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
148 purple_certificate_verify_complete(PurpleCertificateVerificationRequest *vrq,
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
149 PurpleCertificateVerificationStatus st)
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
150 {
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
151 PurpleCertificateVerifier *vr;
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 g_return_if_fail(vrq);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
154
20832
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
155 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
156 purple_debug_info("certificate",
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
157 "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
158 vrq->subject_name);
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
159 } 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
160 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
161 "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
162 vrq->subject_name);
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
163 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
164
19028
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
165 /* 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
166 (vrq->cb)(st, vrq->cb_data);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
167
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
168 /* And now to eliminate the request */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
169 /* Fetch the Verifier responsible... */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
170 vr = vrq->verifier;
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
171 /* ...and order it to KILL */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
172 (vr->destroy_request)(vrq);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
173
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
174 /* 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
175 created elements */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
176 g_free(vrq->subject_name);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
177 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
178
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
179 /* A structure born
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
180 * to much ado
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
181 * and with so much within.
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
182 * It reaches now
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
183 * its quiet end. */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
184 g_free(vrq);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
185 }
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
186
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
187
18653
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
188 PurpleCertificate *
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
189 purple_certificate_copy(PurpleCertificate *crt)
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
190 {
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
191 g_return_val_if_fail(crt, NULL);
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
192 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
193 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
194
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
195 return (crt->scheme->copy_certificate)(crt);
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
196 }
18467
6bd91f3acf84 - Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18466
diff changeset
197
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
198 GList *
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
199 purple_certificate_copy_list(GList *crt_list)
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
200 {
24488
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
201 GList *new_l, *l;
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
202
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
203 /* 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
204 new_l = g_list_copy(crt_list);
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
205
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
206 /* 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
207 for (l = new_l; l; l = l->next) {
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
208 l->data = purple_certificate_copy(l->data);
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
209 }
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
210
24488
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
211 return new_l;
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
212 }
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
213
18467
6bd91f3acf84 - Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18466
diff changeset
214 void
18466
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
215 purple_certificate_destroy (PurpleCertificate *crt)
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
216 {
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
217 PurpleCertificateScheme *scheme;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
218
18466
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
219 if (NULL == crt) return;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
220
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
221 scheme = crt->scheme;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
222
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
223 (scheme->destroy_certificate)(crt);
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
224 }
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
225
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
226 void
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
227 purple_certificate_destroy_list (GList * crt_list)
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
228 {
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
229 PurpleCertificate *crt;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
230 GList *l;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
231
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
232 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
233 crt = (PurpleCertificate *) l->data;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
234 purple_certificate_destroy(crt);
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
235 }
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
236
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
237 g_list_free(crt_list);
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
238 }
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
239
19016
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
240 gboolean
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
241 purple_certificate_signed_by(PurpleCertificate *crt, PurpleCertificate *issuer)
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
242 {
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
243 PurpleCertificateScheme *scheme;
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
244
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
245 g_return_val_if_fail(crt, FALSE);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
246 g_return_val_if_fail(issuer, FALSE);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
247
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
248 scheme = crt->scheme;
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
249 g_return_val_if_fail(scheme, FALSE);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
250 /* 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
251 g_return_val_if_fail(issuer->scheme == scheme, FALSE);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
252
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
253 return (scheme->signed_by)(crt, issuer);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
254 }
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
255
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
256 gboolean
27936
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
257 purple_certificate_check_signature_chain_with_failing(GList *chain,
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
258 PurpleCertificate **failing)
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
259 {
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
260 GList *cur;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
261 PurpleCertificate *crt, *issuer;
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
262 gchar *uid;
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
263 time_t now, activation, expiration;
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
264 gboolean ret;
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
265
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
266 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
267
27936
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
268 if (failing)
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
269 *failing = NULL;
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
270
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
271 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
272 purple_debug_info("certificate",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
273 "Checking signature chain for uid=%s\n",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
274 uid);
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
275 g_free(uid);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
276
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
277 /* 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
278 if (chain->next == NULL) {
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
279 purple_debug_info("certificate",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
280 "...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
281 return TRUE;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
282 }
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
283
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
284 now = time(NULL);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
285
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
286 /* Load crt with the first certificate */
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
287 crt = (PurpleCertificate *)(chain->data);
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
288 /* 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
289 for ( cur = chain->next; cur; cur = cur->next ) {
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
290
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
291 issuer = (PurpleCertificate *)(cur->data);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
292
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
293 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
294
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
295 ret = purple_certificate_get_times(issuer, &activation, &expiration);
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 31155
diff changeset
296 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
297 if (!ret)
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
298 purple_debug_error("certificate",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
299 "...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
300 "Chain is INVALID\n", uid);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
301 else if (now > expiration)
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
302 purple_debug_error("certificate",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
303 "...Issuer %s expired at %s\nChain is INVALID\n",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
304 uid, ctime(&expiration));
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
305 else
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
306 purple_debug_error("certificate",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
307 "...Not-yet-activated issuer %s will be valid at %s\n"
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
308 "Chain is INVALID\n", uid, ctime(&activation));
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
309
27936
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
310 if (failing)
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
311 *failing = crt;
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
312
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
313 g_free(uid);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
314 return FALSE;
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
315 }
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
316
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
317 /* Check the signature for this link */
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
318 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
319 purple_debug_error("certificate",
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
320 "...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
321 uid);
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
322 g_free(uid);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
323
27936
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
324 if (failing)
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
325 *failing = crt;
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
326
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
327 return FALSE;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
328 }
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
329
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
330 purple_debug_info("certificate",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
331 "...Good signature by %s\n",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
332 uid);
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
333 g_free(uid);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
334
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
335 /* 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
336 checked */
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
337 crt = issuer;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
338 }
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
339
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
340 /* 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
341 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
342 return TRUE;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
343 }
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
344
27936
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
345 gboolean
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
346 purple_certificate_check_signature_chain(GList *chain)
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
347 {
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
348 return purple_certificate_check_signature_chain_with_failing(chain, NULL);
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
349 }
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
350
18577
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
351 PurpleCertificate *
18578
95080ca9610a - Fixed naming issues in previous revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18577
diff changeset
352 purple_certificate_import(PurpleCertificateScheme *scheme, const gchar *filename)
18577
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
353 {
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
354 g_return_val_if_fail(scheme, NULL);
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
355 g_return_val_if_fail(scheme->import_certificate, NULL);
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
356 g_return_val_if_fail(filename, NULL);
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
357
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
358 return (scheme->import_certificate)(filename);
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
359 }
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
360
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
361 GSList *
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
362 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
363 {
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
364 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
365 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
366 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
367
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
368 return (scheme->import_certificates)(filename);
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
369 }
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
370
18496
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
371 gboolean
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
372 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
373 {
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
374 PurpleCertificateScheme *scheme;
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
375
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
376 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
377 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
378 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
379
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
380 scheme = crt->scheme;
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
381 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
382
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
383 return (scheme->export_certificate)(filename, crt);
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
384 }
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
385
27934
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
386 static gboolean
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
387 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
388 {
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
389 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
390 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
391
34b573592eb7 A better solution for verifying certificate chains with NSS 3.12.3.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
392 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
393 (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
394 }
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 31155
diff changeset
395
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
396 GByteArray *
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
397 purple_certificate_get_fingerprint_sha1(PurpleCertificate *crt)
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 PurpleCertificateScheme *scheme;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
400 GByteArray *fpr;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
401
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
402 g_return_val_if_fail(crt, NULL);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
403 g_return_val_if_fail(crt->scheme, NULL);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
404
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
405 scheme = crt->scheme;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
406
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
407 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
408
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
409 fpr = (scheme->get_fingerprint_sha1)(crt);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
410
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
411 return fpr;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
412 }
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
413
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
414 GByteArray *
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
415 purple_certificate_get_fingerprint_sha256(PurpleCertificate *crt, gboolean sha1_fallback)
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
416 {
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
417 PurpleCertificateScheme *scheme;
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
418 GByteArray *fpr = NULL;
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
419
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
420 g_return_val_if_fail(crt, NULL);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
421 g_return_val_if_fail(crt->scheme, NULL);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
422
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
423 scheme = crt->scheme;
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
424
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
425 if (!PURPLE_CERTIFICATE_SCHEME_HAS_FUNC(scheme, get_fingerprint_sha256)) {
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
426 /* outdated ssl module? fallback to sha1 and print a warning */
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
427 if (sha1_fallback) {
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
428 fpr = purple_certificate_get_fingerprint_sha1(crt);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
429 }
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
430 g_return_val_if_reached(fpr);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
431 }
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
432
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
433 fpr = (scheme->get_fingerprint_sha256)(crt);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
434
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
435 return fpr;
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
436 }
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
437
18481
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
438 gchar *
19020
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
439 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
440 {
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
441 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
442 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
443 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
444
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
445 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
446 }
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
447
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
448 gchar *
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
449 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
450 {
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
451 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
452 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
453 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
454
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
455 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
456 }
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
457
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
458 gchar *
18481
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
459 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
460 {
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
461 PurpleCertificateScheme *scheme;
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
462 gchar *subject_name;
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
463
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
464 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
465 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
466
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
467 scheme = crt->scheme;
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
468
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
469 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
470
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
471 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
472
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
473 return subject_name;
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
474 }
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
475
18643
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
476 gboolean
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
477 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
478 {
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
479 PurpleCertificateScheme *scheme;
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
480
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
481 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
482 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
483 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
484
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
485 scheme = crt->scheme;
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
486
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
487 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
488
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
489 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
490 }
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
491
18647
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
492 gboolean
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
493 purple_certificate_get_times(PurpleCertificate *crt, time_t *activation, time_t *expiration)
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
494 {
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
495 PurpleCertificateScheme *scheme;
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
496
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
497 g_return_val_if_fail(crt, FALSE);
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
498
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
499 scheme = crt->scheme;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
500
18647
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
501 g_return_val_if_fail(scheme, FALSE);
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
502
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
503 /* 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
504 this? */
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
505 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
506
19007
f3c3ddf37812 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19003
diff changeset
507 /* 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
508 return (scheme->get_times)(crt, activation, expiration);
18647
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
509 }
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
510
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
511 gchar *
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
512 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
513 {
18645
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
514 gchar *path;
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
515 gchar *esc_scheme_name, *esc_name, *esc_id;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
516
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
517 g_return_val_if_fail(pool, NULL);
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
518 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
519 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
520
18645
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
521 /* 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
522 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
523 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
524 esc_id = id ? g_strdup(purple_escape_filename(id)) : NULL;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
525
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
526 path = g_build_filename(purple_user_dir(),
18575
24299c91b963 - Correct the certstore folder paths
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18574
diff changeset
527 "certificates", /* TODO: constantize this? */
18645
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
528 esc_scheme_name,
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
529 esc_name,
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
530 esc_id,
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
531 NULL);
18644
ac67b1ff08c4 - pool_mkpath now runs purple_escape_filename on its return value
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18643
diff changeset
532
18645
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
533 g_free(esc_scheme_name);
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
534 g_free(esc_name);
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
535 g_free(esc_id);
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
536 return path;
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
537 }
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
538
18584
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
539 gboolean
18818
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
540 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
541 {
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
542 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
543 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
544
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
545 /* 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
546 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
547 return FALSE;
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
548 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
549
18818
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
550 return TRUE;
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
551 }
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
552
19000
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
553 PurpleCertificateScheme *
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
554 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
555 {
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
556 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
557 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
558
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
559 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
560 }
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
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 gboolean
18584
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
563 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
564 {
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
565 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
566 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
567 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
568
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
569 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
570 }
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
571
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
572 PurpleCertificate *
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
573 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
574 {
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
575 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
576 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
577 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
578
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
579 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
580 }
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
581
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
582 gboolean
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
583 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
584 {
18896
70742468a820 - Emit certificate-stored signal in purple_certificate_pool_store
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18894
diff changeset
585 gboolean ret = FALSE;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
586
18584
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, FALSE);
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, FALSE);
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->put_cert, FALSE);
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
590
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
591 /* 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
592 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
593 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
594 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
595 FALSE);
18584
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 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
598
18900
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
599 /* 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
600 if (ret) {
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
601 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
602 pool, id);
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
603 }
18896
70742468a820 - Emit certificate-stored signal in purple_certificate_pool_store
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18894
diff changeset
604
70742468a820 - Emit certificate-stored signal in purple_certificate_pool_store
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18894
diff changeset
605 return ret;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
606 }
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
607
18899
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
608 gboolean
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
609 purple_certificate_pool_delete(PurpleCertificatePool *pool, const gchar *id)
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
610 {
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
611 gboolean ret = FALSE;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
612
18899
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
613 g_return_val_if_fail(pool, FALSE);
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
614 g_return_val_if_fail(id, FALSE);
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
615 g_return_val_if_fail(pool->delete_cert, FALSE);
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
616
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
617 ret = (pool->delete_cert)(id);
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
618
18900
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
619 /* 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
620 if (ret) {
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
621 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
622 pool, id);
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
623 }
18899
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
624
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
625 return ret;
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
626 }
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
627
18661
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
628 GList *
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
629 purple_certificate_pool_get_idlist(PurpleCertificatePool *pool)
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
630 {
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
631 g_return_val_if_fail(pool, NULL);
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
632 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
633
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
634 return (pool->get_idlist)();
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
635 }
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
636
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
637 void
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
638 purple_certificate_pool_destroy_idlist(GList *idlist)
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
639 {
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
640 GList *l;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
641
18661
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
642 /* Iterate through and free them strings */
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
643 for ( l = idlist; l; l = l->next ) {
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
644 g_free(l->data);
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
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
647 g_list_free(idlist);
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
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
650
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
651 /****************************************************************************/
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
652 /* Builtin Verifiers, Pools, etc. */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
653 /****************************************************************************/
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
654
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
655 static void
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
656 x509_singleuse_verify_cb (PurpleCertificateVerificationRequest *vrq, gint id)
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
657 {
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
658 g_return_if_fail(vrq);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
659
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
660 purple_debug_info("certificate/x509_singleuse",
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
661 "VRQ on cert from %s gave %d\n",
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
662 vrq->subject_name, id);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
663
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
664 /* Signal what happened back to the caller */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
665 if (1 == id) {
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
666 /* Accepted! */
19031
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
667 purple_certificate_verify_complete(vrq,
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
668 PURPLE_CERTIFICATE_VALID);
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
669 } else {
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
670 /* Not accepted */
19031
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
671 purple_certificate_verify_complete(vrq,
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
672 PURPLE_CERTIFICATE_INVALID);
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
673
19031
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
674 }
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
675 }
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
676
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
677 static void
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
678 x509_singleuse_start_verify (PurpleCertificateVerificationRequest *vrq)
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
679 {
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
680 gchar *sha1_asc, *sha256_asc;
18483
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
681 gchar *cn;
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
682 const gchar *cn_match;
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
683 gchar *primary, *secondary, *secondary_extra;
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
684 PurpleCertificate *crt = (PurpleCertificate *) vrq->cert_chain->data;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
685
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
686 get_ascii_fingerprints(crt, &sha1_asc, &sha256_asc);
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
687
18483
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
688 /* Get the cert Common Name */
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
689 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
690
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
691 /* Determine whether the name matches */
19499
6b9c37c4ca85 - Even more TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19498
diff changeset
692 if (purple_certificate_check_subject_name(crt, vrq->subject_name)) {
20162
2e2c6a375443 Translating the empty string is a bad idea.
Richard Laager <rlaager@pidgin.im>
parents: 20144
diff changeset
693 cn_match = "";
18483
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
694 } else {
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
695 cn_match = _("(DOES NOT MATCH)");
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
696 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
697
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
698 /* Make messages */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
699 primary = g_strdup_printf(_("%s has presented the following certificate for just-this-once use:"), vrq->subject_name);
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
700 secondary = g_strdup_printf(_("Common name: %s %s\nFingerprint (SHA1): %s"), cn, cn_match, sha1_asc);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
701
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
702 /* TODO: make this part of the translatable string above */
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
703 secondary_extra = g_strdup_printf("%s\nSHA256: %s", secondary, sha256_asc);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
704
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
705 /* Make a semi-pretty display */
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
706 purple_request_accept_cancel(
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
707 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
708 _("Single-use Certificate Verification"),
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
709 primary,
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
710 secondary_extra,
22269
3fdf7b13f20a A few more of those "default_action" fixes
Mark Doliner <markdoliner@pidgin.im>
parents: 22268
diff changeset
711 0, /* Accept by default */
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
712 NULL, /* No account */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
713 NULL, /* No other user */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
714 NULL, /* No associated conversation */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
715 vrq,
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
716 x509_singleuse_verify_cb,
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
717 x509_singleuse_verify_cb );
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
718
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
719 /* Cleanup */
29982
e2a8f797a521 A couple more leak fixes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29930
diff changeset
720 g_free(cn);
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
721 g_free(primary);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
722 g_free(secondary);
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
723 g_free(secondary_extra);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
724 g_free(sha1_asc);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
725 g_free(sha256_asc);
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
726 }
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
727
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
728 static void
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
729 x509_singleuse_destroy_request (PurpleCertificateVerificationRequest *vrq)
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
730 {
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
731 /* I don't do anything! */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
732 }
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
733
22734
4d1dde18dada Make x509_singleuse static
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22622
diff changeset
734 static PurpleCertificateVerifier x509_singleuse = {
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
735 "x509", /* Scheme name */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
736 "singleuse", /* Verifier name */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
737 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
738 x509_singleuse_destroy_request, /* Request cleanup operation */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
739
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
740 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
741 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
742 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
743 NULL
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
744 };
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
745
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
746
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
747
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
748 /***** X.509 Certificate Authority pool, keyed by Distinguished Name *****/
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
749 /* 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
750 possible; however, future optimizations should not be difficult. */
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
751
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
752 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
753
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
754 /** Holds a key-value pair for quickish certificate lookup */
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
755 typedef struct {
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
756 gchar *dn;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
757 PurpleCertificate *crt;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
758 } x509_ca_element;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
759
19348
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
760 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
761 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
762 {
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
763 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
764
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
765 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
766 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
767 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
768 }
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
769
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
770 /** System directory to probe for CA certificates */
19484
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
771 /* 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
772 static GList *x509_ca_paths = NULL;
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
773
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
774 /** A list of loaded CAs, populated from the above path whenever the lazy_init
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
775 happens. Contains pointers to x509_ca_elements */
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
776 static GList *x509_ca_certs = NULL;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
777
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
778 /** Used for lazy initialization purposes. */
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
779 static gboolean x509_ca_initialized = FALSE;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
780
36191
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
781 /** Adds a certificate to the in-memory cache, and mark it as trusted */
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
782 static gboolean
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
783 x509_ca_quiet_put_cert(PurpleCertificate *crt)
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
784 {
36191
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
785 gboolean ret;
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
786 x509_ca_element *el;
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
787
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
788 /* 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
789 Bad Thing */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
790
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
791 g_return_val_if_fail(crt, FALSE);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
792 g_return_val_if_fail(crt->scheme, FALSE);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
793 /* 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
794 /* TODO: Perhaps just check crt->scheme->name instead? */
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
795 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
796
36191
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
797 ret = TRUE;
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
798
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
799 if (crt->scheme->register_trusted_tls_cert) {
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
800 ret = (crt->scheme->register_trusted_tls_cert)(crt, TRUE);
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
801 }
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
802
36191
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
803 if (ret) {
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
804 el = g_new0(x509_ca_element, 1);
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
805 el->dn = purple_certificate_get_unique_id(crt);
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
806 el->crt = purple_certificate_copy(crt);
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
807 x509_ca_certs = g_list_prepend(x509_ca_certs, el);
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
808 }
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
809
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
810 return ret;
19342
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
19484
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
813 /* Since the libpurple CertificatePools get registered before plugins are
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
814 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
815 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
816
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
817 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
818 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
819 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
820 until someone tries to use functions from the pool. */
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
821 static gboolean
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
822 x509_ca_lazy_init(void)
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
823 {
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
824 PurpleCertificateScheme *x509;
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
825 GDir *certdir;
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
826 const gchar *entry;
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
827 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
828 GList *iter = NULL;
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
829 GSList *crts = NULL;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
830
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
831 if (x509_ca_initialized) return TRUE;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
832
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
833 /* Check that X.509 is registered */
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
834 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
835 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
836 purple_debug_warning("certificate/x509/ca",
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
837 "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
838 "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
839 "better later.\n");
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
840 return FALSE;
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
841 }
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
842
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
843 /* Use a glob to only read .pem files */
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
844 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
845 crtpat = g_pattern_spec_new("*.crt");
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
846
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
847 /* 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
848 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
849 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
850 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
851 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
852 continue;
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
853 }
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
854
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
855 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
856 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
857 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
858
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
859 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
860 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
861 }
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
862
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 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
864
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 /* 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
866 crts = purple_certificates_import(x509, fullpath);
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
867
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
868 while (crts && crts->data) {
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
869 crt = crts->data;
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
870 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
871 gchar *name;
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
872 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
873 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
874 "Loaded %s from %s\n",
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
875 name ? name : "(unknown)", fullpath);
29982
e2a8f797a521 A couple more leak fixes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29930
diff changeset
876 g_free(name);
29930
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
877 } else {
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
878 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
879 "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
880 fullpath);
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
881 }
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
882 purple_certificate_destroy(crt);
80f4616de5ce Implement reading multiple certificates from a single "bundle" of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29390
diff changeset
883 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
884 }
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
885
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
886 g_free(fullpath);
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
887 }
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
888 g_dir_close(certdir);
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
889 }
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
890
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
891 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
892 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
893
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
894 purple_debug_info("certificate/x509/ca",
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
895 "Lazy init completed.\n");
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
896 x509_ca_initialized = TRUE;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
897 return TRUE;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
898 }
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
899
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
900 static gboolean
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
901 x509_ca_init(void)
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
902 {
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
903 /* 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
904 if (NULL == 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
905 #ifdef _WIN32
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
906 x509_ca_paths = g_list_append(NULL, g_build_filename(DATADIR,
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
907 "ca-certs", 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
908 #else
23473
df05ffc37ed0 Add a configure option, --with-ssl-certificates to allow packagers to
Richard Laager <rlaager@pidgin.im>
parents: 23178
diff changeset
909 # ifdef SSL_CERTIFICATES_DIR
24014
9abbc8608b3c Fix a crash on exit when using --with-system-ssl-certs
Mark Doliner <markdoliner@pidgin.im>
parents: 23473
diff changeset
910 x509_ca_paths = g_list_append(NULL, g_strdup(SSL_CERTIFICATES_DIR));
23473
df05ffc37ed0 Add a configure option, --with-ssl-certificates to allow packagers to
Richard Laager <rlaager@pidgin.im>
parents: 23178
diff changeset
911 # endif
25165
36febee8749c uncondtionally install some certificates and use them, References #6680.
Ka-Hing Cheung <khc@pidgin.im>
parents: 24488
diff changeset
912 x509_ca_paths = g_list_append(x509_ca_paths,
36febee8749c uncondtionally install some certificates and use them, References #6680.
Ka-Hing Cheung <khc@pidgin.im>
parents: 24488
diff changeset
913 g_build_filename(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
914 #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
915 }
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
916
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
917 /* 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
918 it will get done later */
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
919 if ( ! x509_ca_lazy_init()) {
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
920 purple_debug_info("certificate/x509/ca",
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
921 "Init failed, probably because a "
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
922 "dependency is not yet registered. "
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
923 "It has been deferred to later.\n");
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
924 }
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
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
926 return TRUE;
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
927 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
928
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
929 static void
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
930 x509_ca_uninit(void)
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
931 {
19343
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
932 GList *l;
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
933
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
934 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
935 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
936 x509_ca_element_free(el);
19343
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
937 }
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
938 g_list_free(x509_ca_certs);
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
939 x509_ca_certs = NULL;
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
940 x509_ca_initialized = FALSE;
36191
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
941 /** TODO: the cert store in the SSL implementation wouldn't be cleared by this */
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 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
943 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
944 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
945 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
946
19344
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
947 /** Look up a ca_element by dn */
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
948 static x509_ca_element *
19346
e0ae1b11effb Cosmetics
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19345
diff changeset
949 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
950 {
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
951 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
952
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
953 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
954 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
955 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
956 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
957 }
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
958 }
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
959 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
960 }
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
961
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
962 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
963 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
964 {
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
965 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
966 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
967
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
968 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
969 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
970 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
971 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
972 }
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
973 }
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
974 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
975 }
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
976
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
977
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
978 static gboolean
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
979 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
980 {
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
981 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
982 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
983
19346
e0ae1b11effb Cosmetics
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19345
diff changeset
984 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
985 return TRUE;
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
986 } else {
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
987 return FALSE;
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
988 }
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
989
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
990 return FALSE;
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
991 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
992
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
993 static PurpleCertificate *
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
994 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
995 {
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
996 PurpleCertificate *crt = NULL;
19347
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
997 x509_ca_element *el;
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
998
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
999 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
1000 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
1001
19347
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1002 /* Search the memory-cached pool */
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1003 el = x509_ca_locate_cert(x509_ca_certs, id);
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1004
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1005 if (el != NULL) {
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1006 /* 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
1007 to play with */
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1008 crt = purple_certificate_copy(el->crt);
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1009 } else {
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
1010 crt = NULL;
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1011 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1012
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1013 return crt;
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1014 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1015
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
1016 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
1017 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
1018 {
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1019 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
1020
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1021 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
1022 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
1023
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1024 /* 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
1025 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
1026
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1027 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
1028 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
1029 /* 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
1030 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
1031 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
1032 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
1033 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
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 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
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
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 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
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
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1041 static gboolean
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1042 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
1043 {
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1044 gboolean ret = FALSE;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1045
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
1046 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
1047
19036
62025e265d24 - Add a hacked-up method of adding certs to the CA pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19035
diff changeset
1048 /* 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
1049 ought to be flushed to disk somehow. */
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
1050 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
1051
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1052 return ret;
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1053 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1054
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1055 static gboolean
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1056 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
1057 {
19349
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1058 x509_ca_element *el;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1059
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
1060 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
1061 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
1062
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1063 /* Is the id even in the pool? */
19349
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1064 el = x509_ca_locate_cert(x509_ca_certs, id);
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1065 if ( el == NULL ) {
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
1066 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
1067 "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
1068 id);
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1069 return FALSE;
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
19349
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1072 /* Unlink it from the memory cache and destroy it */
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1073 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
1074 x509_ca_element_free(el);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1075
19349
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
1076 return TRUE;
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1077 }
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 static GList *
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1080 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
1081 {
19350
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1082 GList *l, *idlist;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1083
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
1084 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
1085
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1086 idlist = NULL;
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1087 for (l = x509_ca_certs; l; l = l->next) {
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1088 x509_ca_element *el = l->data;
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1089 idlist = g_list_prepend(idlist, g_strdup(el->dn));
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1090 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1091
19350
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
1092 return idlist;
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
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1096 static PurpleCertificatePool x509_ca = {
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1097 "x509", /* Scheme name */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1098 "ca", /* Pool name */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1099 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
1100 NULL, /* Internal data */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1101 x509_ca_init, /* init */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1102 x509_ca_uninit, /* uninit */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1103 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
1104 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
1105 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
1106 x509_ca_delete_cert, /* Cert remover */
19827
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1107 x509_ca_get_idlist, /* idlist retriever */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1108
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1109 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1110 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1111 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1112 NULL
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1113
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1114 };
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1115
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1116
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1117
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1118 /***** 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
1119 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
1120
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
1121 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
1122 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
1123 {
18574
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
1124 gchar *poolpath;
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
1125 int ret;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1126
18574
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
1127 /* 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
1128 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
1129 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
1130
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
1131 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
1132 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
1133 "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
1134 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
1135
18574
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
1136 g_free(poolpath);
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
1137
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
1138 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
1139 }
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
1140
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
1141 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
1142 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
1143 {
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1144 gchar *keypath;
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1145 gboolean ret = FALSE;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1146
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
1147 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
1148
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1149 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
1150
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1151 ret = g_file_test(keypath, G_FILE_TEST_IS_REGULAR);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1152
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1153 g_free(keypath);
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1154 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
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 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
1158 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
1159 {
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1160 PurpleCertificateScheme *x509;
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1161 PurpleCertificate *crt;
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1162 gchar *keypath;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1163
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
1164 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
1165
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1166 /* Is it in the pool? */
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1167 if ( !x509_tls_peers_cert_in_pool(id) ) {
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1168 return NULL;
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1169 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1170
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1171 /* Look up the X.509 scheme */
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1172 x509 = purple_certificate_find_scheme("x509");
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1173 g_return_val_if_fail(x509, NULL);
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1174
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1175 /* Okay, now find and load that key */
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1176 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
1177 crt = purple_certificate_import(x509, keypath);
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1178
18579
a479d0f12779 - Finish tls_peers get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18578
diff changeset
1179 g_free(keypath);
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
1180
18579
a479d0f12779 - Finish tls_peers get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18578
diff changeset
1181 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
1182 }
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
1183
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
1184 static gboolean
18571
abab131c242c - CertificatePool put_cert now accepts an id argument
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18496
diff changeset
1185 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
1186 {
18580
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1187 gboolean ret = FALSE;
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1188 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
1189
18580
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1190 g_return_val_if_fail(crt, FALSE);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1191 g_return_val_if_fail(crt->scheme, FALSE);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1192 /* Make sure that this is some kind of X.509 certificate */
18581
26b562cc939d - Comment change
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18580
diff changeset
1193 /* TODO: Perhaps just check crt->scheme->name instead? */
18580
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1194 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
1195
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1196 /* Work out the filename and export */
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1197 keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1198 ret = purple_certificate_export(keypath, crt);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1199
36191
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
1200 if (crt->scheme->register_trusted_tls_cert) {
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
1201 ret = (crt->scheme->register_trusted_tls_cert)(crt, FALSE);
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
1202 }
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
1203
18580
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1204 g_free(keypath);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1205 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
1206 }
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
1207
18897
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1208 static gboolean
18898
eb09543c2898 - remove_cert => delete_cert, because naming conventions are our
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18897
diff changeset
1209 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
1210 {
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1211 gboolean ret = FALSE;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1212 gchar *keypath;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1213
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1214 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
1215
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1216 /* 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
1217 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
1218 purple_debug_warning("certificate/tls_peers",
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1219 "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
1220 id);
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1221 return FALSE;
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
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1224 /* OK, so work out the keypath and delete the thing */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1225 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
1226 if ( unlink(keypath) != 0 ) {
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1227 purple_debug_error("certificate/tls_peers",
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1228 "Unlink of %s failed!\n",
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1229 keypath);
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1230 ret = FALSE;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1231 } else {
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1232 ret = TRUE;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1233 }
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 g_free(keypath);
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1236 return ret;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1237 }
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1238
18662
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1239 static GList *
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1240 x509_tls_peers_get_idlist(void)
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1241 {
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1242 GList *idlist = NULL;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1243 GDir *dir;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1244 const gchar *entry;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1245 gchar *poolpath;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1246
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1247 /* 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
1248 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
1249 dir = g_dir_open(poolpath,
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1250 0, /* No flags */
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1251 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
1252 g_free(poolpath);
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 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
1255
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1256 /* 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
1257 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
1258 /* Unescape the filename */
2ebe15f875a6 - tls_peers pool unescapes filenames in its directory, as it should
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19017
diff changeset
1259 const char *unescaped = purple_unescape_filename(entry);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1260
18662
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1261 /* 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
1262 string) */
19018
2ebe15f875a6 - tls_peers pool unescapes filenames in its directory, as it should
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19017
diff changeset
1263 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
1264 }
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 /* Release the directory */
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1267 g_dir_close(dir);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1268
18662
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1269 return idlist;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1270 }
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1271
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
1272 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
1273 "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
1274 "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
1275 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
1276 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
1277 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
1278 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
1279 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
1280 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
1281 x509_tls_peers_put_cert, /* Cert writer */
18899
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
1282 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
1283 x509_tls_peers_get_idlist, /* idlist retriever */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1284
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1285 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1286 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1287 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1288 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
1289 };
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1290
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1291
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1292 /***** 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
1293 static PurpleCertificateVerifier x509_tls_cached;
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1294
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1295
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1296 /* The following is several hacks piled together and needs to be fixed.
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1297 * It exists because show_cert (see its comments) needs the original reason
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1298 * given to user_auth in order to rebuild the dialog.
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1299 */
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1300 /* TODO: This will cause a ua_ctx to become memleaked if the request(s) get
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1301 closed by handle or otherwise abnormally. */
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1302 typedef struct {
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1303 PurpleCertificateVerificationRequest *vrq;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1304 gchar *reason;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1305 } x509_tls_cached_ua_ctx;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1306
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1307 static x509_tls_cached_ua_ctx *
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1308 x509_tls_cached_ua_ctx_new(PurpleCertificateVerificationRequest *vrq,
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1309 const gchar *reason)
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1310 {
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1311 x509_tls_cached_ua_ctx *c;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1312
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1313 c = g_new0(x509_tls_cached_ua_ctx, 1);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1314 c->vrq = vrq;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1315 c->reason = g_strdup(reason);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1316
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1317 return c;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1318 }
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1319
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1320
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1321 static void
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1322 x509_tls_cached_ua_ctx_free(x509_tls_cached_ua_ctx *c)
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1323 {
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1324 g_return_if_fail(c);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1325 g_free(c->reason);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1326 g_free(c);
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
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1329 static void
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1330 x509_tls_cached_user_auth(PurpleCertificateVerificationRequest *vrq,
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1331 const gchar *reason);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1332
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1333 static void
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1334 x509_tls_cached_show_cert(x509_tls_cached_ua_ctx *c, gint id)
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1335 {
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1336 PurpleCertificate *disp_crt = c->vrq->cert_chain->data;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1337
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1338 /* Since clicking a button closes the request, show it again */
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1339 x509_tls_cached_user_auth(c->vrq, c->reason);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1340
19727
4b40eed9fe69 When you have a certificate dialog and you click on "View Certificate",
Mark Doliner <markdoliner@pidgin.im>
parents: 19715
diff changeset
1341 /* Show the certificate AFTER re-opening the dialog so that this
4b40eed9fe69 When you have a certificate dialog and you click on "View Certificate",
Mark Doliner <markdoliner@pidgin.im>
parents: 19715
diff changeset
1342 appears above the other */
4b40eed9fe69 When you have a certificate dialog and you click on "View Certificate",
Mark Doliner <markdoliner@pidgin.im>
parents: 19715
diff changeset
1343 purple_certificate_display_x509(disp_crt);
4b40eed9fe69 When you have a certificate dialog and you click on "View Certificate",
Mark Doliner <markdoliner@pidgin.im>
parents: 19715
diff changeset
1344
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1345 x509_tls_cached_ua_ctx_free(c);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1346 }
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1347
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1348 static void
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1349 x509_tls_cached_user_auth_cb (x509_tls_cached_ua_ctx *c, gint id)
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1350 {
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1351 PurpleCertificateVerificationRequest *vrq;
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1352 PurpleCertificatePool *tls_peers;
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1353
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1354 g_return_if_fail(c);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1355 g_return_if_fail(c->vrq);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1356
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1357 vrq = c->vrq;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1358
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1359 x509_tls_cached_ua_ctx_free(c);
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1360
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1361 tls_peers = purple_certificate_find_pool("x509","tls_peers");
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1362
19491
fad93a93ec11 - Fix the interpretation of the "accept cert? yes/no" choice id given by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19490
diff changeset
1363 if (2 == id) {
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1364 gchar *cache_id = vrq->subject_name;
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1365 purple_debug_info("certificate/x509/tls_cached",
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1366 "User ACCEPTED cert\nCaching first in chain for future use as %s...\n",
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1367 cache_id);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1368
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1369 purple_certificate_pool_store(tls_peers, cache_id,
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1370 vrq->cert_chain->data);
19031
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
1371
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
1372 purple_certificate_verify_complete(vrq,
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
1373 PURPLE_CERTIFICATE_VALID);
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1374 } 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
1375 purple_debug_warning("certificate/x509/tls_cached",
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1376 "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
1377 purple_certificate_verify_complete(vrq,
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
1378 PURPLE_CERTIFICATE_INVALID);
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1379 }
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1380 }
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1381
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
1382 static void
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1383 x509_tls_cached_user_auth_accept_cb(x509_tls_cached_ua_ctx *c, gint ignore)
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1384 {
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1385 x509_tls_cached_user_auth_cb(c, 2);
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1386 }
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1387
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1388 static void
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1389 x509_tls_cached_user_auth_reject_cb(x509_tls_cached_ua_ctx *c, gint ignore)
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1390 {
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1391 x509_tls_cached_user_auth_cb(c, 1);
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1392 }
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1393
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1394 /** Validates a certificate by asking the user
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1395 * @param reason String to explain why the user needs to accept/refuse the
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1396 * certificate.
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1397 * @todo Needs a handle argument
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1398 */
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1399 static void
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1400 x509_tls_cached_user_auth(PurpleCertificateVerificationRequest *vrq,
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1401 const gchar *reason)
18589
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1402 {
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1403 gchar *primary;
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1404
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1405 /* Make messages */
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1406 primary = g_strdup_printf(_("Accept certificate for %s?"),
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1407 vrq->subject_name);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1408
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1409 /* Make a semi-pretty display */
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
1410 purple_request_action(
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1411 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
1412 _("SSL Certificate Verification"),
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1413 primary,
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1414 reason,
22268
a6f48dec4ca5 A few more "purple_request_action" default action corrections
Mark Doliner <markdoliner@pidgin.im>
parents: 22050
diff changeset
1415 0, /* Accept by default */
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1416 NULL, /* No account */
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1417 NULL, /* No other user */
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1418 NULL, /* No associated conversation */
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1419 x509_tls_cached_ua_ctx_new(vrq, reason),
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1420 3, /* Number of actions */
19697
276fb2a3d805 - Change wording on certificate accept/reject dialog
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19688
diff changeset
1421 _("Accept"), x509_tls_cached_user_auth_accept_cb,
276fb2a3d805 - Change wording on certificate accept/reject dialog
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19688
diff changeset
1422 _("Reject"), x509_tls_cached_user_auth_reject_cb,
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1423 _("_View Certificate..."), x509_tls_cached_show_cert);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1424
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1425 /* Cleanup */
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1426 g_free(primary);
18589
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1427 }
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1428
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1429 static void
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1430 x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq,
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1431 PurpleCertificateInvalidityFlags 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
1432
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
1433 static void
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1434 x509_tls_cached_complete(PurpleCertificateVerificationRequest *vrq,
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1435 PurpleCertificateInvalidityFlags flags)
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1436 {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1437 PurpleCertificatePool *tls_peers;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1438 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
1439
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1440 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
1441 /* 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
1442 const gchar *error;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1443 gchar *tmp, *secondary;
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 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
1446 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
1447 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
1448 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
1449 else
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1450 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
1451
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1452 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
1453 vrq->subject_name);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1454 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
1455 g_free(tmp);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1456
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1457 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
1458 _("SSL Certificate Error"),
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1459 _("Unable to validate certificate"),
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1460 secondary);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1461 g_free(secondary);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1462
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1463 purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_INVALID);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1464 return;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1465 } 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
1466 /* 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
1467 gchar *tmp;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1468 GString *errors;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1469 guint32 i = 1;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1470
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1471 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
1472 vrq->subject_name);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1473 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
1474 g_free(tmp);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1475
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1476 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
1477
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1478 /* 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
1479 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
1480 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
1481
28691
8f8d9963f92d Print that specific message only when there is a CN; otherwise fall back
Paul Aurich <darkrain42@pidgin.im>
parents: 28690
diff changeset
1482 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
1483 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
1484 "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
1485 "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
1486 sn);
8f8d9963f92d Print that specific message only when there is a CN; otherwise fall back
Paul Aurich <darkrain42@pidgin.im>
parents: 28690
diff changeset
1487 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
1488
28691
8f8d9963f92d Print that specific message only when there is a CN; otherwise fall back
Paul Aurich <darkrain42@pidgin.im>
parents: 28690
diff changeset
1489 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
1490 }
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1491 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1492
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1493 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
1494 if (flags & i) {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1495 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
1496 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
1497 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1498
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1499 i <<= 1;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1500 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1501
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1502 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
1503 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
1504 return;
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1505 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1506
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1507 /* 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
1508
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1509 /* 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
1510 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
1511 "tls_peers");
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1512 if (tls_peers) {
29042
5c056c4502b7 *** Plucked rev 8549b9a30115559965e9bf93bb15a45b04c1d149 (f05c54b03e6bbfdbff38c01697fbd353a969e05e):
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
1513 if (!purple_certificate_pool_store(tls_peers,vrq->subject_name,
5c056c4502b7 *** Plucked rev 8549b9a30115559965e9bf93bb15a45b04c1d149 (f05c54b03e6bbfdbff38c01697fbd353a969e05e):
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
1514 peer_crt)) {
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1515 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
1516 "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
1517 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1518 } else {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1519 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
1520 "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
1521 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1522
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1523 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
1524 }
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1525
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1526 static void
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1527 x509_tls_cached_cert_in_cache(PurpleCertificateVerificationRequest *vrq,
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1528 PurpleCertificateInvalidityFlags flags)
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1529 {
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1530 /* 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
1531 Fix, please! */
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1532 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
1533 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
1534 "tls_peers");
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1535
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1536 /* 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
1537 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
1538 (PurpleCertificate *) vrq->cert_chain->data;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1539
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1540 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
1541 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
1542
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1543 /* 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
1544 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
1545 tls_peers, vrq->subject_name);
19715
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1546 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
1547 purple_debug_warning("certificate/x509/tls_cached",
19715
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1548 "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
1549 "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
1550 /* 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
1551 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
1552 return;
19715
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1553 }
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1554
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
1555 /* Now get SHA256 sums for both and compare them */
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1556 /* TODO: This is not an elegant way to compare certs */
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
1557 peer_fpr = purple_certificate_get_fingerprint_sha256(peer_crt, TRUE);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
1558 cached_fpr = purple_certificate_get_fingerprint_sha256(cached_crt, TRUE);
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1559 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
1560 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
1561 "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
1562 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
1563 } 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
1564 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
1565 "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
1566 /* 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
1567 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
1568 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1569
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1570 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
1571 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
1572 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
1573 }
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1574
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
1575 /*
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 * 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
1577 * 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
1578 * 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
1579 */
19025
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1580 static void
28032
fdb1cd9da99b cert: Validate subject name before prompting due to no CA pool.
Paul Aurich <darkrain42@pidgin.im>
parents: 27999
diff changeset
1581 x509_tls_cached_check_subject_name(PurpleCertificateVerificationRequest *vrq,
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1582 PurpleCertificateInvalidityFlags flags)
19025
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1583 {
27936
1763b40b18bd Fix GnuTLS validation of the CACert Chain. Closes #4458.
Paul Aurich <darkrain42@pidgin.im>
parents: 27934
diff changeset
1584 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
1585 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
1586
19030
e2bf9dcb2b72 - Add HOSTNAME CHECKING to tls_cached unknown_peer mode, which is kind
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19029
diff changeset
1587 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
1588
22048
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1589 /* 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
1590 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
1591 vrq->subject_name) ) {
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1592 gchar *sn = purple_certificate_get_subject_name(peer_crt);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1593
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1594 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
1595 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
1596 "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
1597 "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
1598 vrq->subject_name, sn);
29982
e2a8f797a521 A couple more leak fixes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29930
diff changeset
1599 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
1600 }
fdb1cd9da99b cert: Validate subject name before prompting due to no CA pool.
Paul Aurich <darkrain42@pidgin.im>
parents: 27999
diff changeset
1601
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1602 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
1603 }
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
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 /* 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
1606 /* 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
1607 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
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 static void
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1610 x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq,
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1611 PurpleCertificateInvalidityFlags 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
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 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
1614 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
1615 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
1616 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
1617 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
1618 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
1619 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
1620 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
1621 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
1622
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 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
1624
36191
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
1625 if (peer_crt->scheme->verify_cert) {
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
1626 /** Make sure we've loaded the CA certs (which causes NSS to trust them) */
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
1627 g_return_if_fail(x509_ca_lazy_init());
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
1628 peer_crt->scheme->verify_cert(vrq, &flags);
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
1629 x509_tls_cached_complete(vrq, flags);
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
1630 return;
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
diff changeset
1631 }
2e4475087f04 Fix basic constraints checking for both our SSL plugins.
Mark Doliner <mark@kingant.net>
parents: 36143
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 /* 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
1634 "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
1635 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
1636 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
1637
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 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
1639 "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
1640 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
1641
28332
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 } /* 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
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 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
1647
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1648 /* Next, check that the certificate chain is valid */
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1649 if (!purple_certificate_check_signature_chain_with_failing(chain,
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1650 &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
1651 {
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1652 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
1653 /*
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 * 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
1655 * 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
1656 * 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
1657 * 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
1658 */
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1659 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
1660 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
1661 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
1662 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
1663 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
1664 GByteArray *ca_fpr;
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
1665 failing_fpr = purple_certificate_get_fingerprint_sha256(failing_crt, TRUE);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
1666 ca_fpr = purple_certificate_get_fingerprint_sha256(ca_crt, TRUE);
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
1667 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
1668 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
1669 "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
1670 "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
1671 "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
1672 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
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
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 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
1676 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
1677 }
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
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 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
1680 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
1681 }
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 /*
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1684 * 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
1685 * 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
1686 */
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1687 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
1688 /* 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
1689 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
1690
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1691 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
1692 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
1693 } /* 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
1694
31377
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1695 /* 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
1696 * 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
1697 */
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
1698 /* If, for whatever reason, there is no Certificate Authority pool
28032
fdb1cd9da99b cert: Validate subject name before prompting due to no CA pool.
Paul Aurich <darkrain42@pidgin.im>
parents: 27999
diff changeset
1699 loaded, we'll verify the subject name and then warn about thsi. */
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
1700 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
1701 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
1702 "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
1703 "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
1704
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1705 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
1706
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1707 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
1708 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
1709 }
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1710
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1711 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
1712
31377
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1713 /* 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
1714 * issuer.
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1715 */
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1716 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
1717 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
1718 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
1719 "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
1720 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
1721 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
1722 "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
1723 ca2_id);
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1724 ca_crts = g_slist_concat(x509_ca_get_certs(ca_id), x509_ca_get_certs(ca2_id));
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1725 g_free(ca_id);
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1726 g_free(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
1727 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
1728 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
1729
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
1730 purple_debug_warning("certificate/x509/tls_cached",
31377
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1731 "No Certificate Authorities with either DN found "
c9d71d1096ec certificate: Better validation of chains which have an intermediate signed w/ MD5.
Paul Aurich <darkrain42@pidgin.im>
parents: 31376
diff changeset
1732 "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
1733
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1734 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
1735 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
1736 }
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1737
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1738 /*
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1739 * 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
1740 * 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
1741 * 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
1742 * 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
1743 * 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
1744 *
986cae14de10 certs: Clean up the code a little, since I made it hard to follow.
Paul Aurich <darkrain42@pidgin.im>
parents: 27936
diff changeset
1745 * 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
1746 * 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
1747 */
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
1748 last_fpr = purple_certificate_get_fingerprint_sha256(end_crt, TRUE);
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
1749 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
1750 ca_crt = cur->data;
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
1751 ca_fpr = purple_certificate_get_fingerprint_sha256(ca_crt, TRUE);
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
1752
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
1753 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
1754 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
1755 {
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1756 /* 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
1757 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
1758 /* 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
1759 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
1760 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
1761 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
1762 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
1763 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
1764 }
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1765
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1766 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
1767 }
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
1768
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
1769 if (valid == FALSE)
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1770 flags |= PURPLE_CERTIFICATE_INVALID_CHAIN;
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1771
757baa7d408f Apply Stu's specific certificate changes listed below to the 2.7.7 branch.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 30815
diff changeset
1772 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
1773 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
1774 g_byte_array_free(last_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
1775
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1776 x509_tls_cached_check_subject_name(vrq, flags);
19025
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1777 }
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1778
18589
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1779 static void
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1780 x509_tls_cached_start_verify(PurpleCertificateVerificationRequest *vrq)
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1781 {
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1782 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
1783 PurpleCertificatePool *tls_peers;
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1784 time_t now, activation, expiration;
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1785 PurpleCertificateInvalidityFlags flags = PURPLE_CERTIFICATE_NO_PROBLEMS;
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1786 gboolean ret;
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1787
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1788 g_return_if_fail(vrq);
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1789
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 "Starting verify for %s\n",
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1792 vrq->subject_name);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1793
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1794 /*
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1795 * 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
1796 * 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
1797 */
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1798 now = time(NULL);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1799 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
1800 &expiration);
28332
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1801 if (!ret) {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1802 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
1803 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
1804 "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
1805 vrq->subject_name);
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1806 } else if (now > expiration) {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1807 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
1808 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
1809 "Certificate %s expired at %s\n",
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1810 vrq->subject_name, ctime(&expiration));
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1811 } else if (now < activation) {
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1812 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
1813 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
1814 "Certificate %s is not yet valid, will be at %s\n",
b5fd0494b67d certs: Allow for dealing with multiple things wrong with a cert.
Paul Aurich <darkrain42@pidgin.im>
parents: 28267
diff changeset
1815 vrq->subject_name, ctime(&activation));
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1816 }
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1817
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1818 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
1819
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1820 if (!tls_peers) {
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1821 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
1822 "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
1823 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
1824
20143
5b005012e908 applied changes from 92e6c32278d711f0d5807c4d931b26162e4a720f
Richard Laager <rlaager@pidgin.im>
parents: 19864
diff changeset
1825 /* 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
1826 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
1827 return;
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1828 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1829
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1830 /* 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
1831 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
1832 "Checking for cached cert...\n");
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1833 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
1834 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
1835 "...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
1836 /* 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
1837 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
1838 } 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
1839 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
1840 "...Not in cache\n");
18589
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1841 /* 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
1842 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
1843 }
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1844 }
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1845
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1846 static void
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1847 x509_tls_cached_destroy_request(PurpleCertificateVerificationRequest *vrq)
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1848 {
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1849 g_return_if_fail(vrq);
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1850 }
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1851
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1852 static PurpleCertificateVerifier x509_tls_cached = {
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1853 "x509", /* Scheme name */
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1854 "tls_cached", /* Verifier name */
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1855 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
1856 x509_tls_cached_destroy_request,/* Request cleanup */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1857
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1858 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1859 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1860 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1861 NULL
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1862
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1863 };
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
1864
18470
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1865 /****************************************************************************/
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1866 /* Subsystem */
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1867 /****************************************************************************/
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1868 void
18477
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1869 purple_certificate_init(void)
18470
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1870 {
18477
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1871 /* Register builtins */
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
1872 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
1873 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
1874 purple_certificate_register_pool(&x509_tls_peers);
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1875 purple_certificate_register_verifier(&x509_tls_cached);
18470
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1876 }
18466
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
1877
18477
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1878 void
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1879 purple_certificate_uninit(void)
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1880 {
18659
89e08c113e68 - Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18658
diff changeset
1881 /* 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
1882 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
1883
89e08c113e68 - Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18658
diff changeset
1884 /* 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
1885 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
1886 }
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1887
18657
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1888 gpointer
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1889 purple_certificate_get_handle(void)
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1890 {
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1891 static gint handle;
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1892 return &handle;
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1893 }
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1894
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1895 PurpleCertificateScheme *
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1896 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
1897 {
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1898 PurpleCertificateScheme *scheme = NULL;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1899 GList *l;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1900
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1901 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
1902
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1903 /* 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
1904 one whose name matches */
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1905 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
1906 scheme = (PurpleCertificateScheme *)(l->data);
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1907
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1908 /* Name matches? that's our man */
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1909 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
1910 return scheme;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1911 }
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
1912
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1913 purple_debug_warning("certificate",
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1914 "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
1915 name);
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
1916
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1917 /* TODO: Signalling and such? */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1918
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1919 return NULL;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1920 }
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
1921
18658
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1922 GList *
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1923 purple_certificate_get_schemes(void)
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1924 {
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1925 return cert_schemes;
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1926 }
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1927
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1928 gboolean
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1929 purple_certificate_register_scheme(PurpleCertificateScheme *scheme)
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1930 {
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1931 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
1932
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1933 /* 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
1934 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
1935 return FALSE;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1936 }
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1937
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1938 /* Okay, we're golden. Register it. */
18491
2aa829b48785 - prepend > append
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18490
diff changeset
1939 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
1940
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1941 /* TODO: Signalling and such? */
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1942
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1943 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1944 "CertificateScheme %s registered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1945 scheme->name);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1946
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1947 return TRUE;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1948 }
18446
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1949
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1950 gboolean
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1951 purple_certificate_unregister_scheme(PurpleCertificateScheme *scheme)
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1952 {
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1953 if (NULL == scheme) {
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1954 purple_debug_warning("certificate",
18492
1ebf50a37d55 - Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18491
diff changeset
1955 "Attempting to unregister NULL scheme\n");
1ebf50a37d55 - Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18491
diff changeset
1956 return FALSE;
18446
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1957 }
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1958
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1959 /* TODO: signalling? */
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1960
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1961 /* TODO: unregister all CertificateVerifiers for this scheme?*/
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1962 /* TODO: unregister all CertificatePools for this scheme? */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1963 /* Neither of the above should be necessary, though */
18446
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1964 cert_schemes = g_list_remove(cert_schemes, scheme);
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1965
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1966 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1967 "CertificateScheme %s unregistered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1968 scheme->name);
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1969
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1970
18446
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1971 return TRUE;
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1972 }
18461
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 PurpleCertificateVerifier *
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1975 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
1976 {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1977 PurpleCertificateVerifier *vr = NULL;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1978 GList *l;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1979
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1980 g_return_val_if_fail(scheme_name, NULL);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1981 g_return_val_if_fail(ver_name, NULL);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1982
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1983 /* Traverse the list of registered verifiers and locate the
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1984 one whose name matches */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1985 for(l = cert_verifiers; l; l = l->next) {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1986 vr = (PurpleCertificateVerifier *)(l->data);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1987
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1988 /* Scheme and name match? */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1989 if(!g_ascii_strcasecmp(vr->scheme_name, scheme_name) &&
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1990 !g_ascii_strcasecmp(vr->name, ver_name))
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1991 return 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
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1994 purple_debug_warning("certificate",
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1995 "CertificateVerifier %s, %s requested but not found.\n",
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1996 scheme_name, ver_name);
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 /* TODO: Signalling and such? */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1999
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2000 return NULL;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2001 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2002
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2003
18658
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2004 GList *
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2005 purple_certificate_get_verifiers(void)
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2006 {
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2007 return cert_verifiers;
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2008 }
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2009
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2010 gboolean
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2011 purple_certificate_register_verifier(PurpleCertificateVerifier *vr)
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2012 {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2013 g_return_val_if_fail(vr != NULL, FALSE);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2014
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2015 /* 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
2016 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
2017 return FALSE;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2018 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2019
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2020 /* Okay, we're golden. Register it. */
18491
2aa829b48785 - prepend > append
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18490
diff changeset
2021 cert_verifiers = g_list_prepend(cert_verifiers, vr);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2022
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2023 /* TODO: Signalling and such? */
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2024
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2025 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2026 "CertificateVerifier %s registered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2027 vr->name);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2028 return TRUE;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2029 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2030
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2031 gboolean
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2032 purple_certificate_unregister_verifier(PurpleCertificateVerifier *vr)
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2033 {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2034 if (NULL == vr) {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2035 purple_debug_warning("certificate",
18492
1ebf50a37d55 - Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18491
diff changeset
2036 "Attempting to unregister NULL verifier\n");
1ebf50a37d55 - Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18491
diff changeset
2037 return FALSE;
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2038 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2039
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2040 /* TODO: signalling? */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2041
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2042 cert_verifiers = g_list_remove(cert_verifiers, vr);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2043
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2044
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2045 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2046 "CertificateVerifier %s unregistered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2047 vr->name);
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2048
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2049 return TRUE;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
2050 }
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2051
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2052 PurpleCertificatePool *
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2053 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
2054 {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2055 PurpleCertificatePool *pool = NULL;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2056 GList *l;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2057
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2058 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
2059 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
2060
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2061 /* 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
2062 one whose name matches */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2063 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
2064 pool = (PurpleCertificatePool *)(l->data);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2065
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2066 /* Scheme and name match? */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2067 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
2068 !g_ascii_strcasecmp(pool->name, pool_name))
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2069 return pool;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2070 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2071
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2072 purple_debug_warning("certificate",
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2073 "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
2074 scheme_name, pool_name);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2075
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2076 /* TODO: Signalling and such? */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
2077
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2078 return NULL;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2079
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2080 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2081
18658
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2082 GList *
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2083 purple_certificate_get_pools(void)
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2084 {
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2085 return cert_pools;
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
2086 }
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2087
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2088 gboolean
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2089 purple_certificate_register_pool(PurpleCertificatePool *pool)
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2090 {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2091 g_return_val_if_fail(pool, FALSE);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2092 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
2093 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
2094 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
2095
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2096 /* 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
2097 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
2098 return FALSE;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2099 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2100
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2101 /* Initialize the pool if needed */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2102 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
2103 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
2104
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
2105 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
2106 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
2107 return FALSE;
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2108 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2109
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
2110 /* 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
2111 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
2112
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2113 /* 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
2114
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
2115 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
2116 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
2117 "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
2118 purple_marshal_VOID__POINTER_POINTER,
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2119 NULL, /* No callback return value */
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2120 2, /* Two non-data arguments */
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2121 purple_value_new(PURPLE_TYPE_SUBTYPE,
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2122 PURPLE_SUBTYPE_CERTIFICATEPOOL),
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2123 purple_value_new(PURPLE_TYPE_STRING));
18894
1a00d2309d39 - Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18818
diff changeset
2124
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
2125 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
2126 "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
2127 purple_marshal_VOID__POINTER_POINTER,
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2128 NULL, /* No callback return value */
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2129 2, /* Two non-data arguments */
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2130 purple_value_new(PURPLE_TYPE_SUBTYPE,
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2131 PURPLE_SUBTYPE_CERTIFICATEPOOL),
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2132 purple_value_new(PURPLE_TYPE_STRING));
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2133
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
2134 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
2135 "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
2136 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
2137
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
2138 return TRUE;
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2139 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2140
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2141 gboolean
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2142 purple_certificate_unregister_pool(PurpleCertificatePool *pool)
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2143 {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2144 if (NULL == pool) {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2145 purple_debug_warning("certificate",
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2146 "Attempting to unregister NULL pool\n");
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2147 return FALSE;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2148 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2149
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2150 /* Check that the pool is registered */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2151 if (!g_list_find(cert_pools, pool)) {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2152 purple_debug_warning("certificate",
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2153 "Pool to unregister isn't registered!\n");
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2154
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2155 return FALSE;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2156 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2157
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2158 /* 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
2159 PURPLE_DBUS_UNREGISTER_POINTER(pool);
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2160 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
2161 pool->uninit();
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2162 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2163
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2164 cert_pools = g_list_remove(cert_pools, pool);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
2165
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2166 /* TODO: Signalling? */
18894
1a00d2309d39 - Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18818
diff changeset
2167 purple_signal_unregister(pool, "certificate-stored");
1a00d2309d39 - Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18818
diff changeset
2168 purple_signal_unregister(pool, "certificate-deleted");
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
2169
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2170 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2171 "CertificatePool %s unregistered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
2172 pool->name);
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2173 return TRUE;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
2174 }
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2175
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2176 /****************************************************************************/
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2177 /* Scheme-specific functions */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2178 /****************************************************************************/
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2179
36143
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2180 static void display_x509_issuer(gchar *issuer_id) {
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2181 PurpleCertificate *issuer_crt;
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2182
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2183 issuer_crt = x509_ca_get_cert(issuer_id);
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2184
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2185 if (issuer_crt) {
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2186 purple_certificate_display_x509(issuer_crt);
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2187 purple_certificate_destroy(issuer_crt);
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2188 } else {
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2189 purple_notify_info(NULL, /* TODO: Find what the handle ought to be */
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2190 _("Certificate Information"),
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2191 "",
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2192 _("Unable to find Issuer Certificate"));
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2193 }
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2194
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2195 g_free(issuer_id);
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2196 }
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2197
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2198 void
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2199 purple_certificate_display_x509(PurpleCertificate *crt)
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2200 {
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
2201 gchar *sha1_asc, *sha256_asc;
36143
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2202 gchar *cn, *issuer_id;
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2203 time_t activation, expiration;
19668
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
2204 gchar *activ_str, *expir_str;
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
2205 gchar *secondary, *secondary_extra;
36143
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2206 gboolean self_signed;
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2207
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
2208 get_ascii_fingerprints(crt, &sha1_asc, &sha256_asc);
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2209
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2210 /* Get the cert Common Name */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2211 /* TODO: Will break on CA certs */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2212 cn = purple_certificate_get_subject_name(crt);
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2213
36143
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2214 issuer_id = purple_certificate_get_issuer_unique_id(crt);
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2215
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2216 /* Get the certificate times */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2217 /* TODO: Check the times against localtime */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2218 /* TODO: errorcheck? */
19715
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
2219 if (!purple_certificate_get_times(crt, &activation, &expiration)) {
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
2220 purple_debug_error("certificate",
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
2221 "Failed to get certificate times!\n");
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
2222 activation = expiration = 0;
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
2223 }
19668
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
2224 activ_str = g_strdup(ctime(&activation));
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
2225 expir_str = g_strdup(ctime(&expiration));
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
2226
36143
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2227 self_signed = purple_certificate_signed_by(crt, crt);
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2228
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2229 /* Make messages */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2230 secondary = g_strdup_printf(_("Common name: %s\n\n"
36143
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2231 "Issued By: %s\n\n"
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2232 "Fingerprint (SHA1): %s\n\n"
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2233 "Activation date: %s\n"
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2234 "Expiration date: %s\n"),
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2235 cn ? cn : "(null)",
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2236 self_signed ? _("(self-signed)") : (issuer_id ? issuer_id : "(null)"),
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
2237 sha1_asc ? sha1_asc : "(null)",
36143
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2238 activ_str ? activ_str : "(null)",
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2239 expir_str ? expir_str : "(null)");
19668
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
2240
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
2241 /* TODO: make this part of the translatable string above */
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
2242 secondary_extra = g_strdup_printf("%sSHA256: %s", secondary, sha256_asc);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
2243
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2244 /* Make a semi-pretty display */
36143
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2245 if (self_signed) {
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2246 purple_notify_info(NULL, /* TODO: Find what the handle ought to be */
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2247 _("Certificate Information"),
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2248 "",
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
2249 secondary_extra);
36143
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2250 } else {
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2251 purple_request_action(NULL, /* TODO: Find what the handle ought to be */
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2252 _("Certificate Information"), _("Certificate Information"),
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
2253 secondary_extra, 2, NULL, NULL, NULL,
36143
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2254 issuer_id, 2,
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2255 _("View Issuer Certificate"), PURPLE_CALLBACK(display_x509_issuer),
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2256 _("Close"), PURPLE_CALLBACK(g_free));
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2257
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2258 /* purple_request_action has taken ownership of issuer_id */
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2259 issuer_id = NULL;
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2260 }
19668
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
2261
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2262 /* Cleanup */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2263 g_free(cn);
36143
2948449ffd12 Enhance the "View Certificate" functionality to show issuer information. Refs #7034
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
2264 g_free(issuer_id);
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2265 g_free(secondary);
38214
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
2266 g_free(secondary_extra);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
2267 g_free(sha1_asc);
b3d0ba7c75f6 certificate: Use SHA256 fingerprints instead of SHA1
dx <dx@dxzone.com.ar>
parents: 36191
diff changeset
2268 g_free(sha256_asc);
19668
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
2269 g_free(activ_str);
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
2270 g_free(expir_str);
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2271 }
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
2272
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
2273 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
2274 {
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
2275 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
2276 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
2277 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
2278 }
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
2279

mercurial