Mon, 06 Mar 2017 03:32:06 -0300
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 | 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 | 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 | 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 |